区别于传统统计机器学习的各类算法,我们从本篇开始探索深度学习模型。深度学习在应用上的重要性现如今已毋庸置疑,从2012年燃爆ImageNet,到2016年的AlphaGo战胜李世石,再到2018年的BERT作为NLP领域重要里程碑的出现,深度学习在计算机视觉、推荐、计算机广告、自然语言处理等很多领域全面铺开并逐步占据主导地位。经过多年的发展,深度学习适用于不同场景问题的各种网络结构、神经元结构、学习算法都有了很大的变化,但是它们整体上仍遵循着一些通用范式,这些范式就包括我们我们之前介绍过的机器学习基础理论,以及我们今天要探讨的最简单的深度学习模型:前馈神经网络。我们将在前馈神经网络的介绍中重点探讨一些基本内容,这对我们理解更复杂更前沿的深度学习模型至关重要:

  • 深度学习模型与传统统计机器学习模型有哪些关联与区别?
  • 我们应该怎样看待深度学习模型?
  • 为什么深度学习模型是有效的?
  • 为什么现如今大多数深度学习的科研工作都聚焦在深度学习的结构和学习算法上?
  • 如何学习和训练一个深度学习模型?过程中可能会遇到哪些问题?

接下来就让我们带着这些问题来探讨前馈神经网络。

从线性基函数模型与感知机到前馈神经网络

我们希望通过本节的介绍把深度学习模型与之前介绍过的传统统计机器学习算法结合起来,以便于整体的理解和梳理。回顾我们之前在介绍回归模型中的线性基函数模型:

模型简单好理解,最小平方误差下还有解析解都是它的优点,但是缺点就是它的基函数是事先选择好并固定下来的,比如我们选择高斯基函数就不能变了,能变的只是权重系数w和高斯基函数中的参数,如果训练数据不是特别适合高斯基函数呢?毕竟这种情况下我们基函数的选择是有限的,而场景问题和训练数据的种类是无限地,这就带来了基函数固定导致的灵活性不足,在复杂场景中容易出现欠拟合的问题,无他,模型能力不够。

两层的前馈神经网络(输入层+隐藏层+输出层)可以看作线性基函数模型的一种扩展,扩展的地方就在于其基函数不是事先选择并固定的,而是根据训练数据可调节的,注意不是权重系数w可调节,而是基函数本身的类别可调节,在训练过程中选择尽可能适配数据的基函数,基函数的个数固定(隐藏层节点个数固定,不一定与输入个数相同)但是种类不同,这里的基函数看做是本层输入的线性组合的非线性函数(隐藏层节点),其中线性组合的系数是可调节的,这样不同的线性组合系数就代表了不同的基函数

基于此,多层的前馈神经网络也就可以看做更复杂的基函数,这是一种理解思路。

还存在另外一种理解,前馈神经网络也通常被称为多层感知机,我们回顾感知机模型:

馈神经网络的基础单元与感知机的区别在于前者使用的是连续非线性函数,是可微的,至少是除可数点外可微的,这对神经网络的训练至关重要,而感知机模型使用的阶梯函数。忽略非线性函数的不同选择,对于多层前馈神经网络中的每一个中间节点都可以看做是感知机单元,因此多层感知机名副其实。

所以综合来看,前馈神经网络既可以看做线性基函数的扩展,也可以看做是感知机模型的按照既定网络结构的堆叠。说完前馈神经网络与线性基函数模型与感知机的关联,接下来我们将目光聚焦到前馈神经网络本身。

刚才在讨论关联的时候我们刻意忽略了非线性函数的选择,其实具体地讲这里所说的非线性函数可以分为两类:一是中间节点非线性函数的选择,我们一般称之为激活函数,二是输出节点非线性函数的选择,我们可以称之为输出转换函数。激活函数的作用在于为模型增加非线性能力,如果激活函数为线性函数,那么输入线性组合的线性函数过程重复多次,即线性变换的线性变换仍然是线性变换(矩阵乘矩阵仍是矩阵),对于实现线性变换的模型我们通常有其它更好的选择,因此激活函数通常是非线性函数,最经典的选择莫过于Sigmoid函数,更多其它激活函数的选择和分析日后我们专门来看。对于输出转换函数,则针对不同的场景问题,由数据本身和目标变量的分布确定,比如回归问题中通常选择恒等函数,二分类通常选择Sigmoid函数,多分类通常选择Softmax函数。

