神经网络基础知识

1. 网络结构

在这里插入图片描述

两层网络结构示意图-1

 前馈神经网络根据输入的 x i x_i xi值,一层层训练出 h j h_j hj a k a_k ak o k o_k ok t k t_k tk值。误差反向传播(BP算法)训练出 b k b_k bk w j k w_{jk} wjk b j b_j bj w i j w_{ij} wij 权重值和偏置项。

2. 激活函数 Activation Fuction

非线性函数作为激活函数能使得整个模型的拟合能力变好。
在这里插入图片描述
  网络结构图-1中的激活函数 A 采用的是双曲正切 tanh函数。

在这里插入图片描述

2.1 tanh

  将输出的值压缩到-1~1范围,数据符合0均值。(RNN中使用较多)
tanh ⁡ x = sinh ⁡ x cosh ⁡ x = e x − e − x e x + e − x = e 2 x − 1 e 2 x + 1 = 1 − e − 2 x 1 + e − 2 x \begin{array}{l} \tanh x=\frac{\sinh x}{\cosh x}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}=\frac{e^{2 x}-1}{e^{2 x}+1}=\frac{1-e^{-2 x}}{1+e^{-2 x}} \end{array} tanhx=coshxsinhx=ex+exexex=e2x+1e2x1=1+e2x1e2x

