【从线性回归到BP神经网络】第四部分:BP神经网络

本文详细介绍了BP神经网络,从2层前馈神经网络模型出发,包括单个样本和多个样本时的矩阵表示,然后深入到2层前馈NN的误差反向传播(BP)算法,最后探讨了BP多层前馈网络的原理。通过实例解析了神经网络中参数的更新过程,涉及激活函数、代价函数及其梯度计算。


本文主要参考文献如下:
1、吴恩达《深度学习》视频。
2、周志华. 《机器学习》3.2.清华大学出版社。
3、陈明等,《MATLAB神经网络原理与实例精解》,清华大学出版社。

这部分强烈推荐吴恩达的《深度学习》视频,讲解得非常浅显易懂。

  前面介绍的Logistic回归,实际上就构成了一个神经元。如果有多个层,同时每个层有多个神经元,就形成了多层神经网络。我们这里所说的BP神经网络,实际上是多层前馈神经网络+误差反向传播算法,换句话说前者计算神经网络的输出,后者则根据估计输出与实际输出的误差,从后往前逆向更新每一层的参数。我们想从一个简单的两层BP网络入手,再推广到多层的情况。

1、2层前馈神经网络模型

  我们先来考虑2层NN。我们假定输入层、隐含层和输出层的神经元个数分别为 n [ 0 ] = 3 n^{[0]}=3 n[0]=3 n [ 1 ] = 4 n^{[1]}=4 n[1]=4 n [ 2 ] = 1 n^{[2]}=1 n[2]=1,前馈NN模型如图1所示,我们从输出层向后,逐层推导其输出 y ^ \hat y y^
在这里插入图片描述

图1 多层前馈神经网络模型
(1) 单个样本

  我们先来推导单个样本是BP网络的前馈输出。

  • 输入层
    a [ 0 ] = x = [ x 1 x 2 x 3 ] ∈ R n [ 0 ] × 1 (1) \tag{1} {\bf a}^{[0]}={\bf x}=\left[\begin{aligned}x_1\\x_2\\x_3 \end{aligned}\right]\in {\mathbb R}^{n^{[0]}\times 1} a[0]=x=x1x2x3Rn[0]×1(1)
  • 隐含层
    W [ 1 ] = [ w 1 [ 1 ] w 2 [ 1 ] w 3 [ 1 ] w 4 [ 1 ] ] ∈ R n [ 1 ] × n [ 0 ] , b [ 1 ] = [ b 1 [ 1 ] b 2 [ 1 ] b 3 [ 1 ] b 4 [ 1 ] ] ∈ R n [ 1 ] × 1 (2) \tag{2} {\bf W}^{[1]}=\left[\begin{aligned}{\bf w}^{[1]}_1\\ {\bf w}^{[1]}_2\\ {\bf w}^{[1]}_3\\ {\bf w}^{[1]}_4 \end{aligned}\right]\in {\mathbb R}^{n^{[1]}\times n^{[0]}}, {\bf b}^{[1]}=\left[\begin{aligned}{b}^{[1]}_1\\ {b}^{[1]}_2\\ {b}^{[1]}_3\\ {b}^{[1]}_4 \end{aligned}\right]\in {\mathbb R}^{n^{[1]}\times 1} W[1]=w1[1]w2[1]w3[1]w4[1]Rn[1]×n[0],b[1]=b1[1]b2[1]b3[1]b4[1]Rn[1]×1(2)其中,每一行对应一个神经元的加权系数。显然,每个神经元会进行两步运算,第一步是线性叠加
    z [ 1 ] = W [ 1 ] a [ 0 ] + b [ 1 ] ∈ R n [ 1 ] × 1 (3) \tag{3} {\bf z}^{[1]}={\bf W}^{[1]} {\bf a}^{[0]}+{\bf b}^{[1]}\in {\mathbb R}^{n^{[1]}\times 1} z[1]=W[1]a[0]+b[1]Rn[1]×1(3)第二步为激活函数,因此隐含层的输出为
    a [ 1 ] = g ( z [ 1 ] ) (4) \tag{4} {\bf a}^{[1]}=g({\bf z}^{[1]}) a[1]=g(z[1])(4)这里的 g ( ⋅ ) g(\cdot) g()为激活函数,后面我们设其为sigmoid函数。
  • 输出层
      由于 n [ 2 ] = 1 n^{[2]}=1 n[2]=1,即只有一个输出,因此可以得到
    W [ 2 ] = [ w 1 [ 2 ] ] ∈ R n [ 2 ] × n [ 1 ] , b [ 2 ] = [ b 1 [ 2 ] ] ∈ R n [ 2 ] × 1 (5) \tag{5} {\bf W}^{[2]}=\left[\begin{aligned}{\bf w}^{[2]}_1\\ \end{aligned}\right]\in {\mathbb R}^{n^{[2]}\times n^{[1]}}, {\bf b}^{[2]}=\left[\begin{aligned}{b}^{[2]}_1\\ \end{aligned}\right]\in {\mathbb R}^{n^{[2]}\times 1} W[2]=[w1[2]]Rn[2]×n[1],b[2]=[b1[2]]Rn[2]×1(5)同样需要两步处理,第一步
    z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] ∈ R n [ 2 ] × 1 (6) \tag{6} {\bf z}^{[2]}={\bf W}^{[2]} {\bf a}^{[1]}+{\bf b}^{[2]}\in {\mathbb R}^{n^{[2]}\times 1} z[2]=W[2]a[1]+b[2]Rn[2]×1(6)第二步输出为
    a [ 2 ] = g ( z [ 2 ] ) (7) \tag{7} {\bf a}^{[2]}=g({\bf z}^{[2]}) a[2]=g(z[2])(7)因此,对于二分类问题,与Logistic回归类似,我们会将 a [ 2 ] {a}^{[2]} a[2]作为 y ^ = 1 \hat y=1 y^=1的概率进行判决。
