Backpropagation Algorithm
反向传播算法,分为两个部分:Forward pass和Backward pass
-
设 L ( w 1 , w 2 , w 3 , . . . , w n ) L(w_1,w_2,w_3,...,w_n) L(w1,w2,w3,...,wn)为Loss函数, z = x 1 w 1 + x 2 w 2 + b z = x_1w_1+x_2w_2+b z=x1w1+x2w2+b为前向传播(Forwardpropagation)公式, a = σ ( z ) a = σ(z) a=σ(z)为激活函数,代表下一个神经元的值。
-
由以上假设,根据梯度下降法,需计算出每个权重 w i w_i wi对于损失函数 L L L的偏导,然后进行参数更新,即 ∂ L ∂ w i \frac{∂L}{∂w_i} ∂wi∂L这种方式在参数量较少,网络结构不复杂的情况下很容易便可求得。但在复杂网络如神经网络中,损失函数 L L L是一个包含千百万数量级参数的一个复合函数,想要直接对某个 w i w_i wi求得偏导比较困难。所以,反向传播简化了这一直接求偏导的过程,利用链式法则间接反向逐步求得每个参数 w i w_i wi的偏导,实现梯度传播以及参数更新。
-
Forward pass:
根据链式法则简化上述求导公式: ∂ L ∂ w 1 = ∂ L ∂ z ∂ z ∂ w 1 \frac{∂L}{∂w_1} = \frac{∂L}{∂z}\frac{∂z}{∂w_1} ∂w1∂L=∂z∂L∂w1∂z公式右边后半部分可以直接求得: ∂ z ∂ w 1 = x 1 \frac{∂z}{∂w_1} = x_1 ∂w1∂z=x1所以,原式可简化为: ∂ L ∂ w 1 = x 1 ∂ L ∂ z \frac{∂L}{∂w_1} = x_1\frac{∂L}{∂z} ∂w1∂L=x1∂z∂L -
Backward pass:
对 ∂ L ∂ z \frac{∂L}{∂z} ∂z∂L进一步分解得到: ∂ L ∂ z = ∂ L ∂ a ∂ a ∂ z \frac{∂L}{∂z} = \frac{∂L}{∂a}\frac{∂a}{∂z} ∂z∂L=∂a∂L∂z∂a该式右边后半部分 ∂ a ∂ z = σ ′ ( z ) \frac{∂a}{∂z} = σ'(z) ∂z∂a=σ′(z)由于激活函数都是已知的,所以该项也可以很容易算出。所以原式变为: ∂ L ∂ z = σ ′ ( z ) ∂ L ∂ a \frac{∂L}{∂z} = σ'(z)\frac{∂L}{∂a} ∂z∂L=σ′(z)∂a∂L假设该节点后继续通过两个分支连着一个神经元(如图),则可进一步得到: ∂ L ∂ z = σ ′ ( z ) [ ∂ L ∂ z ′ ∂ z ′ ∂ a + ∂ L ∂ z ′ ′ ∂ z ′ ′ ∂ a ] \frac{∂L}{∂z} = σ'(z)[\frac{∂L}{∂z'}\frac{∂z'}{∂a}+\frac{∂L}{∂z''}\frac{∂z''}{∂a}] ∂z∂L=σ′(z)[∂z′∂L∂a∂z′+∂z′′∂L∂a∂z′′]由于此时 z ′ = a w 3 + b ′ z' = aw_3+b' z′=aw3+b′ z ′ ′ = a w 4 + b ′ ′ z'' = aw_4+b'' z′′=aw4+b′′所以,原式可简化为: ∂ L ∂ z = σ ′ ( z ) [ w 3 ∂ L ∂ z ′ + w 4 ∂ L ∂ z ′ ′ ] \frac{∂L}{∂z} = σ'(z)[w_3\frac{∂L}{∂z'}+w_4\frac{∂L}{∂z''}] ∂z∂L=σ′(z)[w3∂z′∂L+w4∂z′′∂L]从而有: ∂ L ∂ w 1 = x 1 ∂ L ∂ z = x 1 σ ′ ( z ) [ w 3 ∂ L ∂ z ′ + w 4 ∂ L ∂ z ′ ′ ] \frac{∂L}{∂w_1} = x_1\frac{∂L}{∂z} = x_1σ'(z)[w_3\frac{∂L}{∂z'}+w_4\frac{∂L}{∂z''}] ∂w1∂L=x1∂z∂L=x1σ′(z)[w3∂z′∂L+w4∂z′′∂L]
该式为反向传播算法核心公式,其表明了当前神经元上参数的梯度可由后一个神经元上参数的梯度求得。所以,只要从输出层算起,就可以一步步反向推出前面各层的参数梯度。
自动求导
人工计算麻烦,框架内自带自动求导
数值微分
Numerical Differentiation
-
用数值方法来计算函数𝑓(𝑥)的导数.函数𝑓(𝑥)的点𝑥的导数定义为
f ′ ( x ) = lim Δ x → 0 f ( x + Δ x ) − f ( x ) Δ x f^{\prime}(x)=\lim _{\Delta x \rightarrow 0} \frac{f(x+\Delta x)-f(x)}{\Delta x} f′(x)=Δx→0limΔxf(x+Δx)−f(x)
要计算函数𝑓(𝑥)在点𝑥的导数,可以对𝑥加上一个很少的非零的扰动Δx,通过上述定义来直接计算函数𝑓(𝑥)的梯度 -
不足
-
舍入误差
-
截断误差
-
计算复杂度
-
符号微分
Symbolic Differentiation
- 指用计算机来处理带有变量的数学表达式,符号计算的输入和输出都是数学表达式,一般包括对数学表达式的化简、因式分解、微分、积分、解代数方程、求解常微分方程等运算
自动微分
Automatic Differentiation,AD
- 将模型分解基本模块,构建计算图(Computational Graph)