BP神经网络
方法描述
方法思想:
- 使用复合函数 f ( x ) = f m ( f ( m − 1 ) ( . . . f 1 ( x ) ) ) f(x)=f^m(f^{(m-1)}(...f^1(x))) f(x)=fm(f(m−1)(...f1(x)))拟合输入样本集 X X X到标签集 Y Y Y之间的映射
- 针对一个样本 x i x_i xi进行计算的过程是正向的,从 f 1 ( x ) f^1(x) f1(x)到 f m ( x ) f^m(x) fm(x)一步步计算,称作正向传播
- 优化复合函数,即调整每一层函数参数以使得预测结果偏差最小的过程中,需要从结果的误差出发,向前传递误差,进而修改参数,此为反向传播(BP)
相关概念
- 感知机
如上图所示,每个圆代表一个神经元,对来自其他神经元的信号输入 x = [ x 1 , x 2 , . . . , x k ] x=[x_1,x_2,...,x_k] x=[x1,x2,...,xk]
经过神经元处理 f = ∑ i = 1 k w i x i + b i a s f=\sum_{i=1}^kw_ix_i+bias f=∑i=1kwixi+bias得到 f f f,类似于神经元细胞对来自其他神经元细胞的传递的刺激脉冲的累加
再对使用阶跃函数处理 f f f,即根据累加脉冲是否达到阈值判断神经元是否有输出
事实上,感知机是一个线性二分类模型,也可以表示为 f ( x ) = s i g n ( w T x + b ) f(x)=sign(w^Tx+b) f(x)=sign(wTx+b),与寻找超平面将线性可分样本分开等价
-
多层感知机(全连接神经网络)
全连接神经网络,可以视作是由多个感知机构成的
中间层称作隐藏层,可以有多个
-
激活函数
-
神经元累加脉冲的步骤可以用矩阵乘 W ⋅ x W·x W⋅x表示,将多层直接联系起来有 f ( x ) = W m W m − 1 . . . W 1 x f(x)=W_mW_{m-1}...W_1x f(x)=WmWm−1...W1x,其仍然是一个仿射变换
-
因此为了实现对非线性映射的拟合,可以选择在每一层输出处引入一个非线性变换,即激活函数
-
常用的激活函数有:
-
Relu
R e l u ( x ) = { 0 x ≤ 0 x x > 0 Relu(x)=\begin{cases} 0 \ \ \ \ \ \ \ x\leq0\\ x \ \ \ \ \ \ \ x>0 \end{cases} Relu(x)={0 x≤0x x>0
-
sigmoid函数
s i g m o i d ( x ) = 1 1 + e − x sigmoid(x)=\frac1{1+e^{-x}} sigmoid(x)=1+e−x1
-
tanh函数
t a n h ( x ) = 1 − e − 2 x 1 + e − 2 x tanh(x)=\frac{1-e^{-2x}}{1+e^{-2x}} tanh(x)=1+e−2x1−e−2x
-
-
方法推导
-
反向传播
-
如图,是 l l l层全连接网络
令:第 l − 1 l-1 l−1层与第 l l l层之间的权重向量为 w l w^l wl,偏置向量为 b l b^l bl,第 l l l层未激活的累加信号向量 Z l Z^l Zl,第 l l l层激活后的累加信号向量 α l \alpha^l αl
前向传播的过程可以用迭代的方式表示为:
α
l
=
σ
(
Z
l
)
=
σ
(
W
l
α
l
−
1
+
b
l
)
(
l
=
2
,
3
,
.
.
.
,
L
)
α
1
=
x
\alpha^l=\sigma(Z^l)=\sigma(W^l\alpha^{l-1}+b^l) \ \ \ \ \ \ (l=2,3,...,L)\\ \alpha^1=x
αl=σ(Zl)=σ(Wlαl−1+bl) (l=2,3,...,L)α1=x
-
定义损失函数为平方损失函数:
J ( W , b , x , y ) = 1 2 ∣ ∣ α L − y ∣ ∣ 2 2 = 1 2 ∣ ∣ σ ( W L α L − 1 + b L ) − y ∣ ∣ 2 J(W,b,x,y)=\frac12||\alpha^L-y||_2^2=\frac12||\sigma(W^L\alpha^{L-1}+b^L)-y||^2 J(W,b,x,y)=21∣∣αL−y∣∣22=21∣∣σ(WLαL−1+bL)−y∣∣2 -
求解损失函数梯度:
∂ J ( W , b , x , y ) ∂ W L = [ ( α L − y ) ⋅ σ ′ ( Z L ) ] ( α L − 1 ) T ∂ J ( W , b , x , y ) ∂ b L = ( α L − y ) ⋅ σ ′ ( Z L ) ∂ J ( W , b , x , y ) ∂ Z L = ( α L − y ) ⋅ σ ′ ( Z L ) 此 处 ( α L − y ) ⋅ σ ′ ( Z L ) 为 相 应 位 置 元 素 相 乘 \begin{aligned} &\frac{\partial J(W,b,x,y)}{\partial{W^L}}=[(\alpha^L-y)·\sigma'(Z^L)](\alpha^{L-1})^T\\ &\frac{\partial J(W,b,x,y)}{\partial{b^L}}=(\alpha^L-y)·\sigma'(Z^L)\\ &\frac{\partial J(W,b,x,y)}{\partial{Z^L}}=(\alpha^L-y)·\sigma'(Z^L)\\ \end{aligned} 此处(\alpha^L-y)·\sigma'(Z^L)为相应位置元素相乘 ∂WL∂J(W,b,x,y)=[(αL−y)⋅σ′(ZL)](αL−1)T∂bL∂J(W,b,x,y)=(αL−y)⋅σ′(ZL)∂ZL∂J(W,b,x,y)=(αL−y)⋅σ′(ZL)此处(αL−y)⋅σ′(ZL)为相应位置元素相乘记 : δ L = ∂ J ( W , b , x , y ) ∂ Z L = ( α L − y ) ⋅ σ ′ ( Z L ) 记:\delta^L=\frac{\partial J(W,b,x,y)}{\partial{Z^L}}=(\alpha^L-y)·\sigma'(Z^L) 记:δL=∂ZL∂J(W,b,x,y)=(αL−y)⋅σ′(ZL)
-
由 Z l = W l α l − 1 + b l Z^l=W^l\alpha^{l-1}+b^l Zl=Wlαl−1+bl
∂ J ( W , b , x , y ) ∂ W l = ∂ J ( W , b , x , y ) ∂ Z l ∂ Z l ∂ W l = δ l ( α l − 1 ) T ∂ J ( W , b , x , y ) ∂ b l = ∂ J ( W , b , x , y ) ∂ Z l ∂ Z l ∂ b l = δ l \begin{aligned} &\frac{\partial{J(W,b,x,y)}}{\partial{W^l}}=\frac{\partial J(W,b,x,y)}{\partial{Z^l}}\frac{\partial Z^l}{\partial{W^l}}=\delta^l(\alpha^{l-1})^T\\ &\frac{\partial{J(W,b,x,y)}}{\partial{b^l}}=\frac{\partial J(W,b,x,y)}{\partial{Z^l}}\frac{\partial Z^l} {\partial{b^l}}=\delta^l \end{aligned} ∂Wl∂J(W,b,x,y)=∂Zl∂J(W,b,x,y)∂Wl∂Zl=δl(αl−1)T∂bl∂J(W,b,x,y)=∂Zl∂J(W,b,x,y)∂bl∂Zl=δl -
由
δ l = ∂ J ( W , b , x , y ) ∂ Z l = ( ∂ Z l + 1 ∂ Z l ) T δ l + 1 \delta^l=\frac{\partial J(W,b,x,y)}{\partial{Z^l}}=(\frac{\partial Z^{l+1}}{\partial{Z^l}})^T\delta^{l+1} δl=∂Zl∂J(W,b,x,y)=(∂Zl∂Zl+1)Tδl+1Z l + 1 = W l + 1 α l + b l + 1 = W l + 1 σ ( Z l ) + b l + 1 ∂ Z l + 1 ∂ Z l = W l + 1 σ ′ ( Z l ) Z^{l+1}=W^{l+1}\alpha^l+b^{l+1}=W^{l+1}\sigma(Z^l)+b^{l+1}\\ \frac{\partial Z^{l+1}}{\partial{Z^l}}=W^{l+1}\sigma'(Z^l) Zl+1=Wl+1αl+bl+1=Wl+1σ(Zl)+bl+1∂Zl∂Zl+1=Wl+1σ′(Zl)
-
即可以从第L层开始,计算 δ L \delta^L δL,一层层向前计算 δ l \delta^l δl,进而求得损失函数对第l层 W l W^l Wl与 b l b^l bl的偏导
方法流程
-
初始化每一层 W , b W,b W,b
-
输入 α 1 = x \alpha^1=x α1=x
-
前向传播
α i , l = σ ( W l α i , l − 1 + b l ) \alpha^{i,l}=\sigma(W^{l}\alpha^{i,l-1}+b^{l}) αi,l=σ(Wlαi,l−1+bl) -
计算:
δ L = ( α L − y ) ⋅ σ ′ ( Z L ) \delta^L=(\alpha^L-y)·\sigma'(Z^L) δL=(αL−y)⋅σ′(ZL) -
从 l = L − 1 l=L-1 l=L−1到 l = 2 l=2 l=2,反向逐层计算:
δ i , l = W l + 1 δ i , l + 1 ⋅ σ ′ ( z i , l ) \delta^{i,l}=W^{l+1}\delta^{i,l+1}·\sigma'(z^{i,l}) δi,l=Wl+1δi,l+1⋅σ′(zi,l)
更新:
W l = W l − η ∑ i = 1 m δ i , l ( α i , l − 1 ) T b l = b l − η ∑ i = 1 m δ i , l W^l=W^l-\eta\sum_{i=1}^m\delta^{i,l}(\alpha^{i,l-1})^T\\ b^l=b^l-\eta\sum_{i=1}^m\delta^{i,l} Wl=Wl−ηi=1∑mδi,l(αi,l−1)Tbl=bl−ηi=1∑mδi,l -
满足误差条件后结束,否则返回第三步
-
得到所有的 W , b W,b W,b,对新样本前向传播求解
参考资料
【1】[神经网络反向传播矩阵求导][https://zhuanlan.zhihu.com/p/83859554?from_voters_page=true]
【2】[矩阵求导术(上)][https://zhuanlan.zhihu.com/p/24709748]
【3】[BP算法的矩阵推导][https://blog.csdn.net/qq_35269774/article/details/88585053]