数据分析-Pytorch Day4

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    一概述

    当你想训练好一个神经网络时你需要做好三件事情一个合适的网络结构一个合适的训练算法一个合适的训练技巧

    合适的网络结构包括网络结构和激活函数你可以选择更深的卷积网络然后引入残差连接。可以选择relu做为激活函数也可以选择tanhswish等。

    合适的训练算法通常采用SGD也可以引入动量和自适应学习速率也许可以取得更好的效果。

     合适的训练技巧合理的初始化对于较深的网络引入残差连接归一化等操作。

    二SGD

    三SGD with Momentum

    动量梯度下降法的一个本质就是它们能够最小化碗状函数

    Why momentum?

    Momentum项相当于速度,因为β稍小于1表现出一些摩擦力所以球不会无限加速下去所以不像梯度下降法每一步都独立于之前的步骤你的球可以向下滚获得动量可以从碗向下加速获得动量。

    有两个超参数学习率a以及参数\beta\beta控制着指数加权平均数。\beta最常用的值是0.9

    四 Adagrad

    1.其实就是给SGD加了一个分母。

    AdaGrad算法就是将每一个参数的每一次迭代的梯度取平方累加后在开方用全局学习率除以这个数作为学习率的动态更新。

    2.why 要这样

    在实际应用中各个参数的重要性肯定是不一样的所以我们对于不同的参数要动态的采取不同的学习率让目标函数更快的收敛。

    3.Adagrad算法分析

    1学习率变化过程

    随着算法不断迭代r会越来越大整体的学习率会越来越小。所以一般来说AdaGrad算法一开始是激励收敛到了后面就慢慢变成惩罚收敛速度越来越慢。

    2学习率减少

    在SGD中随着梯度的增大我们的学习步长应该是增大的。但是在AdaGrad中随着梯度g的增大我们的r也在逐渐的增大且在梯度更新时r在分母上也就是整个学习率是减少的这是为什么呢

    这是因为随着更新次数的增大我们希望学习率越来越慢。因为我们认为在学习率的最初阶段我们距离损失函数最优解还很远随着更新次数的增加越来越接近最优解所以学习率也随之变慢。

    3不是很好

    经验上已经发现对于训练深度神经网络模型而言从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。

    五RMSprop

    1.全称Root Mean Sqaure prop

    同使用动量的梯度下降一样RMSprop的目的也是为了消除垂直方向的抖动使梯度下降快速收敛

    2.实际上是平方版本的指数加权平均将导数看作水平方向上的w和垂直方向上的b更新时b变小了w变化不大

    3.RMSprop计算方法

    六AdamSGDM+RMSProp

    为了解决SGD卡在grad为0.

    就是在 RMSprop 的基础上加了 bias-correction 和 momentum随着梯度变的稀疏Adam 比 RMSprop 效果会好。

    对比

    1.SGD:卡在grand为0

    SGD 因为更新比较频繁会造成 cost function 有严重的震荡。

    BGD 可以收敛到局部极小值当然 SGD 的震荡可能会跳到更好的局部极小值处。当我们稍微减小 learning rateSGD 和 BGD 的收敛性是一样的。

    2. Adagrad大到小,带了个分母

    对低频的参数做较大的更新对高频的做较小的更新也因此对于稀疏的数据它的表现很好很好地提高了 SGD 的鲁棒性例如识别 Youtube 视频里面的猫训练 GloVe word embeddings因为它们都是需要在低频的特征上有更大的更新。

    Adagrad 的优点是减少了学习率的手动调节

    它的缺点是分母会不断积累这样学习率就会收缩并最终会变得非常小。

    3.RMSprop也带分母

    为了解决 Adagrad 学习率急剧下降问题的

    yolo是SGDM

    总结

    Adam比较快SGDM比较稳

    两者结合SWATSbegin with Adam end with SGDM

    warm-up:针对学习率的优化方式

    WARM UP

    1.概念

    Warmup是在ResNet论文中提到的一种学习率预热的方法它在训练开始的时候先选择使用一个较小的学习率训练了一些epoches或者steps(比如4个epoches,10000steps),再修改为预先设置的学习来进行训练。

    2.为什么使用Warmup?

    由于刚开始训练时,模型的权重(weights)是随机初始化的在预热的小学习率下模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快模型效果更佳。

    3.Warmup的改进

    不足之处从一个很小的学习率一下变为比较大的学习率可能会导致训练误差突然增大。

    改进从最初的小学习率开始每个step增大一点点直到达到最初设置的比较大的学习率

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6