一. 优化算法
1. 随机梯度下降法(SGD
)
表达式:
x
t
+
1
=
x
t
−
α
∇
f
(
x
t
)
x_{t+1} = x_t - \alpha\nabla f(x_t)
xt+1=xt−α∇f(xt)
缺点:
- 如果损失函数对某一维的参数敏感,而对另一维的参数不敏感,那么容易出现z-形优化路径。
- 会陷在局部最小值或鞍点附近。对于高维参数空间,出现鞍点的情形要远频繁于出现局部最小值的情形。
- 小批量数据使得优化方向受噪声影响严重,导致行进到最优解的路径会很长。
2. 带动量的随机梯度下降法(SGD+Momentum
)
表达式:
v
t
+
1
=
ρ
v
t
+
∇
f
(
x
t
)
,
x
t
+
1
=
x
t
−
α
v
t
+
1
v_{t+1} = \rho v_t + \nabla f(x_t), \quad x_{t+1} = x_t - \alpha v_{t+1}
vt+1=ρvt+∇f(xt),xt+1=xt−αvt+1
即定义一个随时间变化的速度,每次计算的梯度视为速度的修正(动量)。这样有助于克服梯度计算过程中一些噪声的影响。
Nesterov Momentum
:
v t + 1 = ρ v t − α ∇ f ( x t + ρ v t ) , x t + 1 = x t + v t + 1 v_{t+1} = \rho v_t - \alpha \nabla f(x_t+\rho v_t), \quad x_{t+1} = x_t + v_{t+1} vt+1=ρvt−α∇f(xt+ρvt),xt+1=xt+vt+1
即在速度方向上前进一步,然后计算梯度,将这里的梯度和刚才的速度加权求和作为前进方向。基本思想是:如果速度方向出现了一点偏差,那么前进后的梯度方向会校正速度方向。
3. AdaGrad
与RMSProp
AdaGrad
维持一个对各个维度的梯度模值的统计,然后在更新参数时,用这个取规范化梯度。这样可以解决梯度向量的条件数恶化的问题。但随着学习的进行,后续更新会越来越慢。
RMSProp
将累积的梯度模值,替换成线性加权的梯度模值。
4. Adam
Adam
整合了动量法和RMSProp方法。但还有个问题:在最起初的步骤,由于线性加权中的权值较大一项被初始化为0,则在规范化梯度时,会出现除以一个小量的现象。Adam
会对所用的两个参数进行偏置校正。
v t + 1 = [ β 1 v t + ( 1 − β 1 ) ∇ f ( x t ) ] / ( 1 − β 1 t ) m t + 1 = [ β 2 m t + ( 1 − β 2 ) ∇ f ( x t ) ⊙ ∇ f ( x t ) ] / ( 1 − β 2 t ) x t + 1 = x t − α v t + 1 / ( m t + 1 + e p s ) \begin{array}{lll} v_{t+1} &=& \left[\beta_1 v_t + (1-\beta_1)\nabla f(x_t)\right]/(1-\beta_1^t)\\ \\ m_{t+1} &=& \left[\beta_2 m_t + (1-\beta_2)\nabla f(x_t)\odot\nabla f(x_t)\right]/(1-\beta_2^t)\\ \\ x_{t+1} &=& x_t - \alpha v_{t+1}/(\sqrt{m_{t+1}} + eps) \end{array} vt+1mt+1xt+1===[β1vt+(1−β1)∇f(xt)]/(1−β1t)[β2mt+(1−β2)∇f(xt)⊙∇f(xt)]/(1−β2t)xt−αvt+1/(mt+1+eps)
5. 二阶优化方法
- 将损失函数展开到二阶项,然后根据二次型表达,直接求出此时最小值对应的参数。
- 需要求解
Hessian
矩阵的逆。一个近似方法是Quasi-Newton
方法(最流行的是BGFS
),适用于风格迁移这种随机性很小、参数不多的应用场景。
二. 学习速率衰减
- 阶梯式衰减:以某个常值遍历几次数据集后进行衰减。
- 指数式衰减: α = α 0 e − k t \alpha = \alpha_0e^{-kt} α=α0e−kt。
- 幂次衰减: α = α 0 / ( 1 + k t ) \alpha = \alpha_0/(1+kt) α=α0/(1+kt)
三. 集成学习
- 训练多个模型,在预测时集成相应输出结果。
- 还可以保留训练过程中,模型陷入各个局部最优解时的参数快照。
四. 正则化
正则化的一般模式:在训练阶段,给网络添加一些随机性,避免网络对训练数据的拟合过度。在测试阶段,则期望这种随机性被去除,从而提高泛化能力。
1. Dropout
策略
- 按一定比例,随机地将某些神经元置0。
- 在卷积层应用
Dropout
时,是将某些卷积核所输出的特征层全部置0。 - 在预测时,不进行置零操作,而是将输出乘上训练时置零的概率。或是为了预测时的计算效率,用训练时的除以相应概率。(这样做的基本想法是使得预测时产生的数据的特征和训练时的一样。一个简单的推导是在穷举的情况下进行一下平均。)
- 由于每次只能更新部分参数,因此采用
Dropout
会使得训练过程变长。 Dropout
起到正则化作用的一个解释:这种做法使得模型能够学习到关于数据的特征的冗余表达,从而降低相关联的特征对决策的影响。(即避免模型学到了训练数据的显著特征,出现过拟合,而不再进行学习或不能跳出局部最优解。)Dropout
起到正则化作用的另一个解释:相当于一个集成学习的过程。
2. 数据增强
- 图像裁剪。
- 图像几何变换。
- 颜色抖动。
五. 迁移学习
根据所拥有的数据集的大小,决定重新训练的层数。