神经网络基础(三)—— 全连接神经网络与反向传播算法

1. 前言

网上关于神经网络的浅显介绍已经很多了,本文不再赘述,重点是神经网络的前后向传播过程的理论推导。

2. 模型基本情况说明

2.1 网络结构

在这里插入图片描述
在上图所示的网络结构中,每个节点都有一个编号,输入层共有三个特征分别为: x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3以及一个偏置项bias(图中未画出),隐藏层有四个神经元,第 j j j个神经元与第 i i i个特征连接的权重记为 w j i w_{ji} wji,隐藏层中每个神经元的输出分别记为 a 4 , a 5 , a 6 , a 7 a_4,a_5,a_6,a_7 a4,a5,a6,a7,同样的,输出层为2个节点,第 k k k个节点与第 j j j个隐藏层的权重记为 w k j w_{kj} wkj

2.2 激活函数

输入层与隐藏层,隐藏层与输出层的激活函数均采用
s i g m o i d ( x ) = 1 1 + e − x f ( ) (2.1) sigmoid(x)=\frac{1}{1+e^{-x}}f() \tag{2.1} sigmoid(x)=1+ex1f()(2.1)

  • 函数图像
    在这里插入图片描述
  • 导数性质
    y = s i g m o i d ( x ) y ′ = y ( 1 − y ) y=sigmoid(x)\\ y'=y(1-y) y=sigmoid(x)y=y(1y)

2.3 损失函数

取网络所有输出层节点的误差平方和作为目标函数:
E = 1 2 ∑ i ∈ o u t p u t s ( t i − y i ) 2 (2.3) E=\frac{1}{2}\sum_{i\in outputs}(t_i-y_i)^2 \tag{2.3} E=21ioutputs(tiyi)2(2.3)
t i t_i ti是第 i i i个节点的模拟值, y i y_i yi是第 i i i个节点的真实值。

为什么优化公式(3.4)需要使用梯度下降算法?
神经网络的非线性导致大多数我们感兴趣的代价函数变的非凸,意味着神经网络的训练通常使用迭代的基于梯度的优化,并不能保证全局收敛。


3. 算法流程