d tanh ⁡ x d x = ( e 2 x − 1 e 2 x + 1 ) ′ = ( e 2 x − 1 ) ′ ( e 2 x + 1 ) − ( e 2 x − 1 ) ( e 2 x + 1 ) ′ ( e 2 x + 1 ) 2 = 2 e 2 x ( e 2 x + 1 ) − ( e 2 x − 1 ) 2 e 2 x ( e 2 x + 1 ) 2 = 4 e 2 x ( e 2 x + 1 ) 2 = ( e 2 x + 1 + e 2 x − 1 ) ( e 2 x + 1 − e 2 x + 1 ) ( e 2 x + 1 ) ( e 2 x + 1 ) = ( e 2 x + 1 + e 2 x − 1 ) ( e 2 x + 1 ) ( e 2 x + 1 − e 2 x + 1 ) ( e 2 x + 1 ) = ( 1 + tanh ⁡ x ) ( 1 − tanh ⁡ x ) \begin{array}{l} \frac{d \tanh x}{d x}=\left(\frac{e^{2 x}-1}{e^{2 x}+1}\right)^{\prime}=\frac{\left(e^{2 x}-1\right)^{\prime}\left(e^{2 x}+1\right)-\left(e^{2 x}-1\right)\left(e^{2 x}+1\right)^{\prime}}{\left(e^{2 x}+1\right)^{2}} \\ =\frac{2 e^{2 x}\left(e^{2 x}+1\right)-\left(e^{2 x}-1\right) 2 e^{2 x}}{\left(e^{2 x}+1\right)^{2}}=\frac{4 e^{2 x}}{\left(e^{2 x}+1\right)^{2}} \\ =\frac{\left(e^{2 x}+1+e^{2 x}-1\right)\left(e^{2 x}+1-e^{2 x}+1\right)}{\left(e^{2 x}+1\right)\left(e^{2 x}+1\right)} =\frac{\left(e^{2 x}+1+e^{2 x}-1\right)}{\left(e^{2 x}+1\right)} \frac{\left(e^{2 x}+1-e^{2 x}+1\right)}{\left(e^{2 x}+1\right)} \\ =(1+\tanh x)(1-\tanh x) \end{array} dxdtanhx=(e2x+1e2x1)=(e2x+1)2(e2x1)(e2x+1)(e2x1)(e2x+1)=(e2x+1)22e2x(e2x+1)(e2x1)2e2x=(e2x+1)24e2x=(e2x+1)(e2x+1)(e2x+1+e2x1)(e2x+1e2x+1)=(e2x+1)(e2x+1+e2x1)(e2x+1)(e2x+1e2x+1)=(1+tanhx)(1tanhx)
  则 h = t a n h x h=tanhx h=tanhx h ′ = ( 1 + h ) ( 1 − h ) h^{'}=(1+h)(1-h) h=(1+h)(1h)导数范围是 ( 0 , 1 ) (0,1) (0,1),易导致梯度消失。

2.2 Sigmoid

  将输出值压缩到0-1之间, f ( x ) = σ ( x ) = 1 1 + e − x f(x)=\sigma(x)=\frac{1}{1+e^{-x}} f(x)=σ(x)=1+ex1
d d x σ ( x ) = d d x ( 1 1 + e − x ) = e − x ( 1 + e − x ) 2 = ( 1 + e − x ) − 1 ( 1 + e − x ) 2 = 1 + e − x ( 1 + e − x ) 2 − ( 1 1 + e − x ) 2 = σ ( x ) − σ ( x ) 2 \begin{aligned} \frac{d}{d x} \sigma(x) &=\frac{d}{d x}\left(\frac{1}{1+e^{-x}}\right) \\ &=\frac{e^{-x}}{\left(1+e^{-x}\right)^{2}} \\ &=\frac{\left(1+e^{-x}\right)-1}{\left(1+e^{-x}\right)^{2}} \\ &=\frac{1+e^{-x}}{\left(1+e^{-x}\right)^{2}}-\left(\frac{1}{1+e^{-x}}\right)^{2} \\ &=\sigma(x)-\sigma(x)^{2} \\ \end{aligned} dxdσ(x)=dxd(1+ex1)=(1+ex)2ex=(1+ex)2(1+ex)1=(1+ex)21+ex(1+ex1)2=σ(x)σ(x)2

  所以有 σ ′ = σ ( 1 − σ ) \sigma^{\prime} =\sigma(1-\sigma) σ=σ(1σ) 。导数输出范围是 [ 0 , 0.25 ] [0, 0.25] [0,0.25],易导致梯度消失。输出为非0均值,破坏数据分布。
缺陷: 在x值趋近 + ∞ , − ∞ +\infty,-\infty +, 时,导数接近0, σ \sigma σ 的参数(权值)会长时间得不到更新,此过程叫梯度弥散(梯度消亡)
  梯度消亡解决方法:
  ① 使用激活函数 ReLU: f ( x ) = m a x ( 0 , x ) f(x)=max(0, x) f(x)=max(0,x),输入大于0,梯度为1,否则为0。
  ② 使用激活函数 LeakyReLu: f ( x ) = m a x ( α x , x ) f(x) = max(\alpha x,x) f(x)=max(αx,x),输入大于等于0, 梯度为1, 否则为 α \alpha α

2.3 ReLU

    y = m a x ( 0 , x ) y=max(0,x) y=max(0,x)
f ( x ) = { 0  for  x < 0 x  for  x ≥ 0 f(x)=\left\{\begin{array}{ll} 0 & \text { for } x<0 \\ x & \text { for } x \geq 0 \end{array}\right. f(x)={0x for x<0 for x0
  输出值均为正数,负半轴导致死神经元,减少计算量。反向传播时,导数是1,不会有放大或缩小的效应,缓解梯度消失。缓解过拟合,在输入小于 0 时,输出值也小于0,神经网络相当于未参与训练,可训练参数减少,缓解过拟合。

2.4 LeakyReLU

在这里插入图片描述
nn.LeakyReLU

  • negative_slope:负半轴斜率

nn.PReLU

  • init:可学习斜率

nn.RReLU

  • lower:均匀分布下限
  • upper:均匀分布上限

3. softmax

softmax是一种特殊的激活函数,与tanh,sigmoid,ReLU的区别:

  • softmax输入是向量,输出是向量,不方便画出显式的函数关系图;输出向量的某元素和整个输入向量均有关;常用于网络输出层的激活函数,归一化类别的预测概率。
  • 对于常规激活函数,输入为标量时输出标量,可画出函数关系图;当输入为向量时输出为向量,但输出向量的各个元素之间独立,即输出向量中某位置的元素不依赖于其他位置的输入元素。
  • 常规激活函数常用于网络中间层的激活函数,sigmoid也可用于输出层将实数变为[0, 1]的预测概率,tanh也可用于输出层将实数变为[-1, 1]的预测概率。这两种激活函数在输入很大或很小时会出现饱和现象,造成梯度更新缓慢,ReLU目前得到更多应用。

  网络结构图-1 中的softmax函数使用归一化指数函数。
σ : R K → { z ∈ R K ∣ z i > 0 , ∑ i = 1 K z i = 1 } σ ( z ) j = e z j ∑ k = 1 K e z k  for  j = 1 , … , K \begin{array}{l} \sigma: \mathbb{R}^{K} \rightarrow\left\{z \in \mathbb{R}^{K} \mid z_{i}>0, \sum_{i=1}^{K} z_{i}=1\right\} \\ \sigma(\mathbf{z})_{j}=\frac{e^{z_{j}}}{\sum_{k=1}^{K} e^{z_{k}}} \quad \text { for } j=1, \ldots, K \end{array} σ:RK{zRKzi>0,i=1Kzi=1}σ(z)j=k=1Kezkezj for j=1,,K

  • 设softmax的输入为 a ⃗ = ( a 1 , . . . , a K ) T \vec{a}=(a_1,..., a_K)^T a =(a1,...,aK)T,其中 a i = ∑ j w j i h j + b i a_i=\sum_jw_{ji}h_j+b_i ai=jwjihj+bi
  • softmax的输出为 o ⃗ = ( o 1 , . . . , o K ) T \vec{o}=(o_1,..., o_K)^T o =(o1,...,oK)T,其中 o i = e a i ∑ k e a k o_i=\frac{e^{a_{i}}}{\sum_{k} e^{a_{k}}} oi=keakeai
  • 设真实的标签为 t ⃗ = ( 0 , . . . , 0 , 1 , 0 , . . . , 0 ) T \vec{t}=(0,... ,0,1,0,... , 0)^T t =(0,...,0,1,0,...,0)T

softmax 对 a i a_i ai的导数推导 d o j d a i = d e a j ∑ k e a k d a i \frac{\mathrm{d} o_{j}}{d a_{i}}=\frac{d \frac{e^{a_{j}}}{\sum_{k} e^{a_{k}}}}{d a_{i}} daidoj=daidkeakeaj

  • i = j i=j i=j 时,
    d o j d a i = d e a j Σ k e a k d a i = e a j Σ k e a k − e a j e a i ( Σ k e a k ) 2 = e a j ( Σ k e a k − e a i ) ( Σ k e a k ) 2 = e a j ∑ k e a k ∑ k e a k − e a i ∑ k e a k = o j ( 1 − o i ) \frac{\mathrm{d} o_{j}}{d a_{i}}=\frac{d \frac{e^{a_{j}}}{\Sigma_{k} e^{a_{k}}}}{d a_{i}}=\frac{e^{a_{j}} \Sigma_{k} e^{a_{k}}-e^{a_{j}}e^{ a_{i}}}{\left(\Sigma_{k} e^{a_{k}}\right)^{2}}=\frac{e^{a_{j}}\left(\Sigma_{k} e^{a_{k}}-e ^{a_{i}}\right)}{\left(\Sigma_{k} e^{a_{k}}\right)^{2}}=\frac{e^{a_{j}}}{\sum_{k} e^{a_{k}}} \frac{\sum_{k} e^{a_{k}}-e^{ a_{i}}}{\sum_{k} e^{a_{k}}}=o_{j}\left(1-o_{i}\right) daidoj=daidΣkeakeaj=(Σkeak)2eajΣkeakeajeai=(Σkeak)2eaj(Σkeakeai)=keakeajkeakkeakeai=oj(1oi)
  • i ≠ j i \neq j i=j 时,
    d o j d a i = d e a j Σ k e a k d a i = 0 ⋅ Σ k e a k − e a j e a i ( Σ k e a k ) 2 = − e a j e a i ( ∑ k e a k ) 2 = − e a j ∑ k e a k e a i ∑ k e a k = − o j o i \frac{\mathrm{d} o_{j}}{d a_{i}}=\frac{d \frac{e^{a_{j}}}{\Sigma_{k} e^{a_{k}}}}{d a_{i}}=\frac{0 \cdot \Sigma_{k} e^{a_{k}} -e^{a_{j}} e^{a_{i}}}{\left(\Sigma_{k} e^{a_{k}}\right)^{2}}=\frac{-e^{a_{j}} e^{a_{i}}}{\left(\sum_{k} e^{a_{k}}\right)^{2}}=\frac{-e^{a_{j}}}{\sum_{k} e^{a_{k}}} \frac{e^{a_{i}}}{\sum_{k} e^{a_{k}}}=-o_{j} o_{i} daidoj=daidΣkeakeaj=(Σkeak)20Σkeakeajeai=(keak)2eajeai=keakeajkeakeai=ojoi
  • 综合起来, d o j d a i = o j ( 1 i = j − o i ) \frac{\mathrm{d} o_{j}}{d a_{i}}=o_{j}\left(1_{i =j}-o_{i}\right) daidoj=oj(1i=joi)

3.1 Softmax + CrossEntropy

 输出层激活函数softmax,损失函数为CrossEntropy时输出层的权值的梯度

  • 设softmax的输入为 a ⃗ = ( a 1 , . . . , a K ) T \vec{a}=(a_1,..., a_K)^T a =(a1,...,aK)T,其中 a i = ∑ j w j i h j + b i a_i=\sum_jw_{ji}h_j+b_i ai=jwjihj+bi
  • softmax的输出为 o ⃗ = ( o 1 , . . . , o K ) T \vec{o}=(o_1,..., o_K)^T o =(o1,...,oK)T,其中 o i = e a i ∑ k e a k o_i=\frac{e^{a_{i}}}{\sum_{k} e^{a_{k}}} oi=keakeai
  • 设真实的标签为 t ⃗ = ( 0 , . . . , 0 , 1 , 0 , . . . , 0 ) T \vec{t}=(0,... ,0,1,0,... , 0)^T t =(0,...,0,1,0,...,0)T
  • 交叉熵损失函数 L = − ∑ k t k log ⁡ o k L=-\sum_{k} t_{k} \log o_{k} L=ktklogok ⇒ ∂ L ∂ a l = − ∑ k t k ∂ log ⁡ o k ∂ a l \Rightarrow \frac{\partial L}{\partial a_{l}}=-\sum_{k} t_{k} \frac{\partial \log o_{k}}{\partial a_{l}} alL=ktkallogok

 根据softmax定义, o k = 1 Ω e a k , o_{k}=\frac{1}{\Omega} e^{a_{k}}, ok=Ω1eak, 其中 Ω = ∑ i e a i ⇒ log ⁡ o k = a k − log ⁡ Ω \Omega=\sum_{i} e^{a_{i}} \Rightarrow \log o_{k}=a_{k}-\log \Omega Ω=ieailogok=aklogΩ

 则有 ∂ log ⁡ o k ∂ a l = 1 k = l − 1 Ω ∂ Ω ∂ a l , \frac{\partial \log o_{k}}{\partial a_{l}}=1_{k= l}-\frac{1}{\Omega} \frac{\partial \Omega}{\partial a_{l}}, allogok=1k=lΩ1alΩ, 其中

  • ∂ Ω ∂ a l = ∑ i e a i 1 i = l = e a l , ⇒ ∂ log ⁡ o k ∂ a l = 1 k = l − e a l Ω = 1 k = l − o l \frac{\partial \Omega}{\partial a_{l}}=\sum_{i} e^{a_{i}} 1_{i= l}=e^{a_{l}}, \Rightarrow \frac{\partial \log o_{k}}{\partial a_{l}}=1_{k= l}-\frac{e^{a_{l}}}{\Omega}=1_{k= l}-o_{l} alΩ=ieai1i=l=eal,allogok=1k=lΩeal=1k=lol
  • ∂ L ∂ a l = − ∑ k t k ∂ log ⁡ o k ∂ a l = − ∑ k t k ( 1 k = l − o l ) = ∑ k t k ( o l − 1 k = l ) = ∑ k t k o l − ∑ k t k 1 k = l = o l − t l \frac{\partial L}{\partial a_{l}}=-\sum_{k} t_{k} \frac{\partial \log o_{k}}{\partial a_{l}}=-\sum_{k} t_{k}\left(1_{k= l}-o_{l}\right)=\sum_{k} t_{k}\left(o_{l}-1_{k= l}\right)=\sum_{k} t_{k} o_{l}-\sum_{k} t_{k} 1_{k= l}=o_{l}-t_{l} alL=ktkallogok=ktk(1k=lol)=ktk(ol1k=l)=ktkolktk1k=l=oltl
  • a l = ∑ j w j l h j + b l ⇒ ∂ a l ∂ w p q = ∑ j h j ∂ w j l ∂ w p q = ∑ j h j 1 j = p 1 l = q = h p 1 l = q a_{l}=\sum_{j} w_{j l} h_{j}+b_{l} \Rightarrow \frac{\partial a_{l}}{\partial w_{p q}}=\sum_{j} h_{j} \frac{\partial w_{j l}}{\partial w_{p q}}=\sum_{j} h_{j} 1_{j =p} 1_{l =q}=h_{p} 1_{l =q} al=jwjlhj+blwpqal=jhjwpqwjl=jhj1j=p1l=q=hp1l=q
  • ∂ L ∂ w p q = ∑ l ∂ L ∂ a l ∂ a l ∂ w p q = ∑ l ( o l − t l ) h p 1 l q = ( o q − t q ) h p \frac{\partial L}{\partial w_{p q}}=\sum_{l} \frac{\partial L}{\partial a_{l}} \frac{\partial a_{l}}{\partial w_{p q}}=\sum_{l}\left(o_{l}-t_{l}\right) h_{p} 1_{l q}=\left(o_{q}-t_{q}\right) h_{p} wpqL=lalLwpqal=l(oltl)hp1lq=(oqtq)hp

在这里插入图片描述根据上图,带入实例中计算
  根据 ∂ a l ∂ w p q = h p 1 l = q \frac{\partial a_{l}}{\partial w_{p q}}=h_{p} 1_{l =q} wpqal=hp1l=q,有 ∂ a l ∂ w j k = h j 1 l = k = { 0 , l ≠ k h j , l = k \frac{\partial a_{l}}{\partial w_{j k}}=h_{j} 1_{l= k}=\left\{\begin{array}{l}0, l \neq k \\ h_{j}, l=k\end{array}\right. wjkal=hj1l=k={0,l=khj,l=k l l l层为第 k k k层时
  在网络层结构中只有相连接的神经元才有非零梯度回传
  根据 ∂ L ∂ w p q = h p ( o q − t q ) \frac{\partial L}{\partial w_{p q}}= h_{p}\left(o_{q}-t_{q}\right) wpqL=hp(oqtq),有 ∂ L ∂ w j k = h j ( o k − t k ) \frac{\partial L}{\partial w_{jk}}= h_{j}\left(o_{k}-t_{k}\right) wjkL=hj(oktk)
  定义交叉熵误差 δ k = ∂ L ∂ a k = o k − t k \delta_{k}=\frac{\partial L}{\partial a_{k}}=o_{k}-t_{k} δk=akL=oktk ,则有 ∂ L ∂ w j k = h j δ k \frac{\partial L}{\partial w_{j k}}=h_{j} \delta_{k} wjkL=hjδk


  根据softmax的输入 a l = ∑ l w j l h j + b l a_{l}=\sum_{l} w_{j l} h_{j}+b_{l} al=lwjlhj+bl ∂ a l ∂ b k = 1 l k = { 0 , l ≠ k 1 , l = k \frac{\partial a_{l}}{\partial b_{k}}=1_{l k}=\left\{\begin{array}{l}0,l \neq k \\ 1,l=k\end{array}\right. bkal=1lk={0,l=k1,l=k ,偏置只和该神经元的激励有关
∂ L ∂ b k = ∑ l ∂ L ∂ a l ∂ a l ∂ b k = ∑ l ( o l − t l ) 1 l k = o k − t k = δ k \frac{\partial L}{\partial b_{k}}=\sum_{l} \frac{\partial L}{\partial a_{l}} \frac{\partial a_{l}}{\partial b_{k}}=\sum_{l}\left(o_{l}-t_{l}\right) \mathbb{1}_{l k}=o_{k}-t_{k}=\delta_{k} bkL=lalLbkal=l(oltl)1lk=oktk=δk
目标损失函数 L L L 相对于偏置的梯度等于该神经元的误差

在这里插入图片描述根据上图,带入实例中计算

  • z j z_j zj为第一层网络结构的输出,也为激活函数的输入, h j h_j hj为激活函数输出。所以有 z j = ∑ i w i j x i + b j z_j=\sum_i w_{ij}x_i+b_j zj=iwijxi+bj,则 ∂ z j ∂ w i j = x i \frac{\partial z_{j}}{\partial w_{ij}}=x_i wijzj=xi
  • a k a_k ak为第二层网络结构的输出,也为softmax函数的输入有 a k = ∑ j w j k h j + b k a_k=\sum_j w_{jk}h_j+b_k ak=jwjkhj+bk,则 ∂ a k ∂ h j = w i j \frac{\partial a_{k}}{\partial h_{j}}=w_{ij} hjak=wij
  • 激活函数为双曲正切函数 tanh,故 ∂ h j ∂ z j = ( 1 + h j ) ( 1 − h j ) \frac{\partial h_{j}}{\partial z_{j}}=\left(1+h_j\right)\left(1-h_j\right) zjhj=(1+hj)(1hj)
  • ∂ L ∂ w i j = ∂ L ∂ z j ∂ z j ∂ w i j = x i ∂ L ∂ z j = x i ∂ L ∂ h j ∂ h j ∂ z j \frac{\partial L}{\partial w_{i j}}=\frac{\partial L}{\partial z_{j}} \frac{\partial z_{j}}{\partial w_{i j}}=x_{i} \frac{\partial L}{\partial z_{j}}=x_{i} \frac{\partial L}{\partial h_{j}} \frac{\partial h_{j}}{\partial z_{j}} wijL=zjLwijzj=xizjL=xihjLzjhj
  • L L L h j h_j hj的偏导 和所有与 h j h_j hj相关连接的神经元有关, ∂ L ∂ h j = ∑ k ∂ L ∂ a k ∂ a k ∂ h j = ∑ k δ k ∂ a k ∂ h j = ∑ k δ k w j k \frac{\partial L}{\partial h_{j}}=\sum_{k} \frac{\partial L}{\partial a_{k}} \frac{\partial a_{k}}{\partial h_{j}}=\sum_{k} \delta_{k} \frac{\partial a_{k}}{\partial h_{j}}=\sum_{k} \delta_{k} w_{j k} hjL=kakLhjak=kδkhjak=kδkwjk
  • ∂ L ∂ w i j = x i ∑ k δ k w j k ( 1 + h j ) ( 1 − h j ) = x i δ j \frac{\partial L}{\partial w_{i j}}=x_{i} \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=x_{i} \delta_{j} wijL=xikδkwjk(1+hj)(1hj)=xiδj,定义 δ j = ∑ k δ k w j k ( 1 + h j ) ( 1 − h j ) \delta_{j} = \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right) δj=kδkwjk(1+hj)(1hj)

  • 因为 ∂ z j ∂ b j = 1 \frac{\partial z_{j}}{\partial b_{j}}=1 bjzj=1,则有 ∂ L ∂ b j = ∂ L ∂ z j ∂ z j ∂ b j = ∂ L ∂ z j = ∂ L ∂ h j ∂ h j ∂ z j \frac{\partial L}{\partial b_{j}}=\frac{\partial L}{\partial z_{j}} \frac{\partial z_{j}}{\partial b_{j}}=\frac{\partial L}{\partial z_{j}}=\frac{\partial L}{\partial h_{j}} \frac{\partial h_{j}}{\partial z_{j}} bjL=zjLbjzj=zjL=hjLzjhj
  • ∂ L ∂ b j = ∑ k δ k w j k ( 1 + h j ) ( 1 − h j ) = δ j \frac{\partial L}{\partial b_{j}}=\sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=\delta_{j} bjL=kδkwjk(1+hj)(1hj)=δj

3.1.1 实例中计算梯度更新

 将3.1章节红色部分公式带入网络结构中,计算梯度。
在这里插入图片描述

① 对第二层权值0.5 和0.4 进行梯度更新

  权值0.5的梯度: ∂ L ∂ w j k = h j ( o k − t k ) = 0.84 ∗ ( 0.57 − 0 ) = 0.4788 \frac{\partial L}{\partial w_{j k}}=h_{j} (o_k-t_k)=0.84*(0.57-0)=0.4788 wjkL=hj(oktk)=0.84(0.570)=0.4788
  权值0.4的梯度: ∂ L ∂ w j k = h j ( o k − t k ) = 0.84 ∗ ( 0.43 − 1 ) = − 0.4788 \frac{\partial L}{\partial w_{j k}}=h_{j} (o_k-t_k)=0.84*(0.43-1)=-0.4788 wjkL=hj(oktk)=0.84(0.431)=0.4788
  权值0.5的学习率随机设为0.1, 进行梯度更新; 0.5 − 0.4788 ∗ 0.1 = 0.45212 0.5 -0.4788*0.1=0.45212 0.50.47880.1=0.45212
  权值0.4的学习率随机设为0.1, 进行梯度更新; 0.4 − ( − 0.4788 ) ∗ 0.1 = 0.44788 0.4 -(-0.4788)*0.1=0.44788 0.4(0.4788)0.1=0.44788
② 对第一层权值0.1 进行梯度更新
  梯度: ∂ L ∂ w i j = x i ∑ k δ k w j k ( 1 + h j ) ( 1 − h j ) = 0.5 ∗ [ ( 0.57 − 0 ) ∗ 0.5 + ( 0.43 − 1 ) ∗ 0.4 ) ] ∗ ( 1 + 0.84 ) ∗ ( 1 − 0.84 ) = 0.0084 \frac{\partial L}{\partial w_{i j}}=x_{i} \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=0.5*[(0.57-0)*0.5+(0.43-1)*0.4)]*(1+0.84)*(1-0.84)=0.0084 wijL=xikδkwjk(1+hj)(1hj)=0.5[(0.570)0.5+(0.431)0.4)](1+0.84)(10.84)=0.0084
  学习率随机设为0.1, 进行梯度更新; w i j ′ = 0.1 − 0.0084 ∗ 0.1 = 0.09916 {w_{ij}}^{'}=0.1 -0.0084*0.1=0.09916 wij=0.10.00840.1=0.09916

3.2 softmax + Square Error

 输出层激活函数softmax,损失函数为Square Error时输出层的权值的梯度

  • 设softmax的输入为 a ⃗ = ( a 1 , . . . , a K ) T \vec{a}=(a_1,..., a_K)^T a =(a1,...,aK)T,其中 a i = ∑ j w j i h j + b i a_i=\sum_jw_{ji}h_j+b_i ai=jwjihj+bi

  • softmax的输出为 o ⃗ = ( o 1 , . . . , o K ) T \vec{o}=(o_1,..., o_K)^T o =(o1,...,oK)T,其中 o i = e a i ∑ k e a k o_i=\frac{e^{a_{i}}}{\sum_{k} e^{a_{k}}} oi=keakeai

  • 设真实的标签为 t ⃗ = ( 0 , . . . , 0 , 1 , 0 , . . . , 0 ) T \vec{t}=(0,... ,0,1,0,... , 0)^T t =(0,...,0,1,0,...,0)T

  • 平方损失函数 L = 1 2 ∑ k ( o k − t k ) 2 L=\frac{1}{2} \sum_{k}\left(o_{k}-t_{k}\right)^{2} L=21k(oktk)2

    • L对输入 a i a_i ai的导数
      ∂ L ∂ a l = 1 2 ∑ k ∂ ( o k − t k ) 2 ∂ a l = 1 2 ∑ k ∂ ( o k − t k ) 2 ∂ o k d o k d a l = ∑ k ( o k − t k ) d o k d a l = ∑ k ( o k − t k ) o k ( 1 k = l − o l ) \frac{\partial L}{\partial a_{l}}=\frac{1}{2} \sum_{k} \frac{\partial\left(o_{k}-t_{k}\right)^{2}}{\partial a_{l}}=\frac{1}{2} \sum_{k} \frac{\partial\left(o_{k}-t_{k}\right)^{2}}{\partial o_{k}} \frac{\mathrm{d} o_{k}}{d a_{l}}=\sum_{k}\left(o_{k}-t_{k}\right) \frac{\mathrm{d} o_{k}}{d a_{l}}=\sum_{k}\left(o_{k}-t_{k}\right) o_{k}\left(1_{k =l}-o_{l}\right) alL=21kal(oktk)2=21kok(oktk)2daldok=k(oktk)daldok=k(oktk)ok(1k=lol)
  • a l = ∑ j w j l h j + b l ⇒ ∂ a l ∂ w p q = ∑ j h j ∂ w j l ∂ w p q = ∑ j h j 1 j = p 1 l = q = h p 1 l = q a_l=\sum_jw_{jl}h_j+b_l \Rightarrow \frac{\partial a_{l}}{\partial w_{p q}}=\sum_{j} h_{j} \frac{\partial w_{j l}}{\partial w_{p q}}=\sum_{j} h_{j} 1_{j= p} 1_{l= q}=h_{p} 1_{l= q} al=jwjlhj+blwpqal=jhjwpqwjl=jhj1j=p1l=q=hp1l=q

  • ∂ L ∂ w p q = ∑ l ∂ L ∂ a l ∂ a l ∂ w p q = ∑ l ∑ k ( o k − t k ) o k ( 1 k = l − o l ) h p 1 l = q = h p ∑ k ( o k − t k ) o k ( 1 k = p − o q ) \frac{\partial L}{\partial w_{p q}}=\sum_{l} \frac{\partial L}{\partial a_{l}} \frac{\partial a_{l}}{\partial w_{p q}}=\sum_{l} \sum_{k}\left(o_{k}-t_{k}\right) o_{k}\left(1_{k =l}-o_{l}\right) h_{p} 1_{l= q}=h_{p}\sum_{k}\left(o_{k}-t_{k}\right) o_{k}\left(1_{k =p}-o_{q}\right) wpqL=lalLwpqal=lk(oktk)ok(1k=lol)hp1l=q=hpk(oktk)ok(1k=poq)

在这里插入图片描述

  • ∂ L ∂ w j k = h j ∑ l ( o l − t l ) o l ( 1 l = k − o k ) = h j δ k \frac{\partial L}{\partial w_{j k}}=h_{j} \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =k}-o_{k}\right)=h_{j} \delta_{k} wjkL=hjl(oltl)ol(1l=kok)=hjδk,定义平方误差 δ k = ∑ l ( o l − t l ) o l ( 1 l = k − o k ) \delta_{k}= \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =k}-o_{k}\right) δk=l(oltl)ol(1l=kok)
  • 因为 a l = ∑ l w j l h j + b l a_{l}=\sum_{l} w_{j l} h_{j}+b_{l} al=lwjlhj+bl ∂ a l ∂ b k = 1 l = k \frac{\partial a_{l}}{\partial b_{k}}=1_{l =k} bkal=1l=k
  • ∂ L ∂ b k = ∑ l ∂ L ∂ a l ∂ a l ∂ b k = ∂ L ∂ a k = δ k \frac{\partial L}{\partial b_{k}}=\sum_{l} \frac{\partial L}{\partial a_{l}} \frac{\partial a_{l}}{\partial b_{k}}=\frac{\partial L}{\partial a_{k}}=\delta_{k} bkL=lalLbkal=akL=δk
  • ∂ L ∂ w i j \frac{\partial L}{\partial w_{ij}} wijL ∂ L ∂ b j \frac{\partial L}{\partial b_{j}} bjL不变
  • 已知交叉熵误差 δ k = ∂ L ∂ a k = o k − t k \delta_{k}=\frac{\partial L}{\partial a_{k}}=o_k-t_k δk=akL=oktk,对比平方误差和交叉熵误差,可知交叉熵误差函数的误差简洁直观。

3.2.1 实例中计算梯度更新

 将3.2章节红色部分公式带入网络结构中,计算梯度。
在这里插入图片描述
① 对第二层权值0.5 和0.4 进行梯度更新
使用交叉熵误差
  权值0.5的梯度: ∂ L ∂ w j k = h j ( o k − t k ) = 0.84 ∗ ( 0.57 − 0 ) = 0.4788 \frac{\partial L}{\partial w_{j k}}=h_{j} (o_k-t_k)=0.84*(0.57-0)=0.4788 wjkL=hj(oktk)=0.84(0.570)=0.4788
  权值0.4的梯度: ∂ L ∂ w j k = h j ( o k − t k ) = 0.84 ∗ ( 0.43 − 1 ) = − 0.4788 \frac{\partial L}{\partial w_{j k}}=h_{j} (o_k-t_k)=0.84*(0.43-1)=-0.4788 wjkL=hj(oktk)=0.84(0.431)=0.4788
  权值0.5的学习率随机设为0.1, 进行梯度更新; 0.5 − 0.4788 ∗ 0.1 = 0.45212 0.5 -0.4788*0.1=0.45212 0.50.47880.1=0.45212
  权值0.4的学习率随机设为0.1, 进行梯度更新; 0.4 − ( − 0.4788 ) ∗ 0.1 = 0.44788 0.4 -(-0.4788)*0.1=0.44788 0.4(0.4788)0.1=0.44788
使用平方误差
  平方误差 δ 1 = ∑ l ( o l − t l ) o l ( 1 l = 1 − o 1 ) = ( 0.57 − 0 ) ∗ 0.57 ∗ ( 1 − 0.57 ) + ( 0.43 − 1 ) ∗ 0.43 ∗ ( 0 − 0.43 ) = 0.25 \delta_{1}= \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =1}-o_{1}\right)=(0.57-0)*0.57*(1-0.57)+(0.43-1)*0.43*(0-0.43)=0.25 δ1=l(oltl)ol(1l=1o1)=(0.570)0.57(10.57)+(0.431)0.43(00.43)=0.25
  权值0.5的梯度: ∂ L ∂ w j k = h j ∑ l ( o l − t l ) o l ( 1 l = k − o k ) = h j δ k = 0.84 ∗ 0.25 = 0.21 \frac{\partial L}{\partial w_{j k}}=h_{j} \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =k}-o_{k}\right)=h_j\delta_k=0.84*0.25=0.21 wjkL=hjl(oltl)ol(1l=kok)=hjδk=0.840.25=0.21
  权值0.5的学习率随机设为0.1, 进行梯度更新; 0.5 − 0.21 ∗ 0.1 = 0.479 0.5 -0.21*0.1=0.479 0.50.210.1=0.479


  平方误差 δ 2 = ∑ l ( o l − t l ) o l ( 1 l = 2 − o 2 ) = ( 0.57 − 0 ) ∗ 0.57 ∗ ( 0 − 0.57 ) + ( 0.43 − 1 ) ∗ 0.43 ∗ ( 1 − 0.43 ) = − 0.33 \delta_{2}= \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =2}-o_{2}\right)=(0.57-0)*0.57*(0-0.57)+(0.43-1)*0.43*(1-0.43)=-0.33 δ2=l(oltl)ol(1l=2o2)=(0.570)0.57(00.57)+(0.431)0.43(10.43)=0.33
  权值0.4 的梯度: ∂ L ∂ w j k = h j ∑ l ( o l − t l ) o l ( 1 l = k − o k ) = h j δ k = 0.84 ∗ ( − 0.33 ) = − 0.28 \frac{\partial L}{\partial w_{j k}}=h_{j} \sum_{l}\left(o_{l}-t_{l}\right) o_{l}\left(1_{l =k}-o_{k}\right)=h_j\delta_k=0.84*(-0.33)=-0.28 wjkL=hjl(oltl)ol(1l=kok)=hjδk=0.84(0.33)=0.28
  权值0.4的学习率随机设为0.1, 进行梯度更新; 0.4 − ( − 0.28 ) ∗ 0.1 = 0.428 0.4 -(-0.28)*0.1=0.428 0.4(0.28)0.1=0.428

