深度学习超参数简单理解(转)
说到这些参数就会想到Stochastic Gradient Descent (SGD)!其实这些参数在caffe.proto中 对caffe网络中出现的各项参数做了详细的解释。
Learning Rate
学习率决定了权值更新的速度,设置得太大会使结果超过最优值,太小会使下降速度过慢。仅靠人为干预调整参数需要不断修改学习率,因此后面3种参数都是基于自适应的思路提出的解决方案。后面3中参数分别为:Weight Decay 权值衰减,Momentum 动量和Learning Rate Decay 学习率衰减。
![\omega_{i}\leftarrow \omega_{i} - \eta \frac{\partial E}{\partial \omega_{i}}](https://i-blog.csdnimg.cn/blog_migrate/213fdd374be0c4d0c7479fb1e6d6874f.png)
![\omega_{i}\leftarrow m\cdot \omega_{i} - \eta \frac{\partial E}{\partial \omega_{i}}](https://i-blog.csdnimg.cn/blog_migrate/60e722ee5e613fc596dba81f56878212.png)
Weight decay
在实际应用中,为了避免网络的过拟合,必须对价值函数(Cost function)加入一些正则项,在SGD中加入这一正则项对这个Cost function进行规范化:
![\omega_{i}\leftarrow \omega_{i} - \eta \frac{\partial E}{\partial \omega_{i}} - \eta \lambda \omega _{i}](https://i-blog.csdnimg.cn/blog_migrate/213fdd374be0c4d0c7479fb1e6d6874f.png-+%5Ceta+%5Clambda+%5Comega+_%7Bi%7D+)
上面这个公式基本思想就是减小不重要的参数对最后结果的影响,网络中有用的权重则不会收到Weight decay影响。
在机器学习或者模式识别中,会出现overfitting,而当网络逐渐overfitting时网络权值逐渐变大,因此,为了避免出现overfitting,会给误差函数添加一个惩罚项,常用的惩罚项是所有权重的平方乘以一个衰减常量之和。其用来惩罚大的权值。
Momentum
动量来源于牛顿定律,基本思想是为了找到最优加入“惯性”的影响,当误差曲面中存在平坦区域,SGD就可以更快的学习。
![\omega_{i}\leftarrow m\cdot \omega_{i} - \eta \frac{\partial E}{\partial \omega_{i}}](https://i-blog.csdnimg.cn/blog_migrate/60e722ee5e613fc596dba81f56878212.png)
Learning Rate Decay
该方法是为了提高SGD寻优能力,具体就是每次迭代的时候减少学习率的大小。
![\eta \left( s \right) =\frac{\eta _{0} }{1+s\cdot \eta _{n}}](https://i-blog.csdnimg.cn/blog_migrate/dfaef5b02091d1299edd6d5886398aca.png)
点击这里:Difference between neural net weight decay and learning rate
weight decay(权值衰减) 的使用既不是为了提高收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。
momentum 是梯度下降法中一种常用的加速技术。对于一般的SGD,其表达式为
![x \leftarrow x-\alpha \ast dx](https://i-blog.csdnimg.cn/blog_migrate/f28ecf7f24f9fd569c04b53748585c1a.png)
![x](https://i-blog.csdnimg.cn/blog_migrate/4d61ca264a38629d9bcb5e62fd949f49.png)
![v=\beta \ast v -a\ast dx\\](https://i-blog.csdnimg.cn/blog_migrate/a1d857924bc1092cd98992e641ce5769.png)
![x \leftarrow x+v](https://i-blog.csdnimg.cn/blog_migrate/4d61ca264a38629d9bcb5e62fd949f49.png+%5Cleftarrow++x%2Bv)
其中
![\beta](https://i-blog.csdnimg.cn/blog_migrate/c2d112009ea566c4f6732974b032e35a.png)
![v](https://i-blog.csdnimg.cn/blog_migrate/000f9067fa51e6ec556e2a71e7ad1cf2.png)
normalization (batch normalization)。batch normalization的是指在神经网络中激活函数的前面,将
![wx+b](https://i-blog.csdnimg.cn/blog_migrate/b79b2e893fc1fed024de88539b21b7ce.png)
- 提高梯度在网络中的流动。Normalization能够使特征全部缩放到[0,1],这样在反向传播时候的梯度都是在1左右,避免了梯度消失现象。
- 提升学习速率。归一化后的数据能够快速的达到收敛。
- 减少模型训练对初始化的依赖。