深度学习之pytorch小技巧积累

1.Regularization-正则化

·基础:

  L1正则化

  

  L2正则化

 

2.动量(momentum)

·本质:在每一次个更新tensor时,都记忆上一次梯度下降的方向

加入动量的权重更新,不会使得权值的梯度下降的方向特别分散,因为记忆了上一次梯度的方向(特别是优化前期)

并且加入动量更不会陷入局部最优解

(当某一处存在局部最优解时,不会马上朝着梯度下降最陡的方向,因为综合了上一次的梯度方向)

  ·未加入动量时的优化

  ·加入动量后的优化

可以明显看到前期的梯度下降优化更加有效,并且达到了正真的局部最小值

 

  ·使用方法:

 

在优化器中设置momentum参数,则会自动及以上一次的梯度方向(具体还需看pytorch文档)

像有一些优化器(Adam),自带了有动量momentum属性则不再需要设置

 

 

 

3.老生常谈-学习率

  ·学习率设置法则一:到达“平地”之后降低学习率

可以看到大约在方框处由于loss基本不变

有可能是因为学习率过大而不能进入局部最小值(如下图)

 

所以需要设置监听loss值,如果达到一定次数不变之后则需要降低学习率

设置方法(还需要看文档):

 

 

  ·学习率设置法则二:随着train过程逐步减小(自适应)

设置方法(还需要看实例):

 

 

4.early stop-早期停止

  ·早期停止利弊

更具经验选择一个test set 准确度最高的点的参数,并设置在模型中,防止过拟合。

但也有奇葩情况,例如下图红色去线代表test set accuracy

也有可能在训练次数较多时,test set accuracy有重写变得更高(很多小tricks

 

 

 

5.dropout

  ·本质:随机忽略到一些神经元结点

设置dropout后,降低overfitting,原因是因为网络会变得不去学习噪声(异常样本点)

  ·dropout使用实例(还需要看文档)

(直接加在层与层之间)

 

 

 

6.stochastic 和 deterministic 两种不同方式批量求梯度下降

·由于不能同时把所有图片的每一个权重的梯度load到显存中

所以使用stochastic随机选取处一个batch数目样本,并把他们各自的权重梯度求平均,然后再在他们中计算梯度下降(此行为称为stochastic gradient descent :SGD)

(这里一次仅随机选取一个batch数的样本来进行梯度下降)

 

 

7.batch normalization

产生原因:构建好的模型在经历网络最后一层(激活函数)时,有可能是使用的sigmoid激活函数,而sigmoid激活函数的输入值如果不在:-1到1之间,则有可能在backward时出现时梯度弥散的情况(下图可以看到输入值过大/过小斜率都消失)

所以为了解决此方法,使用batch normalization标准化,将输入到激活函数的范围设置到:-1到1之间。

具体流程:

全局的miu 和 sita (running)

自动更新的偏置:γ 和 β (设置affine会自动根据梯度信息更新)

效果如下:

梯度下降更快,而且准确率更高

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值