学习率的调整,优化器的选择,损失函数的选择

momentum动量

对网络的权值按某种分步进行初始化时,并不能保证其处于一个合适的状态,是损失函数陷入局部最小值,momentum动量可在一定程度解决此问题。
首先来看动量算法
pytorch内置了动量法的实现

torch.optim.SGD(momentum=0.9)

具体的pytorch实现

def sgd_momentum(parameters,vs,lr,gamma):
    for param, v in zip(parameters,vs):
        v[:] = gamma*v + lr * param.grad.data
        param.data = param.data - v

学习率调整方法

学习率衰减是一个非常有效的炼丹技巧之一,在神经网络的训练过程中,当accuracy出现震荡或loss不再下降时,进行适当的学习率衰减是一个行之有效的手段,很多时候能明显提高accuracy。
pytorch实现方法

优化器

首先来区分一下损失函数,代价函数和目标函数:A loss function(损失函数) is a part of a cost function(代价函数) witch is a type of an objective function(目标函数).损失函数是针对单个训练样本而言的,代价函数是针对整个训练集而言的,目标函数是指任意希望被优化的函数。

想找到损失函数为0的点,也就是最小值点,对于凸函数可以通过求导求偏导的方法来解决,而对于非常复杂的非线性函数,只能用求梯度来解决。
形象解释可以看莫凡的视频:

具体的pytorch实现方法可见这个链接1这个链接2

1.全局梯度下降:所有样本
2.随机梯度下降:一个样本
3.批次梯度下降:一个batch_size的样本
其次还有一些改进的方法
学习率不受梯度影响的优化方法有:SGD、带Momentum的SGD,带Nesterov的SGD
学习率随梯度自适应的改变:Adagrad、Adadelta、RMSprop、Adam、AdaMax、Nadam、NadamAMSgrad、Adabound
部分优化方法具体可以看此链接1此链接2

损失函数

最基本的损失函数:
均方误差损失函数(L2 loss用于回归问题):模型输出与真实值的误差服从高斯分布
在这里插入图片描述
平均绝对误差(L1 loss):模型预测与真实值之间的误差服从拉普拉斯分布
在这里插入图片描述
MSE比MAE可更快收敛,MAE对异常点更加鲁棒
参看
交叉熵损失函数(用于分类问题)在这里插入图片描述
其他损失函数

激活函数

注意引入BN层后,激活函数的输入被限制在了[-1,1]之间
各种激活函数公式
损失函数pytorch实现

数据增强

数据增强的目的是组织神经网络学习不相关的特征,并确保不增加不相关数据。数据量大时也需要数据增强来增加数据集中相关数据的数量,神经网络与喂给它的数据一样好或坏。
数据增强的具体办法有参看1参看2
pytorch实现1pytorch实现2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值