1. 多层人工神经网络模型

  • 多层感知机MLP(Multi-Layer Perceptron)也叫多层人工神经网络。一般的,常见的神经网络是如下图所示的层级结构。由输入层、隐藏层(可有多层)和输出层组成。神经网络中最基本的成分是神经元(neuron)。每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为“多层前馈神经网络”(multi-layer feedforward neural networks),(前馈并不意味着网络中信号不能向后传,而是指网络拓扑结构上不存在环或回路),其中,输入层神经元仅接收外界输入,不进行函数处理;隐藏层和输出层则包含功能神经元,能将接收到的总输入值与一定的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出。若将阈值也作为输入信号在神经网络中标出,则除输出层之外,各层会多出一个固定输入为-1的“哑结点”(dummy node),该节点与下一层的连接权即为阈值。这样权重和阈值的学习就可以统一为权重的学习。为方便后续解释,下图中并未标出哑结点。

  • 下图给出“单隐层网络”模型并解释各层功能及其作用方式:


    输入层拥有d个神经元,代表输入样本在d个属性下的值;
    输入层信号通过带权重的连接传递至隐藏层,隐藏层神经元分别接收到各自的总输入值ah(h=1,2…,q),将其与神经元的阈值进行比较,然后通过“激活函数”处理产生相应的输出bh(h=1,2,…,q);
    隐藏层输出信号同样通过带权重的连接传递至输出层,输出层神经元分别接收各自的总输入值co(o=1,2,…,l),并通过激活函数处理产生最后输出y’o(o=1,2,…l),即对该样本x的预测y’(这里的y’为 l 维列向量)。输出层神经元代表分类结果,其个数取决于最终分类标签的个数。
    神经网络的学习过程,就是根据训练数据来调整神经元之间的“连接权”(connection weight)以及每个功能神经元的阈值;换言之,神经网络“学”到的东西,蕴涵在连接权与阈值中。

  • 为了方便理解,这里举出该神经网络模型的应用实例:识别手写数字。
    假设样本为n个手写数字图像,每个数字图像由28×28像素组成,每个像素由灰度值表示。我们把28×28的像素展开变成一个有784个维度的一维行向量,即一个样本向量,那么此时输入层的神经元个数就会有784个,即图中的d=784。因为是识别单个手写数字,其结果会有0-9这十种情况,因此输出层就会有10个神经元,即图中的 l=10。至于隐藏层的层数以及单元数则作为要优化的额外超参数,可以通过交叉验证技术解决,在此不对其进行详细展开。

  • 关于激活函数:
    理想的激活函数是如下图(a)所示的阶跃函数,它将输入值映射为输出值“0”或“1”,显然“1”对应于神经元兴奋,“0”对应于神经元抑制。然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数,如下图(b)所示。有时,输出层神经元也采用线性激活函数,即直接以输入值c与阈值θ的比较结果作为最后的预测值y’输出。

2. 算法公式推导