(2) 多个样本时的矩阵表示

  如果对多个样本进行批量处理,我们可以用矩阵形式运算速度会更快。下面我们考虑一共有 m m m个样本输入的情况。

  • 输入层
      显然输入层不再是向量,而变成矩阵。
    A [ 0 ] = [ a 1 [ 0 ] , a 2 [ 0 ] , … , a m [ 0 ] ] = [ x 1 , x 2 , … , x m ] ∈ R n [ 0 ] × m (8) \tag{8} {\bf A}^{[0]}=[{\bf a}^{[0]}_1,{\bf a}^{[0]}_2,\ldots,{\bf a}^{[0]}_m]=[{\bf x}_1,{\bf x}_2,\ldots,{\bf x}_m]\in {\mathbb R}^{n^{[0]}\times m} A[0]=[a1[0],a2[0],,am[0]]=[x1,x2,,xm]Rn[0]×m(8)
  • 隐含层
      隐含层的参数不受样本数的影响,重写如下
    W [ 1 ] = [ w 1 [ 1 ] w 2 [ 1 ] w 3 [ 1 ] w 4 [ 1 ] ] ∈ R n [ 1 ] × n [ 0 ] , b [ 1 ] = [ b 1 [ 1 ] b 2 [ 1 ] b 3 [ 1 ] b 4 [ 1 ] ] ∈ R n [ 1 ] × 1 (9) \tag{9} {\bf W}^{[1]}=\left[\begin{aligned}{\bf w}^{[1]}_1\\ {\bf w}^{[1]}_2\\ {\bf w}^{[1]}_3\\ {\bf w}^{[1]}_4 \end{aligned}\right]\in {\mathbb R}^{n^{[1]}\times n^{[0]}}, {\bf b}^{[1]}=\left[\begin{aligned}{b}^{[1]}_1\\ {b}^{[1]}_2\\ {b}^{[1]}_3\\ {b}^{[1]}_4 \end{aligned}\right]\in {\mathbb R}^{n^{[1]}\times 1} W[1]=w1[1]w2[1]w3[1]w4[1]Rn[1]×n[0],b[1]=b1[1]b2[1]b3[1]b4[1]Rn[1]×1(9)因此,可以得到
    Z = [ z 1 [ 1 ] , z 2 [ 1 ] , … , z m [ 1 ] ] = W [ 1 ] A [ 0 ] + [ b [ 1 ] , b [ 1 ] , … , b [ 1 ] ] ∈ R n [ 1 ] × m (10) \tag{10} {\bf Z}=[{\bf z}^{[1]}_1,{\bf z}^{[1]}_2, \ldots,{\bf z}^{[1]}_m]={\bf W}^{[1]} {\bf A}^{[0]}+[{\bf b}^{[1]},{\bf b}^{[1]},\ldots,{\bf b}^{[1]}]\in {\mathbb R}^{n^{[1]}\times m} Z=[z1[1],z2[1],,zm[1]]=W[1]A[0]+[b[1],b[1],,b[1]]Rn[1]×m(10)则隐含层的输出为
    A [ 1 ] = g ( Z [ 1 ] ) ∈ R n [ 1 ] × m (11) \tag{11} {\bf A}^{[1]}=g({\bf Z}^{[1]})\in {\mathbb R}^{n^{[1]}\times m}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值