② 对第一层权值0.1 进行梯度更新
使用交叉熵误差
  梯度: ∂ L ∂ w i j = x i ∑ k δ k w j k ( 1 + h j ) ( 1 − h j ) = 0.5 ∗ [ ( 0.57 − 0 ) ∗ 0.5 + ( 0.43 − 1 ) ∗ 0.4 ) ] ∗ ( 1 + 0.84 ) ∗ ( 1 − 0.84 ) = 0.0084 \frac{\partial L}{\partial w_{i j}}=x_{i} \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=0.5*[(0.57-0)*0.5+(0.43-1)*0.4)]*(1+0.84)*(1-0.84)=0.0084 wijL=xikδkwjk(1+hj)(1hj)=0.5[(0.570)0.5+(0.431)0.4)](1+0.84)(10.84)=0.0084
  学习率随机设为0.1, 进行梯度更新; w i j ′ = 0.1 − 0.0084 ∗ 0.1 = 0.09916 {w_{ij}}^{'}=0.1 -0.0084*0.1=0.09916 wij=0.10.00840.1=0.09916

使用平方误差
  梯度: ∂ L ∂ w i j = x i ∑ k δ k w j k ( 1 + h j ) ( 1 − h j ) = 0.5 ∗ [ δ 1 ∗ 0.5 + δ 2 ∗ 0.4 ] ∗ ( 1 + 0.84 ) ∗ ( 1 − 0.84 ) = 0.5 ∗ [ 0.25 ∗ 0.5 + ( − 0.33 ) ∗ 0.4 ] ∗ 1.84 ∗ 0.16 = − 0.01 \frac{\partial L}{\partial w_{i j}}=x_{i} \sum_{k} \delta_{k} w_{j k}\left(1+h_{j}\right)\left(1-h_{j}\right)=0.5*[\delta_1*0.5+\delta_2*0.4]*(1+0.84)*(1-0.84)=0.5*[0.25*0.5+(-0.33)*0.4]*1.84*0.16=-0.01 wijL=xikδkwjk(1+hj)(1hj)=0.5[δ10.5+δ20.4](1+0.84)(10.84)=0.5[0.250.5+(0.33)0.4]1.840.16=0.01
  学习率随机设为0.1, 进行梯度更新; w i j ′ = 0.1 − ( − 0.01 ) ∗ 0.1 = 0.101 {w_{ij}}^{'}=0.1 -(-0.01)*0.1=0.101 wij=0.1(0.01)0.1=0.101

4. BP算法

 在线书籍《Neural Networks and Deep Learning》地址链接代码仓库链接
 BP算法核心是求解代价函数 C 相对于权重 w 和偏置 b 的偏导,即改变参数 w 和 b 时代价函数 C 的变化程度,揭示改变 w 和 b 如何影响网络的整体行为。

4.1 变量的说明

在这里插入图片描述
w j k l w_{jk}^l wjkl: l − 1 l-1 l1层的第 k k k个神经元到第 l l l层的第 j j j个神经元的权重, w w w的下标记号虽用倒序 ,但利于后续推导。
在这里插入图片描述 b j l b_j^l bjl: l l l层第 j j j个神经元的偏置;  b l b^l bl: l l l层的偏置向量;
a j l a_j^l ajl: l l l层第 j j j个神经元的激励(激活);  a l a^l al: l l l层的激励向量;
w l w^l wl: l l l层的权值矩阵,矩阵第 j j j行第 k k k列为 w j k l w_{jk}^l wjkl
a j l = σ ( ∑ k w j k l a k l − 1 + b j l ) , a l = σ ( w l a l − 1 + b l ) a_{j}^{l}=\sigma\left(\sum_{k} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l}\right), \quad a^l=\sigma(w^la^{l-1}+b^l) ajl=σ(kwjklakl1+bjl),al=σ(wlal1+bl)
  定义中间变量 z l z^l zl z l ≡ w l a l − 1 + b l z^{l} \equiv w^{l} a^{l-1}+b^{l} zlwlal1+bl z l z^l zl为第 l l l 层神经元的加权输入向量,其中 z j l z_j^l zjl为第 l l l层第 j j j个神经元的 加权输入
z j l = ∑ k w j k l a k l − 1 + b j l , a l = σ ( z l ) z_{j}^{l}=\sum_{k} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l}, \quad a^{l}=\sigma\left(z^{l}\right) zjl=kwjklakl1+bjl,al=σ(zl)
  平均损失代价函数 C C C C = 1 2 n ∑ x ∥ y ( x ) − a L ( x ) ∥ 2 C=\frac{1}{2 n} \sum_{x}\left\|y(x)-a^{L}(x)\right\|^{2} C=2n1xy(x)aL(x)2
