网络优化(1)

目录

前言

一、网络优化

1.1低维非凸优化

1.2高维非凸优化

二、优化算法

2.1小批量梯度下降

2.2学习率衰减

2.3AdaGrad

2.4动量法

2.5Adam算法


前言

虽然神经网络具有非常强的表达能力,但是当应用神经网络模型到机器学习时两大类问题:

(1) 优化问题:深度神经网络的优化十分困难。首先,神经网络的损失函数是一个高度非凸函数,找到全局最优解通常比较困难。

其次,深度神经网络的参数量一般十分巨大,训练数据也比较大,因此也无法使用计算代价很高的二阶优化方法, 而一阶优化方法的训练效率通常比较低。此外,深度神经网络存在梯度消失或爆 炸问题,导致基于梯度的优化方法经常失效。

(2) 泛化问题:由于深度神经网络的复杂度比较高,并且拟合能力很强,很容易在训练集上产生过拟合。因此在训练深度神经网络时,同时也需要通过一定 的正则化方法来改进网络的泛化能力。

一些相关基础概念已在 《凸优化(Quasi convex optimization)与梯度下降(Grad descent)》中描述。

一、网络优化

网络优化是指我们通过一些方法改进网络的一些内容,比如模型结构、参数等;深层的神经网络往往损失函数是非凸的,而对其优化就是一个非凸优化的问题,这给我们带来许多难度。

1.1低维非凸优化

低维优化问题可能会使我们陷入局部最优点,这些点是极值点,但却不是最值点;

例如:下图中的函数有许多向下的凹陷,每个凹陷的最低点导数值为0,且在左右一段领域中是最小值点,但却不是函数在定义域上的最小值点,这就是我们说的局部最小值,也是损失函数的局部最优点。 

1.2高维非凸优化

而在高维空间中,我们的问题便不是面对局部最优了,而是试着不陷入鞍点(Saddle Point)。鞍点的阶梯度为 0,但是二阶梯度的黑塞(Hessian) 矩阵不是半正定矩阵,他并非最值点。

例如:下图中的红点其中一个维度上是最大值,而在另一个维度上是最小值。

在高维空间中,想在每一个维度都达到最优是一件困难的事,如果我们在某一维度上达到最优的概率p=0.9 ,假设我们有10000维的参数,在整个参数空间中驻点是局部最优点的概率为 p ^{10,000},这种可能性非常小几乎为0;所以说,高维空间中大部分驻点都是鞍点。

二、优化算法

我们神经网络常用的参数优化方式时梯度下降法。

梯度下降指使得参数在梯度的负方向更新一个步长的单位,其中的L是损失。 

w\leftarrow w-\eta \frac{\partial L}{\partial w}

随着参数的更新,损失不断的减小,其意义为让参数朝着损失减小的方向进行更新。

 

2.1小批量梯度下降

如果我们将训练集所有的样本的损失L=\frac{1}{N}\sum_{i=1}^{N}L_{i}加起来作为损失进行梯度下降,该方法称为全局梯度下降(Full gradient descent)

全局梯度下降每进行一个epoch都要计算一次所有样本的损失,消耗的资源十分巨大。

因此,我们计算损失时并不会选取整个训练集,而是将训练集分成多个批次(batch),每个批次有若干样本,每个批次的样本数量称之为批量(batch size);每训练一个批次成为完成一次迭代(Iteration),当训练集所有的样本都完成了一次迭代后我们成为完成了一个回合(epoch),对应公式:

epoch=\frac{N}{batch size}\times iteration

计算损失时,我们将批次中每个样本分别计算损失再相加,除以批量之后得到一个损失进行梯度下降,这就是我们常使用的小批量梯度下降法(Mini-Batch Gradient Descent)

对于批量大小我们该如何选择呢?

当批量为b,梯度的均值为\mu,方差为\sigma

\frac{\partial L}{\partial w}=\frac{ \frac{1}{b}\partial \sum_{i=1}^{b}L_{i}}{\partial w}= \frac{1}{b}\sum_{i=1}^{b}\frac{\partial L_{i}}{\partial w},该批量的均值仍为\mu,但方差就变成了\frac{1}{\sqrt{b}}\sigma,当批量越大时,小批量就越接近整体,损失的方差便越小;反之,批量越小时,损失的方差越大。

当损失的方差过大时,训练越不容易收敛;而损失方差过小时,训练较为稳定,但方差小的同时意味着扰动噪声小,我们希望有一个小扰动助于我们逃离鞍点。

所以批大小需要根据数据集进行选择;下图是在MNIST数据集上批量大小对损失下降的影响;

左图中可以看出,批量大小越大,下降效果越明显,并且下降曲线越平滑;但从右图来看,如果按整个数据集上的回合(Epoch)数来说,则是批量样本数越小,下降效果越明显。适当小的批量会导致更快的收敛。

 

2.2学习率衰减