3.1 前向传播

  • 普通形式
    a 4 = s i g m o i d ( w T ⋅ x ) = s i g m o i d ( w 41 x 1 + w 42 x 2 + w 43 x 3 + w 4 b ) a 5 = s i g m o i d ( w 51 x 1 + w 52 x 2 + w 53 x 3 + w 5 b ) a 6 = s i g m o i d ( w 61 x 1 + w 62 x 2 + w 63 x 3 + w 6 b ) a 7 = s i g m o i d ( w 71 x 1 + w 72 x 2 + w 73 x 3 + w 7 b ) \begin{aligned} a_4&=sigmoid(\bold{w}^T\centerdot\bold{x})\\ &=sigmoid(w_{41}x_1+w_{42}x_2+w_{43}x_3+w_{4b})\\ a_5&=sigmoid(w_{51}x_1+w_{52}x_2+w_{53}x_3+w_{5b})\\ a_6&=sigmoid(w_{61}x_1+w_{62}x_2+w_{63}x_3+w_{6b})\\ a_7&=sigmoid(w_{71}x_1+w_{72}x_2+w_{73}x_3+w_{7b})\\ \end{aligned} a4a5a6a7=sigmoid(wTx)=sigmoid(w41x1+w42x2+w43x3+w4b)=sigmoid(w51x1+w52x2+w53x3+w5b)=sigmoid(w61x1+w62x2+w63x3+w6b)=sigmoid(w71x1+w72x2+w73x3+w7b)
    输出层节点计算结果分别为:
    y 1 = s i g m o i d ( w 84 a 4 + w 85 a 5 + w 86 a 6 + w 87 a 7 + w 8 b ) y 2 = s i g m o i d ( w 94 a 4 + w 95 a 5 + w 96 a 6 + w 97 a 7 + w 9 b ) \begin{aligned} y_1&=sigmoid(w_{84}a_4+w_{85}a_5+w_{86}a_6+w_{87}a_7+w_{8b})\\ y_2&=sigmoid(w_{94}a_4+w_{95}a_5+w_{96}a_6+w_{97}a_7+w_{9b})\\ \end{aligned} y1y2=sigmoid(w84a4+w85a5+w86a6+w87a7+w8b)=sigmoid(w94a4+w95a5+w96a6+w97a7+w9b)

  • 矩阵形式
    x = [ x 1 x 2 x 3 1 ] w 4 T = [ w 41 , w 42 , w 43 , w 4 b ] w 5 T = [ w 51 , w 52 , w 53 , w 5 b ] w 6 T = [ w 61 , w 62 , w 63 , w 6 b ] w 7 T = [ w 71 , w 72 , w 73 , w 7 b ] f = s i g m o i d \begin{aligned} \bold{x}&=\begin{bmatrix}x_1\\x_2\\x_3\\1\end{bmatrix}\\ \bold{w}_4^T&=[w_{41},w_{42},w_{43},w_{4b}]\\ \bold{w}_5^T&=[w_{51},w_{52},w_{53},w_{5b}]\\ \bold{w}_6^T&=[w_{61},w_{62},w_{63},w_{6b}]\\ \bold{w}_7^T&=[w_{71},w_{72},w_{73},w_{7b}]\\ f&=sigmoid \end{aligned} xw4Tw5Tw6Tw7Tf=x1x2x31=[w41,w42,w43,w4b]=[w51,w52,w53,w5b]=[w61,w62,w63,w6b]=[w71,w72,w73,w7b]=sigmoid
    则隐藏层的输出值可以表示为:
    a 4 = f ( w 4 T ⋅ x ) a 5 = f ( w 5 T ⋅ x ) a 6 = f ( w 6 T ⋅ x ) a 7 = f ( w 7 T ⋅ x ) \begin{aligned} a_4&=f(\bold{w_4}^T\centerdot\bold{x})\\ a_5&=f(\bold{w_5}^T\centerdot\bold{x})\\ a_6&=f(\bold{w_6}^T\centerdot\bold{x})\\ a_7&=f(\bold{w_7}^T\centerdot\bold{x}) \end{aligned} a4a5a6a7=f(w4Tx)=f(w5Tx)=f(w6Tx)=f(w7Tx)
    则有:
    a = [ a 4 a 5 a 6 a 7 ] , W = [ w 4 T w 5 T w 6 T w 7 T ] = [ w 41 , w 42 , w 43 , w 4 b w 51 , w 52 , w 53 , w 5 b w 61 , w 62 , w 63 , w 6 b w 71 , w 72 , w 73 , w 7 b ] , f ( [ x 1 x 2 x 3 . . . ] ) = [ f ( x 1 ) f ( x 2 ) f ( x 3 ) . . . ] \bold{a}= \begin{bmatrix} a_4 \\ a_5 \\ a_6 \\ a_7 \\ \end{bmatrix}, \qquad \bold{W}= \begin{bmatrix} \bold{w}_4^T \\ \bold{w}_5^T \\ \bold{w}_6^T \\ \bold{w}_7^T \\ \end{bmatrix}= \begin{bmatrix} w_{41},w_{42},w_{43},w_{4b} \\ w_{51},w_{52},w_{53},w_{5b} \\ w_{61},w_{62},w_{63},w_{6b} \\ w_{71},w_{72},w_{73},w_{7b} \\ \end{bmatrix} ,\qquad f( \begin{bmatrix} x_1\\ x_2\\ x_3\\ .\\ .\\ .\\ \end{bmatrix})= \begin{bmatrix} f(x_1)\\ f(x_2)\\ f(x_3)\\ .\\ .\\ .\\ \end{bmatrix} a=a4a5a6a7,W=w4Tw5Tw6Tw7T=w41,w42,w43,w4bw51,w52,w53,w5bw61,w62,w63,w6bw71,w72,w73,w7b,f(x1x2x3...)=f(x1)f(x2)f(x3)...
    a = f ( W ⋅ x ) \bold{a}=f(\bold{W}\centerdot \bold{x}) a=f(Wx)

3.2 反向传播

