前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习算法原理——神经网络的基本原理

深度学习算法原理——神经网络的基本原理

作者头像
felixzhao
发布2019-02-13 17:06:25
5K0
发布2019-02-13 17:06:25
举报
文章被收录于专栏:null的专栏null的专栏

一、神经网络

1、神经元概述

神经网络是由一个个的被称为“神经元”的基本单元构成,单个神经元的结构如下图所示:

这里写图片描述
这里写图片描述

对于上述的神经元,其输入为x1x1x_1,x2x2x_2,x3x3x_3以及截距+1+1+1,其输出为:

hW,b(x)=f(WTx)=f(∑i=13Wixi+b)hW,b(x)=f(WTx)=f(∑i=13Wixi+b)

h_{\mathbf{W},b}\left ( \mathbf{x} \right )=f\left ( \mathbf{W}^T\mathbf{x} \right )=f\left ( \sum_{i=1}^{3}W_ix_i+b \right )

其中,WW\mathbf{W}表示的是向量,代表的是权重,函数fff称为激活函数,通常激活函数可以选择为Sigmoid函数,或者tanh双曲正切函数,其中,Sigmoid函数的形式为:

f(z)=11+e−zf(z)=11+e−z

f\left ( z \right )=\frac{1}{1+e^{-z}}

双曲正切函数的形式为:

f(z)=tanh(z)=ez−e−zez+e−zf(z)=tanh(z)=ez−e−zez+e−z

f\left ( z \right )=tanh\left ( z \right )=\frac{e^{z}-e^{-z}}{e^z+e^{-z}}

以下分别是Sigmoid函数和tanh函数的图像,左边为Sigmoid函数的图像,右边为tanh函数的图像:

这里写图片描述
这里写图片描述

Sigmoid函数的区间为[0,1][0,1]\left [ 0,1 \right ],而tanh函数的区间为[−1,1][−1,1]\left [ -1,1 \right ]。

若是使用sigmoid作为神经元的激活函数,则当神经元的输出为111时表示该神经元被激活,否则称为未被激活。同样,对于激活函数是tanh时,神经元的输出为111时表示该神经元被激活,否则称为未被激活。

2、神经网络

2.1、神经网络的结构

神经网络是由很多的神经元联结而成的,一个简单的神经网络的结构如下图所示:

其中一个神经元的输出是另一个神经元的输入,+1+1+1项表示的是偏置项。上图是含有一个隐含层的神经网络模型,L1L1L_1层称为输入层,L2L2L_2层称为隐含层,L3L3L_3层称为输出层。

2.2、神经网络中的参数说明

在神经网络中,主要有如下的一些参数标识:

  • 网络的层数n1n1n_1。在上述的神经网络中nl=3nl=3n_l=3,将第lll层记为LlLlL_l,则上述的神经网络,输入层为L1L1L_1,输出层为L3L3L_3。
  • 网络权重和偏置(W,b)=(W(1),b(1),W(2),b(2))(W,b)=(W(1),b(1),W(2),b(2))\left ( \mathbf{W},\mathbf{b} \right )=\left ( \mathbf{W}^{(1)},\mathbf{b}^{(1)},\mathbf{W}^{(2)},\mathbf{b}^{(2)} \right ),其中W(l)ijWij(l)W^{(l)}_{ij}表示的是第lll层的第jjj个神经元和第l+1l+1l+1层的第iii个神经元之间的连接参数,b(l)ibi(l)b^{(l)}_i标识的是第l+1l+1l+1层的第iii个神经元的偏置项。在上图中,W(1)∈ℜ3×3W(1)∈ℜ3×3\mathbf{W}^{(1)}\in \Re ^{3\times 3},W(2)∈ℜ1×3W(2)∈ℜ1×3\mathbf{W}^{(2)}\in \Re ^{1\times 3}。

2.3、神经网络的计算

在神经网络中,一个神经元的输出是另一个神经元的输入。假设z(l)izi(l)z^{(l)}_i表示的是第lll层的第iii个神经元的输入,假设a(l)iai(l)a^{(l)}_i表示的是第lll层的第iii个神经元的输出,其中,当l=1l=1l=1时,a(1)i=xiai(1)=xia^{(1)}_i=x_i。根据上述的神经网络中的权重和偏置,就可以计算神经网络中每一个神经元的输出,从而计算出神经网络的最终的输出hW,bhW,bh_{\mathbf{W},\mathbf{b}}。