y = y ( x ) y=y(x) y=y(x),样本 x x x的标签向量(期望输出)
a L = a L ( x ) a^L=a^L(x) aL=aL(x),样本 x x x的网络输出激励向量
n n n:样本数量, L L L:网络层数

4.2 代价函数假设与哈达玛积

在这里插入图片描述
  代价函数表达为神经网络输出的函数(以一个样本为例)
C = 1 2 ∥ y − a L ∥ 2 = 1 2 ∑ j ( y j − a j L ) 2 C=\frac{1}{2}\left\|y-a^{L}\right\|^{2}=\frac{1}{2} \sum_{j}\left(y_{j}-a_{j}^{L}\right)^{2} C=21yaL2=21j(yjajL)2
  其中 y i y_i yi 是输入 x x x 的标签,属于固定值(常量), C C C 只是网络输出激励 a a a 的函数。
哈达玛积:
  定义 设 A , B ∈ C m × n A, B \in \mathbb{C}^{m \times n} A,BCm×n A = [ a i j ] , B = [ b i j ] , A=[a_{i j}], B=\left[b_{i j}\right], A=[aij],B=[bij], m ⋅ n m\cdot n mn矩阵
[ a 11 b 11 a 12 b 12 ⋯ a 1 n b 1 n a 21 b 21 a 22 b 22 ⋯ a 2 n b 2 n ⋮ ⋮ ⋮ a m 1 b m 1 a m 2 b m 2 ⋯ a m n b m n ] \left[\begin{array}{cccc} a_{11} b_{11} & a_{12} b_{12} & \cdots & a_{1 n} b_{1 n} \\ a_{21} b_{21} & a_{22} b_{22} & \cdots & a_{2 n} b_{2 n} \\ \vdots & \vdots & & \vdots \\ a_{m 1} b_{m 1} & a_{m 2} b_{m 2} & \cdots & a_{m n} b_{m n} \end{array}\right] a11b11a21b21am1bm1a12b12a22b22am2bm2a1nb1na2nb2namnbmn
  为矩阵 AB 的哈达玛(Hadamard)积,记作 A ∘ B A \circ B AB
  若 s 和 t 是两个相同维度的向量,两者的哈达玛积为向量的逐乘。 ( s ⊙ t ) j = s j t j (s \odot t)_{j}=s_{j} t_{j} (st)j=sjtj对应元素相乘。如: [ 1 2 ] ⊙ [ 3 4 ] = [ 1 ∗ 3 2 ∗ 4 ] = [ 3 8 ] \left[\begin{array}{l}1 \\ 2\end{array}\right] \odot\left[\begin{array}{l}3 \\ 4\end{array}\right]=\left[\begin{array}{l}1 * 3 \\ 2 * 4\end{array}\right]=\left[\begin{array}{l}3 \\ 8\end{array}\right] [12][34]=[1324]=[38]