(1)正向传播(Forward Propagation): 利用正向传播激活神经网络

  • 接下来,我们利用上述的神经网络模型,进一步用数学表达式来详细解释神经网络如何通过正向传播从输入信号输出预测结果的各个步骤:
    首先给定数据集 D:

    即数据集D共有n个样本,且输入样本x(i)由 d 个属性描述,输出 l 维实值向量 y(i),如下所示:

    将输入样本用矩阵X表示,输出值用矩阵Y表示:上标代表样本标号,下标代表相应的属性维度及分类维度。

    在输入层输入某一样本在各个属性维度下的值xk(k=1,2,…,d)作为接收信号并通过带权重v的连接传递至隐藏层,成为隐藏层的输入值ah(h=1,2,…q)。下图给出隐藏层的一个神经元如何接收输入层的输出信号:
    用公式表示为:
    则对应某一样本的隐藏层输入向量为:

    记这里的权重矩阵为V:

    这会是我们之后要学习的连接权之一。
    同理可以写出隐藏层的输入值矩阵A:

    接下来,隐藏层的各个功能神经元将接收到的输入值ah(h=1,2,…,q),与某一阈值γh(h=1,2,…,q)进行比较,然后通过“激活函数”(这里用sigmoid函数)处理产生神经元的输出bh(h=1,2,…,q),用公式表示为:

    则对应某一样本的输出层输出向量为:
    其中阈值γ也是我们之后要学习的参数。
    同样可以写出隐藏层输出值矩阵B:
    之后,隐藏层神经元的输出bh(h=1,2,…,q)继续通过带权重的连接w传递至输出层,成为输出层的输入值co(o=1,2,…,l),下图同样给出输出层的一个神经元如何接收隐藏层的输出信号:
    用公式表示为:

    则对应某一样本的输入层输入向量为:

    记这里的权重矩阵为W:

    这也是我们之后要学习的连接权之一。
    同理可以写出输出层的输入值矩阵C:
    最后,输入层的各个功能神经元将接收到的输入值co(o=1,2,…,q),与某一阈值θo(o=1,2,…,q)进行比较,然后通过“激活函数”(这里用sigmoid函数)处理产生神经元的输出y’o(o=1,2,…,q),用公式表示为:
    则对应某一样本的输出层输出向量为:
    这里的阈值θ也是我们之后要学习的系数。同样可以写出输出层输出值矩阵Y’:
    若输出层神经元采用线性激活函数,则输出预测结果y’o(o=1,2,…,q),用公式表示为:则对应某一样本的输出层输出向量为:
    以及输出层的输出值矩阵Y’:
  • 以上就是“单隐层神经网络”中输入信号如何通过各层的处理最后输出预测结果的正向传播激活网络的全过程。这里将其简单总结如下图所示:
    (2)逆向传播(BackPropagation,简称BP): 利用逆向传播学习神经网络的权重系数及阈值
  • BP是一种迭代学习算法,在迭代的每一轮中采用广义的感知机(perceptron)学习规则对参数进行更新估计,即任意参数w的更新方式为:

    其中Δw是所谓“目标函数”(objective function)关于该参数的梯度(偏导)。若要使目标函数的迭代值与迭代数成反比,即随着迭代的进行,目标函数值越来越小,则目标函数要为凹函数拥有全局最小值用于收敛并采用负梯度下降更新权重;反之,若要使目标函数的迭代值与迭代数成正比,则目标函数为凸函数具有全局最大值同样用于收敛并用正梯度上升更新权重。具体如下图所示:
    BP算法采用误差函数J(v,w,γ,θ)为目标函数,又称为“代价函数”(cost function),其数学表达式为:
    既为误差函数,则必然要求其值随着迭代的进行而下降,从而找到能使代价函数为全局最小值的权重,因此代价函数为凹函数,采用梯度下降(gradient descent)策略,则Δw可以表示为:
    其中,η为学习率,控制梯度下降的步长。当学习率很小时会使收敛缓慢,学习率过大则会增加忽略全局最小值的可能性。因此学习率η也是算法在实际运用中需要调优的超参数。
    此外需要注意的一点是,多层神经网络的代价函数与自适应线性神经元(Adaline)以及逻辑回归(logistic regression)这样的单层网络的代价函数相比更为复杂。单层网络的代价函数与参数相关的误差表面就如同上图所示一样通常是光滑的、无突起的。而多层神经网络的代价函数是复杂嵌套函数,维度更高,其误差表面有许多突起,即拥有许多局部极小值,如下图所示:

    因此,要想找到全局最小值就必须克服这些局部极小值。神经网络参数化通常所面临的挑战就是处理高维特征空间的大量权重系数。
    微积分中的链式规则就是一种计算复杂嵌套函数导数的方法,如 F(x)=f(g(h(u(v(x))))) 应用链式法则的求导为:

    计算机代数已经开发出了一套非常有效地解决这类问题的技术,也就是所谓的自动微分。自动微分有正向和反向两种模式,反向传播仅仅是反向模式自动微分的特例。关键是正向模式应用链式法则可能相当昂贵,因为要与每层的大矩阵(雅可比矩阵)相乘,最终乘以一个向量以获得输出。反向模式的技巧是从右往左:用一个矩阵乘以一个向量,从而产生另一个向量,然后再乘以下一个矩阵,以此类推。矩阵向量乘法比矩阵矩阵乘法在计算成本上要便宜得多,这就是为什么反向传播算法是神经网络训练中最常用的算法之一。
    根据上述分析,本质上可以认为BP算法是一种计算多层神经网络复杂成本函数的偏导数的非常有效的方法,其目标是利用这些导数来学习权重系数,以实现多层人工神经网络的参数化。
    接下来我们开始利用微积分的链式规则来逐步推导BP算法中的权重更新公式,以上述所介绍的“单隐层神经网络”模型为例。
    首先,这里我们需要更新的权重系数有四个,它们分别是:两个权重矩阵V、W,以及两组阈值向量γ和θ,我们对它们采用如下所示的广义感知机学习规则以及负梯度下降进行迭代更新:
    从神经网络的右往左对代价函数J(v,w,γ,θ)进行求导,首先会遇到的是隐藏层的权重矩阵W以及阈值向量θ。这里首先写出代价函数J(v,w,γ,θ)的完整嵌套函数形式:
    根据上式可写出代价函数关于权重w以及阈值θ的负梯度:


    其中:

    值得一提的是,有些多层神经网络的输出层使用的激活函数为线性激活函数,而非Sigmoid函数,此时,权重w以及阈值θ的偏导则为:


    其中:
    若设输出层的误差δ1o(o=1,2,…,l)为:

    或者当输出层神经元的激活函数为线性激活函数时δo(o=1,2,…,l)可表示为:

    则Δw和Δθ可以表示为:

    接下来,继续从右往左求导,得到权重v和阈值γ的负梯度:

    其中:
    若输出层神经元的激活函数为线性激活函数,则权重v和阈值γ的负梯度可表示为:


    其中:
    若设隐藏层的误差δ2h(h=1,2,…,q)为:

    其中δ1o(o=1,2,…,l)为:

    或者当输出层神经元的激活函数为线性激活函数时δ2h(h=1,2,…,q)可表示为:

    其中δ1o(o=1,2,…,l)为:

    则Δv和Δγ可以表示为:
  • 至此推导出所有参数的负梯度,将各个参数的权重更新总结如下:

    其中:

    用矩阵表示为:

    其中:

3. 关于算法的实际应用

  • 关于每次参数更新所针对的数据集大小对模型学习的影响:
    在实际应用中,一般来说标准BP算法每次更新只针对单个样例,即上述推导过程中的样本个数n=1的情况。在这种情况下,参数更新得非常频繁,而且对不同样例进行更新的效果可能出现“抵消”现象。
    与之相对应的累积BP算法直接针对整体训练集的总误差,即n>>1的情况。在这种情况下,每更新一次权重系数,算法都要读取整个训练集的数据一遍,因此其参数更新频率会非常缓慢。
    在实际应用中,我们可以采取折中的方式,即采用小批量(mini-batch)的数据读取方式,每次只读取总训练数据的一小部分数据来更新参数。这样既可以提高计算效率,也能够更快地进行参数更新。

  • 关于BP神经网络的“过拟合”(overfitting)问题:
    除此之外,多层神经网络由于其强大的表示能力而经常遭遇“过拟合”(overfitting),即模型在训练集上表现良好但无法概括未见过的新数据或测试数据的情况。在这种情况下,我们也称模型具有”高方差“(high variance)的属性,即模型对训练数据的随机性很敏感。
    有两种策略常用来缓解BP网络的过拟合问题:
    第一种策略是"早停"(early stopping):将数据分成训练集和验证集,训练集用来计算梯度、更新权重和阈值,验证集用来估计误差。若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
    第二种策略是"正则化"(regularization):其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和(L2正则化)。由于过拟合问题通常是由于训练后的模型表达式过于复杂所导致的,因此通过调整正则项系数λ使该正则项经过微分后能够不同程度地降低各个权重系数值以减少各个特征对结果的影响从而使模型得到不同程度的简化,就能最终达到抵抗模型过拟合的效果。

4. 参考文献

  • [1] 周志华. 机器学习(第1版)[M]. 出版地:北京市清华大学学研大厦A座, 出版单位:清华大学出版社, 出版年份:2016, 起止页码:97-106.
  • [2] Sebastian Raschka,Vahid Mirijalili. Python机器学习(第2版)[M]. 出版地:北京市西城区百万庄大街22号, 出版单位:机械工业出版社, 出版年份:2019, 起止页码:238-261.