对于上述的神经网络结构,有下述的计算:

z(2)1=W(1)11x1+W(1)12x2+W(1)13x3+b(1)1z1(2)=W11(1)x1+W12(1)x2+W13(1)x3+b1(1)

z^{(2)}_1=W^{(1)}_{11}x_1+W^{(1)}_{12}x_2+W^{(1)}_{13}x_3+b^{(1)}_1

a(2)1=f(W(1)11x1+W(1)12x2+W(1)13x3+b(1)1)a1(2)=f(W11(1)x1+W12(1)x2+W13(1)x3+b1(1))

a^{(2)}_1=f\left ( W^{(1)}_{11}x_1+W^{(1)}_{12}x_2+W^{(1)}_{13}x_3+b^{(1)}_1 \right )

z(2)2=W(1)21x1+W(1)22x2+W(1)23x3+b(1)2z2(2)=W21(1)x1+W22(1)x2+W23(1)x3+b2(1)

z^{(2)}_2=W^{(1)}_{21}x_1+W^{(1)}_{22}x_2+W^{(1)}_{23}x_3+b^{(1)}_2

a(2)2=f(W(1)21x1+W(1)22x2+W(1)23x3+b(1)2)a2(2)=f(W21(1)x1+W22(1)x2+W23(1)x3+b2(1))

a^{(2)}_2=f\left ( W^{(1)}_{21}x_1+W^{(1)}_{22}x_2+W^{(1)}_{23}x_3+b^{(1)}_2 \right )

z(2)3=W(1)31x1+W(1)32x2+W(1)33x3+b(1)3z3(2)=W31(1)x1+W32(1)x2+W33(1)x3+b3(1)

z^{(2)}_3=W^{(1)}_{31}x_1+W^{(1)}_{32}x_2+W^{(1)}_{33}x_3+b^{(1)}_3

a(2)3=f(W(1)31x1+W(1)32x2+W(1)33x3+b(1)3)a3(2)=f(W31(1)x1+W32(1)x2+W33(1)x3+b3(1))

a^{(2)}_3=f\left ( W^{(1)}_{31}x_1+W^{(1)}_{32}x_2+W^{(1)}_{33}x_3+b^{(1)}_3 \right )

从而,上述神经网络结构的最终的输出结果为:

hW,b(x)=f(W(2)11a(2)1+W(2)12a(2)2+W(2)13a(2)3+b(2)1)hW,b(x)=f(W11(2)a1(2)+W12(2)a2(2)+W13(2)a3(2)+b1(2))

h_{\mathbf{W},\mathbf{b}}\left ( \mathbf{x} \right )=f\left ( W^{(2)}_{11}a_1^{(2)}+W^{(2)}_{12}a_2^{(2)}+W^{(2)}_{13}a_3^{(2)}+b^{(2)}_1 \right )

上述的步骤称为前向传播,指的是信号从输入层,经过每一个神经元,直到输出神经元的传播过程。

2.4、其他形式的神经网络模型

上述以单隐层神经网络为例介绍了神经网络的基本结构,在神经网络的结构中,可以包含多个隐含层,神经网络的输出神经单元也可以是多个,如下面的含多隐层多输出单元的神经网络模型:

2.5、神经网络中参数的求解

对于上述神经网络模型,假设有mmm个训练样本{(x(1),y(1)),⋯,(x(m),y(m))}{(x(1),y(1)),⋯,(x(m),y(m))}\left \{ \left (\mathbf{x}^{(1)},y^{(1)} \right ),\cdots , \left (\mathbf{x}^{(m)},y^{(m)} \right )\right \},对于一个训练样本(x,y)(x,y)\left ( \mathbf{x},y \right ),其损失函数为:

J(W,b;x,y)=12‖‖hW,b(x)−y‖‖2J(W,b;x,y)=12‖hW,b(x)−y‖2

J\left ( \mathbf{W},\mathbf{b};\mathbf{x},y \right )=\frac{1}{2}\left \| h_{\mathbf{W},\mathbf{b}}\left ( \mathbf{x} \right )-y \right \|^2

为了防止模型的过拟合,在损失函数中会加入正则项,即:

J=loss+RJ=loss+R