4.3 BP算法四大公式

在这里插入图片描述  假设有一个精灵在第 l l l 层的 j j j 个神经元上捣鬼,在其加权输入上添加一个增量,使得该神经元输出激励变化如下, δ ( z j l ) \delta\left(z_{j}^{l}\right) δ(zjl) 变为 δ ( z j l + Δ z j l ) \delta\left(z_{j}^{l}+\Delta z_{j}^{l}\right) δ(zjl+Δzjl);通过网络传播,代价函数变化量为: ∂ C ∂ z j l Δ z j l \frac{\partial C}{\partial z_{j}^{l}} \Delta z_{j}^{l} zjlCΔzjl
定义第 l l l 层第 j j j 个神经元的误差为: σ j l ≡ ∂ C ∂ z j l \sigma_{j}^{l} \equiv \frac{\partial C}{\partial z_{j}^{l}} σjlzjlC

  • 假如该梯度 ∂ C ∂ z j l \frac{\partial C}{\partial z_j^l} zjlC 大(可为正数或者负数)
  • 好的精灵会让代价 C C C 减少,即会选择与梯度符号相反的增量。相反,如果梯度很小(接近于0),则扰动的增量无论如何取值,对代价函数的改变作用都很小,即该神经元相对于代价函数而言倾向于近似最优。
  • 因此,该 梯度可看作该神经元训练误差的表征。即梯度大表明还没训练好,稍微扰动下神经元激励就能造成代价 C C C 的较大变化;梯度小表明训练较好,扰动神经元的激励值对代价 C C C 的改变影响微弱。

  BP算法先求出各层神经元的误差,再将误差关联到权重(和偏置)相对于代价 C C C的梯度, ∂ C ∂ w j k l \frac{\partial C}{\partial w_{jk}^l} wjklC ∂ C ∂ b j l \frac{\partial C}{\partial b_j^l} bjlC

