pytorch学习笔记 2.6 Optimizer 优化器
2024-05-20
[摘要] 越复杂的神经网络,越多的数据,使得在训练神经网络时花费的时间也就越多。原因很简单,是因为计算量太大了,所以我们需要寻找一些方法,让神经网络的训练快起来。1、StochasticGradientDescent(SGD)把数据分成小批小批的,然后再分批进行计算。每次使用批数据,虽然不能反映整体数据的情况,但是也可以很大的程度的加速训练过程,并且不会丢失过多的准确率。2、Momentum更新方法传统的

越复杂的神经网络 , 越多的数据 , 使得在训练神经网络时花费的时间也就越多。 原因很简单, 是因为计算量太大了,所以我们需要寻找一些方法, 让神经网络的训练快起来。

1、Stochastic Gradient Descent (SGD)

把数据分成小批小批的,然后再分批进行计算。每次使用批数据,虽然不能反映整体数据的情况,但是也可以很大的程度的加速训练过程,并且不会丢失过多的准确率。

2、Momentum 更新方法
  • 传统的参数更新:原始的 W 累加【一个负的学习率 × 校正值(dx)】。这种方法会让学习过程曲折无比。好比一个喝醉的人回家时,摇摇晃晃走了很多弯路。
    在这里插入图片描述
  • Momentum参数更新:把这个人从平地上放到了一个斜坡上, 只要他往下坡的方向走一点点, 由于向下的惯性, 他不自觉地就一直往下走, 走的弯路也变少了。
    在这里插入图片描述
3、AdaGrad 更新方法
  • 在学习率上进行优化, 使得每一个参数更新都会得到不同的学习率。好比给他一双不好走路的鞋子, 使得他一摇晃着走路就脚疼, 鞋子成为了走弯路的阻力, 逼着他往前直着走。
    在这里插入图片描述
4、RMSProp 更新方法

合并【部分的 Momentum 的惯性原则】以及 【AdaGrad 的对错误方向的阻力】,让其同时具备两种方法的优势。
在这里插入图片描述

5、Adam 更新方法

计算m 时有 momentum 下坡的属性, 计算 v 时有 adagrad 阻力的属性, 然后再更新参数时 把 m 和 V 都考虑进去。实验证明, 大多数使用 Adam 都能又快又好的达到目标, 迅速收敛。
在这里插入图片描述

上面已经介绍了几种优化器,那么我们现在编写代码来看一下各种优化器的效果图

1、准备伪数据
 

输出结果:
在这里插入图片描述

2、创建神经网络

为了更好的对比出每一种优化器,需要给他们各自创建一个神经网络。

 
3、优化器 Optimizer

创建不同的优化器,用来训练不同的网络。

 
4、训练
 
5、代码整合
 

输出结果:
1)会输出轮数0-11。

 

2)图示,四种优化器的对比图
在这里插入图片描述


平台注册入口