J = loss + R

其中,losslossloss表示的是损失函数,RRR表示的是正则项。则对于上述的含有mmm个样本的训练集,其损失函数为:

J(W,b)=[1m∑i=1mJ(W,b;x(i),y(i))]+λ2∑l=1nl−1∑i=1sl∑j=1sl+1(W(l)ij)2J(W,b)=[1m∑i=1mJ(W,b;x(i),y(i))]+λ2∑l=1nl−1∑i=1sl∑j=1sl+1(Wij(l))2

J\left ( \mathbf{W},\mathbf{b} \right )=\left [ \frac{1}{m}\sum_{i=1}^{m}J\left ( \mathbf{W},\mathbf{b};\mathbf{x}^{(i)},y^{(i)} \right ) \right ]+\frac{\lambda }{2}\sum_{l=1}^{n_l-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_{l+1}}\left ( W^{(l)}_{ij} \right )^2

通常,偏置项并不放在正则化中,因为在正则化中放入偏置项只会对神经网络产生很小的影响。

我们的目标是要求得参数WW\mathbf{W}和参数bb\mathbf{b}以使得损失函数J(W,b)J(W,b)J\left ( \mathbf{W},\mathbf{b} \right )达到最小值。首先需要对参数进行随机初始化,即将参数初始化为一个很小的接近000的随机值。

参数的初始化有很多不同的策略,基本的是要在000附近的很小的邻域内取得随机值。

在随机初始化参数后,利用前向传播得到预测值hW,b(x)hW,b(x)h_{\mathbf{W},\mathbf{b}}\left ( \mathbf{x} \right ),进而可以得到损失函数,此时需要利用损失函数对其参数进行调整,可以使用梯度下降的方法,梯度下降对参数的调整如下:

W(l)ij=W(l)ij−α∂∂W(l)ijJ(W,b)Wij(l)=Wij(l)−α∂∂Wij(l)J(W,b)

W^{(l)}_{ij}=W^{(l)}_{ij}-\alpha \frac{\partial }{\partial W^{(l)}_{ij}}J\left ( \mathbf{W},\mathbf{b} \right )

b(l)i=b(l)i−α∂∂b(l)iJ(W,b)bi(l)=bi(l)−α∂∂bi(l)J(W,b)

b^{(l)}_{i}=b^{(l)}_{i}-\alpha \frac{\partial }{\partial b^{(l)}_{i}}J\left ( \mathbf{W},\mathbf{b} \right )

其中,αα\alpha 称为学习率,在计算参数的更新公式中,需要使用到反向传播算法

而∂∂W(l)ijJ(W,b)∂∂Wij(l)J(W,b)\frac{\partial }{\partial W^{(l)}_{ij}}J\left ( \mathbf{W},\mathbf{b} \right ),∂∂b(l)iJ(W,b)∂∂bi(l)J(W,b)\frac{\partial }{\partial b^{(l)}_{i}}J\left ( \mathbf{W},\mathbf{b} \right )的具体形式如下:

∂∂W(l)ijJ(W,b)=[1m∑i=1m∂∂W(l)ijJ(W,b;x(i),y(i))]+λW(l)ij∂∂Wij(l)J(W,b)=[1m∑i=1m∂∂Wij(l)J(W,b;x(i),y(i))]+λWij(l)

\frac{\partial }{\partial W^{(l)}_{ij}}J\left ( \mathbf{W},\mathbf{b} \right )=\left [ \frac{1}{m}\sum_{i=1}^{m}\frac{\partial }{\partial W^{(l)}_{ij}}J\left ( \mathbf{W},\mathbf{b};\mathbf{x}^{(i)},y^{(i)} \right ) \right ]+\lambda W_{ij}^{(l)}

∂∂b(l)iJ(W,b)=1m∑i=1m∂∂b(l)iJ(W,b;x(i),y(i))∂∂bi(l)J(W,b)=1m∑i=1m∂∂bi(l)J(W,b;x(i),y(i))

\frac{\partial }{\partial b^{(l)}_{i}}J\left ( \mathbf{W},\mathbf{b} \right )=\frac{1}{m}\sum_{i=1}^{m}\frac{\partial }{\partial b^{(l)}_{i}}J\left ( \mathbf{W},\mathbf{b};\mathbf{x}^{(i)},y^{(i)} \right )