4.3.1 BP算法四大公式(一)

输出层误差公式 :(第 L 层(最后一层)误差)
δ j L = ∂ C ∂ a j L σ ′ ( z j L ) ( B P 1 ) \delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \sigma^{\prime}\left(z_{j}^{L}\right) \qquad\qquad (BP1) δjL=ajLCσ(zjL)(BP1)
  公式右边第一项代表代价函数 C C C 相对于输出层第 j j j 个神经元激励 a a a 的变化程度;第二项代表 激励 相对于 加权输入 的变化程度。
  使用哈达玛积,可以写为矩阵形式:
δ L = ∇ a C ⊙ σ ′ ( z L ) ( B P 1 a ) \delta^{L}=\nabla_{a} C \odot \sigma^{\prime}\left(z^{L}\right) \qquad\qquad (BP1a) δL=aCσ(zL)(BP1a)
  向量 ∇ a C \nabla_{a} C aC j j j 个元素为 ∂ C ∂ a j L \frac{\partial C}{\partial a_j^L} ajLC
  对于平方差损失函数有: ∇ a C = ( a L − y ) \nabla_{a} C=(a^L-y) aC=(aLy) δ L = ( a L − y ) ⊙ σ ′ ( z L ) \delta^L=(a^L-y) \odot \sigma^{\prime}\left(z^{L}\right) δL=(aLy)σ(zL)
