深度学习(23)随机梯度下降一: 随机梯度下降简介

  • 1. What’s Gradient?
  • 2. What does it mean?
  • 3. How to search?
  • 4. For instance
  • 5. Learning Process
  • 6. AutoGrad
  • 7. GradientTape
  • 8. Persistent GradientTape(多次调用)
  • 9. 2nd2^{nd}2nd-order
  • 10. 二阶求导实战

Outline

  • What’s Gradient
  • What does it mean
  • How to Search
  • AutoGrad

1. What’s Gradient?

  • 导数,derivative
  • 偏微分,partial derivative
  • 梯度,gradient
    ∇f=(∂f∂x1;∂f∂x2;…;∂f∂xn)∇f=(\frac{∂f}{∂x_1} ; \frac{∂f}{∂x_2} ;…; \frac{∂f}{∂x_n} )∇f=(∂x1​∂f​;∂x2​∂f​;…;∂xn​∂f​)

2. What does it mean?

可以看到,梯度就是函数对x求偏导和对y求偏导的向量和; 在函数上升的时候,梯度方向是向外扩散的; 在函数上升的快的时候,梯度的向量的模也大(就是图中箭头长); 在函数梯度趋于缓慢或为0时,梯度的向量的模小(就是图中箭头短);

如上图所示,蓝色区域代表函数值较小的区域,因为箭头是向外扩散的,而梯度的方向就是函数值增大的方向; 红色区域代表函数值较大的区域,因为箭头是向内收缩的,而梯度的反方向就是函数值减小的方向;

3. How to search?

  • ∇f→largervalue∇f→larger\ value∇f→larger value

    • Search for minima:

      • lr/α/ηlr/α/ηlr/α/η
        θt+1=θt−αt∇f(θt)θ_{t+1}=θ_t-α_t ∇f(θ_t)θt+1​=θt​−αt​∇f(θt​)

4. For instance

θt+1=θt−αt∇f(θt)θ_{t+1}=θ_t-α_t ∇f(θ_t)θt+1​=θt​−αt​∇f(θt​)
(1) Function:
J(θ1,θ2)=θ12+θ22J(θ_1,θ_2 )=θ_1^2+θ_2^2J(θ1​,θ2​)=θ12​+θ22​
(2) Objective:
min⁡θ1,θ2⁡J(θ1,θ2)\min_{θ_1,θ_2}⁡J(θ_1,θ_2 )θ1​,θ2​min​⁡J(θ1​,θ2​)
(3) Update rules:
θ1≔θ1−αdθ1J(θ1,θ2)θ_1≔θ_1-α \frac{d}{θ_1}J(θ_1,θ_2 )θ1​:=θ1​−αθ1​d​J(θ1​,θ2​)
θ2≔θ2−αdθ2J(θ1,θ2)θ_2≔θ_2-α \frac{d}{θ_2}J(θ_1,θ_2 )θ2​:=θ2​−αθ2​d​J(θ1​,θ2​)
(4) Derivatives:
ddθ1J(θ1,θ2)=ddθ1θ12+ddθ1θ22=2θ1\frac{d}{dθ_1} J(θ_1,θ_2 )=\frac{d}{dθ_1 } θ_1^2+\frac{d}{dθ_1} θ_2^2=2θ_1dθ1​d​J(θ1​,θ2​)=dθ1​d​θ12​+dθ1​d​θ22​=2θ1​
ddθ2J(θ1,θ2)=ddθ2θ12+ddθ2θ22=2θ1\frac{d}{dθ_2} J(θ_1,θ_2 )=\frac{d}{dθ_2} θ_1^2+\frac{d}{dθ_2} θ_2^2=2θ_1dθ2​d​J(θ1​,θ2​)=dθ2​d​θ12​+dθ2​d​θ22​=2θ1​

5. Learning Process

(1) Learning Process-1

(2) Learning Process-2