反向传播算法的思路如下:对于给定的训练数据(x,y)(x,y)\left ( \mathbf{x},y \right ),通过前向传播算法计算出每一个神经元的输出值,当所有神经元的输出都计算完成后,对每一个神经元计算其“残差”,如第lll层的神经元iii的残差可以表示为δ(l)iδi(l)\delta ^{(l)}_i。该残差表示的是该神经元对最终的残差产生的影响。这里主要分为两种情况,一是神经元为输出神经元,第二是神经元为非输出神经元。这里假设z(l)izi(l)z^{(l)}_i表示第lll层上的第iii个神经元的输入加权和,假设a(l)iai(l)a^{(l)}_i表示的是第lll层上的第iii个神经元的输出, 即a(l)i=f(z(l)i)ai(l)=f(zi(l))a^{(l)}_i=f\left ( z^{(l)}_i \right )。

  • 对于输出层nlnln_l上的神经元iii,其残差为:

δ(nl)i=∂∂znliJ(W,b;x,y)=∂∂znli12‖‖y−hW,b(x)‖‖2=∂∂znli12∑snli=1‖‖yi−anli‖‖2=(yi−anli)⋅(−1)⋅∂∂znlianli=−(yi−anli)⋅f′(znli)δi(nl)=∂∂zinlJ(W,b;x,y)=∂∂zinl12‖y−hW,b(x)‖2=∂∂zinl12∑i=1snl‖yi−ainl‖2=(yi−ainl)⋅(−1)⋅∂∂zinlainl=−(yi−ainl)⋅f′(zinl)

\begin{matrix} \delta _i^{(n_l)}=\frac{\partial }{\partial z_i^{n_l}}J\left ( \mathbf{W},\mathbf{b};\mathbf{x},y \right )\\ =\frac{\partial }{\partial z_i^{n_l}}\frac{1}{2}\left \| y-h_{\mathbf{W},\mathbf{b}}\left ( \mathbf{x} \right ) \right \|^2\\ =\frac{\partial }{\partial z_i^{n_l}}\frac{1}{2}\sum_{i=1}^{s_{n_l}}\left \| y_i-a_i^{n_l} \right \|^2\\ =\left ( y_i-a_i^{n_l} \right )\cdot \left ( -1 \right )\cdot \frac{\partial}{\partial z_i^{n_l}}a_i^{n_l}\\ =-\left ( y_i-a_i^{n_l} \right )\cdot {f}'\left ( z_i^{n_l} \right ) \end{matrix}

-对于非输出层,即对于l=nl−1,nl−2,⋯,2l=nl−1,nl−2,⋯,2l=n_{l-1},n_{l-2},\cdots ,2各层,第lll层的残差的计算方法如下(以第nl−1nl−1n_{l-1}层为例):

δ(nl−1)i=∂∂znl−1iJ(W,b;x,y)=∂∂znl−1i12‖‖y−hW,b(x)‖‖2=∂∂znl−1i12∑snlj=1‖‖yj−anlj‖‖2=12∑snlj=1∂∂znl−1i‖‖yj−anlj‖‖2=12∑snlj=1∂∂znlj‖‖yj−anlj‖‖2⋅∂∂znl−1iznlj=∑snlj=1δ(nl)j⋅∂∂znl−1iznlj=∑snlj=1(δ(nl)j⋅∂∂znl−1i∑snl−1k=1f(znl−1k)⋅Wnl−1jk)=∑snlj=1(δ(nl)j⋅Wnl−1ji⋅f′(znl−1i))=(∑snlj=1δ(nl)j⋅Wnl−1ji)⋅f′(znl−1i)δi(nl−1)=∂∂zinl−1J(W,b;x,y)=∂∂zinl−112‖y−hW,b(x)‖2=∂∂zinl−112∑j=1snl‖yj−ajnl‖2=12∑j=1snl∂∂zinl−1‖yj−ajnl‖2=12∑j=1snl∂∂zjnl‖yj−ajnl‖2⋅∂∂zinl−1zjnl=∑j=1snlδj(nl)⋅∂∂zinl−1zjnl=∑j=1snl(δj(nl)⋅∂∂zinl−1∑k=1snl−1f(zknl−1)⋅Wjknl−1)=∑j=1snl(δj(nl)⋅Wjinl−1⋅f′(zinl−1))=(∑j=1snlδj(nl)⋅Wjinl−1)⋅f′(zinl−1)