证明:

  • 误差 σ j L \sigma_j^L σjL的定义: δ j L = ∂ C ∂ a j L ∂ a j L ∂ z j L \delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \frac{\partial a_{j}^{L}}{\partial z_{j}^{L}} δjL=ajLCzjLajL
  • 非线性激活 a j L = σ ( z j L ) a_{j}^{L}=\sigma\left(z_{j}^{L}\right) ajL=σ(zjL)
  • δ j L = ∂ C ∂ a j L σ ′ ( z j L ) \delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \sigma^{\prime}\left(z_j^{L}\right) δjL=ajLCσ(zjL)

4.3.2 BP算法四大公式(二)

由后一层误差推导本层误差的公式
δ l = ( ( w l + 1 ) T δ l + 1 ) ⊙ σ ′ ( z l ) ( B P 2 ) \delta^{l}=\left(\left(w^{l+1}\right)^{T} \delta^{l+1}\right) \odot \sigma^{\prime}\left(z^{l}\right) \qquad\qquad (BP2) δl=((wl+1)Tδl+1)σ(zl)(BP2)
在这里插入图片描述 假设已经知道第 l + 1 l+1 l+1 层的误差,通过 l + 1 l+1 l+1 层和 l l l 层之间的权值矩阵 w w w,将误差进行回传,得到第 l l l 层的误差。
结合BP1和BP2,可以得到网络每一层的误差。
证明:

  • 根据误差 δ k l + 1 \delta_k^{l+1} δkl+1 定义, δ k l + 1 = ∂ C ∂ z k l + 1 \delta_k^{l+1}=\frac{\partial C}{\partial z_{k}^{l+1}} δkl+1=zkl+1C
  • δ j l = ∂ C ∂ z j l = ∑ k ∂ C ∂ z k l + 1 ∂ z k l + 1 ∂ z j l = ∑ k ∂ z k l + 1 ∂ z j l δ k l + 1 \delta_{j}^{l}=\frac{\partial C}{\partial z_{j}^{l}}=\sum_{k} \frac{\partial C}{\partial z_{k}^{l+1}} \frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}}=\sum_{k} \frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}} \delta_{k}^{l+1} δjl=zjlC=kzkl+1Czjlzkl+1=kzjlzkl+1δkl+1
  • 加权输入 z k l + 1 z_{k}^{l+1} zkl+1 有, z k l + 1 = ∑ j w k j l + 1 a j l + b k l + 1 = ∑ j w k j l + 1 σ ( z j l ) + b k l + 1 z_{k}^{l+1}=\sum_{j} w_{k j}^{l+1} a_{j}^{l}+b_{k}^{l+1}=\sum_{j} w_{k j}^{l+1} \sigma\left(z_{j}^{l}\right)+b_{k}^{l+1} zkl+1=jwkjl+1ajl+bkl+1=jwkjl+1σ(zjl)+bkl+1
  • 则, ∂ z k l + 1 ∂ z j l = w k j l + 1 σ ′ ( z j l ) \frac{\partial z_{k}^{l+1}}{\partial z_{j}^{l}}=w_{k j}^{l+1} \sigma^{\prime}\left(z_{j}^{l}\right) zjlzkl+1=wkjl+1σ(zjl) δ j l = ∑ k w k j l + 1 δ k l + 1 σ ′ ( z j l ) \delta_{j}^{l}=\sum_{k}w_{k j}^{l+1} \delta_{k}^{l+1}\sigma^{\prime}\left(z_{j}^{l}\right) δjl=kwkjl+1δkl+1σ(zjl)