从经验来看,在训练初期使用较大的学习率可以让模型更快收敛,在收敛点附近使用较小学习率可以避免损失来混震荡。

我们希望学习率可以随着训练周期不断地减小,通过学习率衰减(Learning Rate Decay)来控制学习率。

学习率衰减有几种常见的方法,假设初始学习率为\alpha_{0}

1)分段常数衰减(Piecewise Constant Decay):

每经过T_{1} , T_{2} , ... , T_{m} 次迭代将学习率衰减为原来的 \beta_{1},\beta_{2},...,\beta_{m} 倍;

2)逆时衰减(Inverse Time Decay):

\alpha_{t}=\alpha_{0}\frac{1}{1+\beta t}

其中\beta为衰减率

3)指数衰减(Exponential Decay):

\alpha_{t}=\alpha_{0}e^{(-\beta t)}

其中\beta为衰减率

4)余弦衰减(Cosine Decay):

\alpha_{t}=\frac{1}{2}\alpha_{0}(1+cos(\frac{t\pi }{T}))

其中T为总的迭代次数

设定初始学习率\alpha_{0}=1,绘制学习率衰减图像

学习率衰减会使得学习率随着随着迭代次数增加而减少,所以务必要注重参数的选择,以免学习率衰减趋于0了离收敛还有很大差距。笔者建议在选择学习率衰减之前可以先观察损失的变化曲线,如果损失在训练某个时期来回震荡,可以设置参数使得学习率在这时衰减到一定值了。

2.3AdaGrad

在我们参数更新的时候,参数有些维度的梯度很大,而有些维度的梯度很小,如果我们使用相同的步长可能导致各个维度的收敛速度各不相同;

那么我们是否可以通过一定条件的约束,使得大梯度的参数更新少一点,小梯度的参数更新多一点呢?

AdaGrad算法(Adaptive Gradient Algorithm),每次迭代时自适应地调整每个参数的学习率。

先计算每个参数平方的累计值:

G_{t}=\sum_{\tau =1}^{t}g_{\tau}\odot g_{\tau}

其中\odot为按元素乘积,例如:\alpha=\begin{bmatrix} a\\b \\c \end{bmatrix}\alpha\odot \alpha=\begin{bmatrix} a^{2}\\ b^{2} \\ c^{2} \end{bmatrix}g_{\tau}是第\tau次迭代的梯度

AdaGrad算法的一次参数更新差值为:

\Delta \theta_{t}=-\frac{\alpha}{\sqrt{G_t+\varepsilon }}\odot g_{t}

其中\varepsilon可以在G_{t}=0的时候防止除法失效,通常取e^{-7}e^{-10};同时上式的加和开方都是按元素操作

2.4动量法

我们会从过往的经历学到一些东西;积极的经历会使我们更加勇敢、激进一些;而挫败的经历会使我们畏手畏脚,变得保守一些。

说到底,我们的决策会受到过去经验的影响。我们参数更新也用到这一思想,如果过去的梯度一直都是朝着某个方向,我们就可以在整个方向更新多一些,变得更‘激进’一些;反之,我们需要变得‘保守’一些。

\Delta \theta_{t}=\rho \Delta \theta_{t-1}-\alpha g_{t}=-\alpha(g_{t}+\rho g_{t-1}+\rho^{2}g_{t-2}+...\rho^{t-1}g_{1}])

其中\Delta \theta_{t}使第t此更新的值,\rho是动量因子,通常取0.9,\alpha是学习率

我们从公式中解读到:当前参数更新值受到历史梯度的影响,且这些历史越古老,对当前更新的值影响越小

2.5Adam算法

Adam算法(Adaptive Moment Estimation Algorithm)使用动量作为参数更新方向,同时自适应调整学习率。

M_{t}=\beta_{1} M_{t-1}+(1-\beta_{1})g_{t}

G_{t}=\beta_{2}G_{t-1}+(1-\beta_{2})g_{t} \odot g_{t}

其中 \beta_{1}\beta_{2}分别为两个移动平均的衰减率,通常取值为\beta_{1}= 0.9,\beta_{2}= 0.99。我们可以把 M_{t} 和G_{t} 分别看作梯度的均值(一阶矩)和未减去均值的方差(二阶矩)。

 假设 M_{0}=0,G_{0}=0 ,那么在迭代初期M_{t}G_{t} 的值会比真实的均值和方差 要小。特别是当\beta_{1}\beta_{2}都接近于1时,偏差会很大;因此,需要对偏差进行修正。

 \widehat{M}_{t}=\frac{M_{t}}{1-{\beta_{1}}^{t}}

\widehat{G}_{t}=\frac{G_{t}}{1-{\beta_{2}}^{t}}

t次更新值为

\Delta \theta_{t}=-\frac{\alpha}{\sqrt{\widehat{G}_{t}+\varepsilon }}\widehat{M}_{t}

其中\alpha是学习率

Adam算法思想是同时调整学习率和梯度,是动量法与RMSprop(类AdaGrad)的结合

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值