概要

本篇博客主要讲解了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 ( i = 1 n w i x i + θ ) <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>代表输入数据集大小, x i R d , y i R l <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>维向量,其表示为:
(2) x ( i ) = ( x 1 ( i ) , x 2 ( i ) , , x d ( i ) )
<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>维向量,其表示为:
(3) y ( i ) = ( y 1 ( i ) , y 2 ( i ) , , y l ( i ) )
<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)1v(d)1v(1)2v(d)2v(1)qv(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)1w(q)1w(1)2w(q)2w(1)lw(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>个隐含层神经元的输入为:
(11) α ( h ) = i = 1 d v i ( h ) x ( i )
<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>个隐含层神经元的输出为:
(12) b ( h ) = f ( α ( h ) + θ )
<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+exf(x)=f(x)[1f(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>个输出层神经元的输入为:
(15) β ( j ) = i = 1 l w i ( j ) b ( j )
<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>个输出层神经元的输出为:
(16) y ^ ( j ) = f ( β ( j ) + γ )
<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>

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