\begin{matrix} \delta _i^{(n_{l-1})}=\frac{\partial }{\partial z_i^{n_{l-1}}}J\left ( \mathbf{W},\mathbf{b};\mathbf{x},y \right )\\ =\frac{\partial }{\partial z_i^{n_{l-1}}}\frac{1}{2}\left \| y-h_{\mathbf{W},\mathbf{b}}\left ( \mathbf{x} \right ) \right \|^2\\ =\frac{\partial }{\partial z_i^{n_{l-1}}}\frac{1}{2}\sum_{j=1}^{s_{n_l}}\left \| y_j-a_j^{n_l} \right \|^2\\ =\frac{1}{2}\sum_{j=1}^{s_{n_l}}\frac{\partial }{\partial z_i^{n_{l-1}}}\left \| y_j-a_j^{n_l} \right \|^2\\ =\frac{1}{2}\sum_{j=1}^{s_{n_l}}\frac{\partial }{\partial z_j^{n_{l}}}\left \| y_j-a_j^{n_l} \right \|^2\cdot \frac{\partial }{\partial z_i^{n_{l-1}}}z_j^{n_{l}}\\ =\sum_{j=1}^{s_{n_l}}\delta _j^{(n_l)}\cdot \frac{\partial }{\partial z_i^{n_{l-1}}}z_j^{n_{l}}\\ =\sum_{j=1}^{s_{n_l}}\left ( \delta _j^{(n_l)}\cdot \frac{\partial }{\partial z_i^{n_{l-1}}}\sum_{k=1}^{s_{n_{l-1}}}f\left ( z_k^{n_{l-1}} \right )\cdot W_{jk}^{n_{l-1}} \right )\\ =\sum_{j=1}^{s_{n_l}}\left ( \delta _j^{(n_l)}\cdot W_{ji}^{n_{l-1}}\cdot {f}'\left ( z_i^{n_{l-1}} \right )\right )\\ =\left (\sum_{j=1}^{s_{n_l}} \delta _j^{(n_l)}\cdot W_{ji}^{n_{l-1}}\right )\cdot {f}'\left ( z_i^{n_{l-1}} \right ) \end{matrix}

因此有:

δ(l)i=(∑j=1sl+1δ(l+1)j⋅W(l)ji)⋅f′(z(l)i)δi(l)=(∑j=1sl+1δj(l+1)⋅Wji(l))⋅f′(zi(l))

\delta _i^{(l)}=\left (\sum_{j=1}^{s_{l+1}} \delta _j^{(l+1)}\cdot W_{ji}^{(l)}\right )\cdot {f}'\left ( z_i^{(l)} \right )

对于神经网络中的权重和偏置的更新公式为:

∂∂W(l)ijJ(W,b;x,y)=a(l)jδ(l+1)i∂∂Wij(l)J(W,b;x,y)=aj(l)δi(l+1)

\frac{\partial }{\partial W_{ij}^{(l)}}J\left ( \mathbf{W},\mathbf{b};\mathbf{x},y \right )=a_j^{(l)}\delta _i^{(l+1)}

∂∂b(l)iJ(W,b;x,y)=δ(l+1)i∂∂bi(l)J(W,b;x,y)=δi(l+1)

\frac{\partial }{\partial b_{i}^{(l)}}J\left ( \mathbf{W},\mathbf{b};\mathbf{x},y \right )=\delta _i^{(l+1)}

2.6、神经网络的学习过程

对于神经网络的学过程,大致分为如下的几步:

  • 初始化参数,包括权重、偏置、网络层结构,激活函数等等
  • 循环计算
    • 正向传播,计算误差
    • 反向传播,调整参数
  • 返回最终的神经网络模型

参考文献

1、英文版:UFLDL Tutorial

2、中文版:UFLDL教程

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年11月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、神经网络
    • 1、神经元概述
      • 2、神经网络
        • 2.1、神经网络的结构
        • 2.2、神经网络中的参数说明
        • 2.3、神经网络的计算
        • 2.4、其他形式的神经网络模型
        • 2.5、神经网络中参数的求解
        • 2.6、神经网络的学习过程
    • 参考文献
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档