概要
本篇博客主要讲解了BP神经网络模型的层次结构,并在机器学习(周志华)——神经网络模型(二)中讲解BP算法和BGD、SGD和MBGD三种梯度下降算法。对于BP神经网络算法的手写代码请移步:利用BP神经网络对语音特征信号数据集进行分类
神经元模型
神经元模型是是组成神经网络模型的最基本单位。在生物神经网络领域内,神经元之间相互相连,当一个神经元兴奋时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个阈值,那么它就会被激活,即兴奋起来,向其他神经元发送化学物质。1943 年,McCulloch 和 Pitts 将上述生物学中情形抽象为如下图所示的简单模型,这就是一直沿用至今的 M-P 神经元模型。神经元接收来自 n n <script type="math/tex" id="MathJax-Element-1">n</script>个其他神经元传递过来的输入信号x
<script type="math/tex" id="MathJax-Element-2">x</script>,这些输入信号通过带权重 的连接进行传递,神经元接收到的总输入值 ∑ni=1wixi ∑ i = 1 n w i x i <script type="math/tex" id="MathJax-Element-3">\sum\nolimits_{i=1}^{n}{{{w}_{i}}{{x}_{i}}}</script>将与神经元的阈值项 θ θ <script type="math/tex" id="MathJax-Element-4">\theta </script>进行线性组合,然后通过激活函数 f f <script type="math/tex" id="MathJax-Element-5">f</script>对得线性组合进行映射产生神经元的输出y=f(∑ni=1wixi+θ)
<script type="math/tex" id="MathJax-Element-6">y=f\left( \sum\nolimits_{i=1}^{n}{{{w}_{i}}{{x}_{i}}}+\theta \right)</script>