3.2.1 结论

  • 对于输出层节点
    δ i = y ^ i ( 1 − y ^ i ) ( y i − y ^ i ) (3.1) \delta_i=\hat{y}_i(1-\hat{y}_i)(y_i-\hat{y}_i) \tag{3.1} δi=y^i(1y^i)(yiy^i)(3.1)
    其中, δ i \delta_i δi是节点的误差项, y ^ i \hat{y}_i y^i是节点的输出值, y i y_i yi是样本对应于节点 i i i的目标值(真实值)。举个例子,根据上图,对于输出层节点8来说,它的输出值是 y ^ 1 \hat{y}_1 y^1,而样本的目标值是 y 1 y_1 y1,带入上面的公式得到节点8的误差项 δ 8 \delta_8 δ8应该是:
    δ 8 = y ^ 1 ( 1 − y ^ 1 ) ( y 1 − y ^ 1 ) \delta_8=\hat{y}_1(1-\hat{y}_1)(y_1-\hat{y}_1) δ8=y^1(1y^1)(y1y^1)

  • 对于隐藏层节点
    δ i = a i ( 1 − a i ) ∑ k ∈ o u t p u t s w k i δ k (3.2) \delta_i=a_i(1-a_i)\sum_{k\in{outputs}}w_{ki}\delta_k \tag{3.2} δi=ai(1ai)koutputswkiδk(3.2)
    其中, a i a_i ai是节点的输出值, w k i w_{ki} wki是节点 i i i到它的下一层节点 k k k的连接的权重, d e l t a k delta_k deltak是节点 i i i的下一层节点 k k k的误差项。例如,对于隐藏层节点4来说,计算方法如下:
    δ 4 = a 4 ( 1 − a 4 ) ( w 84 δ 8 + w 94 δ 9 ) \delta_4=a_4(1-a_4)(w_{84}\delta_8+w_{94}\delta_9) δ4=a4(1a4)(w84δ8+w94δ9)

  • 权重的更新
    w j i ← w j i + η δ j x j i (3.3) w_{ji}\gets w_{ji}+\eta\delta_jx_{ji} \tag{3.3} wjiwji+ηδjxji(3.3)
    其中, w j i w_{ji} wji是节点 i i i到节点 j j j的权重, η \eta η是一个成为学习速率的常数, δ j \delta_j δj是节点 j j j的误差项, x j i x_{ji} xji是节点 i i i传递给节点 j j j的输入。例如,

    • 输出层:权重 w 84 w_{84} w84的更新方法如下:
      w 84 ← w 84 + η δ 8 a 4 δ 8 = y ^ 1 ( 1 − y ^ 1 ) ( y 1 − y ^ 1 ) w_{84}\gets w_{84}+\eta\delta_8 a_4\\ \delta_8=\hat{y}_1(1-\hat{y}_1)(y_1-\hat{y}_1) w84w84+ηδ8a4δ8=y^1(1y^1)(y1y^1)
    • 隐藏层:权重 w 41 w_{41} w41的更新方法如下:
      w 41 ← w 41 + η δ 4 x 1 δ 4 = a 4 ( 1 − a 4 ) ( w 84 δ 8 + w 94 δ 9 ) w_{41}\gets w_{41}+\eta\delta_4 x_1\\ \delta_4=a_4(1-a_4)(w_{84}\delta_8+w_{94}\delta_9) w41w41+ηδ4x1δ4=a4(1a4)(w84δ8+w94δ9)

3.2.2 推导过程

在这里插入图片描述
观察网络结构可知,权重 w j i w_{ji} wji净能够通过节点 j j j的输入来影响整个网络的其他部分,假设 j j j节点的加权输入记为 n e t j net_j netj,则有:
n e t j = w j ⋅ x = ∑ i w j i x j i (3.4) \begin{aligned} net_j&=\bold{w_j}\centerdot\bold{x}\\ &=\sum_{i}{w_{ji}}x_{ji} \end{aligned} \tag{3.4} netj=wjx=iwjixji(3.4)
例如:
n e t 4 = w 41 ∗ x 41 + w 42 ∗ x 42 + w 43 ∗ x 43 + w 4 b ∗ b i a s = ∑ i = 1 4 w 4 i x j i \begin{aligned} net_4 =&w_{41}*x_{41}+w_{42}*x_{42}+w_{43}*x_{43}+w_{4b}*bias\\ =&\sum_{i=1}^4w_{4i}x_{ji} \end{aligned} net4==w41x41+w42x42+w43x43+w4bbiasi=14w4ixji
上式中, x j i x_{ji} xji是节点 j j j传递给节点 i i i的输入值,也就是节点 i i i的输出值,其实, x j i = x i x_{ji}=x_i xji=xi。即有 x 41 = x 51 = x 61 = x 71 = x 1 x_{41}=x_{51}=x_{61}=x_{71}=x_1 x41=x51=x61=x71=x1

