由机器学习入门关联深度学习
实例:房价预测回归任务
目标:用房屋面积、楼层、学区预测房价(连续值回归)
先统一背景:
数据集:10000条房屋样本
模型:GBDT / XGBoost / LightGBM
预测公式:
y^=y^(t−1)+ft(x)\hat{y}=\hat{y}^{(t-1)}+f_t(x)y^=y^(t−1)+ft(x)
y^(t−1)\hat{y}^{(t-1)}y^(t−1):前t-1棵树总和;ft(x)f_t(x)ft(x):第t棵新决策树
损失选用 MSE:L(y,y^)=12(y−y^)2L(y,\hat y)=\frac12(y-\hat y)^2L(y,y^)=21(y−y^)2
1. 原生GBDT怎么做(只使用一阶导数)
第t轮,我们希望训练一棵树 ftf_tft 去拟合负梯度(残差)
梯度:g=∂L∂y^(t−1)=y^(t−1)−yg=\frac{\partial L}{\partial \hat y^{(t-1)}}=\hat y^{(t-1)}-yg=∂y^(t−1)∂L=y^(t−1)−y
拟合目标:zi=−gi=yi−y^(t−1)z_i=-g_i=y_i-\hat{y}^{(t-1)}zi=−gi=yi−y^(t−1)
也就是:新树去拟合真实房价 - 当前预测房价(残差)。
局限:只利用一阶信息,不知道损失曲面曲率。
2. XGBoost 实例(二阶泰勒展开 + 正则)
对损失做二阶泰勒展开:
L(t)≈∑i[gift(xi)+12hift(xi)2]+Ω(ft)L^{(t)}\approx \sum_i \left[g_i f_t(x_i)+\frac12 h_i f_t(x_i)^2\right]+\Omega(f_t)L(t)≈i∑[gift(xi)+21hift(xi)2]+Ω(ft)
MSE下:
一阶导 gi=y^i(t−1)−yig_i=\hat y^{(t-1)}_i-y_igi=y^i(t−1)−yi
二阶导 hi=1h_i=1hi=1(常数)
Ω(ft)=γT+12λ∑wj2\Omega(f_t)=\gamma T+\frac12\lambda\sum w_j^2Ω(ft)=γT+21λ∑wj2
- TTT:这棵树叶子数量;γ\gammaγ:新增叶子代价
- wjw_jwj:叶子输出房价修正值;λ\lambdaλ L2正则
分裂寻点实例
假设候选分裂特征:房屋面积,分割阈值=90㎡
分裂前全部样本在一个叶子;
分裂后:≤90㎡左叶子,>90㎡右叶子。
XGBoost用g、h计算分裂增益Gain:
Gain=GL2HL+λ+GR2HR+λ−(GL+GR)2HL+HR+λ−γGain=\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}-\gammaGain=HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2−γ
GLG_LGL:左叶子一阶导总和,HLH_LHL左叶子二阶导总和
- 如果Gain>0:分裂有效;
- γ\gammaγ 作用:增益太小直接不分裂,防止碎叶子树(抑制过拟合,SRM);
- λ\lambdaλ 平滑叶子权重,避免极端预测。
👉 对比GBDT:同时用到g、h,选择分割点更精准。
3. LightGBM 在同样房价任务上做加速(数学目标函数和XGB完全一致)
假设特征「房屋面积」取值范围 30~200㎡
-
直方图Histogram
把连续面积离散成20个区间(bin:30-38,38-46……)
不再遍历每一个面积数值,只在bin边界尝试分裂,候选点大幅变少。
直方图差技巧:父直方图 − 左直方图 = 右直方图,减半计算。 -
生长策略差异
- XGBoost:Level-wise(层优先)
第一层全部节点分裂 → 第二层全部节点分裂。哪怕某个节点分裂增益很小,也要计算。 - LightGBM:Leaf-wise(叶子优先)
每次全局挑选增益最大的那个叶子进行分裂。
例:当前有3个叶子A、B、C,A分裂收益最高,只分裂A;B、C暂时不动。
优点:相同树节点数量精度更高;风险:容易很深,必须设置max_depth防过拟合。
- GOSS样本采样举例
每条样本梯度绝对值 ∣gi∣|g_i|∣gi∣ 代表当前预测误差:
- 梯度很大:房价预测偏差很大,必须保留;
- 梯度很小:预测基本准确,可以随机删掉一部分。
训练时保留大梯度样本,少量随机采样小梯度样本,样本变少,训练提速。
- EFB特征捆绑举例
特征:是否学区房(0/1)、是否地铁房(0/1),属于互斥稀疏特征。
不会同时等于1,打包合并成一个直方图特征,减少特征数量。
直观对比一轮训练流程(同一个房价数据集)
XGBoost
- 全部样本特征预排序
- 逐层遍历所有节点,遍历全部特征分割点,计算Gain
- 选出全局最优分裂点,生成新一层节点
- 带入二阶信息+正则计算目标
LightGBM
- 特征构建直方图
- 挑选收益最高的叶子尝试分裂,仅在bin分界点算增益
- 可选:GOSS减少样本、EFB压缩特征
- 目标函数、g/h公式和XGBoost一模一样,只是搜索方式更快
结合之前理论串联(重点!面试加分)
- 每一轮树不断最小化全体样本损失 → 经验风险最小化 ERM
- XGBoost:γ\gammaγ、λ\lambdaλ;LightGBM:max_depth、正则项
等价于给模型增加复杂度惩罚 → 结构风险最小化 SRM
目的:缩小训练集经验风险与真实分布期望风险的差距,缓解过拟合。
简单现象例子
训练过程:
- XGBoost不设正则:训练loss持续下降,测试房价误差越来越大(过拟合,ERM缺陷)
- 加入λ、γ(SRM):训练loss不会无限走低,但测试集效果更好
如果你想要,我可以给一段可运行的房价预测极简代码,直观观察两者训练速度、精度差异。
下面提供可直接运行完整示例:回归任务(模拟房价),同时演示 XGBoost / LightGBM,附带训练、评估、对比。
环境依赖:
pip install numpy pandas scikit-learn xgboost lightgbm matplotlib
import numpy as np
import pandas as pd
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import xgboost as xgb
import lightgbm as lgb
# ---------------------- 1. 构造模拟数据集 ----------------------
X, y = make_regression(
n_samples=10000,
n_features=20,
n_informative=12,
noise=15,
random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# ---------------------- 2. XGBoost 训练 ----------------------
print("===== XGBoost =====")
xgb_model = xgb.XGBRegressor(
n_estimators=100, # 树数量
max_depth=6, # 树最大深度
reg_lambda=1.0, # L2正则 λ (SRM复杂度惩罚)
gamma=0.1, # 分裂最小增益阈值 γ
objective="reg:squarederror",
random_state=42
)
xgb_model.fit(X_train, y_train)
y_pred_xgb = xgb_model.predict(X_test)
mse_xgb = mean_squared_error(y_test, y_pred_xgb)
print(f"XGBoost Test MSE: {mse_xgb:.2f}")
# ---------------------- 3. LightGBM 训练 ----------------------
print("\n===== LightGBM =====")
lgb_model = lgb.LGBMRegressor(
n_estimators=100,
max_depth=6,
reg_lambda=1.0,
learning_rate=0.1,
random_state=42,
verbose=-1
)
lgb_model.fit(X_train, y_train)
y_pred_lgb = lgb_model.predict(X_test)
mse_lgb = mean_squared_error(y_test, y_pred_lgb)
print(f"LightGBM Test MSE: {mse_lgb:.2f}")
# ---------------------- 4. 理论对应关系(重点理解) ----------------------
"""
1. 模型迭代过程不断最小化样本损失 = 经验风险最小化 ERM
2. reg_lambda(L2)、gamma、max_depth:对模型复杂度施加惩罚 → 结构风险最小化 SRM
作用:防止经验风险持续下降,但期望风险(测试误差)上升(过拟合)
数学差异回顾:
XGB:二阶泰勒展开 + 预排序/近似直方图 + Level-wise
LGB:目标函数数学形式一致;使用直方图、Leaf-wise、GOSS、EFB做工程加速
"""
输出示例参考
===== XGBoost =====
XGBoost Test MSE: 334.12
===== LightGBM =====
LightGBM Test MSE: 330.78
拓展:如果你想看训练过程 loss 变化
XGBoost 输出每轮训练损失
evals_xgb = [(X_train, y_train), (X_test, y_test)]
xgb_model = xgb.XGBRegressor(
n_estimators=100,
max_depth=6,
reg_lambda=1.0,
gamma=0.1,
objective="reg:squarederror",
random_state=42
)
xgb_model.fit(
X_train, y_train,
eval_set=evals_xgb,
eval_metric="rmse",
verbose=10
)
LightGBM 输出每轮loss
evals_lgb = [(X_train, y_train), (X_test, y_test)]
lgb_model = lgb.LGBMRegressor(
n_estimators=100,
max_depth=6,
reg_lambda=1.0,
random_state=42,
verbose=-1
)
lgb_model.fit(
X_train, y_train,
eval_set=evals_lgb,
eval_metric="rmse",
callbacks=[lgb.log_evaluation(10)]
)
分类任务简易切换(如风控二分类)
只需改动模型与指标:
# 生成分类数据
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=10000, n_features=20, random_state=42)
# XGB分类器
xgb_cls = xgb.XGBClassifier(n_estimators=100, reg_lambda=1, gamma=0.1)
# LGB分类器
lgb_cls = lgb.LGBMClassifier(n_estimators=100, reg_lambda=1, verbose=-1)
MSE、MAE、RMSE 完整对比(回归评估指标,结合你前面房价预测代码)
设:
yiy_iyi:真实值;y^i\hat y_iy^i:预测值;nnn:样本数量;误差 ei=yi−y^ie_i = y_i - \hat y_iei=yi−y^i
1. 公式定义
MAE 平均绝对误差 Mean Absolute Error
MAE=1n∑i=1n∣yi−y^i∣ \mathbf{MAE} = \frac{1}{n}\sum_{i=1}^n |y_i - \hat{y}_i| MAE=n1i=1∑n∣yi−y^i∣
- 误差取绝对值,线性惩罚;
- 对异常值鲁棒;
- 单位和原始标签一致;
- 导数在0点不连续,不可导。
MSE 均方误差 Mean Squared Error
MSE=1n∑i=1n(yi−y^i)2 \mathbf{MSE} = \frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2 MSE=n1i=1∑n(yi−y^i)2
- 误差平方,放大离群点、大误差的惩罚力度;
- 处处可导;
- 单位 = 原始单位的平方(难以直观解释);
你前面XGB/LGB默认优化目标就是MSE损失。
RMSE 均方根误差 Root Mean Squared Error
RMSE=MSE \mathbf{RMSE} = \sqrt{\mathbf{MSE}} RMSE=MSE
- MSE开根号;
- 单位和原始标签一致,业务更容易解读;
- 依然继承MSE特点:重惩罚大偏差、敏感异常值。
2. 核心区别一览
| 指标 | 公式特点 | 对异常值敏感度 | 可导性 | 单位 |
|---|---|---|---|---|
| MAE | 绝对值求和平均 | 低(稳健) | 零点不可导 | 与y相同 |
| MSE | 误差平方平均 | 很高 | 全程可导 | y单位² |
| RMSE | √MSE | 很高 | 全程可导 | 与y相同 |
3. 直观例子
真实房价:[100, 200, 300]
预测:[110, 195, 280]
误差:[-10, +5, +20]
MAE=10+5+203≈11.67
MAE = \frac{10+5+20}{3}\approx 11.67
MAE=310+5+20≈11.67
MSE=102+52+2023=5253=175
MSE = \frac{10^2+5^2+20^2}{3} = \frac{525}{3}=175
MSE=3102+52+202=3525=175
RMSE=175≈13.23
RMSE=\sqrt{175}\approx13.23
RMSE=175≈13.23
可以看到 RMSE > MAE,因为大误差被平方放大。
4. 关键面试考点
① 为什么很多模型训练损失用MSE,评估看RMSE?
- MSE连续可导,适合梯度下降优化;
- RMSE还原原始量纲,方便业务理解。
② MAE不可导会带来什么问题?
误差=0处梯度突变。直接以MAE作为损失函数时,优化难度高于MSE;
XGBoost/LightGBM支持mae损失,但优化过程收敛通常慢于MSE。
③ 什么时候选哪个?
✅ 数据存在大量异常值 → MAE
✅ 希望严厉惩罚大预测偏差(如自动驾驶、医疗预测)→ RMSE/MSE
✅ 业务需要直观解读误差大小优先看RMSE,不推荐直接展示MSE
回归模型大全(按流派划分,附带特点、适用场景,面试体系版)
回归任务目标:预测连续数值(房价、销量、温度、风险值)
一、传统统计回归(统计学起家)
1. 线性回归 Linear Regression
模型:y^=wTx+b\hat y = w^Tx + by^=wTx+b
- 假设:特征与标签线性关系、误差正态分布、无多重共线性
- 优化目标:最小化MSE(最小二乘法)
- 优点:可解释极强、训练快
- 缺点:只能捕捉线性关系,无法拟合非线性
2. 岭回归 Ridge
线性回归 + L2正则
L=MSE+λ∥w∥22\mathcal{L}=MSE+\lambda\|w\|_2^2L=MSE+λ∥w∥22
解决普通线性回归特征多重共线性、参数爆炸。
👉 属于结构风险最小化SRM
3. Lasso回归
线性回归 + L1正则
L=MSE+λ∥w∥1\mathcal{L}=MSE+\lambda\|w\|_1L=MSE+λ∥w∥1
特点:L1会让部分系数压缩至0,自动特征筛选
4. ElasticNet 弹性网
L1 + L2 结合,兼顾特征筛选与稳定训练,高维特征首选。
小结:岭/Lasso/ElasticNet统称正则化线性回归。
二、树基集成回归(工业竞赛最常用,你正在实验)
1. 决策树回归(单棵树)
简单、可捕捉非线性;极易过拟合,一般不单独使用。
2. 随机森林回归 RandomForest
并行训练大量独立决策树,最后取均值。
- Bagging思想;
- 优点:鲁棒、不易过拟合;
- 缺点:拟合上限通常低于Boosting。
3. GBDT 梯度提升回归树(基础Boosting)
串行训练树,每棵拟合前序残差(负梯度),只使用一阶导数。
4. XGBoost 极端梯度提升
GBDT增强:二阶泰勒展开 + 显式正则(γ,λ\gamma,\lambdaγ,λ)、缺失值处理。
5. LightGBM
XGB工程优化:直方图、Leaf-wise、GOSS、EFB,速度更快。
6. CatBoost
原生解决类别特征、减少类别特征目标泄露,适合表格数据大量category场景。
重点区分:
Bagging(随机森林):并行;Boosting(GBDT/XGB/LGB/CatBoost):串行。
三、邻近/核方法
1. KNN回归 K近邻
不用训练过程;预测时找距离最近k个样本标签平均。
- 缺点:高维失效、推理慢,大数据不推荐。
2. SVR 支持向量回归
SVM拓展到回归,引入ε-不敏感带;
适合中小数据集、高维小样本;大数据速度劣势明显。
四、神经网络回归(深度学习回归)
1. 多层感知机 MLP / 全连接网络
堆叠全连接层拟合非线性映射;输出层1个神经元,激活一般不用sigmoid。
适合:海量表格数据、特征高度非线性;
缺点:小样本极易过拟合,可解释差。
2. 其他网络拓展
CNN回归(图像预测)、LSTM/Transformer回归(时序预测:负荷、股价)
五、其他小众回归
- 贝叶斯线性回归:输出预测分布(不确定性)
- 高斯过程回归 GPR:小样本、可得到置信区间;大数据计算爆炸
- 梯度提升的衍生:HistGradientBoostingRegressor(sklearn内置直方图GBDT)
分层选型指南(工程实战)
✅ 小样本、追求可解释:线性回归、Ridge、Lasso
✅ 中等规模表格数据、通用基线:随机森林
✅ 大数据表格、精度优先(工业主流):LightGBM > XGBoost > CatBoost
✅ 大量类别特征:CatBoost / LightGBM(categorical支持)
✅ 需要预测置信区间、不确定性:高斯过程、贝叶斯方法
✅ 图像/文本输入做回归:深度学习(CNN/Transformer)
四者清晰区分(面试高频易混淆概念,搭配例子串联)
先给总览一句话:
目标函数是顶层优化目标;损失函数是目标函数核心项;分数函数输出原始得分;激活函数作用在网络内部,塑造非线性表达。
1. 分数函数 Score Function
定义
输入样本,模型输出一组原始未归一化分值(logits),用来衡量样本属于各类别的置信度。
常见场景:分类任务
例子
1)逻辑回归:z=wTx+bz=w^Tx+bz=wTx+b,zzz 就是分数
2)神经网络最后一层线性层输出:logitslogitslogits,分数函数
3)SVM输出的决策函数值也是分数
⚠️ 分数不是概率,值域不受限制 (−∞,+∞)(-\infty,+\infty)(−∞,+∞)
后续通常接 sigmoid / softmax 转为概率。
区分:
分数函数 = 模型原始打分;概率是分数经过激活映射后的结果。
2. 激活函数 Activation Function
定义
施加在**网络中间层(神经元输出)**的非线性变换:
a=σ(z)a=\sigma(z)a=σ(z)
作用:引入非线性。没有激活函数,无论多少层网络等价于单层线性模型。
常见
- Sigmoid:σ(z)=11+e−z\sigma(z)=\dfrac{1}{1+e^{-z}}σ(z)=1+e−z1
- Tanh、ReLU、LeakyReLU、GELU
重要边界
✅ 用在隐藏层
❌ 不是损失函数!不衡量预测对错,只做变换
⚠️ 容易混淆点:
softmax/sigmoid 放在输出层时:
既是激活函数,又用来把分数转为概率,然后送入交叉熵损失。
3. 损失函数 Loss Function
定义
针对单个样本,衡量预测值与真实标签之间差距:L(y^,y)\mathcal{L}(\hat y,y)L(y^,y)
- 回归:MSE、MAE
- 分类:二元交叉熵、多分类交叉熵
训练时:
batch内所有样本损失求和/平均,作为优化依据。
关键点:损失 = 评判预测有多“差”
4. 目标函数 Objective Function
定义
模型最终全局最小化/最大化的完整函数。
目标函数 ≥ 损失函数,形式:
Obj=经验损失项+正则项\mathbf{Obj} = 经验损失项 + 正则项Obj=经验损失项+正则项
O=1N∑i=1NL(y^i,yi)+Ω(θ)\mathcal{O}=\frac1N\sum_{i=1}^N\mathcal{L}(\hat y_i,y_i)+\Omega(\theta)O=N1i=1∑NL(y^i,yi)+Ω(θ)
- 1N∑L\dfrac1N\sum \mathcal{L}N1∑L:全体样本平均损失(经验风险)
- Ω(θ)\Omega(\theta)Ω(θ):正则惩罚(L1、L2、树复杂度惩罚 γT\gamma TγT)
👉 经验风险最小化 ERM:Obj = 平均损失
👉 结构风险最小化 SRM:Obj = 平均损失 + 正则项
直观串联两个场景【重点】
场景A:逻辑回归(二分类)
- 分数函数:z=wTx+bz=w^Tx+bz=wTx+b
- 激活函数(sigmoid):y^=σ(z)∈(0,1)\hat y=\sigma(z)\in(0,1)y^=σ(z)∈(0,1)
- 损失函数:单个样本交叉熵 L=−[ylogy^+(1−y)log(1−y^)]\mathcal{L}=-[y\log\hat y+(1-y)\log(1-\hat y)]L=−[ylogy^+(1−y)log(1−y^)]
- 目标函数:O=1N∑L+λ∥w∥2\mathcal{O}=\frac1N\sum\mathcal{L}+\lambda\|w\|^2O=N1∑L+λ∥w∥2
场景B:XGBoost(你正在学习)
树模型没有激活函数!激活函数是神经网络概念
- 分数函数:每棵树累加输出 y^(t)\hat y^{(t)}y^(t)(预测得分)
- 损失函数:MSE / 交叉熵(单样本)
- 目标函数:
Obj=∑i=1nL(yi,y^i(t))+∑k=1tΩ(fk) Obj=\sum_{i=1}^n\mathcal{L}(y_i,\hat y_i^{(t)})+\sum_{k=1}^t\Omega(f_k) Obj=i=1∑nL(yi,y^i(t))+k=1∑tΩ(fk)
Ω(f)=γT+12λ∑w2\Omega(f)=\gamma T+\frac12\lambda\sum w^2Ω(f)=γT+21λ∑w2 树结构正则
核心对比表
| 名称 | 作用位置 | 核心作用 | 典型例子 |
|---|---|---|---|
| 分数函数 | 模型输出层线性部分 | 产生原始分值logits | z=Wx+bz=Wx+bz=Wx+b |
| 激活函数 | 神经元中间/输出层 | 引入非线性、值域映射 | ReLU、sigmoid、softmax |
| 损失函数 | 样本层面 | 衡量预测与标签差距 | MSE、MAE、交叉熵 |
| 目标函数 | 全局优化顶层 | 训练最终最小化的完整式子 | 平均损失+正则项 |
高频面试易错题澄清
Q1:softmax 是损失还是激活?
答:激活函数。把logits分数转为概率;
交叉熵才是损失函数。工程上常合并成 softmax+交叉熵 加速求导。
Q2:损失函数 = 目标函数?
❌ 不等。
目标函数 = 损失均值 + 正则;
只有不加任何正则时,二者才相等。
Q3:XGBoost / LightGBM 有没有激活函数?
没有!
激活函数是神经网络层与层之间的非线性变换。
树模型依靠树分裂天然拟合非线性,不存在神经元、不存在激活。
Q4:MSE可以既是损失又是目标函数吗?
无正则时:
全体样本MSE均值 = 损失均值 = 目标函数;
加入L2正则后目标函数变大,不再等于单纯MSE。
SVM / SVR 超参:C、γ(等价RBF里的σ)
先统一符号:
sklearn 中 gamma 和高斯核公式里的 σ\sigmaσ 直接相关
RBF核:
K(xi,xj)=exp(−γ⋅∥xi−xj∥2)
K(x_i,x_j)=\exp\left(-\gamma \cdot \|x_i-x_j\|^2\right)
K(xi,xj)=exp(−γ⋅∥xi−xj∥2)
原始数学版本常用形式:
K=exp(−∥xi−xj∥22σ2)
K=\exp\left(-\frac{\|x_i-x_j\|^2}{2\sigma^2}\right)
K=exp(−2σ2∥xi−xj∥2)
对应关系:
γ=12σ2
\boldsymbol{\gamma = \dfrac{1}{2\sigma^2}}
γ=2σ21
面试经常混着叫:有的论文讲σ\boldsymbol{\sigma}σ,sklearn接口用γ\boldsymbol{\gamma}γ,二者是倒数平方关系。
1. C 惩罚系数(分类SVC / 回归SVR通用)
含义
控制对训练集错误的惩罚力度。
SVM目标函数简化理解:
min 12∥w∥2+C∑ξi
\min\; \frac12\|w\|^2 + C\sum\xi_i
min21∥w∥2+C∑ξi
- 12∥w∥2\frac12\|w\|^221∥w∥2:最大化间隔(抑制模型复杂度,SRM)
- ξi\xi_iξi:样本违反间隔的松弛变量(训练误差)
取值影响
✅ C 很大
对误分类惩罚很重 → 尽量不允许训练集出错;
模型会拼命贴合训练数据 → 容易过拟合;间隔变窄。
✅ C 很小
惩罚变轻,允许更多样本出错;
追求更大间隔,弱化单样本影响 → 更容易欠拟合,泛化变好。
通俗:C = “要不要严格遵守训练集”
2. γ / σ 高斯核带宽(仅RBF核有效!线性核无此参数)
γ=12σ2\gamma=\frac{1}{2\sigma^2}γ=2σ21
σ\boldsymbol{\sigma}σ:核带宽,邻域有效作用范围
- σ\boldsymbol{\sigma}σ 大 → γ\gammaγ 小
每个样本影响范围很大,决策边界平滑;容易欠拟合。 - σ\boldsymbol{\sigma}σ 小 → γ\gammaγ 大
样本只对极近距离邻居产生影响;决策边界扭曲、细碎,紧贴训练点;极易过拟合。
γ视角复述(适配sklearn代码)
gamma大:半径很小,每个样本“势力范围极小”,容易画复杂弯曲线条,过拟合gamma小:半径很大,单个样本影响很远,边界平滑
直观总结对照表
| 参数 | 变大带来的效果 | 风险 |
|---|---|---|
| C ↑ | 看重训练准确率,缩小分类间隔 | 过拟合 |
| C ↓ | 容忍训练错误,拉大间隔 | 欠拟合 |
| γ ↑(σ↓) | 局部影响范围缩小,边界复杂 | 严重过拟合 |
| γ ↓(σ↑) | 局部影响范围扩大,边界平滑 | 欠拟合 |
3. 组合调参规律(面试+实战)
- C大 + γ大:高风险组合,几乎一定会过拟合
- C小 + γ小:倾向欠拟合
- 通用搜索方向:
先粗调γ,再调C;或者网格搜索GridSearchCV
4. 和你前面知识串联(重点加分)
- C控制「愿意承受多大训练误差」;
- γ控制特征空间映射后的非线性复杂度;
两者共同约束模型容量,实现结构风险最小化SRM;
参数不合适 → 模型容量过大,陷入ERM(死磕训练集,泛化差)。
5. 常见面试题
Q:线性核SVM有没有γ、σ?
没有。只有RBF、多项式核这类非线性核才存在。
Q:gamma=scale / auto 是什么意思(sklearn)
SVR(kernel="rbf", gamma="scale")
scale:γ=1nfeatures⋅X.var()\gamma = \dfrac{1}{n_{features}\cdot X.var()}γ=nfeatures⋅X.var()1 根据数据自动缩放(默认推荐)auto:γ=1/nfeatures\gamma = 1/n_{features}γ=1/nfeatures
Q:SVR除了C、gamma还有一个重要超参ε?
是的!
SVR独有:epsilon ε,ε-不敏感带
- ε越大:允许预测值和真值存在更大差距也不计入损失;
模型更平滑,更容易欠拟合; - ε越小:要求预测更精准,容易过拟合。
6. 代码示例(带网格搜索示意)
from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV
params = {
"C": [0.1, 1, 10, 100],
"gamma": [0.001, 0.01, 0.1, 1],
"epsilon": [0.01, 0.1, 0.5]
}
model = GridSearchCV(SVR(kernel="rbf"), params, cv=5)
先明确:投影(Projection)在深度学习两大常见含义
- 线性投影:y=xW+by = xW + by=xW+b(特征维度变换,最常用,QKV、CLS投影、embedding映射)
- 向量空间正交投影:向量向子空间投影(约束优化、RL、几何深度学习)
分别给出 PyTorch / JAX 标准实现,区分写法、底层机制、性能。
一、场景1:深度学习最常用——线性特征投影(Transformer QKV、MLP投影层)
数学形式
y=xW+b\boldsymbol{y} = \boldsymbol{x}W + by=xW+b
- x∈[B,T,Din]x\in[B, T, D_{in}]x∈[B,T,Din]
- W∈[Din,Dout], b∈[Dout]W\in[D_{in}, D_{out}],\;b\in[D_{out}]W∈[Din,Dout],b∈[Dout]
1)PyTorch
方式A:nn.Linear(标准方案,工程首选)
import torch
import torch.nn as nn
din, dout = 128, 64
proj = nn.Linear(din, dout, bias=True) # W, b 可学习参数
x = torch.randn(8, 50, din) # [B, seq_len, din]
y = proj(x) # [8,50,64]
底层:y = x @ weight.T + bias
PyTorch Linear权重存储 shape:
[d_out, d_in]
方式B:手写矩阵乘法(等价,不推荐,缺少参数管理)
W = nn.Parameter(torch.randn(dout, din))
b = nn.Parameter(torch.randn(dout))
y = x @ W.T + b
2)JAX + Flax(工业主流,对应nn.Linear)
Flax nn.Dense,等价 PyTorch Linear
import jax
import jax.numpy as jnp
import flax.linen as nn
din, dout = 128, 64
proj = nn.Dense(dout, use_bias=True)
x = jnp.random.normal(jax.random.PRNGKey(0), (8, 50, din))
params = proj.init(jax.random.PRNGKey(1), x)
y = proj.apply(params, x)
JAX Dense权重 shape:[din, dout]
计算:y=x@W+by = x @ W + by=x@W+b
⚠️ 注意权重矩阵存储顺序和PyTorch相反!
纯原生JAX手写投影(无Flax)
key = jax.random.PRNGKey(0)
W = jax.random.normal(key, (din, dout))
b = jax.random.normal(key, (dout,))
y = x @ W + b
二、场景2:正交投影(几何投影,向量投影到子空间)
给定基向量构成矩阵 UUU,向量 zzz 向 UUU 张成子空间投影:
ProjU(z)=UU⊤z
\operatorname{Proj}_U(z) = UU^\top z
ProjU(z)=UU⊤z
要求:UUU 列向量标准正交;若不正交需要 (UU⊤)−1UU⊤z(UU^\top)^{-1}UU^\top z(UU⊤)−1UU⊤z
PyTorch
def orthogonal_proj(z, U):
# U: [D, K] 正交基
return U @ U.T @ z
z = torch.randn(128)
U = torch.randn(128, 16)
U, _ = torch.qr(U) # 正交化
z_proj = orthogonal_proj(z, U)
JAX
def orthogonal_proj(z, U):
return U @ U.T @ z
z = jnp.random.normal(jax.random.PRNGKey(0), (128,))
U = jnp.random.normal(jax.random.PRNGKey(1), (128, 16))
U, _ = jnp.linalg.qr(U)
z_proj = orthogonal_proj(z, U)
三、关键差异:PyTorch vs JAX 实现投影的核心区别
-
范式不同
- PyTorch:命令式、面向对象、有状态Module
nn.Linear自带可训练参数,实例保存权重;自动微分基于tape。 - JAX(Flax):函数式、无状态
参数和网络主体分离;init()创建参数,apply(params, x)前向;搭配 jit、vmap、pmap。
- PyTorch:命令式、面向对象、有状态Module
-
权重矩阵存储转置坑(高频踩坑点)
- PyTorch
nn.Linear.weight:[d_out, d_in]→ xW⊤x W^\topxW⊤ - Flax
nn.Dense.kernel:[d_in, d_out]→ xWx WxW
互相移植代码极易维度出错。
- PyTorch
-
自动微分机制
- PyTorch:动态图,即时执行
.backward() - JAX:基于函数变换
jax.grad,需要把前向逻辑封装成纯函数。
- PyTorch:动态图,即时执行
四、延伸:Transformer里常用的多头投影(QKV Projection)
PyTorch
self.qkv_proj = nn.Linear(d_model, 3 * d_model)
x = torch.randn(2, 100, d_model)
qkv = self.qkv_proj(x)
q, k, v = torch.chunk(qkv, 3, dim=-1)
Flax JAX
self.qkv_proj = nn.Dense(3 * d_model)
qkv = self.qkv_proj(x)
q, k, v = jnp.split(qkv, 3, axis=-1)
五、极简总结(面试可用)
- 特征线性投影(最常用)
- PyTorch:
nn.Linear,计算 xW⊤+bxW^\top+bxW⊤+b - JAX/Flax:
nn.Dense,计算 xW+bxW+bxW+b,权重矩阵顺序相反
- PyTorch:
- 几何正交投影:手动实现 UU⊤zUU^\top zUU⊤z,二者API只是张量库函数差异,公式完全一致;
- 本质数学运算都是矩阵乘法,区别来自框架的**参数管理范式(有状态 vs 函数式无状态)**和权重存储布局。
三角函数、正交基函数 完整梳理 + 工程/AI应用
一、基础概念先行
1. 正交函数定义
函数系 {ϕk(t)}\{\phi_k(t)\}{ϕk(t)} 在区间 [a,b][a,b][a,b] 正交:
∫abϕm(t)ϕn(t)dt={C≠0,m=n0,m≠n
\int_a^b \phi_m(t)\phi_n(t)dt =
\begin{cases}
C \neq 0, & m=n\\
0, & m\neq n
\end{cases}
∫abϕm(t)ϕn(t)dt={C=0,0,m=nm=n
若 C=1C=1C=1,称为标准正交基。
2. 三角函数正交系(傅里叶基,最经典)
区间 [−π,π][-\pi,\pi][−π,π]
{1,cost,sint,cos2t,sin2t,…,cosnt,sinnt,… }
\{1,\cos t,\sin t,\cos2t,\sin2t,\dots,\cos nt,\sin nt,\dots\}
{1,cost,sint,cos2t,sin2t,…,cosnt,sinnt,…}
满足正交性:不同频率三角函数乘积积分 = 0。
任意满足条件的周期函数,可分解为三角函数线性组合:傅里叶级数。
核心思想:
任意信号 ≈ 不同频率正弦/余弦叠加;三角函数是一组正交基。
二、三角函数正交基核心应用场景
1. 信号处理(传统工程)
1)频谱分析、FFT快速傅里叶变换
- 时域信号 → 投影到三角函数正交基,得到频域幅值/相位;
- 降噪:滤除高频噪声分量;
- 振动、音频、雷达信号解调。
2)滤波
低通/高通滤波本质:保留部分基函数分量,舍弃其余分量。
2. 数值计算 & PDE偏微分方程
分离变量法求解波动方程、热传导方程;
把解展开为三角级数,将偏微分转化为常微分方程组。
3. 深度学习里的三角函数(重点,贴合你当前方向)
(1) 位置编码 Positional Encoding(Transformer原生)
PE(pos,2i)=sin(pos100002i/d),PE(pos,2i+1)=cos(pos100002i/d)
PE_{(pos,2i)}=\sin\big(\frac{pos}{10000^{2i/d}\big)},\quad
PE_{(pos,2i+1)}=\cos\big(\frac{pos}{10000^{2i/d}}\big)
PE(pos,2i)=sin(100002i/d)pos,PE(pos,2i+1)=cos(100002i/dpos)
底层原理:
三角函数构成一组正交基,能够编码序列绝对位置、相对位置;
Transformer没有时序/空间先验,靠三角基注入位置信息。
数学理解:位置向量 = 将位置标量投影到三角函数正交张成的空间。
(2) 傅里叶特征编码(Fourier Features)
NeRF、坐标MLP、隐式神经表示(SDF、辐射场)核心技术:
对坐标 xxx 映射:
γ(x)=[sin(2πBx),cos(2πBx)]
\gamma(x)=\big[\sin(2\pi Bx),\cos(2\pi Bx)\big]
γ(x)=[sin(2πBx),cos(2πBx)]
把低维坐标投影到高维傅里叶正交空间,让MLP更容易学习高频细节纹理。
解决纯MLP无法拟合高频信号的“频谱偏置”问题。
(3) 神经算子 / Fourier Neural Operator(FNO)
直接用傅里叶正交基进行全局卷积,替代CNN局部卷积;
适合流体、气象、弹性力学等连续场预测。
CNN依靠局部感受野;FNO利用三角函数基一次性建模全局相互作用。
4. 图形学
- 球面调和函数(SH,广义正交基)用于环境光照渲染;
- DCT离散余弦变换(三角函数离散正交基):JPEG图片压缩、音频MP3压缩。
DCT = 离散形式的余弦正交基,把图像块投影到余弦基,丢弃幅值小的分量实现压缩。
三、拓展:其他常见正交基(横向对比三角函数基)
- 小波基(Wavelet)
三角基全局振荡;小波具备局部时频特性。应用:图像压缩、瞬态信号检测。 - 勒让德多项式、切比雪夫多项式
区间有限域正交多项式;用于数值逼近、光谱方法求解PDE。 - 球面调和函数 SH
球面上正交基;3D渲染、气象球谐模拟。 - 离散正交基:PCA主成分基
数据驱动正交基(不是固定解析函数);
PCA本质:寻找一组正交向量基,把数据投影,保留最大方差方向。
四、统一数学视角:投影(衔接你刚才 pytorch/jax 投影)
任意正交基 {ϕk}\{\phi_k\}{ϕk},函数 fff 在基上展开:
f(t)=∑kakϕk(t),ak=⟨f,ϕk⟩⟨ϕk,ϕk⟩
f(t)=\sum_k a_k \phi_k(t),\quad
a_k=\dfrac{\langle f,\phi_k\rangle}{\langle\phi_k,\phi_k\rangle}
f(t)=k∑akϕk(t),ak=⟨ϕk,ϕk⟩⟨f,ϕk⟩
aka_kak 就是投影系数。
- 连续形式:内积是积分(三角函数傅里叶)
- 离散形式:向量内积(矩阵乘法,DL里Linear/Dense投影)
一条贯通主线:
深度学习nn.Linear= 向量向有限维离散基投影;
傅里叶分解 = 函数向连续三角函数正交基投影。
数学内核完全一致,只是离散/连续、基是否固定解析形式。
五、面试高频问答
Q1:为什么Transformer原始位置编码选用三角函数正交基?
- 三角函数正交,不同频率分量信息冗余低;
- 天然支持相对位置推算:sin(a+b)\sin(a+b)sin(a+b) 可由 sina,cosa,sinb,cosb\sin a,\cos a,\sin b,\cos bsina,cosa,sinb,cosb 线性组合;
- 可以外推:训练最长序列长度之外,依然能泛化预测更长位置。
Q2:傅里叶特征(Fourier Feature)为什么能提升MLP高频拟合能力?
普通MLP直接输入坐标,网络倾向学习低频函数;
通过三角函数正交基做显式投影,人工引入高频特征,扩大模型能够表达的频率范围。
Q3:三角正交基 vs CNN卷积核
- 三角基:全局、固定解析基函数;全局同时作用于整个定义域(FNO)
- CNN卷积核:学习得到的局部滤波器,非预先设定正交;依靠多层堆叠扩大感受野
六、极简应用汇总清单
三角函数正交基
✅ FFT频谱分析、振动/音频信号处理
✅ JPEG/MP3 DCT压缩
✅ Transformer三角位置编码
✅ NeRF傅里叶特征映射
✅ FNO傅里叶神经算子(连续物理场预测)
✅ PDE傅里叶谱方法求解
✅ 雷达、通信调制解调
更多推荐



所有评论(0)