4.3.3 BP算法四大公式(三)

代价函数 C C C 相对于网络中任意偏置 b b b 梯度(即变化率)的公式
∂ C ∂ b j l = δ j l ( B P 3 ) \frac{\partial C}{\partial b_{j}^{l}}=\delta_{j}^{l} \qquad\qquad (BP3) bjlC=δjl(BP3)
  矩阵可表达为: ∂ C ∂ b = δ \frac{\partial C}{\partial b}=\delta bC=δ
证明:

  • 加权输入 z j l z_j^l zjl 定义, z j l = ∑ k w j k l a k l − 1 + b j l z_{j}^{l}=\sum_{k} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l} zjl=kwjklakl1+bjl,有 ∂ z j l ∂ b j l = 1 \frac{\partial z_j^l}{\partial b_{j}^{l}}=1 bjlzjl=1
  • ∂ C ∂ b j l = ∂ C ∂ z j l ∂ z j l ∂ b j l = ∂ C ∂ z j l = δ j l \frac{\partial C}{\partial b_{j}^{l}}=\frac{\partial C}{\partial z_{j}^{l}} \frac{\partial z_{j}^{l}}{\partial b_{j}^{l}}=\frac{\partial C}{\partial z_{j}^{l}}=\delta_{j}^{l} bjlC=zjlCbjlzjl=zjlC=δjl

4.3.4 BP算法四大公式(四)

代价函数 C C C 相对于网络中任意权值 w w w 梯度(即变化率)的公式
∂ C ∂ w j k l = a k l − 1 δ j l ( B P 4 ) \frac{\partial C}{\partial w_{jk}^{l}}=a_k^{l-1}\delta_{j}^{l} \qquad\qquad (BP4) wjklC=akl1δjl(BP4)
  去掉繁琐的下标,可表达为: ∂ C ∂ w = a i n δ o u t \frac{\partial C}{\partial w}=a_{\mathrm{in}} \delta_{\mathrm{out}} wC=ainδout
在这里插入图片描述  乘积第一项 a i n a_{in} ain 表示输入权值 w w w 的上层神经元激励;第二项表示权值 w w w 输出到下层神经元的误差。
  如果 a i n a_{in} ain 接近于0,权值梯度也会接近于零,此时称该神经元权值学习慢,即梯度下降时更新少。激励值过低的神经元学习慢( learn slowly)。
证明:

  • 加权输入 z j l z_j^l zjl 定义, z j l = ∑ k w j k l a k l − 1 + b j l z_{j}^{l}=\sum_{k} w_{j k}^{l} a_{k}^{l-1}+b_{j}^{l} zjl=kwjklakl1+bjl,有 ∂ z j l ∂ w j k l = a k l − 1 \frac{\partial z_{j}^{l}}{\partial w_{j k}^{l}}=a_{k}^{l-1} wjklzjl=akl1
  • ∂ C ∂ w j k l = ∂ C ∂ z j l ∂ z j l ∂ w j k l = δ j l a k l − 1 \frac{\partial C}{\partial w_{j k}^{l}}=\frac{\partial C}{\partial z_{j}^{l}} \frac{\partial z_{j}^{l}}{\partial w_{j k}^{l}}=\delta_{j}^{l} a_{k}^{l-1} wjklC=zjlCwjklzjl=δjlakl1

对于sigmoid函数,当输入取值很大或者很小时,其值接近1或者0,其导数则接近于0。 σ ( z ) ≡ 1 1 + e − z \sigma(z) \equiv \frac{1}{1+e^{-z}} σ(z)1+ez1 ;导数 σ ′ ( z j L ) ≈ 0 \sigma^{\prime}\left(z_{j}^{L}\right) \approx 0 σ(zjL)0
在这里插入图片描述



δ j L = ∂ C ∂ a j L σ ′ ( z j L ) ( B P 1 ) \delta_{j}^{L}=\frac{\partial C}{\partial a_{j}^{L}} \sigma^{\prime}\left(z_{j}^{L}\right) \qquad\qquad (BP1) δjL=ajLCσ(zjL)(BP1)
δ l = ( ( w l + 1 ) T δ l + 1 ) ⊙ σ ′ ( z l ) ( B P 2 ) \delta^{l}=\left(\left(w^{l+1}\right)^{T} \delta^{l+1}\right) \odot \sigma^{\prime}\left(z^{l}\right) \qquad\qquad (BP2) δl=((wl+1)Tδl+1)σ(zl)(BP2)
∂ C ∂ w j k l = a k l − 1 δ j l ( B P 4 ) \frac{\partial C}{\partial w_{jk}^{l}}=a_k^{l-1}\delta_{j}^{l} \qquad\qquad (BP4) wjklC=akl1δjl(BP4)

  某层神经元的加权输入过大(或过小)时,输出激励值很大(接近1,或者很小,即接近0),激励的导数接近0,导致误差小,权值学习慢,即接近饱和状态(saturated),逐渐停止学习。
一个权值学习慢,可能是由于其输入神经元的激励很小,或者其输出神经元接近饱和(其激励很大或者很小)。


参考链接 - 贪心科技
神经网络与深度学习-中文翻译

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值