【Python · Pytorch】人工神经网络 ANN(中)

时间:2024-10-31 07:06:19

【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 ∗=[w1​w2​​],已知 ∇ 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:RnR的局部最小值的近似方法。

线搜索近似首先找到一个使目标函数 f f f下降的方向,然后计算 x x x应沿着这个方向移动的步长。

下降方向可通过多种方法计算:梯度下降法牛顿法拟牛顿法 等。

线搜索准则:Armijo准则Goldstein准则Wolfe准则非单调线搜索准则 (Grippo准则)

6.1.2 微分 & 导数

假设存在函数 f : R → R f: \mathbb{R} \rightarrow \mathbb{R} f:RR,其输入和输出均为标量。设 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)=h0limhf(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} xif,其中 ∂ \partial 表示偏导符号, f f f表示函数, x i x_i xi表示自变量。

偏导数计算方法与一元函数导数类似,只需将其他变量视为常数,对某个变量求导即可。

在深度学习中,通常需要用到多变量,将导数思想推广至多元函数(Multivariate Function)

假设存在函数 f : R n → R f: \mathbb{R}^n \rightarrow \mathbb{R} f:RnR,其输入是一个 n n n维向量 x ⃗ = [ x 1 x 2 ⋮ x n ] \vec{x}=\begin{bmatrix}x_1\\x_2\\ \vdots \\x_n\end{bmatrix} x = x1x2xn ,其输出是一个标量。

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} xiy=h0limhf(x1,,xi1,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:RnRm,其由多个函数组成:
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