损失函数 E E E n e t j net_j netj的函数, n e t j net_j netj w j i w_{ji} wji的函数,根据链式求导法则,有:
∂ E ∂ w j i = ∂ E ∂ n e t j ∂ n e t j ∂ w j i = ∂ E ∂ n e t j ∂ ∑ i w j i x j i ∂ w j i = ∂ E ∂ n e t j x j i (3.5) \begin{aligned} \frac{\partial{E}}{\partial{w_{ji}}}&=\frac{\partial{E}}{\partial{net_j}}\frac{\partial{net_j}}{\partial{w_{ji}}}\\ &=\frac{\partial{E}}{\partial{net_j}}\frac{\partial{\sum_{i}{w_{ji}}x_{ji}}}{\partial{w_{ji}}}\\ &=\frac{\partial{E}}{\partial{net_j}}x_{ji} \end{aligned} \tag{3.5} wjiE=netjEwjinetj=netjEwjiiwjixji=netjExji(3.5)

对于 ∂ E ∂ n e t j \frac{\partial{E}}{\partial{net_j}} netjE的推导,需要区分输出层和隐藏层两种情况。

3.2.2.1 输出层

在这里插入图片描述
对于输出层来说, n e t j net_j netj仅能通过节点 j j j的输出值 y ^ j \hat{y}_j y^j来影响网络其它部分,也就是说 E E E y ^ j \hat{y}_j y^j的函数,而 y ^ j \hat{y}_j y^j n e t j net_j netj的函数,其中。所以我们可以再次使用链式求导法则:
∂ E d ∂ n e t j = ∂ E ∂ y ^ j ∂ y ^ j ∂ n e t j (3.6) \begin{aligned} \frac{\partial{E_d}}{\partial{net_j}}&=\frac{\partial{E}}{\partial{\hat{y}_j}}\frac{\partial{\hat{y}_j}}{\partial{net_j}}\\ \end{aligned} \tag{3.6} netjEd=y^jEnetjy^j(3.6)
所以,有:
∂ E ∂ y ^ j = ∂ ∂ y ^ j 1 2 ∑ i ∈ o u t p u t s ( y i − y ^ i ) 2 = ∂ ∂ y ^ j 1 2 ( y j − y ^ j ) 2 = − ( y j − y ^ j ) (3.7) \begin{aligned} \frac{\partial{E}}{\partial{\hat{y}_j}}&=\frac{\partial}{\partial{\hat{y}_j}}\frac{1}{2}\sum_{i\in outputs}(y_i-\hat{y}_i)^2\\ &=\frac{\partial}{\partial{\hat{y}_j}}\frac{1}{2}(y_j-\hat{y}_j)^2\\ &=-(y_j-\hat{y}_j) \end{aligned} \tag{3.7} y^jE=y^j21ioutputs(yiy^i)2=y^j21(yjy^j)2=(yjy^j)(3.7)
借助公式(2.3)有
∂ y ^ j ∂ n e t j = y ^ j ( 1 − y ^ j ) \begin{aligned} \frac{\partial{\hat{y}_j}}{\partial{net_j}}&=\hat{y}_j(1-\hat{y}_j)\\ \end{aligned} netjy^j=y^j(1y^j)
所以:
∂ E ∂ n e t j = − ( y j − y ^ j ) y ^ j ( 1 − y ^ j ) (3.8) \frac{\partial{E}}{\partial{net_j}}=-(y_j-\hat{y}_j)\hat{y}_j(1-\hat{y}_j) \tag{3.8} netjE=(yjy^j)y^j(1y^j)(3.8)
因为方向是沿梯度的负方向,所以令 δ j = − ∂ E d ∂ n e t j \delta_j=-\frac{\partial{E_d}}{\partial{net_j}} δj=netjEd,所以第 j j j个节点的误差项为:
δ j = ( y j − y ^ j ) y ^ j ( 1 − y ^ j ) (3.9) \delta_j=(y_j-\hat{y}_j)\hat{y}_j(1-\hat{y}_j) \tag{3.9} δj=(yjy^j)y^j(1y^j)(3.9)
结合公式(3.5)和公式(3.9),则节点 i i i与节点 j j j之间的权重更新为:
w j i ← w j i − η ∂ E ∂ w j i = w j i + η ( t j − y j ) y j ( 1 − y j ) x j i = w j i + η δ j x j i (3.10) \begin{aligned} w_{ji}&\gets w_{ji}-\eta\frac{\partial{E}}{\partial{w_{ji}}}\\ &=w_{ji}+\eta(t_j-y_j)y_j(1-y_j)x_{ji}\\ &=w_{ji}+\eta\delta_jx_{ji} \end{aligned} \tag{3.10} wjiwjiηwjiE=wji+η(tjyj)yj(1yj)xji=wji+ηδjxji(3.10)
w 84 ← w 84 + η δ 8 a 4 w_{84}\gets w_{84}+\eta\delta_8 a_4 w84w84+ηδ8a4

