概念 | 寻找能使损失函数最小的参数矩阵w的过程 |
主体思路 | 迭代优化 |
常见方法 | 梯度下降,SGD,Momentum, NAG,AdaGrad,RMsprop,Adam… |
如 torch下: |
torch.optim.Adam
目的: 加快收敛速度
常用方法:
1)先用一个大的值,等损失不在下降再用一个小的值
2)为每一个参数使用不同的学习率
3)或使用二阶导数
过程:
迭代:指一个周期中小批量的数目
小批量大小:超参数 可以是 32,64,128 (一般为2的幂)
用当前位置的负梯度方向作为搜索方向
w ← w + η w w\leftarrow w+\eta w w←w+ηw
w 梯度来自小批量
缺点:
为随机梯度下降增加一个动量项
将梯度估计值加到原来速度上,沿着速度方向走而不是梯度方向
v t = ρ v t − 1 + η ∇ E ( w ) v_t=\rho v_{t-1}+\eta \nabla E(w) vt=ρvt−1+η∇E(w) w = w − v t w=w-v_t w=w−vt
v t v_t vt、 v t − 1 v_{t-1} vt−1分别表示本次和上次参数更新的速度,E损失函数, ρ \rho ρ为摩擦常数,通常设置为0.9,会使当前速度衰减。
动量计算前瞻梯度,并将其与速度混合
v t = ρ v t − 1 + η ∇ E ( w − ρ N t − 1 ) v_t=\rho v_{t-1}+\eta\nabla E(w-\rho N_{t-1}) vt=ρvt−1+η∇E(w−ρNt−1)
可减少无用迭代,把梯度计算放在对参数施加当前速度之后
对每一批数据进行归一化处理,通常放在激活函数前
做法:让数据通过一个模块进行预处理,使其服从标准高斯分布,实现层面在全连接或卷积层与激活函数之间添加一个批归一化层,也叫BN层。
输入:小批量输入 x = { x 1 , x 2 . . . x n } x=\{x_1,x_2...x_n\} x={x1,x2...xn}
输出:BN层输出 y i y_i yi
μ = 1 n ∑ i = 1 n x i \mu=\frac1n \sum_{i=1}^nx_i μ=n1∑i=1nxi — 均值
σ 2 = 1 n ∑ i = 1 n ( x i − y i ) 2 \sigma^2=\frac1n\sum_{i=1}^n(x_i-y_i)^2 σ2=n1∑i=1n(xi−yi)2 — 方差
x ^ i = x i − μ σ 2 − ϵ \hat x_i=\frac{x_i-\mu}{\sqrt{\sigma^2-\epsilon}} x^i=σ2−ϵxi−μ — 归一化
y i = γ x ^ i + β = B N γ , β ( x i ) y_i=\gamma \hat x_i+\beta=BN_{\gamma,\beta}(x_i) yi=γx^i+β=BNγ,β(xi)
ϵ \epsilon ϵ为避免除数为0使用的微小整数, γ \gamma γ尺度因子, β \beta β平衡因子,训练自己学到
当 γ \gamma γ= σ \sigma σ,且 β \beta β= μ \mu μ时,BN层无效
BN层作用:
①增加了增个网络的梯度流
②支持更高的学习率,可以更快的训练网络
③减少算法对合理初始化的依赖性
④正则化作用
不适定问题,指解不存在或解不唯一,或解的条件多,求解不适定问题方法
用一组与原不适定问题相邻近的适定问题的解去逼近原问题的解,这种方法叫正则化
过拟合:过于完美的训练数据反而不能有效的预测新样本
常用正则化方法:
①为损失函数增加正则化惩罚项 R ( w ) R(w) R(w)
②数据增强
③随机失活
④模型集成
⑤其他,弹性正则化,随机失联,最大范数约束等
L ′ = L ( f ( x , w ) , Y ) + λ R ( w ) L'=L(f(x,w),Y)+\lambda R(w) L′=L(f(x,w),Y)+λR(w)
其中 λ \lambda λ:正则化强度
L 1 L_1 L1正则化, R ( w ) = ∑ k ∑ l ∣ W k , l ∣ R(w)=\sum_k\sum_l|W_{k,l}| R(w)=∑k∑l∣Wk,l∣其中 W第l层中第k个参数
L 2 L_2 L2正则化, R ( w ) = ∑ k ∑ l W k , l 2 R(w)=\sum_k\sum_lW_{k,l}^2 R(w)=∑k∑lWk,l2
L 1 L_1 L1会使得网络稀疏,W中一些参数为0
L 2 L_2 L2通过对所有参数平方来抑制大数值的参数,对大参数给予高惩罚,会使参数矩阵w取值更平均。
水平翻转、随机选择图像、截图、颜色抖动、随机旋转、伸缩变换
每次训练只有一部分发挥作用,减少了每次训练过程中涉及参数数目,降低了训练时的网络表达能力,只用于训练过程中
分别训练几个独立的神经网络,在测试时平均所有神经网络的预测结果。可将准确率提升几个百分点
方法:
a. 训练过程中保持神经网络的多个快照集成
b. 不同的初始化集成
c. 训练过程中不同时间点的集成