神经网络
将多个神经元模型按一定的层次结构连接起来,就能得到神经网络的模型。事实上,从计算机学科角度来看,我们可以不考虑神经网络是否真的模拟了生物神经网络,只需将一个神经网络模型看成一个包含了许多超参数的数学模型,这个模型有若干个激活函数组成。
下面本文将对3层的神经网络进行具体介绍。上图给出了基本的神经网模型结构示意图。3层的神经网络模型是由输入层、隐藏层和输出层构成的。其中输入层与输出层神经元个数与输入数据密切相关。因此首先对输入到神经网络数据集进行相关说明。对于给定输入数据集表示如下:
D={(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))}$(1) (1) D = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , ⋯ , ( x ( m ) , y ( m ) ) } $
<script type="math/tex; mode=display" id="MathJax-Element-7">\begin{align} &D=\left\{ \left( {{x}^{\left( 1 \right)}},{{y}^{\left( 1 \right)}} \right),\left( {{x}^{\left( 2 \right)}},{{y}^{\left( 2 \right)}} \right),\cdots ,\left( {{x}^{\left( m \right)}},{{y}^{\left( m \right)}} \right) \right\}$ \end{align}</script>
其中
m m <script type="math/tex" id="MathJax-Element-8">m</script>代表输入数据集大小,
xi∈Rd,yi∈Rl
<script type="math/tex" id="MathJax-Element-9">{{x}_{i}}\in {{\mathbb{R}}^{d}},{{y}_{i}}\in {{\mathbb{R}}^{l}}</script>,即输入神经元的输入是一个
1×d 1 × d <script type="math/tex" id="MathJax-Element-10">1\times d</script>维矩阵或者
d d <script type="math/tex" id="MathJax-Element-11">d</script>维向量,其表示为:
x(i)=(x(i)1,x(i)2,⋯,x(i)d)(2)
<script type="math/tex; mode=display" id="MathJax-Element-12">\begin{align} &{{x}^{\left( i \right)}}=\left( x_{1}^{\left( i \right)},x_{2}^{\left( i \right)},\cdots ,x_{d}^{\left( i \right)} \right) \end{align}</script>
输出神经元的输出是一个
1×l 1 × l <script type="math/tex" id="MathJax-Element-13">1\times l</script> 维矩阵或
l l <script type="math/tex" id="MathJax-Element-14">l</script>维向量,其表示为:
y(i)=(y(i)1,y(i)2,⋯,y(i)l)(3)
<script type="math/tex; mode=display" id="MathJax-Element-15">\begin{align} &{{y}^{\left( i \right)}}=\left( y_{1}^{\left( i \right)},y_{2}^{\left( i \right)},\cdots ,y_{l}^{\left( i \right)} \right) \end{align}</script>
即输入层神经元个数为输入数据的维数、输出层神经元个数为输入数据真实结果的维数。在以下相关介绍中,本文假定有
d d <script type="math/tex" id="MathJax-Element-16">d</script>个输入层神经元,
q
<script type="math/tex" id="MathJax-Element-17">q</script>个隐藏层神经元,
l l <script type="math/tex" id="MathJax-Element-18">l</script>个输出层神经元。隐藏层的每个神经元都含有一个阈值项
θi
<script type="math/tex" id="MathJax-Element-19">{{\theta }_{i}}</script> ,故隐藏层的阈值项可以表示为:
θ=(θ1,θ2,⋯,θq)(4) (4) θ = ( θ 1 , θ 2 , ⋯ , θ q )
<script type="math/tex; mode=display" id="MathJax-Element-20">\begin{align} &\theta \text{=}\left( {{\theta }_{1}},{{\theta }_{2}},\cdots ,{{\theta }_{q}} \right) \end{align}</script>
同理,输出层的阈值项可以表示为:
γ=(γ1,γ2,⋯,γl)(5) (5) γ = ( γ 1 , γ 2 , ⋯ , γ l )
<script type="math/tex; mode=display" id="MathJax-Element-21">\begin{align} &\gamma \text{=}\left( {{\gamma }_{1}},{{\gamma }_{2}},\cdots ,{{\gamma }_{l}} \right) \end{align}</script>
同时,输入层的每个神经元与隐含层的每个神经元之间有一个连接权重,记作
vij v i j <script type="math/tex" id="MathJax-Element-22">{{v}_{ij}}</script> ,表示第
i i <script type="math/tex" id="MathJax-Element-23">i</script>个输入神经元与第
j
<script type="math/tex" id="MathJax-Element-24">j</script>个隐藏层神经元之间的权重。故输入层与隐含层之间的连接权重可以表示为:
v=(v(1),v(2),⋯,v(d))T(6) (6) v = ( v ( 1 ) , v ( 2 ) , ⋯ , v ( d ) ) T
<script type="math/tex; mode=display" id="MathJax-Element-25">\begin{align} &v={{\left( {{v}^{(1)}},{{v}^{(2)}},\cdots ,{{v}^{(d)}} \right)}^{T}} \end{align}</script>
其中
v(i) v ( i ) <script type="math/tex" id="MathJax-Element-26">{{v}^{\left( i \right)}}</script>是个
1×q 1 × q <script type="math/tex" id="MathJax-Element-27">1\times q</script>维向量,即
v(i) v ( i ) <script type="math/tex" id="MathJax-Element-28">{{v}^{\left( i \right)}}</script>可以表示为:
v(i)=(v(i)1,v(i)2,⋯,v(i)q)(7) (7) v ( i ) = ( v 1 ( i ) , v 2 ( i ) , ⋯ , v q ( i ) )
<script type="math/tex; mode=display" id="MathJax-Element-29">\begin{align} &{{v}^{\left( i \right)}}\text{=}\left( v_{1}^{\left( i \right)},v_{2}^{\left( i \right)},\cdots ,v_{q}^{\left( i \right)} \right) \end{align}</script>
故输入层与隐藏层之间的权重可以也可以表示为一个的
d×q d × q <script type="math/tex" id="MathJax-Element-30">d\times q</script>矩阵:
v=⎛⎝⎜⎜⎜⎜⎜⎜⎜v(1)1⋮⋮v(d)1v(1)2⋱⋮v(d)2⋯⋮⋱⋯v(1)q⋮⋮v(d)q⎞⎠⎟⎟⎟⎟⎟⎟⎟(8) (8) v = ( v 1 ( 1 ) v 2 ( 1 ) ⋯ v q ( 1 ) ⋮ ⋱ ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ v 1 ( d ) v 2 ( d ) ⋯ v q ( d ) )
<script type="math/tex; mode=display" id="MathJax-Element-31">\begin{align} &v=\left( \begin{matrix}v_{1}^{\left( 1 \right)} & v_{2}^{\left( 1 \right)} & \cdots & v_{q}^{\left( 1 \right)} \\\vdots & \ddots & \vdots & \vdots \\\vdots & \vdots & \ddots & \vdots \\v_{1}^{\left( d \right)} & v_{2}^{\left( d \right)} & \cdots & v_{q}^{\left( d \right)} \\\end{matrix} \right) \end{align}</script>
同理隐含层与输出层之间的连接权重可以表示
q×l q × l <script type="math/tex" id="MathJax-Element-32">q\times l</script>矩阵为:
w=(w(1),w(2),⋯,w(q))T=⎛⎝⎜⎜⎜⎜⎜⎜⎜w(1)1⋮⋮w(q)1w(1)2⋱w(q)2⋯⋱⋯w(1)l⋮⋮w(q)l⎞⎠⎟⎟⎟⎟⎟⎟⎟(9) (9) w = ( w ( 1 ) , w ( 2 ) , ⋯ , w ( q ) ) T = ( w 1 ( 1 ) w 2 ( 1 ) ⋯ w l ( 1 ) ⋮ ⋱ ⋮ ⋮ ⋱ ⋮ w 1 ( q ) w 2 ( q ) ⋯ w l ( q ) )
<script type="math/tex; mode=display" id="MathJax-Element-33">\begin{align} &w={{\left( {{w}^{\left( 1 \right)}},{{w}^{\left( 2 \right)}},\cdots ,{{w}^{\left( q \right)}} \right)}^{T}}=\left( \begin{matrix}w_{1}^{\left( 1 \right)} & w_{2}^{\left( 1 \right)} & \cdots & w_{l}^{\left( 1 \right)} \\\vdots & \ddots & {} & \vdots \\\vdots & {} & \ddots & \vdots \\ w_{1}^{\left( q \right)} & w_{2}^{\left( q \right)} & \cdots & w_{l}^{\left( q \right)} \\\end{matrix} \right) \end{align}</script>
其中
w(i) w ( i ) <script type="math/tex" id="MathJax-Element-34">{{w}^{\left( i \right)}}</script>可以表示为:
w(i)=(w(i)1,w(i)2,⋯,w(i)l)(10) (10) w ( i ) = ( w 1 ( i ) , w 2 ( i ) , ⋯ , w l ( i ) )
<script type="math/tex; mode=display" id="MathJax-Element-35">\begin{align} &{{w}^{\left( i \right)}}\text{=}\left( w_{1}^{\left( i \right)},w_{2}^{\left( i \right)},\cdots ,w_{l}^{\left( i \right)} \right) \end{align}</script>
可以计算出第
h h <script type="math/tex" id="MathJax-Element-36">h</script>个隐含层神经元的输入为:
α(h)=∑i=1dv(h)ix(i)(11)
<script type="math/tex; mode=display" id="MathJax-Element-37">\begin{align} &{{\alpha }^{\left( h \right)}}=\sum\limits_{i=1}^{d}{v_{i}^{\left( h \right)}{{x}^{\left( i \right)}}} \end{align}</script>
那么第
h h <script type="math/tex" id="MathJax-Element-38">h</script>个隐含层神经元的输出为:
b(h)=f(α(h)+θ)(12)
<script type="math/tex; mode=display" id="MathJax-Element-39">\begin{align} &{{b}^{\left( h \right)}}=f\left( {{\alpha }^{\left( h \right)}}+\theta \right) \end{align}</script>
其中:
f(x)=11+e−xf′(x)=f(x)[1−f(x)](13)(14) (13) f ( x ) = 1 1 + e − x (14) f ′ ( x ) = f ( x ) [ 1 − f ( x ) ]
<script type="math/tex; mode=display" id="MathJax-Element-40">\begin{align} &f\left( x \right)=\frac{1}{1+{{e}^{-x}}}\\ &{f}'(x)=f(x)\left[ 1-f(x) \right] \end{align}</script>
同理,第
j j <script type="math/tex" id="MathJax-Element-41">j</script>个输出层神经元的输入为:
β(j)=∑i=1lw(j)ib(j)(15)
<script type="math/tex; mode=display" id="MathJax-Element-42">\begin{align} &{{\beta }^{\left( j \right)}}=\sum\limits_{i=1}^{l}{w_{i}^{\left( j \right)}{{b}^{\left( j \right)}}} \end{align}</script>
第
j j <script type="math/tex" id="MathJax-Element-43">j</script>个输出层神经元的输出为:
y^(j)=f(β(j)+γ)(16)
<script type="math/tex; mode=display" id="MathJax-Element-44">\begin{align} &{{\hat{y}}^{\left( j \right)}}=f\left( {{\beta }^{\left( j \right)}}+\gamma \right) \end{align}</script>
所有评论(0)