3.2.2.2 隐藏层

在这里插入图片描述
首先,我们需要定义节点的所有直接下游节点的集合 D o w n s t r e a m ( j ) Downstream(j) Downstream(j)。例如,对于节点4来说,它的直接下游节点是节点8、节点9。可以看到 n e t 4 net_4 net4只能通过8,9影响再影响 E E E。设 n e t k net_k netk a 84 , a 94 a_{84}, a_{94} a84,a94是节点 j j j:(4)的下游节点(8, 9)的输入,则 E E E是的 n e t k net_k netk函数,而 n e t k net_k netk n e t j net_j netj的函数。因为有多个 n e t k net_k netk,我们应用全导数公式,可以做出如下推导:
∂ E ∂ n e t j = ∑ k ∈ D o w n s t r e a m ( j ) ∂ E ∂ n e t k ∂ n e t k ∂ n e t j = ∑ k ∈ D o w n s t r e a m ( j ) − δ k ∂ n e t k ∂ n e t j = ∑ k ∈ D o w n s t r e a m ( j ) − δ k ∂ n e t k ∂ a j ∂ a j ∂ n e t j = ∑ k ∈ D o w n s t r e a m ( j ) − δ k w k j ∂ a j ∂ n e t j = ∑ k ∈ D o w n s t r e a m ( j ) − δ k w k j a j ( 1 − a j ) = − a j ( 1 − a j ) ∑ k ∈ D o w n s t r e a m ( j ) δ k w k j \begin{aligned} \frac{\partial{E}}{\partial{net_j}}&=\sum_{k\in Downstream(j)}\frac{\partial{E}}{\partial{net_k}}\frac{\partial{net_k}}{\partial{net_j}}\\ &=\sum_{k\in Downstream(j)}-\delta_k\frac{\partial{net_k}}{\partial{net_j}}\\ &=\sum_{k\in Downstream(j)}-\delta_k\frac{\partial{net_k}}{\partial{a_j}}\frac{\partial{a_j}}{\partial{net_j}}\\ &=\sum_{k\in Downstream(j)}-\delta_kw_{kj}\frac{\partial{a_j}}{\partial{net_j}}\\ &=\sum_{k\in Downstream(j)}-\delta_kw_{kj}a_j(1-a_j)\\ &=-a_j(1-a_j)\sum_{k\in Downstream(j)}\delta_kw_{kj} \end{aligned} netjE=kDownstream(j)netkEnetjnetk=kDownstream(j)δknetjnetk=kDownstream(j)δkajnetknetjaj=kDownstream(j)δkwkjnetjaj=kDownstream(j)δkwkjaj(1aj)=aj(1aj)kDownstream(j)δkwkj
以权重 w 41 w_{41} w41为例:
w 41 ← w 41 + η δ 4 x 1 δ 4 = a 4 ( 1 − a 4 ) ( w 84 δ 8 + w 94 δ 9 ) w_{41}\gets w_{41}+\eta\delta_4 x_1\\ \delta_4=a_4(1-a_4)(w_{84}\delta_8+w_{94}\delta_9) w41w41+ηδ4x1δ4=a4(1a4)(w84δ8+w94δ9)


4. 参考文献

  • 西瓜书
  • 零基础入门深度学习
  • 深度学习
  • 模式识别
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值