神经网络
构建神经网络就是在构建神经元
基本结构
神经元(Neuron):接收输入、加权求和、通过激活函数输出
层(Layer):输入层 → 隐藏层(可多层) → 输出层
权重与偏置:网络的学习参数,通过训练调整
关键机制
前向传播:数据从输入层流向输出层,计算预测结果
反向传播:根据误差梯度,从输出层向输入层更新权重
激活函数:引入非线性(ReLU、Sigmoid、Tanh、Softmax 等)

激活函数
激活函数是神经网络的核心组件之一,它引入非线性因素,使神经网络能够学习和逼近任意复杂函数。没有激活函数,多层神经网络就退化为单层线性模型。
激活函数本质上就是一种转换------把输入值转换成另一种形式的输出值
Sigmoid
数学定义:
Sigmoid函数
σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}σ(x)=1+e−x1
Sigmoid 是一个把任何数字变成 0 到 1 之间的函数
以 0.5 为中心
输入:任意数字(-100, 0, 50...)
输出:0 到 1 之间的数
Sigmoid导数
σ′(x)=σ(x)(1−σ(x))\displaystyle \sigma'(x) = \sigma(x)(1-\sigma(x))σ′(x)=σ(x)(1−σ(x))
Sigmoid导数结果在(0, 0.25]
σ(x) 结果被锁死在 (0,1),所以导数 σ'(x) 结果被锁死在 (0, 0.25]
Sigmoid函数图:

x=0;y=0.5
Sigmoid导数图像:

Sigmoid激活函数的作用
神经网络里有很多"神经元",每个神经元做两件事:
加权求和:把输入信号加起来(把各种特征综合起来)
激活:用一个函数把结果压到一个范围内
梯度 = 损失函数的导数,告诉你:0
梯度正 → 往左走损失减小
梯度负 → 往右走损失减小
梯度大 → 坡度陡,可以迈大步
梯度小 → 坡度缓,迈小步
Sigmoid缺陷(梯度消失)
神经网络层数越多,这个求导结果就会接近0,这样对权重修改微乎其微。
因为链式法则 = 一长串乘法。Sigmoid 每层最多乘0.25,而且经常乘0.01,乘5次就几乎为0了。
Tanh
Tanh 是 Sigmoid 的改进版(零均值),解决了收敛慢问题,但未解决梯度消失问题
数学定义:
Tanh函数
tanh(x)=ex−e−xex+e−x=1−e−2x1+e−2x=2σ(2x)−1\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} = \frac{1 - e^{-2x}}{1 + e^{-2x}} = 2\sigma(2x) - 1tanh(x)=ex+e−xex−e−x=1+e−2x1−e−2x=2σ(2x)−1
以 0 为中心
输入-∞,+∞
输出(-1, 1)
Tanh导数
tanh′(x)=1−tanh2(x)\tanh'(x) = 1 - \tanh^2(x)tanh′(x)=1−tanh2(x)
输出(0, 1]
Tanh函数图:

Tanh导数图:

