SGD

SGD为随机梯度下降法。用数学式可以将 SGD 写成如下的式(6.1)。

这里把需要更新的权重参数记为W,把损失函数关于W的梯度记为 ∂L/∂W 。ηηη 表示学习率,实际上会取 0.01 或 0.001 这些事先决定好的值。式子中的←表示用右边的值更新左边的值。

如式(6.1)所示,SGD 是朝着梯度方向只前进一定距离的简单方法。现在,将 SGD 实现为一个 Python 类(为方便后面使用,将其实现为一个名为 SGD 的类)。

class SGD:def __init__(self, lr=0.01):self.lr = lr#学习率def update(self, params, grads):for key in params.keys():params[key] -= self.lr * grads[key]

进行初始化时的参数 lr 表示 learning rate(学习率)。这个学习率会保存为实例变量。此外,代码段中还定义了 update(params, grads) 方法,这个方法在 SGD 中会被反复调用。

参数 params 和 grads 是字典型变量,按 params[‘W1’] 、grads[‘W1’] 的形式,分别保存了权重参数和它们对应的梯度。

使用这个 SGD 类,可以按如下方式进行神经网络的参数的更新(下面的代码是不能实际运行的伪代码)。

network = TwoLayerNet(...)
optimizer = SGD()
for i in range(10000):#更新次数...x_batch, t_batch = get_mini_batch(...) # mini-batchgrads = network.gradient(x_batch, t_batch)params = network.paramsoptimizer.update(params, grads)...

这里首次出现的变量名 optimizer 表示“进行最优化的人”的意思,这里由 SGD 承担这个角色。参数的更新由 optimizer 负责完成。我们在这里需要做的只是将参数和梯度的信息传给 optimizer 。

SGD的缺点

虽然 SGD 简单,并且容易实现,但是在解决某些问题时可能没有效率。这里,在指出 SGD 的缺点之际,我们来思考一下求下面这个函数的最小值的问题。

如图 6-1 所示,式(6.2)表示的函数是向 x 轴方向延伸的“碗”状函数。实际上,式(6.2)的等高线呈向 x 轴方向延伸的椭圆状。

图 6-1  的图形(左图)和它的等高线(右图)

现在看一下式(6.2)表示的函数的梯度。如果用图表示梯度的话,则如图 6-2 所示。这个梯度的特征是,yyy 轴方向上大,xxx 轴方向上小。换句话说,就是 yyy 轴方向的坡度大,而 xxx 轴方向的坡度小。

这里需要注意的是,虽然式 (6.2) 的最小值在 (x,y)=(0,0)(x , y ) = (0, 0)(x,y)=(0,0) 处,但是图 6-2 中的梯度在很多地方并没有指向 (0,0)(0, 0)(0,0)。

图 6-2 f(x,y)=1/20 x^2 + y^2的梯度

我们来尝试对图 6-1 这种形状的函数应用 SGD。从 (x,y)=(−7.0,2.0)(x , y ) = (-7.0, 2.0)(x,y)=(−7.0,2.0) 处(初始值)开始搜索,结果如图 6-3 所示。

图 6-3 基于 SGD 的最优化的更新路径:呈“之”字形朝最小值 (0, 0) 移动,**效率低**

在图 6-3 中,SGD 呈“之”字形移动。这是一个相当低效的路径。也就是说,SGD 的缺点是,如果函数的形状非均向(anisotropic),比如呈延伸状,搜索的路径就会非常低效。因此,我们需要比单纯朝梯度方向前进的 SGD 更聪明的方法。

SGD 低效的根本原因是,梯度的方向并没有指向最小值的方向。为了改正SGD的缺点,引入了MomentumAdaGrad、Adam这 3 种方法来取代SGD。

