前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动求梯度

自动求梯度

作者头像
hotarugali
发布2022-03-10 15:04:27
4480
发布2022-03-10 15:04:27
举报

【【注】参考自邱锡鹏的《神经网络与深度学习》。 自动计算梯度的方法主要分为三类:数值微分、符号微分和自动微分。

1. 数值微分

1.1 原理

根据函数 f(x) 在点x 处的导数的定义:

\begin{array}{c} f^{'}(x) = \lim_{\Delta x \rightarrow 0} \frac{f(x+\Delta x) - f(x)}{\Delta x} \end{array}

通过给定一个很小的非零扰动 \Delta x ,即可通过上述定义直接求出导数f^{'}(x) 。在实际应用中,为减小截断误差,常采用以下公式来计算梯度:

\begin{array}{c} f^{'}(x) = \lim_{\Delta x \rightarrow 0} \frac{f(x+\Delta x)-f(x-\Delta x)}{2\Delta x} \end{array}

1.2 优缺点

  • 优:实现简单
  • 缺:计算出的导数的准确度依赖于\Delta x 的选取,容易产生舍入误差和截断误差;同时,对于每个参数都需要单独施加扰动,计算梯度的复杂度较高,为 O(N^2) ,其中 N 为参数数量。

2. 符号微分

2.1 原理

符号微分是一种基于「符号计算」(也称为「代数计算」)的自动求导方式。符号计算的输入和输出都是数学表达式,一般包括对数学表达式的化简、因式分解、微分、积分、解代数方程、求解常微分方程等运算。

  • 符号计算一般来讲是对输入的表达式,通过迭代或递归使用一些事先定义的规则进行转换。当转换结果不能再继续使用变换规则时,便停止计算。

2.2 优缺点

  • 优:符号微分可以在编译时就计算梯度的数学表示,并进一步利用符号计算方法进行优化。此外,符号计算的一个优点是符号计算和平台无关,可以在 CPU 或 GPU 上运行。
  • 缺:1)编译时间较长,特别是对于循环,需要很长时间进行编译;2)为了进行符号微分,一般需要设计一种专门的语言来表示数学表达式,并且要对变量(符号)进行预先声明;3)很难对程序进行调试。

3. 自动微分

3.1 原理

自动微分的基本原理是所有的数值计算可以分解为一些基本操作,包含 +, −, ×, / 和一些初等函数 exp, log, sin, cos 等,然后利用链式法则来自动计算一个复合函数的梯度。一般用「计算图」来图形化表示自动微分的过程。

  • 按照计算导数的顺序,自动微分可以分为两种模式:前向模式和反向模式。
  1. 前向模式:前向模式是按计算图中计算方向的相同方向来递归地计算梯度。
  2. 反向模式:反向模式是按计算图中计算方向的相反方向来递归地计算梯度。

对于一般地函数形式 f: \mathbb{R}^N \rightarrow \mathbb{R}^M

  • 前向模式需要对每一个输入变量都进行一遍遍历,共需要 N 遍;
  • 反向模式需要对每一个输出变量都进行一遍遍历,共需要 M 遍;

在前馈神经网络的参数学习中,风险函数为 f: \mathbb{R}^N \rightarrow \mathbb{R} ,故采用反向模式最为有效,即反向传播算法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 数值微分
    • 1.1 原理
      • 1.2 优缺点
      • 2. 符号微分
        • 2.1 原理
          • 2.2 优缺点
          • 3. 自动微分
            • 3.1 原理
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档