MLP入门:多层人工神经网络模型及算法公式推导(正向传播与逆向传播过程详解)相关推荐

  1. TextRank算法原理和提取关键词的主要过程详解 计算句子相似度 计算句子重要性公式

    1.TextRank计算句子相似度和句子重要性的公式 2.TextRank算法提取关键词的过程 3.TextRank建立关键词无向图

  2. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec...

    人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...

  3. 人工神经网络模型发展及应用综述

    摘要:机器学习这一词不断的出现在网络上,也是近几年受欢迎的热词,而机器学习的基础算法就是人工神经网络,人工神经网络的研究是当下各种网络的基础,也越来越受人们的关注,现在人工神经网络的发展在当下不管是理 ...

  4. 人工神经网络模型定义,人工神经网络基本框架

    人工神经网络评价法 人工神经元是人工神经网络的基本处理单元,而人工智能的一个重要组成部分又是人工神经网络.人工神经网络是模拟生物神经元系统的数学模型,接受信息主要是通过神经元来进行的. 首先,人工神经 ...

  5. 人工神经网络的典型模型,人工神经网络模型定义

    神经网络BP模型 一.BP模型概述误差逆传播(ErrorBack-Propagation)神经网络模型简称为BP(Back-Propagation)网络模型. PallWerbas博士于1974年在他 ...

  6. 人工神经网络模型定义,人工智能神经网络模型

    1.什么是神经网络,举例说明神经网络的应用 我想这可能是你想要的神经网络吧! 什么是神经网络: 人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(N ...

  7. 常见的人工神经网络模型,人工智能神经网络模型

    人工神经网络,人工神经网络是什么意思 一. 人工神经网络的概念人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和 ...

  8. 什么是人工神经网络模型,神经网络模型可解释性

    神经网络模型 nlp是什么意思 NLP是神经语言程序学(Neuro-LinguisticProgramming)的英文缩写.在香港,也有意译为身心语法程式学的.N(Neuro)指的是神经系统,包括大脑 ...

  9. 人工神经网络模型有哪些,神经网络分类四种模型

    有哪些深度神经网络模型 目前经常使用的深度神经网络模型主要有卷积神经网络(CNN).递归神经网络(RNN).深信度网络(DBN).深度自动编码器(AutoEncoder)和生成对抗网络(GAN)等. ...

最新文章

  1. 数据在HDFS和HBASE之间互相传递的过程
  2. Android Studio no debuggable applications解决方案2
  3. IOS开发学习笔记(1)
  4. Java 14 发布了,终于可以扔掉Lombok了?
  5. 阿里P8大佬亲自讲解!朝阳java培训
  6. 如何在Global.asax中判断是否是ajax请求
  7. 表单及数据提交、表单的作用、服务端接收提交的数据、php处理数据流程、文件域及文件域中数据处理、php展示数据(响应)
  8. 安装 RabbitMQ
  9. 离子膜烧碱行业调研报告 - 市场现状分析与发展前景预测
  10. 一系列JavaScript的基础工具
  11. python中np没有定义_第六篇:python中numpy.zeros(np.zeros)的使用方法
  12. 怎么讲gis里的符号化_地信(GIS)方向考研~?测绘科学与技术
  13. Set A Light 3D Studio 2.0 for Mac(3D摄影棚布光软件)
  14. svnadmin dump导入导出命令
  15. 微信公众号开发(个人订阅号)
  16. python基础(八):进制转换及python中的进制转换方法
  17. 计算机仿真类的论文,最新计算机仿真参考文献 计算机仿真专著类参考文献有哪些...
  18. MyBatis学习----使用mybatis对单表进行操作
  19. word文件打不开,千万别删除!教你轻松修复
  20. 集群调度LSF-学习笔记

热门文章

  1. Guitar Pro 7 中文版-中文版下载地址
  2. Python时间日期类型
  3. 北华航天工业学院计算机科学与技术,北华航天工业学院计算机科学与工程系介绍...
  4. Axios 中文文档/说明
  5. Linux虚拟机的启动及相关命令
  6. 多元线性回归——波士顿房屋价值模型预测
  7. Python学习笔记:Python做热力地图
  8. 19. Fight over Fox-hunting 猎狐引发的冲突
  9. 2007年12月12日
  10. 【开箱即用】VirtualBox Ubuntu20.04.6、22.04.2虚拟机下载