深度学习入门之SGD随机梯度下降法相关推荐

  1. 深度学习初级课程 3.随机梯度下降法

    深度学习初级课程 1.单一神经元 2.深度神经网络 3.随机梯度下降法 4.过拟合和欠拟合 5.剪枝.批量标准化 6.二分类问题 应用.用TPU探测希格斯玻色子 正文 介绍 在前两节课中,我们学习了如 ...

  2. 深度学习中多层全连接网络的梯度下降法及其变式

    深度学习中多层全连接网络的梯度下降法及其变式 1 梯度下降法 2 梯度下降的变式 1.SGD 2.Momentum 3.Adagrad 4.RMSprop 5.Adam 6.小结 1 梯度下降法 梯度 ...

  3. 深度学习(33)随机梯度下降十一: TensorBoard可视化

    深度学习(33)随机梯度下降十一: TensorBoard可视化 Step1. run listener Step2. build summary Step3.1 fed scalar(监听标量) S ...

  4. 深度学习(30)随机梯度下降七: 多层感知机梯度(反向传播算法)

    深度学习(30)随机梯度下降八: 多层感知机梯度(反向传播算法) 1. 多层感知机模型 2. 多层感知机梯度 3. 传播规律小结 tens Recap Chain Rule Multi-output ...

  5. 深度学习(28)随机梯度下降六: 多输出感知机梯度

    深度学习(28)随机梯度下降六: 多输出感知机梯度 1. Multi-output Perceptron 2. Derivative 3. 代码 Perceptron 单输出感知机梯度 ∂E∂wj0= ...

  6. 深度学习(27)随机梯度下降五: 单输出感知机梯度

    深度学习(27)随机梯度下降五: 单输出感知机梯度 1. Perceptrnon with Sigmoid + MSE 2. Derivative 3. 代码 Recap y=XW+by=XW+by= ...

  7. 深度学习(26)随机梯度下降四: 损失函数的梯度

    深度学习(26)随机梯度下降四: 损失函数的梯度 1. Mean Squared Error(MSE) 2. Cross Entropy Loss CrossEntropy 3. Softmax (1 ...

  8. 深度学习(25)随机梯度下降三: 激活函数的梯度

    深度学习(25)随机梯度下降三: 激活函数的梯度 1. Activation Functions 2. Deriative 3. Sigmoid/Logistic (1) Derivative (2) ...

  9. 深度学习(24)随机梯度下降二: 常见函数的梯度

    深度学习(24)随机梯度下降二: 常见函数的梯度 Common Functions 1. y=xw+by=xw+by=xw+b 2. y=xw2+b2y=xw^2+b^2y=xw2+b2 3. y=x ...

最新文章

  1. mysql构架,索引,视图,查询语句
  2. python怎么读取文件-python怎么读写文件操作
  3. 互联网的尽头是乡村振兴
  4. 【实战】用机器学习来提升你的用户增长
  5. C# 结构体 枚举类型
  6. 前端学习(3007):vue+element今日头条管理--消息提示
  7. 2015.8.3 Java
  8. JavaScript学习(七十三)—高阶函数
  9. 学习Jsoup(三)
  10. 【Hoxton.SR1版本】Spring Cloud Ribbon负载均衡服务调用
  11. SpringBoot内嵌Tomcat原理剖析
  12. 阿里P6、P7、P8、级别需要多少年的工作经验,还是因能力而定?
  13. The kernel appears to have died. It will restart automatically
  14. 强化学习(4):策略梯度Policy Gradient算法
  15. 前端面试题总结(js、html、小程序、React、算法、vue 、全栈热门视频资源)
  16. 我的ubuntu比windows xp欠缺的地方
  17. 高等代数 具有度量的线性空间(第10章)4 酉空间,酉变换,埃尔米特变换,正规变换
  18. html文件wps怎么打开,wps怎么打开xlsb文件
  19. 《黑天鹅》读书笔记(part6)--在正统经济学中,理性成了一件紧身衣
  20. 如何降低客户流失率高的问题

热门文章

  1. Android恶意软件样本库寻找方式
  2. 痞子衡嵌入式:语音处理工具pzh-speech诞生记(4)- 音频录播实现(PyAudio)
  3. Android---odex与oat
  4. 【会议记录】Linux内核的最新进展(6.2版本)分享
  5. 详解CVE-2022-0847 DirtyPipe漏洞
  6. 并发与并行(一):基本概念
  7. 简单理解描述文件描述符
  8. solr账号密码配置
  9. el-date-picker优先级固定在输入框下不会随页面滚动而固定在屏幕中
  10. 【MySQL】3.MySQL表操作