1/ 各种主动微分的优缺陷1

机器学习的一个重要的任务,便是对参数求导得到丢失函数关于每个参数的偏导数,然后进行梯度下降

而求偏微分,能够选择的办法有:手工微分(manual differentiation)、符号微分(symbolic differentiation)、数值微分(numerical differentiation梯度下降法原理和过程)、前向主动微分(forward-mode autodiff)和反向主动微分(reverse-mode autodiff)。

而在 Julia 的 Flux 包里和 Tensorflow 相同,便是运用的反向主动微分。

手工梯度下降算法是什么:手工微分关于杂乱的函数,会变得十分繁琐,简略犯错

符号微梯度下降算法:运用核算图来处理。可是关于杂乱的函数,会呈现核算图十分巨大的,下降功能,而一个最大的缺陷tensorflow是干什么的便是,符号微分无法处理恣意编码的函数。

数值微分:数值微分根据算法导论公式:

h′(x)=lim⁡x→x0h(x)−h(x0)x−x0=lim⁡→0h(x0+)−算法工程师h(x0)begin{aligned} h^{prime}(x)&=lim_{xrightarrow x_0}frac{h(x)-h(x_0)}{x-x_0} &=lim_{epsil梯度下降法例题onright梯度下降算法arrow 0}frtensorflow和pytorch的差异ac{h(x_0+epsilon)-h(x_0)}{epsilon} endtensorflow装置{aligned}

要核算函数 f(x1,算法的有穷性是指x2,⋯ ,xn)tensorflow和pytorch的差异f(x_1,x_2,cdots,x_n) 在某个点关于 xix_i 的偏导数,只需求核算当 epsilon 很小的时算法剖析的意图是f(x1,x2,⋯ ,xi−,⋯ ,xn)f(x_1,x_2,cdots,x_i-epsilon,cdots,x_ntensorflow版别) 处以 epsilon 的商。

不过数值微分的缺陷便是,效果并不准确,是一种近似,并且会重复调用函数 f(TensorFlowx)f(x) 许多次,在机器学习参数许多的情况下,会变得随机梯度下降很低效。可是由于数值微分很简略实行,它梯度下降算法过程能够作为一个查看其他算法是否正确的有用东西。

前向主动微分:尽管既不是符号微分也不是数值微分,可是在某些方面,前向主动微分是符号微分和数值微分的结合。梯度下降

前向主动微分依赖于 dual number,办法为 a+ba+bepsilon,其间 a,ba,b 是两个是两个实数,epsilon 是一个无穷小的数字。dual number 在存储的时分,用一对浮点数标明,例如 42+2442+24epsilon(42,0,24.0)(42,0,24.0) 标明。

关于 dual numbe梯度下降算法r 的根本运算如下:(注意 2=0epsilonTensorFlow^2=0

(a+b)=a+b(a+b)+(c+d)=(a+c)+(b+d)(a+b)(c+d)=ac+(ad+tensorflow装置bd)TensorFlow+(b梯度下降法d)2=ac+(ad+bc)begin{aligned} lambda(a+bepsilon)&=lambtensorflow菜鸟教程da a+lambda bepsilon (a+bepsilon)+(c+depsilon)&=(a+c)+(b+d)epsilon (a+bepsilon)tim梯度下降es(c+deptensorflow怎样读silon)&=ac+(ad+bd)epsilon+(bd)epsilon^2 &=ac+(ad+bc)epsilon end{aligned}

更为重要的是 h(a+b)=h(a)+bh梯度下降法原理和过程′(a)h(a+bepsilon)=h(a)+btimes h^{prime}(a)epsilon,所以当咱们核算 h(a+)h(tensorflow训练模型a+eptensorflow训练模型silon) 的时算法剖析的意图是分,能够一次给出 h(a)h(a)h′(a)h^{prime}(a).

tensorflow是干什么的如函数 f(x,y)=x2y+y+2f(x,y)=x^2y+y+2,咱们要核算关于 xx 的偏导数,需求做的便是核算 f(3+,4)f(3+epsilon,4),效果为一个 dual numbetensorflow是干什么的r 42+2442+24epsilon,那么就能够得tensorflow菜鸟教程f(3,4)=42f(3,4)=42 并且偏导数 ∂xf(3,4)=24partial_xf(3,4)=24

前向主动微分的缺机器学习点便是,穿tensorflow是干什么的过一次图,只能核算一个参数的偏导数,尽管效果准确,可是关于多个参数的时分,要穿梯度下降算法过很屡算法的时间复杂度是指什么次图。

反向主动微分:正向穿过图来核算每个节点的值,然后第2次反向穿过图,核算一切的偏导数。

反向主动微分(Reverse-mode autodiff)依赖于链式法则:∂f∂x=∂f∂ni∂ni∂xfrac{partial f}{partial x}=frac{partial f}{partial n_i}times frac算法剖析的意图是{partial n_i}{partial x}.

主动微分以为,梯度下降算法过程任何数值核算的本质其实是一系梯度下降法原理可微分算子的组合。那么,咱们就可梯度下降法原理和过程以假设咱们求不出这个函数的导数,可是将该函数拆解成为其他子部分后,子部分能够经过常规的求梯度下降算法导方梯度下降法得到,毕竟将每个子部分进行组合,就得到了毕竟的效果。2


  1. CSDN:DL | 一文读懂主动微分( AutoDiff)原理↩
  2. 知乎:梯度下降法例题Lecture 4: Automatic Differentiation↩