ReLU
ReLU只考虑正值,负值不考虑
ReLU函数
ReLU(x)=max(0,x)={x,x>00,x≤0\text{ReLU}(x) = \max(0, x) = \begin{cases} x, & x > 0 \\ 0, & x \le 0 \end{cases}ReLU(x)=max(0,x)={x,0,x>0x≤0
输入(−∞,+∞)(-\infty, +\infty)(−∞,+∞)
输出[0,+∞)[0, +\infty)[0,+∞)
ReLU导数
ReLU′(x)={1,x>00,x<0\text{ReLU}'(x) = \begin{cases} 1, & x > 0 \\ 0, & x < 0 \end{cases}ReLU′(x)={1,0,x>0x<0
Leaky ReLU
Leaky ReLU函数
LReLU(x)={x,x>0αx,x≤0\text{LReLU}(x) = \begin{cases} x, & x > 0 \\ \alpha x, & x \le 0 \end{cases}LReLU(x)={x,αx,x>0x≤0
其中 α 是固定的超参数(通常设为 0.01),不像 PReLU 那样可学习
Leaky ReLU导数
LReLU′(x)={1,x>0α,x<0\text{LReLU}'(x) = \begin{cases} 1, & x > 0 \\ \alpha, & x < 0 \end{cases}LReLU′(x)={1,α,x>0x<0
PReLU
ReLU 的负区间斜率从 固定值 变成 可学习的参数,让网络自己决定最优值
PReLU函数
PReLU(x)={x,x>0αx,x≤0\text{PReLU}(x) = \begin{cases} x, & x > 0 \\ \alpha x, & x \le 0 \end{cases}PReLU(x)={x,αx,x>0x≤0
PReLU导数
PReLU′(x)={1,x>0α,x<0\text{PReLU}'(x) = \begin{cases} 1, & x > 0 \\ \alpha, & x < 0 \end{cases}PReLU′(x)={1,α,x>0x<0
Softmax
Softmax(xi)=exi∑j=1nexj\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}}Softmax(xi)=∑j=1nexjexi
把任意实数向量,变成概率分布(和为1,每个值在0~1之间)
激活函数的使用情况选择
输入层
输入只做标准化,不动原始数据
隐藏层
所有隐藏层(第1层到倒数第2层)必须加非线性激活函数
输出层(最后一层)------ 看任务类型
| 任务类型 | 输出层激活函数 | 原因(为什么) |
|---|---|---|
| 回归(预测房价、温度、销售额) | 不用(线性激活) | 目标值是连续实数(负无穷到正无穷),不能用任何函数去限制它的范围。 |
| 二分类(猫/狗、垃圾邮件/正常) | Sigmoid | 输出必须是 0~1 之间的概率,Sigmoid 刚好把实数映射到 (0,1)。 |
| 多分类(手写数字 0~9) | Softmax | 输出必须是各个类别的概率分布,且所有概率加起来等于 1。 |
| 多标签分类(一张图里同时识别猫和狗) | Sigmoid | 每个标签独立判断"有"或"没有",互不干扰,各自输出 0~1 的概率。 |
激活函数补充知识
激活函数的作用是什么 ?
激活函数最核心的使命,就是根据输入值的大小,动态地改变这根线的"反应灵敏度"(斜率)。
非线性激活函数是什么和区别 ?
非线性激活函数 画出来的图像不是一条笔直直线的函数。
- 线性(没激活时)
输入变多少,输出就严格按照固定比例变多少。斜率永远不变。 - 非线性(有激活函数)
输入变多少,输出"翻脸不认人",变化的比例(斜率)会随着输入的大小而动态改变。
激活函数都是非线性的吗 ?
不是。 但在工程实践中,"激活函数"默认指的就是"非线性激活函数",因为线性激活函数在隐藏层等同于"什么都没做"。
- 唯一的"线性激活函数":恒等映射
数学公式:f(x)=xf(x) = xf(x)=x
输入是什么,输出就是什么,原封不动地传递。 - 所有其他激活函数:全部都是非线性
常见的ReLU、Sigmoid、Tanh、Softmax、Leaky ReLU、ELU、Swish、GELU这些全都是非线性的
图像会拐弯或弯曲
为什么激活函数能避免多层退化成单层线性回归?
设两层网络,全部是线性变换(没有激活):
- 第一层:Z1=W1X+b1Z_1=W_1X+b_1Z1=W1X+b1
- 第二层:Z2=W2Z1+b2Z_2=W_2Z_1+b_2Z2=W2Z1+b2
把第一层代入第二层:
Z2=W2(W1X+b1)+b2=(W2W1)⏟W′X+(W2b1+b2)⏟b′=W′X+b′\begin{aligned} Z_2 &= W_2(W_1X+b_1)+b_2 \\ &=\underbrace{(W_2W_1)}{W'}X+\underbrace{(W_2b_1+b_2)}{b'} \\ &=W'X+b' \end{aligned}Z2=W2(W1X+b1)+b2=W′ (W2W1)X+b′ (W2b1+b2)=W′X+b′
两层线性网络合并之后,仍然只是一个单层线性回归 W′X+b′W'X+b'W′X+b′。
加上非线性激活函数之后:
现在给每一层输出套一个非线性激活 σ(⋅)\sigma(\cdot)σ(⋅)(ReLU、Sigmoid、Tanh 都可以):
- 第一层:A1=σ(W1X+b1)A_1=\sigma(W_1X+b_1)A1=σ(W1X+b1)
- 第二层:Z2=W2A1+b2=W2σ(W1X+b1)+b2Z_2=W_2A_1+b_2 = W_2\sigma(W_1X+b_1)+b_2Z2=W2A1+b2=W2σ(W1X+b1)+b2
σ\sigmaσ 是非线性函数,不能把矩阵乘到一起合并成一组 W′,b′W',b'W′,b′。
这时网络就真的是两层了,具备拟合非线性的能力。
初始化参数
核心问题: 神经网络通过反向传播更新参数,初始值选择不当会导致:
- 梯度消失: 梯度趋近于0,深层网络无法学习
- 梯度爆炸: 梯度过大,训练不稳定
- 对称性破坏: 相同初始值导致神经元学习相同特征
零初始化
问题:所有神经元输出相同,梯度相同,无法打破对称性。仅用于偏置(bias)
随机初始化
问题:方差控制不当导致梯度问题。
均匀分布
所有数值在一个区间内出现的概率完全相同。比如从-1到1之间随机取数,每个数被选中的机会均等,不会出现某个数特别偏好。它的特点是有硬性边界,绝对不会超出设定范围。
正态分布
数值围绕中心聚集,呈现"中间多、两头少"的钟形曲线。大部分数值集中在均值附近,但理论上可以出现极端大或极端小的值,只是概率很低。它的特点是无硬性边界,允许异常值存在
Xavier/Glorot 初始化
核心思想:保持前向传播和反向传播的方差一致
公式:
均匀分布:W∼U(−6nin+nout,6nin+nout)W \sim U(-\sqrt{\frac{6}{n_{in}+n_{out}}}, \sqrt{\frac{6}{n_{in}+n_{out}}})W∼U(−nin+nout6 ,nin+nout6 )
正态分布:σ=2nin+nout\sigma = \sqrt{\frac{2}{n_{in}+n_{out}}}σ=nin+nout2
其中:
W :就是你要初始化的权重参数(矩阵里的每一个数字)。
∼ :这个波浪号读作 "服从于" 或 "来自于"。它的意思是:"接下来的规则,决定了 W 是怎么产生的"。
U:这是 Uniform Distribution(均匀分布)的缩写。它的长相就是一个"平板",在指定的范围内,每一个数字被抽到的概率完全一样。
He/Kaiming
核心思想:考虑 ReLU 丢弃一半负值的影响,方差加倍
公式:
正态分布:σ=2nin\sigma = \sqrt{\frac{2}{n_{in}}}σ=nin2
均匀分布:W∼U(−6nin,6nin)W \sim U(-\sqrt{\frac{6}{n_{in}}}, \sqrt{\frac{6}{n_{in}}})W∼U(−nin6 ,nin6 )
补充:
为什么Xavier设置fan_in + fan_out ?
Xavier 取了个平均值,让前后都稳住
输入越多,累加次数越多,单个权重就得越小,否则输出爆炸;
输出越多,反向累加次数越多,单个权重也得越小,否则梯度爆炸。
Xavier 和 he在什么情况下用呢 ?
选 Xavier(Glorot):当你的激活函数是 Sigmoid 或 tanh(双曲正切)时。
选 He(Kaiming / MSRA):当你的激活函数是 ReLU 或 Leaky ReLU 及其变体时。
正态分布和均匀分布的选择 ?
- 如果区间内所有数值等概率、需要严格限定数值范围,不存在最常见的中心值,选择均匀分布;
- 如果大部分数据聚集在中心点,允许少量罕见的极端异常值,没有硬性边界限制,选择正态分布;
- 如果既想要数据集中在中心,又要限制数值的上下限,选择截断正态分布;
- 如果想要频繁出现大量异常值,不要用正态,改用厚尾分布。
损失函数
损失函数为模型训练提供了优化目标。通过反向传播(Backpropagation)计算损失函数对模型参数的梯度,再利用梯度下降(Gradient Descent)等优化算法更新参数,使损失函数值不断减小,从而提升模型性能
- 分类任务 -
多分类任务损失函数
公式:
单样本公式(针对第 i 个样本损失):
Li=−∑c=1Cyi,c⋅ln(y^i,c)L_i = -\sum_{c=1}^{C} y_{i,c} \cdot \ln(\hat{y}_{i,c})Li=−c=1∑Cyi,c⋅ln(y^i,c)
批量公式(N 个样本的平均损失):
Loss=−1N∑i=1N∑c=1Cyi,c⋅ln(y^i,c)\text{Loss} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{c=1}^{C} y_{i,c} \cdot \ln(\hat{y}_{i,c})Loss=−N1i=1∑Nc=1∑Cyi,c⋅ln(y^i,c)
其中:
CCC 是类别总数
yiy_iyi 是真实标签的 one-hot 编码(真实类别为1,其余为0)
y^i\hat{y}_iy^i 是模型经过 Softmax 后的预测概率
例子(计算过程):
真实值样本:
| y1y_1y1 | 0 | 1 | 0 |
| y2y_2y2 | 1 | 0 | 0 |
预测值样本:
| y1y_1y1 | 2 | 7 | 1 |
| y2y_2y2 | 6 | 3 | 1 |
样本1:
样本1的预测值softmax转换:
e2=7.3890;e7=1096.6331;e1=2.7182e^{2} = 7.3890 ; e^{7} = 1096.6331 ; e^{1} = 2.7182e2=7.3890;e7=1096.6331;e1=2.7182
sum=e2+e7+e1=1,106.7403sum = e^{2} + e^{7} + e^{1} = 1,106.7403sum=e2+e7+e1=1,106.7403
Softmax=7.38901,106.7403,1096.63311,106.7403,2.71821,106.7403=0.0066,0.9908,0.0024\text{Softmax} = \\frac{7.3890 }{1,106.7403}, \\frac{1096.6331 }{1,106.7403}, \\frac{2.7182}{1,106.7403} = 0.0066, \\mathbf{0.9908}, 0.0024Softmax=1,106.74037.3890,1,106.74031096.6331,1,106.74032.7182=0.0066,0.9908,0.0024
计算类别和:
0∗ln(0.0066)+1∗ln(0.9908)+0∗ln(0.0024)=−0.00920 * ln(0.0066) + 1 * ln(0.9908) + 0 * ln(0.0024) = -0.00920∗ln(0.0066)+1∗ln(0.9908)+0∗ln(0.0024)=−0.0092
样本2:
样本2的预测值softmax转换:
e6=403.4287;e3=20.0855;e1=2.7182e^{6} = 403.4287; e^{3} = 20.0855; e^{1} = 2.7182e6=403.4287;e3=20.0855;e1=2.7182
sum=e6+e3+e1=426.2324sum = e^{6} + e^{3} + e^{1} = 426.2324sum=e6+e3+e1=426.2324
Softmax=403.4287426.2324,20.0855426.2324,2.7182426.2324=0.9464,0.0471,0.0063\text{Softmax} = \\frac{403.4287}{426.2324}, \\frac{20.0855}{426.2324}, \\frac{2.7182}{426.2324} = \\mathbf{0.9464},0.0471, 0.0063Softmax=426.2324403.4287,426.232420.0855,426.23242.7182=0.9464,0.0471,0.0063
计算类别和:
1∗ln(0.9464)+0∗ln(0.0471)+0∗ln(0.0063)=−0.05501 * ln(0.9464) + 0 * ln(0.0471) + 0 * ln(0.0063) = -0.05501∗ln(0.9464)+0∗ln(0.0471)+0∗ln(0.0063)=−0.0550
计算损失:
(−0.0092+−0.0550)/2=0.0321(−0.0092 + -0.0550) / 2=0.0321(−0.0092+−0.0550)/2=0.0321
二分类交叉熵损失函数
公式:
loss=−1N∑i=1Nyi⋅ln(y\^i)+(1−yi)⋅ln(1−y\^i)\mathcal{loss} = -\frac{1}{N}\sum_{i=1}^{N}\left y_i \\cdot \\ln(\\hat{y}_i) + (1-y_i) \\cdot \\ln(1-\\hat{y}_i) \\rightloss=−N1i=1∑Nyi⋅ln(y\^i)+(1−yi)⋅ln(1−y\^i)
其中:
N :样本总数
yi∈{0,1}y_i \in \{0, 1\}yi∈{0,1}:第 i 个样本的真实标签
y^i∈(0,1)\hat{y}_i \in (0, 1)y^i∈(0,1):模型预测为正类的概率(通常经过 Sigmoid 激活)
例子:
真实值样本:
y1=1;y2=0y_1 = 1;y_2 = 0y1=1;y2=0
预测值样本:
y1=0.7;y2=0.6y_1 = 0.7;y_2 = 0.6y1=0.7;y2=0.6
计算过程:
样本1:ln(0.7)=−0.3566ln(0.7) = -0.3566ln(0.7)=−0.3566
样本2:ln(1−0.6)=−0.5108ln(1-0.6) = -0.5108ln(1−0.6)=−0.5108
最后计算损失:(−0.3566+−0.5108)/2=0.6364(-0.3566+ -0.5108) / 2 = 0.6364(−0.3566+−0.5108)/2=0.6364
- 回归任务 -
MAE(Mean Absolute Error,平均绝对误差)
是一种常用的回归损失函数,它衡量预测值与真实值之间绝对差值的平均值。
公式:
MAE=1n∑i=1n∣yi−y^i∣\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|MAE=n1i=1∑n∣yi−y^i∣
其中:
nnn为样本数量
yiy_iyi为第 i 个样本的真实值
y^i\hat{y}_iy^i为第 i 个样本的预测值
MSE(Mean Squared Error,均方误差)
是机器学习中最常用的损失函数之一。
公式:
LMSE=1n∑i=1n(yi−y^i)2L_{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2LMSE=n1i=1∑n(yi−y^i)2
其中:
yiy_iyi:真实值(标签)
y^i\hat{y}_iy^i:预测值
nnn :样本数量
Smooth L1 Loss (Huber Loss)
最经典的平滑损失,结合了 L1 和 L2 的优点
对于预测值 x 和真实值 y ,Smooth L1 Loss 定义为:
SmoothL1Loss(x,y)=1n∑i=1nzi\text{SmoothL1Loss}(x, y) = \frac{1}{n} \sum_{i=1}^{n} z_iSmoothL1Loss(x,y)=n1∑i=1nzi
其中,ziz_izi的计算方式如下(βββ 是一个超参数,通常设为 1.0):
zi={0.5(xi−yi)2β,if ∣xi−yi∣<β∣xi−yi∣−0.5β,otherwisez_i = \begin{cases} \frac{0.5 (x_i - y_i)^2}{\beta}, & \text{if } |x_i - y_i| < \beta \\ |x_i - y_i| - 0.5 \beta, & \text{otherwise} \end{cases}zi={β0.5(xi−yi)2,∣xi−yi∣−0.5β,if ∣xi−yi∣<βotherwise
超参数 β 的选择:
β 的作用:控制 L2 和 L1 区域的切换点。
β 较大:更多区域使用 L2,接近 MSE,对异常值更敏感。
β 较小:更多区域使用 L1,接近 MAE,对异常值更鲁棒,但可能收敛较慢。
常见设置:在目标检测中,β 通常设为 1.0;在其他任务中,可根据误差分布调整(如 0.1、0.5 等)
参数优化方法
找到最优参数
前向传播: 指的是数据输入到神经网络中,逐层向前传播,一直运算到输出层为止
反向传播: 利用损失函数ERROR值,从后往前,结合梯度下降算法,依次求各个参数的偏导,并进行参数更新
- 梯度下降优化方法 -
梯度下降法是机器学习,尤其是深度学习中,用于最小化损失函数、更新模型参数的最核心优化算法。其核心思想是,沿着损失函数梯度的反方向迭代更新参数,因为这是函数值下降最快的方向
梯度下降类优化器的通用骨架
一个典型的参数更新过程可以概括为:参数 = 参数 - 学习率 × 梯度
指数加权移动平均
公式:
ut=β∗ut−1+(1−β)∗θtu_t = β * u_{t-1} + (1-β) * θ_tut=β∗ut−1+(1−β)∗θt
其中:
θtθ_tθt:当前时刻的观测值(比如当前这一批的梯度)。
ut−1u_{t-1}ut−1:上一时刻的加权平均值(即旧记忆)。
utu_tut :当前时刻更新后的加权平均值(即新记忆)。
βββ:衰减率(超参数),取值范围通常在 0 到 1 之间(常用 0.9 或 0.99)。
动量(Momentum)的梯度下降优化算法
核心思想
累积历史梯度,平滑更新方向,减弱震荡,加速收敛。
引入速度变量utu_tut:
vt=β⋅vt−1−η∇θL(θt−1)v_t = \beta \cdot v_{t-1} - \eta \nabla_\theta \mathcal{L}(\theta_{t-1})vt=β⋅vt−1−η∇θL(θt−1)
θt=θt−1+vt\theta_t = \theta_{t-1} + v_tθt=θt−1+vt
其中:
- θ\thetaθ:待更新参数
- vtv_tvt:第 t 步的动量(速度项)
- ∇θL\nabla_\theta \mathcal{L}∇θL:损失函数关于参数的梯度
- η\etaη:学习率
- β\betaβ:动量系数(常用 (\beta=0.9),控制历史梯度的权重)
Adagrad
Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率优化算法,由 Duchi 等人在 2011 年提出。它的核心思想是:对每个参数使用不同的学习率,频繁更新的参数学习率变小,稀疏更新的参数学习率保持较大。
公式:
gt=∇θL(θt)st=st−1+gt2θt+1=θt−ηst+ϵgt\begin{align*} g_t &= \nabla_\theta \mathcal{L}(\theta_t) \\ s_t &= s_{t-1} + g_t^2 \\ \theta_{t+1} &= \theta_t - \frac{\eta}{\sqrt{s_t+\epsilon}} g_t \end{align*}gtstθt+1=∇θL(θt)=st−1+gt2=θt−st+ϵ ηgt
其中:
- gtg_tgt:当前梯度
- sts_tst:梯度平方累积和(逐参数独立)
- η\etaη:全局初始学习率
- ϵ\epsilonϵ:极小平滑项(如(10^{-8}),防止除 0)
RMSProp
Root Mean Square Propagation,均方根传播
对Adagrad进行优化
核心思想: 对梯度平方做指数加权移动平均(EMA),只保留近期梯度信息,为每个参数单独自适应学习率。
公式:
- 梯度平方的指数移动平均:
vt=β⋅vt−1+(1−β)⋅gt2v_t = \beta \cdot v_{t-1} + (1-\beta)\cdot g_t^2vt=β⋅vt−1+(1−β)⋅gt2 - 参数更新:
θt+1=θt−ηvt+ϵgt\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{v_t+\epsilon}} g_tθt+1=θt−vt+ϵ ηgt
其中:
- gtg_tgt:当前时刻梯度
- β\betaβ:衰减系数,默认 0.9,控制历史梯度保留多少
- η\etaη:全局基础学习率,常用 0.001
- ϵ\epsilonϵ:极小常数((10^{-8})),防止分母为 0
- vtv_tvt:近期梯度平方的滑动均值
Adam
本质是动量 + RMSprop的结合,同时维护梯度的一阶矩(动量)和二阶矩(梯度平方),做自适应学习率。
核心思想
普通 SGD:全局固定学习率,对所有参数更新步长一样,收敛慢。
- Momentum:累积历史梯度(一阶矩),平滑下降方向,冲出局部鞍点
- RMSprop:累积梯度平方(二阶矩),归一化梯度,自适应每个参数学习率
Adam 同时保存两者:
- mtm_tmt:梯度的一阶矩(均值,动量项)
- vtv_tvt:梯度的二阶矩(未中心化方差)
公式 :
设:
- gtg_tgt:第 t 步损失对参数的梯度
- β1\beta_1β1:一阶矩衰减系数(默认 0.9)
- β2\beta_2β2:二阶矩衰减系数(默认 0.999)
- η\etaη:初始学习率(常用(10^{-3}=0.001))
- ϵ\epsilonϵ:防止除 0,默认(10^{-8})
- 更新一阶矩
mt=β1mt−1+(1−β1)gtm_t = \beta_1 m_{t-1} + (1-\beta_1)g_tmt=β1mt−1+(1−β1)gt - 更新二阶矩
vt=β2vt−1+(1−β2)gt2v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2vt=β2vt−1+(1−β2)gt2 - 偏差校正 (因为初始(m,v)初始为 0,前期估计有偏)
m^t=mt1−β1t,v^t=vt1−β2t\hat m_t = \frac{m_t}{1-\beta_1^t},\quad \hat v_t = \frac{v_t}{1-\beta_2^t}m^t=1−β1tmt,v^t=1−β2tvt - 参数更新
θt+1=θt−η⋅m^tv^t+ϵ\theta_{t+1} = \theta_t - \eta \cdot \frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon}θt+1=θt−η⋅v^t +ϵm^t
直观理解:步长 = 学习率 ×(平滑梯度 / 梯度波动开根号)
梯度震荡大的参数,分母大 → 更新步长变小;梯度稳定的参数,步长更大。
- 学习率衰减策略
- 等间隔学习率衰减
- 指定间隔学习率衰减
- 指数学习率衰减
- 正则化方法
核心目标:减少过拟合,提升模型泛化能力 。过拟合表现:训练集损失很低、精度很高,但测试集效果差。
正则化本质:对模型施加约束,降低模型复杂度,不要让模型死记训练数据。
Dropout
训练阶段:每轮前向传播时,随机把一部分神经元输出置 0;测试阶段不随机丢弃,输出缩放。(先失活,再缩放)
原理 :防止神经元之间过度协同依赖,相当于同时训练很多个子网络,做模型集成。
公式 :
伯努利分布:
ri∼{1概率=1−pdrop0概率=pdropr_i \sim \begin{cases} 1 & \text{概率}=1-p_{\text{drop}} \\ 0 & \text{概率}=p_{\text{drop}} \end{cases}ri∼{10概率=1−pdrop概率=pdrop
缩放:
x~i=xi⋅ri1−pdrop\tilde x_i = \frac{x_i \cdot r_i}{1-p_{\text{drop}}}x~i=1−pdropxi⋅ri
Batch Normalization(BN)
对一个 batch 内的特征做标准化,再缩放平移。
作用 :缓解内部协变量偏移;自带轻微正则效果 ,batch 越小噪声越强,正则越强。
注意 :BN 不是专门正则,不能完全替代 Dropout / 权重衰减。
公式:
μB=1m∑i=1mxibatch均值\mu_B = \frac1m\sum_{i=1}^m x_i \quad \text{batch均值}μB=m1∑i=1mxibatch均值
σB2=1m∑i=1m(xi−μB)2batch方差\sigma_B^2 = \frac1m\sum_{i=1}^m (x_i-\mu_B)^2 \quad \text{batch方差}σB2=m1∑i=1m(xi−μB)2batch方差
x^i=xi−μBσB2+ϵ标准化 ε防止除以0\hat x_i = \frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} \quad \text{标准化 ε防止除以0}x^i=σB2+ϵ xi−μB标准化 ε防止除以0
yi=γx^i+β缩放+平移,y_i = \gamma \hat x_i + \beta \quad \text{缩放+平移,}yi=γx^i+β缩放+平移,γ\gammaγ,β\betaβ是可学习参数\text{是可学习参数}是可学习参数
神经网络推导(异或问题)
神经网络结构为:
2 -> 4 -> 3 -> 1