使用链式法则计算复合表达式 考虑复合函数 f ( x , y , z ) = ( x + y ) × z f(x, y, z) = (x+y)\times z f(x,y,z)=(x+y)×z。我们将公示分为两部分 q = x + y q = x + y q=x+y 和 f = q × z f = q\times z f=q×z。所以我们有 ∂ f ∂ q = z , ∂ f ∂ z = q \frac{\partial f}{\partial q} = z, \frac{\partial f}{\partial z} = q ∂q∂f=z,∂z∂f=q ; ∂ q ∂ x = 1 , ∂ q ∂ y = 1 \frac{\partial q}{\partial x} = 1 , \frac{\partial q}{\partial y} = 1 ∂x∂q=1,∂y∂q=1。然而函数 f f f 关于 x , y , z x, y, z x,y,z 的梯度才是需要关注的。从而我们需要使用链式法则。链式法则指出将这些梯度表达式链接起来的正确方式是相乘,比如 ∂ f ∂ x = ∂ f ∂ q ∂ q ∂ x \frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} ∂x∂f=∂q∂f∂x∂q。
计算对应的计算图如下: 前向传播从输入计算到输出(绿色),反向传播从尾部开始,根据链式法则递归地向前计算梯度(显示为红色),一直到网络的输入端。可以认为,梯度是从计算链路中回流。
Sigmoid例子 如下表达式,描述了一个含输入 x x x 和权重 w w w 的2维的神经元,该神经元使用了sigmoid激活函数。 f ( w , x ) = 1 1 + e − ( w 0 x 0 + w 1 x 1 + w 2 ) f(w,x) = \frac{1}{1 + e^{-(w_0x_0 + w_1x_1 + w_2)}} f(w,x)=1+e−(w0x0+w1x1+w2)1
其对应的计算图如下所示: sigmoid函数求导简化 sigmoid函数关于其输入的求导是可以简化的(使用了在分子上先加后减1的技巧): σ ( x ) = 1 1 + e − 1 → d σ ( x ) d x = e − x ( 1 + e − x ) 2 = ( 1 + e − x − 1 1 + e − x ) ( 1 1 + e − x ) = ( 1 − σ ( x ) ) σ ( x ) \sigma (x) = \frac{1}{1 + e^{-1}} \\ \to \frac{d \sigma(x)}{dx} = \frac{e^{-x}}{(1 + e^{-x})^2} = (\frac{1 + e^{-x} - 1}{1 + e^{-x}})(\frac{1}{1 + e^{-x}}) = (1 - \sigma(x))\sigma(x) σ(x)=1+e−11→dxdσ(x)=(1+e−x)2e−x=(1+e−x1+e−x−1)(1+e−x1)=(1−σ(x))σ(x)
通过这个技巧,我们就可以实现门的合并。
我们通常将操作节点叫做门,一般的我们有:
add :梯度分发器。 z = x + y ⇒ ∂ L ∂ x = ∂ L ∂ z ∂ z ∂ x = ∂ L ∂ z × 1 z = x + y \Rightarrow \frac{\partial L}{\partial x} = \frac{\partial L}{\partial z} \frac{\partial z}{\partial x} = \frac{\partial L}{\partial z} \times 1 z=x+y⇒∂x∂L=∂z∂L∂x∂z=∂z∂L×1。max:梯度路由器。 z = m a x ( x , y ) ⇒ z = max(x, y) \Rightarrow z=max(x,y)⇒被选中的参数梯度为 ∂ L ∂ z \frac{\partial L}{\partial z} ∂z∂L,否则为 0 0 0。mul:梯度交换器。 z = x × y ⇒ ∂ L ∂ x = ∂ L ∂ z ∂ z ∂ x = ∂ L ∂ z × y z = x \times y \Rightarrow \frac{\partial L}{\partial x} = \frac{\partial L}{\partial z} \frac{\partial z}{\partial x} = \frac{\partial L}{\partial z}\times y z=x×y⇒∂x∂L=∂z∂L∂x∂z=∂z∂L×y。在一层的线性分类器(感知器)中,我们仅仅学习了 n n n 个模板,对于有多种特征的实体进行分类时,这明显是不足的。
多层神经网络可以解决单层神经网络的模板单一、鲁棒性差的问题。比如我们加深网络层数到两层,第一层输入为实体特征,第二层输入为第一层各分类模板得分。最后再通过 W 2 W_2 W2 进一步整合,以 W 1 W_1 W1 各模板得分为特征,得到最终的分类得分。