神经网络的基本训练流程要素

什么是模型训练呢?简单来说就是我们根据我们的任务内容,构建网络模型。模型的输出与我们处理后的目标label值构成loss值。我们的目的是让我们的模型输出与lable的loss数值越小越好。这样能够让模型在测试的时候仅仅通过输入数据能够得到相对比较准确的label值。那么这件事情有哪些技术关键点了。我做了如下总结

明确我们要训练的label值。在构建dataset的时候,能够对label值进行处理明确我们网络要训练得到的输出数据是什么样子的,又是如何与我们的具体任务相映射。这个label的处理方式不同的任务不同的模型都是有不同的思路的。拿目标检测举例的话,yolov1这种是预测的7*7网格点的分类和归一化后的具体框的大小信息和中心点位置信息,而yolov2是要预测的是先验框的分类信息和相对于网格左上角点的位置偏移信息和框的长宽偏移信息。我们发现就算是相同任务的神经网络,设计思路的不同也直接导向了label值转换的思路。总得来说我们首先要清楚我们要预测的是什么,然后训练样本的时候就能明确我们的输出应该是什么。使用模型的时候就能明确网络输出后我们如何使用预测的label来达到我们的目的。

神经网络模型的参数权重更新。这一点才是我们训练网络模型的最终目的。我们就是要通过样本数据得到的loss值进行反向传播获得神经网络中所有参数的梯度数值。通过下降的思路更新这些权重值达到我们的loss越来越小的目的。以上两点是我们的目的。接下来我们如何达到我们的目的呢。

  1. 模型初始化。就是模型参数的初始化。一个好的模型初始化能够让我们的模型参数更容易训练。更容易训练达到我们的目的。模型初始化主要有两种方式。
    1. 模型迁移。直接拿ImageNet上或者网上其他人训练好的模型参数直接迁移过来作为我们的初始值
    2. 自定义初始化。
      1. 使用比较经典的一些初始化方式。比如Xavier和kaiming初始化方法。这两种初始化的方式是让层与层之间的输入输出的方差尽可能差不多大。这样训练起来会快一些
      2. 自己设定初始化方法。我们可以用随机数进行初始化也可以使用常量进行初始化。这个根据具体情况自己进行一些选择策略。
  2. optimizer优化器的选择。
    1. sgd,最传统训练方式。所有优化器的设计基础。通过参数值-学习率*loss对于当前参数的梯度值。
    2. sgdm。在传统的sgd优化器上面增加了一个动量概念。如图所示,每次减去的值都是考虑进了上一步的动量值。通过这种方式能够避免最优点落入马鞍地形或者局部最优解里面
    3. nag。对sgdm进行的一种改动,这种方式老师讲的是避免震荡现象,让我们的优化路径更加稳定一些。大概思路是,我们根据上一步的动量预先计算到达下一步点的梯度。然后拿这个梯度来计算动量。
    4. adagrad。这个优化器的思路是如果之前我这个梯度方向上更新的幅度大了,那我接下来就让他更新的小一点。优点自动设置学习率的意思在里面。如公式所示他会把每次的梯度幅度值进行平方后累加起来达到这个目的。这种优化器的缺点也显而易见,就是他的分母值会一直累计,到后面几乎就没有学习能力了
    5. rmsprop/adadelta。从adadelta这个名字我们可以知道这个优化器是对adagrad算法的一种优化,不在是无脑的累加历史梯度值的平方。同时也保持了adagrad的原始思路
    6. adam优化器。个人认为可能是常见优化器中最好用的一种优化器吧。他结合了动量和adagrad的思想,既能帮助我们跳出马鞍现象又能帮助我们自动调节每次梯度方向上的迭代量系数
    7. 优化器里面还有一个参数叫做weight decay实际上用来进行L2正则化的。L2正则化的概念之前线性回归模型的时候提到过,其原来是用来一直参数权重出现过大数值的情况,能够从一定程度避免过拟合现象。
  3. 学习率的调整策略。我们先介绍以下思路,首先一开始学习率应该尽量大一点(当然不能过大,如果过大的话我们也能很快发现一开始训练的loss会不断变大),然后就是要慢慢的将学习率给变小。相当于我们越来越逼近真相了,我们要越来越精细调整。学习率策略有很多种,也很重要,但是我认为那些方法随时都可以在pytorch官网上可以看到。而思路其实都是一样的就不过多介绍了
  4. loss函数构建策略。未完待续

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值