←\leftarrow←

6. AutoGrad

  • With tf.GradientTape() as tape:

    • Build computation graph
    • loss=fθ(x)loss=f_θ (x)loss=fθ​(x)
  • [w_grad] = tape.gradient(loss, [w])

7. GradientTape

(1) with tf.GradientTape() as tape: 将要更新的参数梯度全部放入这个函数里;
(2) grad1 = tape.gradient(y, [w]): 其中y就是损失losslossloss,[w]为要更新的参数;
可以看到,计算结果为[None],这是因为我们放入方法内的函数是y2=x∗wy_2=x*wy2​=x∗w,与y无关,所以返回值为[None];
(3) grad2 = tape.gradient(y2, [w]): 更新w的梯度,即:
∂y2∂w=x=2\frac{∂y_2}{∂w}=x=2∂w∂y2​​=x=2

8. Persistent GradientTape(多次调用)

  • with tf.GradientTape(persistent=True) as tape: 设置参数persistent=True,这样就可以进行多次更新操作了;

9. 2nd2^{nd}2nd-order

  • y=xw+by=xw+by=xw+b

  • ∂y∂x=x\frac{∂y}{∂x}=x∂x∂y​=x

  • ∂2y∂x2=∂y′∂w=∂x∂w=None\frac{∂^2 y}{∂x^2 }=\frac{∂y'}{∂w}=\frac{∂x}{∂w}=None∂x2∂2y​=∂w∂y′​=∂w∂x​=None

    • 要包2层tf.GradientTape(),因为要求二阶导数。

10. 二阶求导实战

import tensorflow as tfw = tf.Variable(1.0)
b = tf.Variable(2.0)
x = tf.Variable(3.0)with tf.GradientTape() as t1:with tf.GradientTape() as t2:y = x * w + bdy_dw, dy_db = t2.gradient(y, [w, b])
d2y_dw2 = t1.gradient(dy_dw, w)print(dy_dw)
print(dy_db)
print(d2y_dw2)assert dy_dw.numpy() == 3.0
assert d2y_dw2 is None

运行结果如下:

参考文献:
[1] 龙良曲:《深度学习与TensorFlow2入门实战》
[2] http://mccormickml/2014/03/04/gradient-descent-derivation/
[3] http://ruder.io/optimizing-gradient-descent/

深度学习(23)随机梯度下降一: 随机梯度下降简介相关推荐

  1. python深度学习第三讲——用python写神经网络梯度下降(手写字符识别mnist)

    机器学习使用训练数据进行学习.使用训练数据进行学习,严格来说,就是针对训练数据计算损失函数的值,找出使该值尽可能小的参数.因此,计算损失函数时必须将所有的训练数据作为对象.也就是说,如果训练数据有10 ...

  2. 花书+吴恩达深度学习(二九)生成随机网络 GSN

    文章目录 0. 前言 1. 生成随机网络 GSN 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 花书+吴恩达深度学习(二七)深度生成模型之玻尔兹曼机及其变体(RBM, DB ...

  3. 深度学习之循环神经网络(7)梯度裁剪

    深度学习之循环神经网络(7)梯度裁剪 1. 张量限幅 2. 限制范数 3. 全局范数裁剪 梯度弥散  梯度爆炸可以通过 梯度裁剪(Gradient Clipping)的方式在一定程度上的解决.梯度裁剪 ...

  4. 深度学习之循环神经网络(6)梯度弥散和梯度爆炸

    深度学习之循环神经网络(6)梯度弥散和梯度爆炸  循环神经网络的训练并不稳定,网络的善妒也不能任意加深.那么,为什么循环神经网络会出现训练困难的问题呢?简单回顾梯度推导中的关键表达式: ∂ht∂hi= ...

  5. 深度学习之循环神经网络(3)梯度传播

    深度学习之循环神经网络(3)梯度传播  通过循环神经网络的更新表达式可以看出输出对张量Wxh\boldsymbol W_{xh}Wxh​.Whh\boldsymbol W_{hh}Whh​和偏置b\b ...

  6. 深度学习之卷积神经网络(6)梯度传播

    深度学习之卷积神经网络(6)梯度传播  在完成手写数字图片识别实战后,我们对卷积神经网络的使用有了初步的了解.现在我们来解决一个关键问题,卷积层通过移动感受野的方式实现离散卷积操作,那么它的梯度传播是 ...

  7. DL框架之TensorFlow:深度学习框架TensorFlow Core(低级别TensorFlow API)的简介、安装、使用方法之详细攻略

    DL框架之TensorFlow:TensorFlow Core(低级别TensorFlow API)的简介.安装.使用方法之详细DL框架之TensorFlow:深度学习框架TensorFlow Cor ...

  8. ML之模型文件:机器学习、深度学习中常见的模型文件(.h5、.keras)简介、h5模型文件下载集锦、使用方法之详细攻略

    ML之模型文件:机器学习.深度学习中常见的模型文件(.h5..keras)简介.h5模型文件下载集锦.使用方法之详细攻略 目录 ML/DL中常见的模型文件(.h5..keras)简介及其使用方法 一. ...

  9. DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细攻略

    DL之AF:机器学习/深度学习中常用的激活函数(sigmoid.softmax等)简介.应用.计算图实现.代码实现详细攻略 目录 激活函数(Activation functions)相关配图 各个激活 ...

  10. 【深度学习】PyTorch 中的线性回归和梯度下降

    作者 | JNK789   编译 | Flin  来源 | analyticsvidhya 我们正在使用 Jupyter notebook 来运行我们的代码.我们建议在Google Colaborat ...

最新文章

  1. Django 图片上传upload_to路径指定失效的问题记录
  2. centeros php 实战
  3. step5 . day5 网络编程 基于UDP协议的多人网络在线聊天功能
  4. 使用tab键分割的文章能快速转换成表格。( )_EXCEL的163种使用技巧集锦-42~62
  5. ubunu安装软件的一个错误
  6. leetcode103. 二叉树的锯齿形层次遍历(bfs)
  7. C# Collection was modified;enumeration operation may not execute
  8. SQL Server链接服务器(一台机器SQL Server登陆,同时映射登陆到另外一台远程服务器的数据库)
  9. 清除数据库中大于10W行的垃圾历史数据
  10. 远程登录服务器时,提示未被授予终端服务器登录权限?
  11. 关于用友凭证打印模板
  12. 中国象棋(单机版)java_中国象棋大师-中国象棋单机版下载 2017最新版-中国象棋单机游戏下载-pc6游戏网...
  13. PHP格式化 插件 vs code
  14. TLS SNI(TLS Server Name Indication)配置:F5、Nginx和IIS
  15. Java编程——subString,截取当前字符串的部分内容
  16. python中 math.isfinite返回值为false_带有Python示例的math.isfinite()方法
  17. 7.5.3 QListWidgetItem条目视图介绍
  18. 区块链 图灵完备是什么
  19. 人工智能在电力系统中的应用值得思考的问题
  20. 如何使用pyinstaller将Python的代码打包

热门文章

  1. oracle客户端没有deinstall.bat,Oracle数据库11gR2的卸载 - deinstall
  2. list容器java_【Java容器】List容器使用方法及源码分析
  3. led透明屏生产厂家_如何实现LED双面透明显示屏,双面LED透明屏
  4. Please make sure you have the correct access rights and the repository exists.报错问题
  5. Ajax POST请求获取后台返回的数据
  6. The executable was signed with invalid entitlements
  7. webpack3 css,媒体查询不能使用CSS /样式加载器和Webpack3
  8. java位宽_Java的数据类型
  9. 小猿圈Java学习之通过命令行设置属性值
  10. linux下安装配置redis服务