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会自动根据梯度信息更新)
效果如下:
梯度下降更快,而且准确率更高