【Python · Pytorch】人工神经网络 ANN(中)
- 6. 反向传播
- 6.1 梯度下降法
- 6.1.1 线搜索方法
- 6.1.2 微分 & 导数
- 6.1.3 偏导数
- 6.1.4 Jacobian矩阵
- 6.1.5 梯度 & 梯度下降法
- 按维度介绍
- 6.1.6 面临挑战
- 平原现象 & 振荡现象
- 局部最小值
- 鞍点
- 梯度消失
- 梯度爆炸
- 6.1.7 方向导数
- 6.2 牛顿法
- 6.3 拟牛顿法
- 6.3.1 DFP算法
- 6.3.2 BFGS算法
- 6.3.3 Broyden族方法
- 6.4 共轭梯度法
- 6.5 动量相关算法
- 6.5.1 动量法
- 6.5.2 Nesterov动量法
- 6.6. 自适应学习率算法
- 6.6.1 AdaGrad算法
- 6.6.2 RMSprop算法
- 6.6.3 Adam算法
- 6.6.4 Nadam算法
- 6.7 学习率调整
- 6.7.1 学习率预热
- 6.7.2 学习率衰减
- 分段常数衰减 (Piecewise Constant Decay)
- 逆时衰减 (Inverse Time Decay)
- 指数衰减 (Exponential Decay)
- 自然指数衰减 (Natural Exponential Decay)
- 余弦衰减 (Cosine Decay)
- 6.7.3 周期性学习率调整
- 循环学习率 (Cyclic Learning Rate)
- 6.7.4 带热重启的随机梯度下降 (Stochastic Gradient Descent with Warm Restart)
- 带热重启的余弦衰减
- 6.7.5 其他学习率调整方法
- 6.7.6 自适应调整学习率
- 6.8 其他算法
- 6.8.1 信赖域算法
- 6.8.2 坐标轴交替下降算法
- 6.8.3 Sophia 算法
- 7. 模型评估
- 7.1 模型容量
- 7.2 拟合能力
- 7.3 泛化能力
- 7.3.1 交叉验证
- K折交叉验证
- 数据集划分
- 7.3.2 没有免费午餐定理
- 7.3 机器学习准则
- 7.3.1 期望风险
- 7.3.2 经验风险
- 7.3.3 结构风险
- 7.3.4 总结
- 7.4 参数范数正则化
- 7.4.1 L1正则化(权值稀疏)
- 7.4.2 L2正则化(权重衰减)
- 假设 w ⃗ ∗ = [ w 1 w 2 ] \vec{w}^{*}=\begin{bmatrix} w_1 \\ w_2 \end{bmatrix} w ∗=[w1w2],已知 ∇ w ∗ J ( w ⃗ ∗ ) = 0 \nabla_{{w}^{*}}J(\vec{w}^{*})=0 ∇w∗J(w ∗)=0,即 ∂ J ∂ w 1 = ∂ J ∂ w 2 = 0 \frac{\partial J}{\partial w_1}=\frac{\partial J}{\partial w_2}=0 ∂w1∂J=∂w2∂J=0,可得 $ \frac{\partial^2J}{\partial w_1\partial w_2}= \frac{\partial^2J}{\partial w_2\partial w_1}=0$ $$ H= \begin{bmatrix} \frac{\partial^2J}{\partial w^2_1} & \frac{\partial^2J}{\partial w_1\partial w_2} \\ \frac{\partial^2J}{\partial w_2\partial w_1} & \frac{\partial^2J}{\partial w^2_2} \end{bmatrix}
- 7.4.3 弹性网络正则化
- 7.5 提前停止
- 7.6 Dropout 丢弃法
- 7.7 数据增强
- 7.8 标签平滑
- 7.9 模型超参数选择
- 7.9.1 手动调整超参数
- 7.9.3 网格搜索
- 7.9.4 随机搜索
- 7.9.5 贝叶斯搜索
- 时序模型优化
- 7.9.6 动态资源分布
- 7.9.7 神经架构搜索
- 8. 机器学习范式
- 8.1 监督学习
- 8.2 无监督学习
- 8.3 强化学习
- 8.4 其他范式
6. 反向传播
好的学习工具:https://distill.pun/2017/momentum
前向传播:计算误差(找到差距)+ 反向传播(缩短差距)
反向传播:传递偏差信息,“贡献”程度思想 → 哪种输入特征对输出帮助较大
6.1 梯度下降法
6.1.1 线搜索方法
线搜索:一种寻找目标函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:Rn→R的局部最小值的近似方法。
线搜索近似首先找到一个使目标函数 f f f下降的方向,然后计算 x x x应沿着这个方向移动的步长。
下降方向可通过多种方法计算:梯度下降法、牛顿法、拟牛顿法 等。
线搜索准则:Armijo准则、Goldstein准则、Wolfe准则、非单调线搜索准则 (Grippo准则)
6.1.2 微分 & 导数
假设存在函数
f
:
R
→
R
f: \mathbb{R} \rightarrow \mathbb{R}
f:R→R,其输入和输出均为标量。设
y
=
f
(
x
)
y = f(x)
y=f(x),若其导数存在,则:
f
′
(
x
)
=
d
y
d
x
=
d
f
(
x
)
d
x
=
lim
h
→
0
f
(
x
+
h
)
−
f
(
x
)
h
f'(x)=\frac{d y}{d x}=\frac{d f(x)}{d x}=\lim_{h \rightarrow 0} \frac{f(x+h)-f(x)}{h}
f′(x)=dxdy=dxdf(x)=h→0limhf(x+h)−f(x)
若
f
′
(
a
)
f'(a)
f′(a)存在,则称f在a处可微(differentiable)
6.1.3 偏导数
偏导数:多元函数在某一点上针对某个变量所求的导数。
对于函数 f ( x 1 , x 2 , … , x n ) f(x_1, x_2,\dots,x_n) f(x1,x2,…,xn),它的偏导数可以表示为 ∂ f ∂ x i \frac{\partial f}{\partial x_i} ∂xi∂f,其中 ∂ \partial ∂表示偏导符号, f f f表示函数, x i x_i xi表示自变量。
偏导数计算方法与一元函数导数类似,只需将其他变量视为常数,对某个变量求导即可。
在深度学习中,通常需要用到多变量,将导数思想推广至多元函数(Multivariate Function)
假设存在函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:Rn→R,其输入是一个 n n n维向量 x ⃗ = [ x 1 x 2 ⋮ x n ] \vec{x}=\begin{bmatrix}x_1\\x_2\\ \vdots \\x_n\end{bmatrix} x= x1x2⋮xn ,其输出是一个标量。
设
y
=
f
(
x
1
,
x
2
,
⋯
,
x
n
)
y = f(x_1,x_2,\cdots,x_n)
y=f(x1,x2,⋯,xn),则y关于第i个参数
x
i
x_i
xi的偏导数(Partial Derivative)为:
∂
y
∂
x
i
=
lim
h
→
0
f
(
x
1
,
⋯
,
x
i
−
1
,
x
i
+
h
,
x
i
+
1
,
⋯
,
x
n
)
−
f
(
x
1
,
⋯
,
x
i
,
⋯
,
x
n
)
h
\frac{\partial y}{\partial x_i}=\lim_{h→0} \frac{f(x_1, \cdots, x_{i-1}, x_i+h,x_{i+1},\cdots, x_n)-f(x_1,\cdots,x_i,\cdots,x_n)}{h}
∂xi∂y=h→0limhf(x1,⋯,xi−1,xi+h,xi+1,⋯,xn)−f(x1,⋯,xi,⋯,xn)
6.1.4 Jacobian矩阵
Jacobian矩阵,中文译名为雅可比矩阵。
假设存在函数
f
:
R
n
→
R
m
\boldsymbol{f}:\mathbb{R^n}→\mathbb{R^m}
f:Rn→Rm,其由多个函数组成:
f
=
[
f
1
(
x
1
,
x
2
,
⋯
,
x
n
)
f
2
(
x
1
,
x
2
,
⋯
,
x
n
)
⋮
f
m
(
x
1
,
x
2
,
⋯
,
x
n
)
]
\boldsymbol{f} = \begin{bmatrix} f_{1}(x_1, x_2, \cdots, x_n)\\ f_{2}(x_1, x_2, \cdots, x_n)\\ \vdots \\ f_{m}(x_1, x_2, \cdots, x_n)\\ \end{bmatrix}
f=
f1(x1,x