那么在确定了前馈神经网络模型结构以及其和线性基函数模型与感知机模型的关联之后,我们应该怎么理解这个模型呢?如之前所说,我们把两层前馈神经网络看做是线性基函数模型的扩展,为什么需要扩展?是因为传统线性基函数模型的基函数固定,灵活性不足,能力不到位。那么进一步地看,怎么理解能力这个东西呢,其实模型的目的就是要学习输入和输出之间的映射关系,对于比较复杂的关系,在模型能力普遍不强的时代,通常需要通过人类的理解和分析在样本数据中提炼出跟输出有更直接的关系的特征做输入,以便简化模型的任务。结合我们在线性基函数和核方法中介绍的内容,我们是通过“基函数”与“核函数”的作用,把原始输入映射到特征空间,样本数据在这些特征空间中的表示表现出与其目标值有更直接的关系。因此我们可以这么理解一般模型的作用过程(其中一种角度):模型学习的是输入与输出的简单对应关系,当输入和输出的关系十分复杂时,我们通常倾向于间接的方法,即通过构造出一批特征,使得这些特征与输出表现出类似的简单对应关系。这些特征的构造可能是人类通过理解和分析构造,也有可能是模型本身构造(如“基函数”与“核方法”)。如果我们认同这样的模型作用过程理解,那么我们就可以这么理解以前馈神经网络为代表的深度学习模型:我们将其按层分为两个阶段,第一个阶段为特征抽取过程,第二个阶段为学习特征与目标输出之间的简单对应关系,其中后者为输出层,前者为隐藏层。因此抛开最后学习简单对应关系的过程,我们可以把深度学习方法理解成是一种与其余方法不同的特征自动抽取方法,它优越性能的关键也就在于其自动抽取出来特征的质量高,比如我们看两层的前馈神经网络,中间隐藏层节点可以看做抽取的特征,输出层的各个输出独立地进行,第一层对于各个输出则权值共享,可以理解为特征抽取过程的一致性,只是各个输出对特征的使用不同。

前馈神经网络的结构与有效性

