《神经网络与深度学习》 - nndl.github.io · 序...

441
神经网络与深度学习Neural Networks and Deep Learning https://nndl.github.io/ 邱锡鹏 [email protected] 2020 1 3

Upload: others

Post on 05-Oct-2019

24 views

Category:

Documents


0 download

TRANSCRIPT

  • 《神经网络与深度学习》Neural Networks and Deep Learning

    https://nndl.github.io/

    邱锡鹏[email protected]

    2020年 1月 3日

    https://nndl.github.io/

  • 很高兴为邱锡鹏教授的《神经网络与深度学习》一书写个序.近年来由于阿尔法围棋战胜人类顶级高手新闻的轰动效应,让人工智能一

    下子进入了寻常百姓家,成为家喻户晓的热词. 阿尔法围棋之所以能取得如此成功的关键技术之一,正是所谓的深度学习技术. 而其实在阿尔法围棋出来之前,以深度学习为代表的人工智能技术已经在模式识别、计算机视觉、语音识别与生成、自然语言处理、机器翻译等方面取得了重要的进步. 也因此,2018年有计算机领域诺贝尔奖之称的图灵奖就颁给了对深度学习作出重要贡献的三位科学家:Yoshua Bengio、Geoffrey Hinton和Yann LeCun.

    邱锡鹏教授的《神经网络与深度学习》一书较全面地介绍了神经网络、机器学习和深度学习的基本概念、模型和方法,同时也涉及了深度学习中许多最新进展. 书后还提供了相关数学分支的简要介绍,以供读者需要时参考.《神经网络与深度学习》一书已在网上发布,得到广泛好评,相信此书的出版

    可以给有意了解或进入这一颇有前途领域的读者提供一个很好的参考书. 基本的深度学习相当于函数逼近问题,即函数或曲面的拟合,所不同的是,这里用作基函数的是非线性的神经网络函数,而原来数学中用的则是多项式、三角多项式、B-spline、一般 spline以及小波函数等的线性组合.

    由于神经网络的非线性和复杂性(要用许多结构参数和连接权值来描述),它有更强的表达能力,即从给定的神经网络函数族中可能找到对特定数据集拟合得更好的神经网络. 这相信正是深度学习方法能得到一系列很好结果的重要原因. 直观上很清楚,当你有更多的选择时,你有可能选出更好的选择. 当然,要从非常非常多的选择中找到那个更好的选择并不容易.

    这里既涉及设计合适的神经网络类型,也涉及从该类型的神经网络中找出好的(即拟合误差小的)那个特定神经网络的方法. 后者正是数学中最优化分支所研究的问题. 从数学角度看,目前深度学习中所用的优化算法还是属于比较简单的梯度下降法. 许多数学中已有的更复杂的算法,由于高维数问题都还没有得到应用.

  • II

    本书中对这两方面都有很好的介绍. 相信随着研究的不断发展,今后一定会提出更多新的神经网络和新的优化算法.

    所谓成也萧何败也萧何,神经网络的非线性和复杂性(即要用大量参数来描述;在深度网络场合其个数动辄上万、百万甚至更多),使得虽然通过大量的标注数据经过深度学习可以得到一个结果误差很小的神经网络,但要用它来进行解释却是十分困难. 其实这也是长期困扰神经网络方法的一个问题,使用深度神经网络的深度学习方法也概莫能外.

    难于解释相当于知其然不知其所以然. 这对有些应用而言是可以的;但对有些可能造成严重后果的应用而言则有很大问题. 一般而言,人们除了希望知其然,也会希望能知其所以然.

    近来也有学者发现,一个精度很高的神经网络,去改变它的几个(甚至一个)参数,就会使该网络的性能下降许多. 换言之,深度学习方法的鲁棒性也有待研究.

    总之,本书介绍的基于神经网络的深度学习方法是近年来经过大量实践并取得很好成果的一种很通用的方法,也是近年来人工智能领域中最活跃的分支之一. 相信,无论在方法本身的发展上,抑或在新领域应用的研发上,都会呈现出一派欣欣的气象.

    吴立德于上海 ⋅复旦大学2019年 8月 17日

  • 前 言

    近年来,以机器学习、知识图谱为代表的人工智能技术逐渐变得普及. 从车牌识别、人脸识别、语音识别、智能问答、推荐系统到自动驾驶,人们在日常生活中都可能有意无意地使用到了人工智能技术. 这些技术的背后都离不开人工智能领域研究者们的长期努力. 特别是最近这几年,得益于数据的增多、计算能力的增强、学习算法的成熟以及应用场景的丰富,越来越多的人开始关注这一个“崭新”的研究领域:深度学习. 深度学习以神经网络为主要模型,一开始用来解决机器学习中的表示学习问题. 但是由于其强大的能力,深度学习越来越多地用来解决一些通用人工智能问题,比如推理、决策等. 目前,深度学习技术在学术界和工业界取得了广泛的成功,受到高度重视,并掀起新一轮的人工智能热潮.

    然而,我们也应充分意识到目前以深度学习为核心的各种人工智能技术和“人类智能”还不能相提并论. 深度学习需要大量的标注数据,和人类的学习方式差异性很大. 虽然深度学习取得了很大的成功,但是深度学习还不是一种可以解决一系列复杂问题的通用智能技术,而是可以解决单个问题的一系列技术. 比如可以打败人类的AlphaGo只能下围棋,而不会一个简单的算术运算. 想要达到通用人工智能依然困难重重.

    本书的写作目的是使得读者能够掌握神经网络与深度学习技术的基本原理,知其然还要知其所以然. 全书共 15章. 第 1章是绪论,介绍人工智能、机器学习、深度学习的概要,使读者全面了解相关知识. 第2、3章介绍机器学习的基础知识.第4~6章分别讲述三种主要的神经网络模型:前馈神经网络、卷积神经网络和循环神经网络. 第7章介绍神经网络的优化与正则化方法. 第8章介绍神经网络中的注意力机制和外部记忆. 第9章简要介绍一些无监督学习方法. 第10章介绍一些模型独立的机器学习方法:集成学习、自训练、协同训练多任务学习、迁移学习、终身学习、元学习等,这些都是目前深度学习的难点和热点问题. 第11章介绍概率图模型的基本概念,为后面的章节进行铺垫. 第12章介绍两种早期的深度学习模型:玻尔兹曼机和深度信念网络. 第13章介绍最近两年发展十分迅速的深度生成模型:变分自编码器和生成对抗网络. 第14章介绍深度强化学习的知识. 第15章介绍应用十分广泛的序列生成模型.

  • IV

    2015年复旦大学计算机学院开设了《神经网络与深度学习》课程. 讲好深度学习课程并不是一件容易的事,当时还没有关于深度学习的系统介绍,而且课程涉及知识点非常多并且比较杂乱,和实践结合也十分紧密. 作为任课教师,我尝试梳理了深度学习的知识体系,并写了一本讲义放在网络上. 虽然现在看起来当时对深度学习的理解仍然十分粗浅,且讲义存在很多错误,但依然受到了很多热心网友的反馈和鼓励. 2016年初,机械工业出版社华章公司的姚蕾编辑多次拜访并希望我能将这个讲义整理成书. 我一方面被姚蕾编辑的诚意打动,另一方面也确实感到应该有一本面向在校学生和相关从业人员的关于深度学习的专门书籍,因此最终有了正式出版的意愿. 但我依然低估了写书的难度,一方面是深度学习的发展十分迅速,而自己关于深度学习的认知也在不断变化,导致已写好的内容经常需要修改,另一方面是平时的科研工作十分繁忙,很难抽出大段的时间来静心写作,因此断断续续的写作一直拖延至今.

    我自己理想中著书立说的境界是自己在某一个领域有自己的理论体系,将各式各样的方法都统一到自己的体系下,并可以容纳大多数技术,从新的角度来重新解释这些技术. 本书显然还达不到这样的水平,但希望能结合自身的经验,对神经网络和深度学习的相关知识进行梳理、总结,通过写书这一途径,也促使自己更加能够深入理解深度学习这一领域,提高自己的理论水平.

    本书能够完成,首先感谢我的导师吴立德教授,他对深度学习的独到见解和深入浅出的讲授,使得我对深度学习有了更深层次的认识,也感谢复旦大学计算机学院的黄萱菁教授和薛向阳教授的支持和帮助. 本书在写作时将书稿放在网络上,也得到很多网友的帮助,特别感谢王利锋、林同茂、张钧瑞、李浩、胡可鑫、韦鹏辉、徐国海、侯宇蓬、任强、王少敬、肖耀、李鹏等人指出了本书初稿的错误或提出了富有建设性的意见. 此外,本书在写作过程中参考了互联网上大量的优秀资料,如维基百科、知乎、Quora等网站.

    另外,我也特别感谢我的家人. 本书的写作占用了大量的业余时间,没有家人的理解和支持,这本书不可能完成.

    最后,因为个人能力有限,书中难免有不当和错误之处,还望读者海涵和指正,不胜感激.

    邱锡鹏于上海 ⋅复旦大学2020年 1月 3日

  • 常用符号表

    𝑥, 𝑦,𝑚, 𝑛, 𝑡 标量,通常为变量𝐾, 𝐿, 𝐷,𝑀,𝑁, 𝑇 标量,通常为超参数𝒙 ∈ ℝ𝐷 𝐷维列向量[𝑥1,⋯ , 𝑥𝐷] 𝐷维行向量[𝑥1,⋯ , 𝑥𝐷]T or [𝑥1;⋯ ; 𝑥𝐷] 𝐷维列向量0 or 0𝐷 (𝐷维)全 0向量1 or 1𝐷 (𝐷维)全 1向量𝕀𝑖 or 𝕀𝑖(𝑥) 第 𝑖维为 1(或𝑥),其余为 0的one-hot列向量𝒙T 向量𝒙的转置

    𝑨 ∈ ℝ𝐾×𝐷 大小为𝐾 × 𝐷的矩阵𝒙 ∈ ℝ𝐾𝐷 (𝐾𝐷)维的向量𝕄𝑖 or𝕄𝑖(𝒙) 第 𝑖列为1(或𝒙),其余为 0的矩阵diag(𝒙) 对角矩阵,其对角线元素为𝒙𝑰𝑁 or 𝑰 (𝑁 × 𝑁的)单位阵diag(𝑨) 列向量,其元素为𝐴的对角线元素𝘈 ∈ ℝ𝐷1×𝐷2×⋯×𝐷𝐾 大小为𝐷1 × 𝐷2 ×⋯ × 𝐷𝐾的张量

    𝒞 or {𝑥(𝑛)}𝑁𝑛=1 集合𝒟 or {(𝒙(𝑛), 𝑦(𝑛))}𝑁𝑛=1 数据集ℝ𝐷 𝐷维实数空间

    𝒩(𝜇, Σ) or𝒩(𝒙; 𝜇, Σ) (变量𝒙服从)均值为𝜇,方差为Σ的正态(高斯)分布𝔼𝒙∼𝑝(𝒙)[𝑓(𝒙)] 期望var𝒙∼𝑝(𝒙)[𝑓(𝒙)] 方差exp(𝑥) 指数函数,默认指以自然常数 𝑒为底的自然指数函数log(𝑥) 对数函数,默认指以自然常数 𝑒为底的自然对数函数

    ≜ 定义符号𝐼(𝑥) 指示函数. 当𝑥为真时,𝐼(𝑥) = 1;否则 𝐼(𝑥) = 0

  • 目 录

    序 I

    前言 III

    常用符号表 V

    第一部分 机器学习基础 1第 1章 绪论 2

    1.1 人工智能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.1.1 人工智能的发展历史 . . . . . . . . . . . . . . . . . . . . 41.1.2 人工智能的流派 . . . . . . . . . . . . . . . . . . . . . . . 6

    1.2 机器学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.3 表示学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    1.3.1 局部表示和分布式表示 . . . . . . . . . . . . . . . . . . . 81.3.2 表示学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.4 深度学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.4.1 端到端学习 . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    1.5 神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.5.1 人脑神经网络 . . . . . . . . . . . . . . . . . . . . . . . . 121.5.2 人工神经网络 . . . . . . . . . . . . . . . . . . . . . . . . 131.5.3 神经网络的发展历史 . . . . . . . . . . . . . . . . . . . . 14

    1.6 本书的知识体系 . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.7 常用的深度学习框架 . . . . . . . . . . . . . . . . . . . . . . . . . 171.8 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    第 2章 机器学习概述 222.1 基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.2 机器学习的三个基本要素 . . . . . . . . . . . . . . . . . . . . . . 25

    2.2.1 模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2.2 学习准则 . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

  • 目录 VII

    2.2.3 优化算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.3 机器学习的简单示例:线性回归 . . . . . . . . . . . . . . . . . . . 32

    2.3.1 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.4 偏差-方差分解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372.5 机器学习算法的类型 . . . . . . . . . . . . . . . . . . . . . . . . . 402.6 数据的特征表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    2.6.1 传统的特征学习 . . . . . . . . . . . . . . . . . . . . . . . 432.6.2 深度学习方法 . . . . . . . . . . . . . . . . . . . . . . . . 45

    2.7 评价指标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452.8 理论和定理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    2.8.1 PAC学习理论 . . . . . . . . . . . . . . . . . . . . . . . . 482.8.2 没有免费午餐定理 . . . . . . . . . . . . . . . . . . . . . . 492.8.3 丑小鸭定理 . . . . . . . . . . . . . . . . . . . . . . . . . . 492.8.4 奥卡姆剃刀原理 . . . . . . . . . . . . . . . . . . . . . . . 492.8.5 归纳偏置 . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    2.9 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    第 3章 线性模型 533.1 线性判别函数和决策边界 . . . . . . . . . . . . . . . . . . . . . . 54

    3.1.1 二分类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.1.2 多分类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    3.2 Logistic回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.2.1 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    3.3 Softmax回归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.3.1 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    3.4 感知器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.4.1 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.4.2 感知器的收敛性 . . . . . . . . . . . . . . . . . . . . . . . 633.4.3 参数平均感知器 . . . . . . . . . . . . . . . . . . . . . . . 653.4.4 扩展到多分类 . . . . . . . . . . . . . . . . . . . . . . . . 67

    3.5 支持向量机 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.5.1 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.5.2 核函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.5.3 软间隔 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    3.6 损失函数对比 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.7 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

  • 目录 VIII

    第二部分 基础模型 77第 4章 前馈神经网络 78

    4.1 神经元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794.1.1 Sigmoid型函数 . . . . . . . . . . . . . . . . . . . . . . . 804.1.2 ReLU函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 824.1.3 Swish函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 844.1.4 高斯误差线性单元 . . . . . . . . . . . . . . . . . . . . . . 854.1.5 Maxout单元 . . . . . . . . . . . . . . . . . . . . . . . . . 86

    4.2 网络结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.2.1 前馈网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.2.2 记忆网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.2.3 图网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

    4.3 前馈神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884.3.1 通用近似定理 . . . . . . . . . . . . . . . . . . . . . . . . 894.3.2 应用到机器学习 . . . . . . . . . . . . . . . . . . . . . . . 904.3.3 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    4.4 反向传播算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924.5 自动梯度计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    4.5.1 数值微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . 954.5.2 符号微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.5.3 自动微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    4.6 优化问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.6.1 非凸优化问题 . . . . . . . . . . . . . . . . . . . . . . . . 1004.6.2 梯度消失问题 . . . . . . . . . . . . . . . . . . . . . . . . 100

    4.7 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    第 5章 卷积神经网络 1055.1 卷积 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    5.1.1 互相关 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085.1.2 卷积的变种 . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.1.3 卷积的数学性质 . . . . . . . . . . . . . . . . . . . . . . . 110

    5.2 卷积神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115.2.1 用卷积来代替全连接 . . . . . . . . . . . . . . . . . . . . 1115.2.2 卷积层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125.2.3 汇聚层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135.2.4 典型的卷积网络结构 . . . . . . . . . . . . . . . . . . . . 115

    5.3 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165.3.1 误差项的计算 . . . . . . . . . . . . . . . . . . . . . . . . 116

    5.4 几种典型的卷积神经网络 . . . . . . . . . . . . . . . . . . . . . . 1185.4.1 LeNet-5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

  • 目录 IX

    5.4.2 AlexNet . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195.4.3 Inception网络 . . . . . . . . . . . . . . . . . . . . . . . . 1215.4.4 残差网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    5.5 其他卷积方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235.5.1 转置卷积 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235.5.2 空洞卷积 . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

    5.6 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

    第 6章 循环神经网络 1296.1 给网络增加记忆能力 . . . . . . . . . . . . . . . . . . . . . . . . . 130

    6.1.1 延时神经网络 . . . . . . . . . . . . . . . . . . . . . . . . 1306.1.2 有外部输入的非线性自回归模型 . . . . . . . . . . . . . . 1306.1.3 循环神经网络 . . . . . . . . . . . . . . . . . . . . . . . . 131

    6.2 简单循环网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316.2.1 循环神经网络的计算能力 . . . . . . . . . . . . . . . . . . 132

    6.3 应用到机器学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1346.3.1 序列到类别模式 . . . . . . . . . . . . . . . . . . . . . . . 1346.3.2 同步的序列到序列模式 . . . . . . . . . . . . . . . . . . . 1356.3.3 异步的序列到序列模式 . . . . . . . . . . . . . . . . . . . 135

    6.4 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1366.4.1 随时间反向传播算法 . . . . . . . . . . . . . . . . . . . . 1376.4.2 实时循环学习算法 . . . . . . . . . . . . . . . . . . . . . . 138

    6.5 长程依赖问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396.5.1 改进方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    6.6 基于门控的循环神经网络 . . . . . . . . . . . . . . . . . . . . . . 1416.6.1 长短期记忆网络 . . . . . . . . . . . . . . . . . . . . . . . 1416.6.2 LSTM网络的各种变体 . . . . . . . . . . . . . . . . . . . 1436.6.3 门控循环单元网络 . . . . . . . . . . . . . . . . . . . . . . 144

    6.7 深层循环神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . 1456.7.1 堆叠循环神经网络 . . . . . . . . . . . . . . . . . . . . . . 1466.7.2 双向循环神经网络 . . . . . . . . . . . . . . . . . . . . . . 146

    6.8 扩展到图结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1476.8.1 递归神经网络 . . . . . . . . . . . . . . . . . . . . . . . . 1476.8.2 图神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . 148

    6.9 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

  • 目录 X

    第 7章 网络优化与正则化 1537.1 网络优化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

    7.1.1 网络优化的难点 . . . . . . . . . . . . . . . . . . . . . . . 1537.2 优化算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

    7.2.1 小批量梯度下降 . . . . . . . . . . . . . . . . . . . . . . . 1557.2.2 批量大小选择 . . . . . . . . . . . . . . . . . . . . . . . . 1567.2.3 学习率调整 . . . . . . . . . . . . . . . . . . . . . . . . . . 1577.2.4 梯度估计修正 . . . . . . . . . . . . . . . . . . . . . . . . 1627.2.5 优化算法小结 . . . . . . . . . . . . . . . . . . . . . . . . 166

    7.3 参数初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667.3.1 Xavier初始化 . . . . . . . . . . . . . . . . . . . . . . . . 1687.3.2 He初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . 169

    7.4 数据预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1707.5 逐层归一化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

    7.5.1 批量归一化 . . . . . . . . . . . . . . . . . . . . . . . . . . 1737.5.2 层归一化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747.5.3 其他归一化方法 . . . . . . . . . . . . . . . . . . . . . . . 175

    7.6 超参数优化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1767.6.1 网格搜索 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1777.6.2 随机搜索 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1777.6.3 贝叶斯优化 . . . . . . . . . . . . . . . . . . . . . . . . . . 1787.6.4 动态资源分配 . . . . . . . . . . . . . . . . . . . . . . . . 1797.6.5 神经架构搜索 . . . . . . . . . . . . . . . . . . . . . . . . 180

    7.7 网络正则化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1807.7.1 ℓ1和ℓ2正则化 . . . . . . . . . . . . . . . . . . . . . . . . 1817.7.2 权重衰减 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1827.7.3 提前停止 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1827.7.4 丢弃法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1827.7.5 数据增强 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1857.7.6 标签平滑 . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

    7.8 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

    第 8章 注意力机制与外部记忆 1908.1 认知神经学中的注意力 . . . . . . . . . . . . . . . . . . . . . . . 1918.2 注意力机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

    8.2.1 注意力机制的变体 . . . . . . . . . . . . . . . . . . . . . . 1948.3 自注意力模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1968.4 人脑中的记忆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1988.5 记忆增强神经网络 . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    8.5.1 端到端记忆网络 . . . . . . . . . . . . . . . . . . . . . . . 2018.5.2 神经图灵机 . . . . . . . . . . . . . . . . . . . . . . . . . . 202

  • 目录 XI

    8.6 基于神经动力学的联想记忆 . . . . . . . . . . . . . . . . . . . . . 2058.6.1 Hopfield网络 . . . . . . . . . . . . . . . . . . . . . . . . 2058.6.2 使用联想记忆增加网络容量 . . . . . . . . . . . . . . . . . 208

    8.7 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

    第 9章 无监督学习 2109.1 无监督特征学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

    9.1.1 主成分分析 . . . . . . . . . . . . . . . . . . . . . . . . . . 2119.1.2 稀疏编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . 2129.1.3 自编码器 . . . . . . . . . . . . . . . . . . . . . . . . . . . 2159.1.4 稀疏自编码器 . . . . . . . . . . . . . . . . . . . . . . . . 2169.1.5 堆叠自编码器 . . . . . . . . . . . . . . . . . . . . . . . . 2179.1.6 降噪自编码器 . . . . . . . . . . . . . . . . . . . . . . . . 217

    9.2 概率密度估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2189.2.1 参数密度估计 . . . . . . . . . . . . . . . . . . . . . . . . 2189.2.2 非参数密度估计 . . . . . . . . . . . . . . . . . . . . . . . 220

    9.3 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

    第 10章 模型独立的学习方式 22510.1 集成学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

    10.1.1 AdaBoost算法 . . . . . . . . . . . . . . . . . . . . . . . . 22710.2 自训练和协同训练 . . . . . . . . . . . . . . . . . . . . . . . . . . 229

    10.2.1 自训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23010.2.2 协同训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

    10.3 多任务学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23110.4 迁移学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

    10.4.1 归纳迁移学习 . . . . . . . . . . . . . . . . . . . . . . . . 23610.4.2 转导迁移学习 . . . . . . . . . . . . . . . . . . . . . . . . 237

    10.5 终身学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23910.6 元学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

    10.6.1 基于优化器的元学习 . . . . . . . . . . . . . . . . . . . . 24210.6.2 模型无关的元学习 . . . . . . . . . . . . . . . . . . . . . . 244

    10.7 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

    第三部分 进阶模型 249第 11章 概率图模型 250

    11.1 模型表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25111.1.1 有向图模型 . . . . . . . . . . . . . . . . . . . . . . . . . . 25211.1.2 常见的有向图模型 . . . . . . . . . . . . . . . . . . . . . . 253

  • 目录 XII

    11.1.3 无向图模型 . . . . . . . . . . . . . . . . . . . . . . . . . . 25611.1.4 无向图模型的概率分解 . . . . . . . . . . . . . . . . . . . 25611.1.5 常见的无向图模型 . . . . . . . . . . . . . . . . . . . . . . 25811.1.6 有向图和无向图之间的转换 . . . . . . . . . . . . . . . . . 259

    11.2 学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26011.2.1 不含隐变量的参数估计 . . . . . . . . . . . . . . . . . . . 26011.2.2 含隐变量的参数估计 . . . . . . . . . . . . . . . . . . . . 262

    11.3 推断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26811.3.1 精确推断 . . . . . . . . . . . . . . . . . . . . . . . . . . . 26811.3.2 近似推断 . . . . . . . . . . . . . . . . . . . . . . . . . . . 271

    11.4 变分推断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27211.5 基于采样法的近似推断 . . . . . . . . . . . . . . . . . . . . . . . 274

    11.5.1 采样法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27511.5.2 拒绝采样 . . . . . . . . . . . . . . . . . . . . . . . . . . . 27611.5.3 重要性采样 . . . . . . . . . . . . . . . . . . . . . . . . . . 27711.5.4 马尔可夫链蒙特卡罗方法 . . . . . . . . . . . . . . . . . . 278

    11.6 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

    第 12章 深度信念网络 28512.1 玻尔兹曼机 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

    12.1.1 生成模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 28712.1.2 能量最小化与模拟退火 . . . . . . . . . . . . . . . . . . . 28912.1.3 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

    12.2 受限玻尔兹曼机 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29212.2.1 生成模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29312.2.2 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29512.2.3 受限玻尔兹曼机的类型 . . . . . . . . . . . . . . . . . . . 296

    12.3 深度信念网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29712.3.1 生成模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29812.3.2 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

    12.4 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

    第 13章 深度生成模型 30513.1 概率生成模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

    13.1.1 密度估计 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30613.1.2 生成样本 . . . . . . . . . . . . . . . . . . . . . . . . . . . 30713.1.3 应用于监督学习 . . . . . . . . . . . . . . . . . . . . . . . 307

    13.2 变分自编码器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30713.2.1 含隐变量的生成模型 . . . . . . . . . . . . . . . . . . . . 30713.2.2 推断网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . 31013.2.3 生成网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

  • 目录 XIII

    13.2.4 模型汇总 . . . . . . . . . . . . . . . . . . . . . . . . . . . 31213.2.5 再参数化 . . . . . . . . . . . . . . . . . . . . . . . . . . . 31313.2.6 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

    13.3 生成对抗网络 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31513.3.1 显式密度模型和隐式密度模型 . . . . . . . . . . . . . . . 31513.3.2 网络分解 . . . . . . . . . . . . . . . . . . . . . . . . . . . 31613.3.3 训练 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31713.3.4 一个生成对抗网络的具体实现:DCGAN . . . . . . . . . . 31713.3.5 模型分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . 31813.3.6 改进模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

    13.4 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

    第 14章 深度强化学习 32714.1 强化学习问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

    14.1.1 典型例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . 32814.1.2 强化学习定义 . . . . . . . . . . . . . . . . . . . . . . . . 32814.1.3 马尔可夫决策过程 . . . . . . . . . . . . . . . . . . . . . . 32914.1.4 强化学习的目标函数 . . . . . . . . . . . . . . . . . . . . 33114.1.5 值函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33214.1.6 深度强化学习 . . . . . . . . . . . . . . . . . . . . . . . . 333

    14.2 基于值函数的学习方法 . . . . . . . . . . . . . . . . . . . . . . . 33414.2.1 动态规划算法 . . . . . . . . . . . . . . . . . . . . . . . . 33514.2.2 蒙特卡罗方法 . . . . . . . . . . . . . . . . . . . . . . . . 33714.2.3 时序差分学习方法 . . . . . . . . . . . . . . . . . . . . . . 33814.2.4 深度Q网络 . . . . . . . . . . . . . . . . . . . . . . . . . . 341

    14.3 基于策略函数的学习方法 . . . . . . . . . . . . . . . . . . . . . . 34314.3.1 REINFORCE算法 . . . . . . . . . . . . . . . . . . . . . . 34414.3.2 带基准线的REINFORCE算法 . . . . . . . . . . . . . . . 345

    14.4 演员-评论员算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . 34614.5 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

    第 15章 序列生成模型 35315.1 序列概率模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

    15.1.1 序列生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . 35515.2 N元统计模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35615.3 深度序列模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358

    15.3.1 参数学习 . . . . . . . . . . . . . . . . . . . . . . . . . . . 36015.4 评价方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

    15.4.1 困惑度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36115.4.2 BLEU算法 . . . . . . . . . . . . . . . . . . . . . . . . . . 36215.4.3 ROUGE算法 . . . . . . . . . . . . . . . . . . . . . . . . . 363

  • 目录 XIV

    15.5 序列生成模型中的学习问题 . . . . . . . . . . . . . . . . . . . . . 36415.5.1 曝光偏差问题 . . . . . . . . . . . . . . . . . . . . . . . . 36415.5.2 训练目标不一致问题 . . . . . . . . . . . . . . . . . . . . 36515.5.3 计算效率问题 . . . . . . . . . . . . . . . . . . . . . . . . 366

    15.6 序列到序列模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 37315.6.1 基于循环神经网络的序列到序列模型 . . . . . . . . . . . 37415.6.2 基于注意力的序列到序列模型 . . . . . . . . . . . . . . . 37515.6.3 基于自注意力的序列到序列模型 . . . . . . . . . . . . . . 376

    15.7 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

    附录 数学基础 381附录 A 线性代数 382

    A.1 向量和向量空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . 382A.1.1 向量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382A.1.2 向量空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . 382A.1.3 范数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384A.1.4 常见的向量 . . . . . . . . . . . . . . . . . . . . . . . . . . 384

    A.2 矩阵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385A.2.1 线性映射 . . . . . . . . . . . . . . . . . . . . . . . . . . . 385A.2.2 矩阵操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . 386A.2.3 矩阵类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 388A.2.4 特征值与特征向量 . . . . . . . . . . . . . . . . . . . . . . 389A.2.5 矩阵分解 . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

    附录 B 微积分 391B.1 微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

    B.1.1 导数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391B.1.2 微分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392B.1.3 泰勒公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

    B.2 积分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393B.3 矩阵微积分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

    B.3.1 导数法则 . . . . . . . . . . . . . . . . . . . . . . . . . . . 395B.4 常见函数的导数 . . . . . . . . . . . . . . . . . . . . . . . . . . . 396

    B.4.1 向量函数及其导数 . . . . . . . . . . . . . . . . . . . . . . 396B.4.2 按位计算的向量函数及其导数 . . . . . . . . . . . . . . . 396

  • 目 录 2020年 1月 3日 XV

    附录 C 数学优化 400C.1 数学优化的类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

    C.1.1 离散优化和连续优化 . . . . . . . . . . . . . . . . . . . . 400C.1.2 无约束优化和约束优化 . . . . . . . . . . . . . . . . . . . 401C.1.3 线性优化和非线性优化 . . . . . . . . . . . . . . . . . . . 401

    C.2 优化算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401C.2.1 全局最优和局部最优 . . . . . . . . . . . . . . . . . . . . 402C.2.2 梯度下降法 . . . . . . . . . . . . . . . . . . . . . . . . . . 403

    C.3 拉格朗日乘数法与KKT条件 . . . . . . . . . . . . . . . . . . . . 404C.3.1 等式约束优化问题 . . . . . . . . . . . . . . . . . . . . . . 404C.3.2 不等式约束优化问题 . . . . . . . . . . . . . . . . . . . . 405

    附录 D 概率论 407D.1 样本空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407D.2 事件和概率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407

    D.2.1 随机变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . 408D.2.2 随机向量 . . . . . . . . . . . . . . . . . . . . . . . . . . . 412D.2.3 边际分布 . . . . . . . . . . . . . . . . . . . . . . . . . . . 413D.2.4 条件概率分布 . . . . . . . . . . . . . . . . . . . . . . . . 414D.2.5 贝叶斯定理 . . . . . . . . . . . . . . . . . . . . . . . . . . 414D.2.6 独立与条件独立 . . . . . . . . . . . . . . . . . . . . . . . 415D.2.7 期望和方差 . . . . . . . . . . . . . . . . . . . . . . . . . . 415

    D.3 随机过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416D.3.1 马尔可夫过程 . . . . . . . . . . . . . . . . . . . . . . . . 417D.3.2 高斯过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

    附录 E 信息论 420E.1 熵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

    E.1.1 自信息和熵 . . . . . . . . . . . . . . . . . . . . . . . . . . 420E.1.2 熵编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421E.1.3 联合熵和条件熵 . . . . . . . . . . . . . . . . . . . . . . . 421

    E.2 互信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422E.3 交叉熵和散度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

    E.3.1 交叉熵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422E.3.2 KL散度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423E.3.3 JS散度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423E.3.4 Wasserstein距离 . . . . . . . . . . . . . . . . . . . . . . . 423

    E.4 总结和深入阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . 424

    https://nndl.github.io/

    https://nndl.github.io/

  • 第一部分

    机器学习基础

  • 第 1章 绪论

    一个人在不接触对方的情况下,通过一种特殊的方式,和对

    方进行一系列的问答. 如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机,那么就可以认为这个计算机是智能

    的.—阿兰·图灵(Alan Turing)

    《Computing Machinery and Intelligence》

    深度学习(Deep Learning)是近年来发展十分迅速的研究领域,并且在人工智能的很多子领域都取得了巨大的成功. 从根源来讲,深度学习是机器学习的一个分支,是指一类问题以及解决这类问题的方法.

    首先,深度学习问题是一个机器学习问题,指从有限样例中通过算法总结出一般性的规律,并可以应用到新的未知数据上. 比如,我们可以从一些历史病例的集合中总结出症状和疾病之间的规律. 这样当有新的病人时,我们可以利用总结出来的规律,来判断这个病人得了什么疾病.

    其次,深度学习采用的模型一般比较复杂,指样本的原始输入到输出目标之间的数据流经过多个线性或非线性的组件(component). 因为每个组件都会对信息进行加工,并进而影响后续的组件,所以当我们最后得到输出结果时,我们并不清楚其中每个组件的贡献是多少. 这个问题叫做贡献度分配问题(CreditAssignment Problem,CAP)[Minsky, 1961]. 贡献度分配问题也经

    常翻译为信用分配问

    题或功劳分配问题.

    在深度学习中,贡献度分配问题是一个很关键的问题,这关系到如何学习每个组件中的参数.

    目前,一种可以比较好解决贡献度分配问题的模型是人工神经网络(Artifi-cial Neural Network,ANN). 人工神经网络,也简称神经网络,是一种受人脑神经系统的工作方式启发而构造的数学模型. 和目前计算机的结构不同,人脑神经系统是一个由生物神经元组成的高度复杂网络,是一个并行的非线性信息处理系统. 人脑神经系统可以将声音、视觉等信号经过多层的编码,从最原始的低层特征不断加工、抽象,最终得到原始信号的语义表示. 和人脑神经网络类似,人工神经

  • 1.1 人工智能 2020年 1月 3日 3

    网络是由人工神经元以及神经元之间的连接构成,其中有两类特殊的神经元:一类是用来接收外部的信息,另一类是输出信息. 这样,神经网络可以看作是信息从输入到输出的信息处理系统. 如果我们把神经网络看作是由一组参数控制的复杂函数,并用来处理一些模式识别任务(比如语音识别、人脸识别等),神经网络的参数可以通过机器学习的方式来从数据中学习. 因为神经网络模型一般比较复杂,从输入到输出的信息传递路径一般比较长,所以复杂神经网络的学习可以看成是一种深度的机器学习,即深度学习.

    神经网络和深度学习并不等价. 深度学习可以采用神经网络模型,也可以采用其他模型(比如深度信念网络是一种概率图模型). 但是,由于神经网络模型可以比较容易地解决贡献度分配问题,因此神经网络模型成为深度学习中主要采用的模型. 虽然深度学习一开始用来解决机器学习中的表示学习问题, 表示学习参见第 1.3节.但是由于其强大的能力,深度学习越来越多地用来解决一些通用人工智能问题,比如推理、决策等.

    在本书中,我们主要介绍有关神经网络和深度学习的基本概念、相关模型、学习方法以及在计算机视觉、自然语言处理等领域的应用. 在本章中,我们先介绍人工智能的基础知识,然后再介绍神经网络和深度学习的基本概念.

    1.1 人工智能智能(Intelligence)是现代生活中很常见的一个词,比如智能手机、智能家

    居、智能驾驶等. 在不同使用场合中,智能的含义也不太一样. 比如“智能手机”中的“智能”一般是指由计算机控制并具有某种智能行为. 这里的“计算机控制”+“智能行为”隐含了对人工智能的简单定义. “智能”可以理解为“智

    力”和“能力”. 前者是智能的基础,后者是指

    获取和运用知识求解

    的能力.

    简单地讲,人工智能(Artificial Intelligence,AI)就是让机器具有人类的智能,这也是人们长期追求的目标. 这里关于什么是“智能”并没有一个很明确的定义,但一般认为智能(或特指人类智能)是知识和智力的总和,都和大脑的思维活动有关. 人类大脑是经过了上亿年的进化才形成了如此复杂的结构,但我们至今仍然没有完全了解其工作机理. 虽然随着神经科学、认知心理学等学科的发展,人们对大脑的结构有了一定程度的了解,但对大脑的智能究竟是怎么产生的还知道的很少. 我们并不理解大脑的运作原理,以及如何产生意识、情感、记忆等功能.因此,通过“复制”一个人脑来实现人工智能在目前阶段是不切实际的.

    1950年,阿兰·图灵(Alan Turing)发表了一篇有着重要影响力的论文《Computing Machinery and Intelligence》,讨论了创造一种“智能机器”的可能性. 由于“智能”一词比较难以定义,他提出了著名的图灵测试:“一个人在不接触对方的情况下,通过一种特殊的方式和对方进行一系列的问答. 如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机,那么就可以认为这个计算

    https://nndl.github.io/

    https://nndl.github.io/

  • 1.1 人工智能 2020年 1月 3日 4

    机是智能的”. 图灵测试是促使人工智能从哲学探讨到科学研究的一个重要因素,引导了人工智能的很多研究方向. 因为要使得计算机能通过图灵测试,计算机就必须具备理解语言、学习、记忆、推理、决策等能力. 这样,人工智能就延伸出了很多不同的子学科,比如机器感知(计算机视觉、语音信息处理)、学习(模式识别、机器学习、强化学习)、语言(自然语言处理)、记忆(知识表示)、决策(规划、数据挖掘)等. 所有这些研究领域都可以看成是人工智能的研究范畴.

    人工智能是计算机科学的一个分支,主要研究、开发用于模拟、延伸和扩展人类智能的理论、方法、技术及应用系统等. 和很多其他学科不同,人工智能这个学科的诞生有着明确的标志性事件,就是 1956年的达特茅斯(Dartmouth)会议. 在这次会议上,“人工智能”被提出并作为本研究领域的名称. 同时,人工智能研究的使命也得以确定. John McCarthy提出了人工智能的定义:人工智能就是要让机器的行为看起来就像是人所表现出的智能行为一样. John McCarthy (19-

    27~2011),人工智能学科奠基人之一,1971年图灵奖得主.

    目前,人工智能的主要领域大体上可以分为以下几个方面:

    感知 即模拟人的感知能力,对外部刺激信息(视觉和语音等)进行感知和加工.主要研究领域包括语音信息处理和计算机视觉等.

    学习 即模拟人的学习能力,主要研究如何从样例或与环境交互中进行学习. 主要研究领域包括监督学习、无监督学习和强化学习等.

    认知 即模拟人的认知能力,主要研究领域包括知识表示、自然语言理解、推理、规划、决策等.

    1.1.1 人工智能的发展历史人工智能从诞生至今,经历了一次又一次的繁荣与低谷,其发展历程大体上

    可以分为“推理期”、“知识期”和“学习期”[周志华, 2016].

    人工智能低谷,也叫人

    工智能冬天(AI Win-ter),指人工智能史上研究资金及学术界研

    究兴趣都大幅减少的

    时期. 人工智能领域经历过好几次低谷期. 每次狂热高潮之后,紧接

    着是失望、批评以及研

    究资金断绝,然后在几

    十年后又重燃研究兴

    趣. 1974年~1980年及1987年~1993年是两个主要的低谷时期,其他

    还有几个较小的低谷.

    1.1.1.1 推理期

    1956年达特茅斯会议之后,研究者对人工智能的热情高涨,之后的十几年是人工智能的黄金时期. 大部分早期研究者都通过人类的经验,基于逻辑或者事实归纳出来一些规则,然后通过编写程序来让计算机完成一个任务. 这个时期中,研究者开发了一系列的智能系统,比如几何定理证明器、语言翻译器等. 这些初步的研究成果也使得研究者们对开发出具有人类智能的机器过于乐观,低估了实现人工智能的难度. 有些研究者甚至认为:“二十年内,机器将能完成人能做到的一切工作”,“在三到八年的时间里可以研发出一台具有人类平均智能的机器”. 但随着研究的深入,研究者意识到这些推理规则过于简单,对项目难度评估不足,原来的乐观预期受到严重打击. 人工智能的研究开始陷入低谷,很多人工智能项目的研究经费也被消减.https://nndl.github.io/

    https://nndl.github.io/

  • 1.1 人工智能 2020年 1月 3日 5

    1.1.1.2 知识期

    到了 20世纪 70年代,研究者意识到知识对于人工智能系统的重要性. 特别是对于一些复杂的任务,需要专家来构建知识库. 在这一时期,出现了各种各样的专家系统(Expert System),并在特定的专业领域取得了很多成果. 专家系统可以简单理解为“知识库+推理机”,是一类具有专门知识和经验的计算机智能程序系统. 专家系统一般采用知识表示和知识推理等技术来完成通常由领域专家才能解决的复杂问题,因此专家系统也被称为基于知识的系统. 一个专家系统必须具备三要素:(1)领域专家级知识;(2)模拟专家思维;(3)达到专家级的水平.在这一时期,Prolog(Programming in Logic)语言是主要的开发工具,用来建造专家系统、智能知识库以及处理自然语言理解等. Prolog是一种基于逻辑

    学理论而创建的逻辑

    编程语言,最初被运用

    于自然语言、逻辑推理

    等研究领域.

    1.1.1.3 学习期

    对于人类的很多智能行为(比如语言理解、图像理解等),我们很难知道其中的原理,也无法描述出这些智能行为背后的“知识”. 因此,我们也很难通过知识和推理的方式来实现这些行为的智能系统. 为了解决这类问题,研究者开始将研究重点转向让计算机从数据中自己学习. 事实上,“学习”本身也是一种智能行为. 从人工智能的萌芽时期开始,就有一些研究者尝试让机器来自动学习,即机器学习(Machine Learning,ML). 机器学习的主要目的是设计和分析一些学习算法,让计算机可以从数据(经验)中自动分析获得规律,并利用学习到的规律对未知数据进行预测,从而帮助人们完成一些特定任务,提高开发效率. 机器学习的研究内容也十分广泛,涉及了线性代数、概率论、统计学、数学优化、计算复杂性等多门学科. 在人工智能领域,机器学习从一开始就是一个重要的研究方向. 但直到 1980年后,机器学习因其在很多领域的出色表现,才逐渐成为热门学科.

    图1.1给出了人工智能发展史上的重要事件. 在发展了 60多年后,人工智能虽然可以在某些方面超越人类,但想让机器真正通过图灵测试,具备真正意义上的人类智能,这个目标看上去仍然遥遥无期.

    1940 1945 1950 1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005

    McCulloch和 Pitts提出人工神经元网络

    图灵机

    达特茅斯会议

    Rosenblatt提出“感知器”

    推理期 知识期 学习期

    知识系统兴起 专家系统兴起神经网络重新流行

    统计机器学习兴起(支持向量机等)

    深度学习的兴起

    图 1.1人工智能发展史

    https://nndl.github.io/

    https://nndl.github.io/

  • 1.2 机器学习 2020年 1月 3日 6

    1.1.2 人工智能的流派目前我们对人类智能的机理依然知之甚少,还没有一个通用的理论来指导如

    何构建一个人工智能系统. 不同的研究者都有各自的理解,因此在人工智能的研究过程中产生了很多不同的流派. 比如一些研究者认为人工智能应该通过研究人类智能的机理来构建一个仿生的模拟系统,而另外一些研究者则认为可以使用其他方法来实现人类的某种智能行为. 一个著名的例子是让机器具有飞行能力不需要模拟鸟的飞行方式,而是应该研究空气动力学.

    尽管人工智能的流派非常多,但主流的方法大体上可以归结为以下两种: 关于人工智能的流派并没有严格的划分定

    义,也不严格对立.有很多文献将人工智

    能流派分为符号主义、

    连接主义和行为主义

    三种,其中行为主义

    (Actionism)主要从生物进化的角度考虑,主

    张从和外界环境的互

    动中获取智能.

    (1) 符号主义(Symbolism),又称逻辑主义、心理学派或计算机学派,是通过分析人类智能的功能,然后通过计算机来实现这些功能. 符号主义有两个基本假设:(a)信息可以用符号来表示;(b)符号可以通过显式的规则(比如逻辑运算)来操作. 人类的认知过程可以看作是符号操作过程. 在人工智能的推理期和知识期,符号主义的方法比较盛行,并取得了大量的成果.

    (2) 连接主义(Connectionism),又称仿生学派或生理学派,是认知科学领域中的一类信息处理的方法和理论. 在认知科学领域,人类的认知过程可以看作是一种信息处理过程. 连接主义认为人类的认知过程是由大量简单神经元构成的神经网络中的信息处理过程,而不是符号运算. 因此,连接主义模型的主要结构是由大量简单的信息处理单元组成的互联网络,具有非线性、分布式、并行化、局部性计算以及自适应性等特性.

    符号主义方法的一个优点是可解释性,而这也正是连接主义方法的弊端. 深度学习的主要模型神经网络就是一种连接主义模型. 随着深度学习的发展,越来越多的研究者开始关注如何融合符号主义和连接主义,建立一种高效并且具有可解释性的模型.

    1.2 机器学习机器学习(Machine Learning,ML)是指从有限的观测数据中学习(或“猜

    测”)出具有一般性的规律,并利用这些规律对未知数据进行预测的方法. 机器学习的详细介绍参见第 2章.

    机器学习是人工智能的一个重要分支,并逐渐成为推动人工智能发展的关键因素.

    传统的机器学习主要关注于如何学习一个预测模型. 一般需要首先将数据表示为一组特征(Feature),特征的表示形式可以是连续的数值、离散的符号或其他形式. 然后将这些特征输入到预测模型,并输出预测结果. 这类机器学习可以看作是浅层学习(Shallow Learning). 浅层学习的一个重要特点是不涉及特征学习,其特征主要靠人工经验或特征转换方法来抽取.

    https://nndl.github.io/

    https://nndl.github.io/

  • 1.3 表示学习 2020年 1月 3日 7

    当我们用机器学习来解决实际任务时,会面对多种多样的数据形式,比如声音、图像、文本等. 不同数据的特征构造方式差异很大. 对于图像这类数据,我们可以很自然地将其表示为一个连续的向量. 将图像数据表示为向

    量的方法有很多种,比

    如直接将一幅图像的

    所有像素值(灰度值或

    RGB值)组成一个连续向量.

    而对于文本数据,因为其一般由离散符号组成,并且每个符号在计算机内部都是表示为无意义的编码,所以通常很难找到合适的表示方式. 因此,在实际任务中使用机器学习模型一般会包含以下几个步骤(如图1.2所示):

    原始数据 数据预处理 特征提取 特征转换 预测 结果

    特征处理 浅层学习

    图 1.2传统机器学习的数据处理流程

    (1) 数据预处理:经过数据的预处理,如去除噪声等. 比如在文本分类中,去除停用词等.

    (2) 特征提取:从原始数据中提取一些有效的特征. 比如在图像分类中,提取边缘、尺度不变特征变换(Scale Invariant Feature Transform,SIFT)特征等.

    (3) 特征转换:对特征进行一定的加工,比如降维和升维. 很多特征转换方法也都是机器学习方法.

    降维包括特征抽取(Feature Extraction)和特征选择(Feature Selection)两种途径. 常用的特征转换方法有主成分分析(Principal Components Analysis,PCA)、 主成分分析参见第

    9.1.1节.线

    性判别分析(Linear Discriminant Analysis,LDA)等.(4) 预测:机器学习的核心部分,学习一个函数进行预测.

    上述流程中,每步特征处理以及预测一般都是分开进行处理的. 传统的机器学习模型主要关注于最后一步,即构建预测函数. 但是实际操作过程中,不同预测模型的性能相差不多,而前三步中的特征处理对最终系统的准确性有着十分关键的作用. 特征处理一般都需要人工干预完成,利用人类的经验来选取好的特征,并最终提高机器学习系统的性能. 因此,很多的机器学习问题变成了特征工程(Feature Engineering)问题. 开发一个机器学习系统的主要工作量都消耗在了预处理、特征提取以及特征转换上.

    1.3 表示学习为了提高机器学习系统的准确率,我们就需要将输入信息转换为有效的特

    征,或者更一般性称为表示(Representation). 如果有一种算法可以自动地学习出有效的特征,并提高最终机器学习模型的性能,那么这种学习就可以叫做表示学习(Representation Learning).

    https://nndl.github.io/

    https://nndl.github.io/

  • 1.3 表示学习 2020年 1月 3日 8

    语义鸿沟 表示学习的关键是解决语义鸿沟(Semantic Gap)问题. 语义鸿沟问题是指输入数据的底层特征和高层语义信息之间的不一致性和差异性. 比如给定一些关于“车”的图片,由于图片中每辆车的颜色和形状等属性都不尽相同,因此不同图片在像素级别上的表示(即底层特征)差异性也会非常大. 但是我们理解这些图片是建立在比较抽象的高层语义概念上的. 如果一个预测模型直接建立在底层特征之上,会导致对预测模型的能力要求过高. 如果可以有一个好的表示在某种程度上能够反映出数据的高层语义特征,那么我们就可以相对容易地构建后续的机器学习模型.

    在表示学习中,有两个核心问题:一是“什么是一个好的表示”;二是“如何学习到好的表示”.

    1.3.1 局部表示和分布式表示“好的表示”是一个非常主观的概念,没有一个明确的标准. 但一般而言,一

    个好的表示具有以下几个优点:

    (1) 一个好的表示应该具有很强的表示能力,即同样大小的向量可以表示更多信息.

    (2) 一个好的表示应该使后续的学习任务变得简单,即需要包含更高层的语义信息.

    (3) 一个好的表示应该具有一般性,是任务或领域独立的. 虽然目前的大部分表示学习方法还是基于某个任务来学习,但我们期望其学到的表示可以比较容易地迁移到其他任务上.

    在机器学习中,我们经常使用两种方式来表示特征:局部表示(Local Repre-sentation)和分布式表示(Distributed Representation).

    以颜色表示为例,我们可以用很多词来形容不同的颜色1,除了基本的“红”、“蓝”、“绿”、“白”、“黑”等之外,有很多以地区或物品命名的,比如“中国红”、“天蓝色”、“咖啡色”、“琥珀色”等. 如果要在计算机中表示颜色,一般有两种表示方法.

    一种表示颜色的方法是以不同名字来命名不同的颜色,这种表示方式叫做局部表示,也称为离散表示或符号表示. 局部表示通常可以表示为one-hot向量的形式. one-hot向 量 参 见 第

    A.1.4节.假设所有颜色的名字构成一个词表𝒱,词表大小为 |𝒱|. 我们可以用一个

    |𝒱|维的one-hot向量来表示每一种颜色. 在第 𝑖种颜色对应的one-hot向量中,第𝑖维的值为 1,其他都为 0.

    1 据不完全统计, 现有的颜色命名已经有 1 300多种. https://en.wikipedia.org/wiki/Lists_of_colorshttps://nndl.github.io/

    https://en.wikipedia.org/wiki/Lists_of_colorshttps://en.wikipedia.org/wiki/Lists_of_colorshttps://nndl.github.io/

  • 1.3 表示学习 2020年 1月 3日 9

    局部表示有两个优点:(1)这种离散的表示方式具有很好的解释性,有利于人工归纳和总结特征,并通过特征组合进行高效的特征工程;(2)通过多种特征组合得到的表示向量通常是稀疏的二值向量,当用于线性模型时计算效率非常高. 但局部表示有两个不足之处:(1)one-hot向量的维数很高,且不能扩展. 如果有一种新的颜色,我们就需要增加一维来表示;(2)不同颜色之间的相似度都为 0,即我们无法知道“红色”和“中国红”的相似度要高于“红色”和“黑色”的相似度.

    另一种表示颜色的方法是用RGB值来表示颜色,不同颜色对应到R、G、B三维空间中一个点,这种表示方式叫做分布式表示. 分布式表示叫做分散

    式表示可能更容易理

    解,即一种颜色的语义

    分散到语义空间中的

    不同基向量上.

    分布式表示通常可以表示为低维的稠密向量.

    和局部表示相比,分布式表示的表示能力要强很多,分布式表示的向量维度一般都比较低. 我们只需要用一个三维的稠密向量就可以表示所有颜色. 并且,分布式表示也很容易表示新的颜色名. 此外,不同颜色之间的相似度也很容易计算.

    表1.1列出了 4种颜色的局部表示和分布式表示.

    表 1.1局部表示和分布式表示示例

    颜色 局部表示 分布式表示

    琥珀色 [1, 0, 0, 0]T [1.00, 0.75, 0.00]T

    天蓝色 [0, 1, 0, 0]T [0.00, 0.5, 1.00]T

    中国红 [0, 0, 1, 0]T [0.67, 0.22, 0.12]T

    咖啡色 [0, 0, 0, 1]T [0.44, 0.31 0.22]T

    我们可以使用神经网络来将高维的局部表示空间ℝ|𝒱|映射到一个非常低维的分布式表示空间ℝ𝐷, 𝐷 ≪ |𝒱|. 在这个低维空间中,每个特征不再是坐标轴上的点,而是分散在整个低维空间中. 在机器学习中,这个过程也称为嵌入(Em-bedding). 嵌入通常指将一个度量空间中的一些对象映射到另一个低维的度量空间中,并尽可能保持不同对象之间的拓扑关系. 比如自然语言中词的分布式表示,也经常叫做词嵌入.

    图1.3展示了一个 3维 one-hot向量空间和一个 2维嵌入空间的对比. 在 one-hot向量空间中,每个特征都位于坐标轴上,每个坐标轴上一个特征. 而在低维的嵌入空间中,每个特征都不在坐标轴上,特征之间可以计算相似度.

    https://nndl.github.io/

    https://nndl.github.io/

  • 1.4 深度学习 2020年 1月 3日 10

    𝑤1

    𝑤2

    𝑤3

    嵌入空间

    图 1.3 one-hot向量空间与嵌入空间

    1.3.2 表示学习连续多次的线性转换

    等价于一次线性转换.要学习到一种好的高层语义表示(一般为分布式表示),通常需要从底层特征开始,经过多步非线性转换才能得到. 一个深层结构的优点是可以增加特征的重用性,从而指数级地增加表示能力. 因此,表示学习的关键是构建具有一定深度的多层次特征表示 [Bengio et al., 2013].

    在传统的机器学习中,也有很多有关特征学习的方法,比如主成分分析、线性判别分析、独立成分分析等. 参见第 2.6.1节.但是,传统的特征学习一般是通过人为地设计一些准则,然后根据这些准则来选取有效的特征. 特征的学习是和最终预测模型的学习分开进行的,因此学习到的特征不一定可以提升最终模型的性能.

    1.4 深度学习为了学习一种好的表示,需要构建具有一定“深度”的模型,并通过学习算法

    来让模型自动学习出好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测模型的准确率. 所谓“深度”是指原始数据进行非线性特征转换的次数. 如果把一个表示学习系统看作是一个有向图结构,深度也可以看作是从输入节点到输出节点所经过的最长路径的长度.

    这样我们就需要一种学习方法可以从数据中学习一个“深度模型”,这就是深度学习(Deep Learning,DL). 深度学习是机器学习的一个子问题,其主要目的是从数据中自动学习到有效的特征表示.

    深度学习虽然早期主

    要用来进行表示学习,

    但后来越来越多地用

    来进行处理更加复杂

    的推理、决策等问题.

    图1.4给出了深度学习的数据处理流程. 通过多层的特征转换,把原始数据变成更高层次、更抽象的表示. 这些学习到的表示可以替代人工设计的特征,从而避https://nndl.github.io/

    https://nndl.github.io/

  • 1.4 深度学习 2020年 1月 3日 11

    免“特征工程”.

    原始数据 底层特征 中层特征 高层特征 预测 结果

    表示学习

    深度学习

    图 1.4深度学习的数据处理流程

    深度学习是将原始的数据特征通过多步的特征转换得到一种特征表示,并进一步输入到预测函数得到最终结果. 和“浅层学习”不同,深度学习需要解决的关键问题是贡献度分配问题(Credit Assignment Problem,CAP)[Minsky, 1961],即一个系统中不同的组件(component)或其参数对最终系统输出结果的贡献或影响. 以下围棋为例,每当下完一盘棋,最后的结果要么赢要么输. 我们会思考哪几步棋导致了最后的胜利,或者又是哪几步棋导致了最后的败局. 如何判断每一步棋的贡献就是贡献度分配问题,这是一个非常困难的问题. 从某种意义上讲,深度学习可以看作是一种强化学习(Reinforcement Learning,RL),每个内部组件并不能直接得到监督信息,需要通过整个模型的最终监督信息(奖励)得到,并且有一定的延时性. 强化学习参见第 14章.

    目前,深度学习采用的模型主要是神经网络模型,其主要原因是神经网络模型可以使用误差反向传播算法,从而可以比较好地解决贡献度分配问题. 只要是超过一层的神经网络都会存在贡献度分配问题,因此超过一层的神经网络都可以看作是深度学习模型. 随着深度学习的快速发展,模型深度也从早期的 5 ∼ 10层到目前的数百层. 随着模型深度的不断增加,其特征表示的能力也越来越强,从而使后续的预测更加容易.

    1.4.1 端到端学习在一些复杂任务中,传统机器学习方法需要将一个任务的输入和输出之间人

    为地切割成很多子模块(或多个阶段),每个子模块分开学习. 比如一个自然语言理解任务,一般需要分词、词性标注、句法分析、语义分析、语义推理等步骤. 这种学习方式有两个问题:一是每一个模块都需要单独优化,并且其优化目标和任务总体目标并不能保证一致;二是错误传播,即前一步的错误会对后续的模型造成很大的影响. 这样就增加了机器学习方法在实际应用的难度.

    端到端学习(End-to-End Learning),也称端到端训练,是指在学习过程中不进行分模块或分阶段训练,直接优化任务的总体目标. 在端到端学习中,一般不需要明确地给出不同模块或阶段的功能,中间过程不需要人为干预. 端到端学习的训练数据为“输入-输出”对的形式,无需提供其他额外信息. 因此,端到端学习和深度学习一样,都是要解决贡献度分配问题. 目前,大部分采用神经网络模型的https://nndl.github.io/

    https://nndl.github.io/

  • 1.5 神经网络 2020年 1月 3日 12

    深度学习也可以看作是一种端到端的学习.

    1.5 神经网络随着神经科学、认知科学的发展,我们逐渐知道人类的智能行为都和大脑活

    动有关. 人类大脑是一个可以产生意识、思想和情感的器官. 受到人脑神经系统的启发,早期的神经科学家构造了一种模仿人脑神经系统的数学模型,称为人工神经网络,简称神经网络. 在机器学习领域,神经网络是指由很多人工神经元构成的网络结构模型,这些人工神经元之间的连接强度是可学习的参数.

    1.5.1 人脑神经网络人类大脑是人体最复杂的器官,由神经元、神经胶质细胞、神经干细胞和血

    管组成. 其中,神经元(Neuron),也叫神经细胞(Nerve Cell),是携带和传输信息的细胞,是人脑神经系统中最基本的单元. 人脑神经系统是一个非常复杂的组织,包含近 860亿个神经元 [Azevedo et al., 2009],每个神经元有上千个突触和其他神经元相连接. 这些神经元和它们之间的连接形成巨大的复杂网络,其中神经连接的总长度可达数千公里. 我们人造的复杂网络,比如全球的计算机网络,和大脑神经网络相比要“简单”得多.

    早在 1904年,生物学家就已经发现了神经元的结构. 典型的神经元结构大致可分为细胞体和细胞突起.

    (1) 细胞体(Soma)中的神经细胞膜上有各种受体和离子通道,胞膜的受体可与相应的化学物质神经递质结合,引起离子通透性及膜内外电位差发生改变,产生相应的生理活动:兴奋或抑制.

    (2) 细胞突起是由细胞体延伸出来的细长部分,又可分为树突和轴突.

    (a) 树突(Dendrite)可以接收刺激并将兴奋传入细胞体. 每个神经元可以有一或多个树突.

    (b) 轴突(Axon)可以把自身的兴奋状态从胞体传送到另一个神经元或其他组织. 每个神经元只有一个轴突.

    神经元可以接收其他神经元的信息,也可以发送信息给其他神经元. 神经元之间没有物理连接,中间留有 20纳米左右的缝隙. 神经元之间靠突触(Synapse)进行互联来传递信息,形成一个神经网络,即神经系统. 突触可以理解为神经元之间的链接“接口”,将一个神经元的兴奋状态传到另一个神经元. 一个神经元可被视为一种只有两种状态的细胞:兴奋和抑制. 神经元的状态取决于从其它的神经细胞收到的输入信号量,及突触的强度(抑制或加强). 当信号量总和超过了某

    https://nndl.github.io/

    https://nndl.github.io/

  • 1.5 神经网络 2020年 1月 3日 13

    个阈值时,细胞体就会兴奋,产生电脉冲. 电脉冲沿着轴突并通过突触传递到其他神经元. 图1.5给出了一种典型的神经元结构.

    树突

    细胞体

    细胞核髓鞘

    兰氏结

    突触

    轴突

    神经膜细胞

    图 1.5典型神经元结构1

    我们知道,一个人的智力不完全由遗传决定,大部分来自于生活经验. 也就是说人脑神经网络是一个具有学习能力的系统. 那么人脑神经网络是如何学习的呢?在人脑神经网络中,每个神经元本身并不重要,重要的是神经元如何组成网络. 不同神经元之间的突触有强有弱,其强度是可以通过学习(训练)来不断改变的,具有一定的可塑性. 不同的连接形成了不同的记忆印痕. Donald Hebb(1904~

    1985),加拿大神经心理学家,认知心理生

    理学的开创者.

    1949年,加拿大心理学家Donald Hebb在《行为的组织》(The Organization of Behavior)一书中提出突触可塑性的基本原理,“当神经元 A的一个轴突和神经元 B很近,足以对它产生影响,并且持续地、重复地参与了对神经元 B的兴奋,那么在这两个神经元或其中之一会发生某种生长过程或新陈代谢变化,以致于神经元A作为能使神经元 B兴奋的细胞之一,它的效能加强了. ”这个机制称为赫布理论(Hebbian Theory)或赫布法则(Hebb’s Rule). 如果两个神经元总是相关联地受到刺激,它们之间的突触强度增加. 这样的学习方法被称为赫布型学习(Hebbian learning). Hebb认为人脑有两种记忆:长期记忆和短期记忆. 短期记忆持续时间不超过一分钟. 如果一个经验重复足够的次数,此经验就可储存在长期记忆中. 短期记忆转化为长期记忆的过程就称为凝固作用. 人脑中的海马区为大脑结构凝固作用的核心区域.

    1.5.2 人工神经网络人工神经网络是为模拟人脑神经网络而设计的一种计算模型,它从结构、实

    现机理和功能上模拟人脑神经网络. 人工神经网络与生物神经元类似,由多个节点(人工神经元)互相连接而成,可以用来对数据之间的复杂关系进行建模. 不

    1 图片来源:https://commons.wikimedia.org/wiki/File:Neuron_Hand-tuned.svghttps://nndl.github.io/

    https://commons.wikimedia.org/wiki/File:Neuron_Hand-tuned.svghttps://nndl.github.io/

  • 1.5 神经网络 2020年 1月 3日 14

    同节点之间的连接被赋予了不同的权重,每个权重代表了一个节点对另一个节点的影响大小. 每个节点代表一种特定函数,来自其他节点的信息经过其相应的权重综合计算,输入到一个激活函数中并得到一个新的活性值(兴奋或抑制). 从系统观点看,人工神经元网络是由大量神经元通过极其丰富和完善的连接而构成的自适应非线性动态系统.

    虽然我们可以比较容易地构造一个人工神经网络,但是如何让人工神经网络具有学习能力并不是一件容易的事情. 早期的神经网络模型并不具备学习能力.首个可学习的人工神经网络是赫布网络,采用一种基于赫布规则的无监督学习方法. 感知器是最早的具有机器学习思想的神经网络,但其学习方法无法扩展到多层的神经网络上. 感知器参见第 3.4节.直到 1980年左右,反向传播算法才有效地解决了多层神经网络的学习问题,并成为最为流行的神经网络学习算法.

    人工神经网络诞生之初并不是用来解决机器学习问题. 由于人工神经网络可以看作是一个通用的函数逼近器,一个两层的神经网络可以逼近任意的函数,因此人工神经网络可以看作是一个可学习的函数,并应用到机器学习中. 理论上,只要有足够的训练数据和神经元数量,人工神经网络就可以学到很多复杂的函数. 我们可以把一个人工神经网络塑造复杂函数的能力称为网络容量(Net-work Capacity),与可以被储存在网络中的信息的复杂度以及数量相关. 在本书中,人工神经网

    络主要是作为一种映

    射函数,即机器学习中

    的模型.1.5.3 神经网络的发展历史

    神经网络的发展大致经过五个阶段.

    第一阶段:模型提出 第一个阶段为 1943年~1969年,是神经网络发展的第一个高潮期. 在此期间,科学家们提出了许多神经元模型和学习规则.

    1943年,心理学家Warren McCulloch和数学家Walter Pitts最早提出了一种基于简单逻辑运算的人工神经网络,这种神经网络模型称为MP模型,至此开启了人工神经网络研究的序幕. 1948年,Alan Turing提出了一种“B型图灵机”.“B型图灵机”可以基于Hebbian法则来进行学习. Hebbian法则参见第

    8.6.1节.1951年,McCulloch和Pitts的

    学生Marvin Minsky建造了第一台神经网络机 SNARC.Marvin Minsky(1927~2016),人工智能领域最重要的领导者和创

    新者之一,麻省理工学

    院人工智能实验室的

    创始人之一. 因其在人工智能领域的贡献,于

    1969年获得图灵奖.

    [Rosenblatt, 1958]提出了一种可以模拟人类感知能力的神经网络模型,称为感知器(Perceptron),并提出了一种接近于人类学习过程(迭代、试错)的学习算法.

    在这一时期,神经网络以其独特的结构和处理信息的方法,在许多实际应用领域(自动控制、模式识别等)中取得了显著的成效.

    第二阶段:冰河期 第二阶段为 1969年~1983年,是神经网络发展的第一个低谷期. 在此期间,神经网络的研究处于长年停滞及低潮状态.

    1969年,Marvin Minsky出版《感知器》一书,指出了神经网络的两个关键

    https://nndl.github.io/

    https://nndl.github.io/

  • 1.5 神经网络 2020年 1月 3日 15

    缺陷:一是感知器无法处理“异或”回路问题;二是当时的计算机无法支持处理大型神经网络所需要的计算能力. 这些论断使得人们对以感知器为代表的神经网络产生质疑,并导致神经网络的研究进入了十多年的“冰河期”.

    但在这一时期,依然有不少学者提出了很多有用的模型或算法. 1974年,哈佛大学的 Paul Werbos发明反向传播算法(BackPropagation,BP)[Werbos,1974],但当时未受到应有的重视. 1980年,福岛邦彦提出了一种带卷积和子采样操作的多层神经网络:新知机(Neocognitron)[Fukushima, 1980]. 新知机的提出是受到了动物初级视皮层简单细胞和复杂细胞的感受野的启发. 但新知机并没有采用反向传播算法,而是采用了无监督学习的方式来训练,因此也没有引起足够的重视.

    第三阶段:反向传播算法引起的复兴 第三阶段为 1983年~1995年,是神经网络发展的第二个高潮期. 这个时期中,反向传播算法重新激发了人们对神经网络的兴趣.

    1983年,物理学家 John Hopfield提出了一种用于联想记忆(AssociativeMemory)的神经网络,称为Hopfield网络. Hopfield网络在旅行商问题上取得了当时最好结果,并引起了轰动. Hopfield网络参见第

    8.6.1节.1984年,Geoffrey Hinton提出一种随机化版本的

    Hopfield网络,即玻尔兹曼机(Boltzmann Machine).玻尔兹曼机参见第 12.1节.真正引起神经网络第二次研究高潮的是反向传播算法. 20世纪 80年代中期,

    一种连接主义模型开始流行,即分布式并行处理(Parallel Distributed Process-ing,PDP)模型 [McClelland et al., 1986]. 反向传播算法也逐渐成为PDP模型的主要学习算法. 这时,神经网络才又开始引起人们的注意,并重新成为新的研究热点. 随后,[LeCun et al., 1989]将反向传播算法引入了卷积神经网络,并在手写体数字识别上取得了很大的成功 [LeCun et al., 1998]. 反向传播算法是迄今最为成功的神经网络学习算法. 目前在深度学习中主要使用的自动微分可以看作是反向传播算法的一种扩展. 自动微分参见第 4.5.3

    节.然而,梯度消失问题(Vanishing Gradient Problem)阻碍神经网络的进一

    步发展,特别是循环神经网络. 为了解决这个问题,[Schmidhuber, 1992]采用两步来训练一个多层的循环神经网络:(1)通过无监督学习的方式来逐层训练每一层循环神经网络,即预测下一个输入;(2)通过反向传播算法进行精调.

    第四阶段:流行度降低 第四个阶段为 1995~2006年,在此期间,支持向量机和其他更简单的方法(例如线性分类器)在机器学习领域的流行度逐渐超过了神经网络.

    虽然神经网络可以很容易地增加层数、神经元数量,从而构建复杂的网络,但其计算复杂性也会随之增长. 当时的计算机性能和数据规模不足以支持训练大规模神经网络. 在 20世纪 90年代中期,统计学习理论和以支持向量机为代表的机https://nndl.github.io/

    https://nndl.github.io/

  • 1.6 本书的知识体系 2020年 1月 3日 16

    器学习模型开始兴起. 相比之下,神经网络的理论基础不清晰、优化困难、可解释性差等缺点更加凸显,因此神经网络的研究又一次陷入低潮.

    第五阶段:深度学习的崛起 [Hinton et al., 2006]通过逐层预训练来学习一个深度信念网络,并将其权重作为一个多层前馈神经网络的初始化权重,再用反向传播算法进行精调. 深度信念网络参见第

    12.3节.这种“预训练+精调”的方式可以有效地解决深度神经网络难

    以训练的问题. 随着深度神经网络在语音识别 [Hinton et al., 2012]和图像分类[Krizhevsky et al., 2012]等任务上的巨大成功,以神经网络为基础的深度学习迅速崛起. 近年来,随着大规模并行计算以及GPU设备的普及,计算机的计算能力得以大幅提高. 此外,可供机器学习的数据规模也越来越大. 在强大的计算能力和海量的数据规模支持下,计算机已经可以端到端地训练一个大规模神经网络,不再需要借助预训练的方式. 各大科技公司都投入巨资研究深度学习,神经网络迎来第三次高潮.

    1.6 本书的知识体系本书主要对神经网络和深度学习所涉及的知识提出一个较全面的基础性介

    绍. 本书的知识体系如图1.6所示,可以分为三大块:机器学习、神经网络和概率图模型.

    概率图模型

    神经网络 机器学习模型

    前馈网络

    全连接网络

    卷积网络

    图网络

    记忆网络

    循环网络

    记忆增强网络要素模型

    线性模型

    非线性模型优化算法

    随机梯度下降

    学习准则

    结构风险最小化

    最大对数似然

    最大后验估计

    类型

    监督学习

    分类

    回归

    结构化学习

    强化学习

    无监督学习

    密度估计

    变分自编码器

    生成对抗网络

    深度信念网络

    玻尔兹曼机

    自编码器

    聚类

    模型

    有向图

    无向图

    学习

    EM算法

    推断

    精确推断

    近似推断

    图 1.6本书的知识体系

    本书的知识体系在各章节中的安排如下:

    https://nndl.github.io/

    https://nndl.github.io/

  • 1.7 常用的深度学习框架 2020年 1月 3日 17

    机器学习 机器学习可以分为监督学习、无监督学习和强化学习. 第2章对机器学习进行概述,使读者能够了解机器学习的基本概念以及三要素:模型、学习准则和优化算法,并以线性回归为例来讲述不同学习算法之间的关联. 第3章主要介绍一些基本的线性模型. 这两章都以监督学习为主进行介绍. 第9章介绍了一些无监督学习方法,包括无监督特征学习和概率密度估计. 第10章中介绍了一些和模型无关的机器学习方法. 第14章介绍了深度强化学习的知识.

    神经网络 神经网络作为一类非线性的机器学习模型,可以更好地实现输入和输出之间的映射. 第4章到第6章分别讲述三种主要的神经网络模型:前馈神经网络、卷积神经网络和循环神经网络. 第6章也简单介绍了一种更一般性的网络:图网络. 第7章介绍神经网络的优化与正则化方法. 第8章介绍神经网络中的注意力机制和外部记忆. 虽然我们但是大多数网络都是复合型结构,即一个神经网络中包括多种网络结构.

    概率图模型 概率图模型为机器学习提供了一个更加便捷的描述框架. 第11章介绍了概率图模型的基本概念,包括模型表示、学习和推断. 目前深度学习和概率图模型的融合已经十分流行. 第12章介绍了两种概率图模型:玻尔兹曼机和深度信念网络. 第13章和第15章分别介绍两种概率生成模型:深度生成模型和序列生成模型.

    由于深度学习涉及非常多的研究领域,因此很多知识无法进行追根溯源并深入介绍. 每章最后一节都提供了一些参考文献,读者可根据需要通过深入阅读来了解这些知识. 此外,本书的附录中介绍了一些深度学习涉及的数学知识,包括线性代数、微积分、数学优化、概率论和信息论等.

    1.7 常用的深度学习框架在深度学习中,一般通过误差反向传播算法来进行参数学习. 采用手工方式

    来计算梯度再写代码实现的方式会非常低效,并且容易出错. 此外,深度学习模型需要的计算机资源比较多,一般需要在CPU和GPU之间不断进行切换,开发难度也比较大. 因此,一些支持自动梯度计算、无缝CPU和GPU切换等功能的深度学习框架就应运而生. 比较有代表性的框架包括:Theano、Caffe、TensorFlow、Pytorch、飞桨(PaddlePaddle)、Chainer和MXNet等1.

    (1) Theano2:由蒙特利尔大学的Python工具包, Theano项目目前已停止维护.

    用来高效地定义、优化和计算张量数据的数学表达式. Theano可以透明地使用GPU和高效的符号微分.

    1 更全面的深度学习框架介绍可以参考https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software.

    2 http://www.deeplearning.net/software/theanohttps://nndl.github.io/

    https://en.wikipedia.org/wiki/Comparison_of_deep_learning_softwarehttps://en.wikipedia.org/wiki/Comparison_of_deep_learning_softwarehttp://www.deeplearning.net/software/theanohttps://nndl.github.io/

  • 1.7 常用的深度学习框架 2020年 1月 3日 18

    (2) Caffe1:由加州大学伯克利分校开发的针对卷积神经网络的计算框架,主要用于计算机视觉. Caffe用C++和Python实现,但可以通过配置文件来实现所要的网络结构,不需要编码. Caffe2已经被并入 Py-

    Torch中.(3) TensorFlow2:由Google公司开发的深度学习框架,可以在任意具备CPU

    或者GPU的设备上运行. TensorFlow的计算过程使用数据流图来表示.TensorFlow的名字来源于其计算过程中的操作对象为多维数组,即张量(Tensor). TensorFlow 1.0版本采用静态计算图,2.0版本之后也支持动态计算图. 计算图参见第 4.5.3节.

    (4) PyTorch3:由Facebook、NVIDIA、Twitter等公司开发维护的深度学习框架,其前身为Lua语言的Torch4. PyTorch也是基于动态计算图的框架,在需要动态改变神经网络结构的任务中有着明显的优势.

    (5) 飞桨(PaddlePaddle)5:百度开发的一个高效和可扩展的深度学习框架,同时支持动态图和静态图. 飞桨提供强大的深度学习并行技术,可以同时支持稠密参数和稀疏参数场景的超大规模深度学习并行训练,支持千亿规模参数和数百个节点的高效并行训练.

    (6) Chainer6:一个最早采用动态计算图的深度学习框架,其核心开发团队为来自日本的一家机器学习创业公司 Preferred Networks. 和 Tensorflow、Theano、Caffe等框架使用的静态计算图相比,动态计算图可以在运行时动态地构建计算图,因此非常很适合进行一些复杂的决策或推理任务.

    (7) MXNet7:由亚马逊、华盛顿大学和卡内基梅隆大学等开发维护的深度学习框架. MXNet支持混合使用符号和命令式编程来最大化效率和生产率,并可以有效地扩展到多个GPU和多台机器.

    在这些基础框架之上,还有一些建立在这些框架之上的高度模块化的神经网络库,使得构建一个神经网络模型就像搭积木一样容易. 其中比较有名的模块化神经网络框架有:(1)基于TensorFlow和Theano的Keras8和(2)基于Theano的Lasagne9.

    目前,Keras已经被集成到TensorFlow 2.0版本中.

    1 全称为 Convolutional Architecture for Fast Feature Embedding, http://caffe.berkeleyvision.org

    2 https://www.tensorflow.org3 http://pytorch.org4 http://torch.ch5 PaddlePaddle全称为Parallel Distributed Deep Learning,http://paddlepaddle.org/6 https://chainer.org7 https://mxnet.apache.org8 http://keras.io/9 https://github.com/Lasagne/Lasagnehttps://nndl.github.io/

    http://caffe.berkeleyvision.orghttp://caffe.berkeleyvision.orghttps://www.tensorflow.orghttp://pytorch.orghttp://torch.chhttp://paddlepaddle.org/https://chainer.orghttps://mxnet.apache.orghttp://keras.io/https://github.com/Lasagne/Lasagnehttps://nndl.github.io/

  • 1.8 总结和深入阅读 202