我们前一节中说前馈神经网络可以看做线性基函数模型的一种扩展,是一种模型复杂度和能力上的提升,那么究竟前馈神经网络的能力如何呢?如在学习理论——算法之前不得不谈的事中所介绍的,在传统统计学习中我们通常用VC维来度量模型能力,对于前馈神经网络同样有理论证明:一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数(如Sigmoid函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何一个从有限维空间到另一个有限维空间的连续函数,这就是针对前馈神经网络的通用近似定理。后来的研究继续扩展了原始定理,前馈神经网络也可以近似从任何有限维离散空间到另一个任意函数,激活函数取更广泛类别的非多项式激活函数也是适用的,包括现在常用的Relu。

通用近似定理告诉我们一个足够大的两层前馈神经网络能够达到我们所期望的任意精度,但是并没有说这个网络具体有多大,后续的研究表明在最坏的情况下,可能需要指数数量的隐藏单元,即每一个隐藏单元对应着一种潜在需要区分的输出情形。可想而知,如果总是需要分析出问题的所有可能性然后配置对应的隐藏单元,并且学习出正确的参数,这样的实现几乎是不可能的。所以现在通常的做法是使用更深层的网络,这样能够对每一层使用更少的单元数和参数以实现类似的样本数据拟合,并且经常可以取得更好地泛化性能,但带来的问题就是更难以优化

选择更深层的网络而非浅层网络的主要原因是:浅层网络更容易过拟合,而深层网络泛化性能则更好。选择深层模型表达了模型对待学习的函数空间的有用偏好或者说先验(类似于正则化的一种理解角度,即对模型空间的偏好),具体地说,选择深层模型代表了我们默认这样一种假设,即我们期望学习到的函数是有许多更简单的函数复合在一起而得到的,这种复合可以理解为目标函数可能是由许多更简单的的函数组合而成的表示(比如猫由五官、躯干和四肢构成),也可以理解为目标函数是某种具有顺序依赖步骤的程式,后者的步骤需要依赖前者才能更好地进行(比如词语到句子到篇章的理解)。这种目标函数的假设通常情况下符合我们的现实问题,因此这种先验的引入有助于我们更好地学习到能够拟合样本数据的所有函数中"更好"的那一个(类似于正则化的理解),因此它的泛化性能也会更好。不仅如此,更进一步地讲,随着深度学习的不断发展涌现出来的适用于各类场景的不同网络结构和神经单元,从本质上讲也可以视为同样的理解,即特定的结构表达出了对于该问题更合适的某种先验(当然也有可能是更容易优化),这种有效信息可以引导我们更好地通过已有的学习算法学习到那个“更好”的解。这也就是为什么许多深度学习领域的科研工作都聚焦在神经单元和网络结构的创新上,而且通常需要对提出的解决方法作出某种合理的解释。

选择深层模型有其上述的必要性,但是它却引入了一个训练学习上的问题,也就是难以优化。因而复杂的结构需要很多学习优化上的创新,所以很多深度学习领域的科研工作也聚焦在如何更好地学习优化上,比如网络结构中跨越层的链接、更好激活函数的选择、更好损失函数的选择、更好迭代优化算法的尝试等都意在更高效地学习网络中待定的参数。

前馈神经网络的训练

在这里,我们首先回顾传统统计学习算法的一般优化过程,在此基础上来看深度学习模型的优化带来了哪些不同的挑战,然后总结深度学习模型的一般训练过程。

对于机器学习问题,我们关注性能度量P,但其通常定义域测试集上并且可能是不可解的,对此我们通过细致地挑选合适的代价/损失/目标函数

来间接地优化P,我们期望目标函数所度量的期望泛化误差(风险)最小,但由于我们能利用的只有训练集,因此建立在训练数据独立同分布的假设之上,用训练数据的经验分布代替真实分布,用目标函数在训练集上的经验风险代替风险,这种最小化平均训练误差的过程称为经验风险最小化。当然,经验风险最小化容易导致过拟合,我们通常会采取很多正则化措施防止过拟合。因此模型的训练过程也就对应到一个优化问题的求解过程,对于大部分无法求得解析解的优化问题,最有效的现代优化算法主要是基于梯度下降的,神经网络模型的训练也延续同样的思路,但是也多了很多独特的挑战:
  • 如同很多凸函数Hessian矩阵有可能出现的病态情形,病态问题也存在于神经网络的训练过程中,病态体现在随机梯度下降时会“卡”在某些情况,而这时数据微小的而变化也会带来目标函数的极大变化,也就是此时即使很小的学习率也有可能增加损失函数。
  • 神经网络模型的特点还在于它几乎总会存在许多局部极小值,其存在的原因可能有多个。其中一个典型的原因就是因为神经网络的一个特性:权重空间对称性,比如对于两层的前馈神经网络来说,我们交换第一层单元i和j的输入权重系数和输出权重系数,那么得到模型是等价的,这种权重空间对称性的存在使得神经网络不具有模型可辨识性,对于一个训练好的参数模型,总是存在另外的一组参数与其等价,因此对于非凸函数经常存在的局部极小值,神经网络存在的等价局部极小值总是很多的。整流线型或者maxout等激活函数也是存在等价参数使得模型不可辨认的一个原因。神经网络中广泛存在的局部极小值的确会对我们的优化产生很多忧虑,尤其是如果局部极小值相比全局最小值有非常大的损失函数值。这个问题如今仍是学术研究的热点问题,但是由实践引出的猜想普遍认为:对于足够大的神经网络,大部分的局部极小值都具有很小的损失函数值(相比全局最小值),因此我们能不能找到真正的全局最小点并不重要,只需要在参数空间中找到一个损失函数值很小的点(接近局部极小点),通过比较几个局部极小值就已经能够找到足够好的解了
  • 虽然对神经网络还没有很好地证明,但是从很多其它高维非凸函数来看,鞍点是比局部极小点更为普遍的存在,而且实验表明,神经网络中很多鞍点的损失函数值都很高。鞍点的激增或许可以解释神经网络训练中为什么二阶方法无法成功取代梯度下降。
  • 对于某些特殊的神经网络结构,比如循环网络,长期依赖问题的存在触发的梯度消失和爆炸问题,对梯度下降算法带来了挑战,这一点我们会在介绍循环网络时来看;虽然导致的原因不同,深度神经网络同样存在梯度消失和爆炸问题,这一点我们会在下一篇中详细探讨。

对于以前馈神经网络为代表深度模型,如今典型的学习过程是反向传播与以梯度下降为代表的优化算法。在此我们首先要澄清一个容易混淆的概念,即有的地方经常会用反向传播来代指深度模型的整个学习算法,其实这是不准确的,整体的学习算法可以分为两方面:

  • 代价信息如何传递到深度模型的每一层?
  • 基于传递到本层的信息,本层的参数应该如何更新?

在特定结构中,信息沿着组织结构向前流动,我们称之为前向传播,相应的,反向传播则指信息沿着结构从后向前流动,在前馈神经网络中,前向传播的是输入,并且在过程中逐渐抽象为特征,反向传播的则是当前输出值与期望输出的代价信息,或者说误差,传递到每一层的信息则是该层的输出值与该层的“期望输出”的代价信息,在如今的主流框架中,反向传播与代价信息和梯度结合起来借助计算图来实现。因此,反向传播既不是只有神经网络或者深度模型才有,也不能全部代表深度模型的整个学习算法,它所代表的只是第一个问题,基于代价信息如何更新参数如何进行更高效的优化则是优化算法的问题。现代最有效的优化算法主要是基于梯度下降的,并以其为基础做出了很多创新工作,我们将在以后的内容中详细介绍。

因此,总结深度模型的训练过程如下:针对既定的网络结构和性能指标,细致地定义代价/误差/目标函数,输入通过前向传播到达输出层,并且针对每一个或一批输入产生的输出,在定义好的代价函数下计算代价信息,通过反向传播传递到深度模型的每一层,在每一层上基于代价信息对参数的梯度更新参数,直到满足停止条件,完成训练。

总结

前馈神经网络作为深度学习模型的基础和代表,理解它对我们理解其它的深度学习模型都很有帮助。我们通过把前馈神经网络看做线性基函数模型的扩展或多层的感知机,建立了深度学习模型到传统统计学习算法的联系,帮助我们理解两类算法之间的本质:特征抽取。接下来介绍了前馈神经网络的理论基础:通用近似定理及其延展,并且探讨了如今大部分的学术工作都在积极探索深度学习模型多种结构和优化算法的原因,尤其是为什么结构总是倾向于“更深”的原因。最后,我们将深度模型的训练分为了反向传播代价信息和基于代价信息的梯度下降优化两步,以对深度模型的训练建立整体上更清晰的理解。

我们提到,如今深度学习科研工作大部分都聚焦在包括神经元和整体网络的结构,以及优化方法的创新上,因为这是我们接下来介绍的重点:有哪些实践证明的适用于特定场景问题的特定网络结构,以及如何把深度学习模型优化地更好。

前馈神经网络_深度学习基础理解:以前馈神经网络为例相关推荐

  1. 贝叶斯深度神经网络_深度学习为何胜过贝叶斯神经网络

    贝叶斯深度神经网络 Recently I came across an interesting Paper named, "Deep Ensembles: A Loss Landscape ...

  2. nin神经网络_深度学习基础(三)NIN_Network In Network

    该论文提出了一种新颖的深度网络结构,称为"Network In Network"(NIN),以增强模型对感受野内local patches的辨别能力.与传统的CNNs相比,NIN主 ...

  3. ann人工神经网络_深度学习-人工神经网络(ANN)

    ann人工神经网络 Building your first neural network in less than 30 lines of code. 用不到30行代码构建您的第一个神经网络. 1.W ...

  4. 深度学习深度前馈网络_深度学习前馈网络中的讲义第4部分

    深度学习深度前馈网络 FAU深度学习讲义 (FAU Lecture Notes in Deep Learning) These are the lecture notes for FAU's YouT ...

  5. 神经网络与深度学习(五)前馈神经网络(2)自动梯度计算和优化问题

    注:本次使用的数据集依旧是前两章的Moon1000数据集  from nndl.dataset import make_moons [详细代码见 神经网络与深度学习(五)前馈神经网络(1)--二分类任 ...

  6. 神经网络与深度学习(五)前馈神经网络(3)鸢尾花分类

    目录 4.5实践:基于前馈神经网络完成鸢尾花分类 深入研究鸢尾花数据集 4.5.1 小批量梯度下降法 4.5.1.1 数据分组 4.5.2 数据处理 4.5.2.2 用DataLoader进行封装 4 ...

  7. 第三章_深度学习基础

    文章目录 第三章 深度学习基础 3.1 基本概念 3.1.1 神经网络组成? 3.1.2神经网络有哪些常用模型结构? 3.1.3如何选择深度学习开发平台? 3.1.4为什么使用深层表示? 3.1.5为 ...

  8. 为什么深层神经网络难以训练_深度学习与统计力学(III) :神经网络的误差曲面...

    谷歌和斯坦福最新合作综述报告,发表在物理学的顶级期刊"凝聚态物理年鉴"(Annual Review of Condensed Matter Physics).作者Yasaman B ...

  9. 深度学习深度前馈网络_深度学习前馈网络中的讲义第1部分

    深度学习深度前馈网络 FAU深度学习讲义 (FAU Lecture Notes in Deep Learning) These are the lecture notes for FAU's YouT ...

最新文章

  1. 如何查找并干掉僵尸进程
  2. 并发执行变成串行_一篇讲透如何理解数据库并发控制(纯干货)
  3. python反转单链表
  4. 大厂首发!java敏捷开发模式面试题
  5. docker修改默认存储位置
  6. Spring boot其他框架日志
  7. 如何制作高水平简历? 制作简历时需要注意的问题
  8. C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表
  9. 网易云信七鱼被推选为“2016企业创服联盟合作伙伴”
  10. .NET Core+Selenium+Github+Travis CI =amp;gt; SiteHistory
  11. 昨天刚招到一个程序员,第一天入职就离职了....因为不加班
  12. java 反射api_个人编程学习网 - Java-操作反射其他的API
  13. 和root权限挣扎过的一些记录
  14. 学会了selenium 模拟鼠标操作,你就可以偷懒点点点了
  15. 360录屏时去掉跑马灯解决方法 以失败告终
  16. C语言经典100道编程练习题
  17. 如何在html中下载pdf等文件而不是直接打开
  18. 使用PHP求解二元一次方程,二元一次方程求解
  19. catia二次开发:检查文件类型 检查部件类型 产品名称 通过交互选择约束两个零件轴系重合 添加自定义属性,MasterShapeRepresentation
  20. Linux网络服务之常规vsFTP服务配置(超级详细图解一步骤一图)

热门文章

  1. 科技驱动未来:飞康如何赢得尤尼克斯的青睐?
  2. 制定2015年的移动开发策略
  3. 使用JavaMail技术发送邮件
  4. 企业开展网络营销常用的十九种方法
  5. 过期域名如何助力犯罪分子攻破企业防御
  6. 奇安信代码安全实验室帮助谷歌修复高危漏洞,获官方致谢
  7. 护航敏捷开发和运维 BCS2020举办DevSecOps论坛
  8. 编程在线--- 网站(IT技术学习、面试、交流)上线了
  9. ArrayList和LinkedList的插入删除性能差距到底有多大
  10. NLPIR语义智能平台支持大数据个性化学习