人工智能、机器学习、深度学习、端到端学习、神经网络
日萌社人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)第1章 绪论深度学习(Deep Learning)是近年来发展十分迅速的研究领域,并且在人工智能的很多子领域都取得了巨大的成功.从根源来讲,深度学习是机器学习的一个分支,是指一类问题以及解决这类问题的方法.首先,深度学习问题是一个机器学习问题,指从有限样例中通过算法
·
日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
第1章 绪论
深度学习 ( Deep Learning ) 是近年来发展十分迅速的研究领域 , 并且在 人
工智能 的很多子领域都取得了巨大的成功 . 从根源来讲 , 深度学习是 机器学习 的
一个分支 , 是指一类 问题 以及解决这类问题的 方法 .
首先 , 深度学习问题是一个机器学习问题 , 指从有限样例中通过算法总结出
一般性的规律 , 并可以应用到新的未知数据上 . 比如 , 我们可以从一些历史病例
的集合中总结出症状和疾病之间的规律 . 这样当有新的病人时 , 我们可以利用总
结出来的规律 , 来判断这个病人得了什么疾病 .
其次 , 深度学习采用的模型一般比较复杂 , 指样本的原始输入到输出目标
之间的数据流经过多个线性或非线性的 组件 ( component ). 因为每个组件都会
对信息进行加工 , 并进而影响后续的组件 , 所以当我们最后得到输出结果时 , 我
们并不清楚其中每个组件的贡献是多少 . 这个问题叫作 贡献度分配问题 ( Credit
Assignment Problem , CAP ) [ Minsky , 1961 ] .
在深度学习中 , 贡献度分配问题是
一个很关键的问题 , 这关系到如何学习每个组件中的参数 .
贡献度分配问题 也经 常翻译为 信用分配问题 或 功劳分配问题 .
目前 , 一种可以比较好解决贡献度分配问题的模型是 人工神经网络 ( Artifi
cial Neural Network , ANN ). 人工神经网络 , 也简称 神经网络 , 是一种受人脑神
经系统的工作方式启发而构造的数学模型 . 和目前计算机的结构不同 , 人脑神经
系统是一个由生物神经元组成的高度复杂网络 , 是一个并行的非线性信息处理
系统 . 人脑神经系统可以将声音 、 视觉等信号经过多层的编码 , 从最原始的低层
特征不断加工 、 抽象 , 最终得到原始信号的语义表示 . 和人脑神经网络类似 , 人工
神经网络是由人工神经元以及神经元之间的连接构成 , 其中有两类特殊的神经
元 : 一类用来接收外部的信息 , 另一类用来输出信息 . 这样 , 神经网络可以看作信
息从输入到输出的信息处理系统 . 如果我们把神经网络看作由一组参数控制的
复杂函数 , 并用来处理一些模式识别任务 ( 比如语音识别 、 人脸识别等 ), 神经网
络的参数可以通过机器学习的方式来从数据中学习 . 因为神经网络模型一般比
较复杂 , 从输入到输出的信息传递路径一般比较长 , 所以复杂神经网络的学习可
以看成是一种深度的机器学习 , 即深度学习 .
神经网络和深度学习并不等价 . 深度学习可以采用神经网络模型 , 也可以采
用其他模型 ( 比如深度信念网络是一种概率图模型 ). 但是 , 由于神经网络模型
可以比较容易地解决贡献度分配问题 , 因此神经网络模型成为深度学习中主要
采用的模型 . 虽然深度学习一开始用来解决机器学习中的表示学习问题 , 但是由
于其强大的能力 , 深度学习越来越多地用来解决一些通用人工智能问题 , 比如推
理 、 决策等 .
在本书中 , 我们主要介绍有关神经网络和深度学习的基本概念 、 相关模型 、
学习方法以及在计算机视觉 、 自然语言处理等领域的应用 . 在本章中 , 我们先介
绍人工智能的基础知识 , 然后再介绍神经网络和深度学习的基本概念 .
1.1 人工智能
智能 ( Intelligence ) 是现代生活中很常见的一个词 , 比如智能手机 、 智能家
居 、 智能驾驶等 . 在不同使用场合中 , 智能的含义也不太一样 . 比如 “ 智能手机 ” 中
的 “ 智能 ” 一般是指由计算机控制并具有某种智能行为 . 这里的 “ 计算机控制 ” +
“ 智能行为 ” 隐含了对人工智能的简单定义 .
简单地讲 , 人工智能 ( Artificial Intelligence , AI ) 就是让机器具有人类的智
能 , 这也是人们长期追求的目标 . 这里关于什么是 “ 智能 ” 并没有一个很明确的
定义 , 但一般认为智能 ( 或特指人类智能 ) 是知识和智力的总和 , 都和大脑的思
维活动有关 . 人类大脑是经过了上亿年的进化才形成了如此复杂的结构 , 但我们
至今仍然没有完全了解其工作机理 . 虽然随着神经科学 、 认知心理学等学科的发
展 , 人们对大脑的结构有了一定程度的了解 , 但对大脑的智能究竟是怎么产生的
还知道得很少 . 我们并不理解大脑的运作原理 , 以及如何产生意识 、 情感 、 记忆等
功能 . 因此 , 通过 “ 复制 ” 人脑来实现人工智能在目前阶段是不切实际的 .
1950 年 , 阿兰 · 图灵 ( Alan Turing ) 发表了一篇有着重要影响力的论文
《 Computing Machinery and Intelligence 》, 讨论了创造一种 “ 智能机器 ” 的可能
性 . 由于 “ 智能 ” 一词比较难以定义 , 他提出了著名的 图灵测试 :“ 一个人在不接触
对方的情况下 , 通过一种特殊的方式和对方进行一系列的问答 . 如果在相当长时
间内 , 他无法根据这些问题判断对方是人还是计算机 , 那么就可以认为这个计算
机是智能的 ”. 图灵测试是促使人工智能从哲学探讨到科学研究的一个重要因素 ,
引导了人工智能的很多研究方向 . 因为要使得计算机能通过图灵测试 , 计算机就
必须具备理解语言 、 学习 、 记忆 、 推理 、 决策等能力 . 这样 , 人工智能就延伸出了很
多不同的子学科 , 比如机器感知 ( 计算机视觉 、 语音信息处理 )、 学习 ( 模式识别 、
机器学习 、 强化学习 )、 语言 ( 自然语言处理 )、 记忆 ( 知识表示 )、 决策 ( 规划 、 数
据挖掘 ) 等 . 所有这些研究领域都可以看成是 人工智能 的研究范畴 .
人工智能是计算机科学的一个分支 , 主要研究 、 开发用于模拟 、 延伸和扩展
人类智能的理论 、 方法 、 技术及应用系统等 . 和很多其他学科不同 , 人工智能这个
学科的诞生有着明确的标志性事件 , 就是 1956 年的达特茅斯 ( Dartmouth ) 会
议 . 在这次会议上 ,“ 人工智能 ” 被提出并作为本研究领域的名称 . 同时 , 人工智能
研究的使命也得以确定 . John McCarthy 提出了人工智能的定义 : 人工智能就是
要让机器的行为看起来就像是人所表现出的智能行为一样 .
目前 , 人工智能的主要领域大体上可以分为以下几个方面 :
( 1 ) 感知 : 模拟人的感知能力 , 对外部刺激信息 ( 视觉和语音等 ) 进行感
知和加工 . 主要研究领域包括语音信息处理和计算机视觉等 .
( 2 ) 学习 : 模拟人的学习能力 , 主要研究如何从样例或从与环境的交互中
进行学习 . 主要研究领域包括监督学习 、 无监督学习和强化学习等 .
( 3 ) 认知 : 模拟人的认知能力 , 主要研究领域包括知识表示 、 自然语言理
解 、 推理 、 规划 、 决策等 .
1.1.1 人工智能的发展历史
人工智能从诞生至今 , 经历了一次又一次的繁荣与低谷 , 其发展历程大体上
可以分为 “ 推理期 ”“ 知识期 ” 和 “ 学习期 ”
[ 周志华 , 2016 ] .
1.1.1.1 推理期
1956 年达特茅斯会议之后 , 研究者对人工智能的热情高涨 , 之后的十几年
是人工智能的黄金时期 . 大部分早期研究者都通过人类的经验 , 基于逻辑或者
事实归纳出来一些规则 , 然后通过编写程序来让计算机完成一个任务 . 这个时期
中 , 研究者开发了一系列的智能系统 , 比如几何定理证明器 、 语言翻译器等 . 这
些初步的研究成果也使得研究者对开发出具有人类智能的机器过于乐观 , 低估
了实现人工智能的难度 . 有些研究者甚至认为 :“ 二十年内 , 机器将能完成人能做
到的一切工作 ”,“ 在三到八年的时间里可以研发出一台具有人类平均智能的机
器 ”. 但随着研究的深入 , 研究者意识到这些推理规则过于简单 ,对项目难度评估
不足 , 原来的乐观预期受到严重打击 . 人工智能的研究开始陷入低谷 , 很多人工
智能项目的研究经费也被消减 .
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 多年后 , 人工智能虽然可以在某些方面超越人类 , 但想让机
器真正通过图灵测试 , 具备真正意义上的人类智能 , 这个目标看上去仍然遥遥
无期 .
1.1.2 人工智能的流派
目前我们对人类智能的机理依然知之甚少 , 还没有一个通用的理论来指导
如何构建一个人工智能系统 . 不同的研究者都有各自的理解 , 因此在人工智能的
研究过程中产生了很多不同的流派 . 比如一些研究者认为人工智能应该通过研
究人类智能的机理来构建一个仿生的模拟系统 , 而另外一些研究者则认为可以
使用其他方法来实现人类的某种智能行为 . 一个著名的例子是让机器具有飞行
能力不需要模拟鸟的飞行方式 , 而是应该研究空气动力学 .
尽管人工智能的流派非常多 , 但主流的方法大体上可以归结为以下两种 :
( 1 ) 符号主义 ( Symbolism ), 又称逻辑主义 、 心理学派或计算机学派 , 是
指通过分析人类智能的功能 , 然后用计算机来实现这些功能的一类方法 . 符号
主义有两个基本假设 : a ) 信息可以用符号来表示 ; b ) 符号可以通过显式的规则
( 比如逻辑运算 ) 来操作 . 人类的认知过程可以看作符号操作过程 . 在人工智能
的推理期和知识期 , 符号主义的方法比较盛行 , 并取得了大量的成果 .
( 2 ) 连接主义 ( Connectionism ), 又称仿生学派或生理学派 , 是认知科学
领域中的一类信息处理的方法和理论 . 在认知科学领域 , 人类的认知过程可以看
作一种信息处理过程 . 连接主义认为人类的认知过程是由大量简单神经元构成
的神经网络中的信息处理过程 , 而不是符号运算 . 因此 , 连接主义模型的主要结
构是由大量简单的信息处理单元组成的互联网络 , 具有非线性 、 分布式 、 并行化 、
局部性计算以及自适应性等特性 .
符号主义方法的一个优点是可解释性 , 而这也正是连接主义方法的弊端 . 深
度学习的主要模型神经网络就是一种连接主义模型 . 随着深度学习的发展 , 越来
越多的研究者开始关注如何融合符号主义和连接主义 , 建立一种高效并且具有
可解释性的模型 .
1.2 机器学习
机器学习 ( Machine Learning , ML ) 是指从有限的观测数据中学习 ( 或 “ 猜
测 ”) 出具有一般性的规律 , 并利用这些规律对未知数据进行预测的方法 .
机器学习是人工智能的一个重要分支,并逐渐成为推动人工智能发展的关键因素 .
传统的机器学习主要关注如何学习一个 预测模型 . 一般需要首先将数据表
示为一组 特征 ( Feature ), 特征的表示形式可以是连续的数值 、 离散的符号或其
他形式 . 然后将这些特征输入到预测模型 , 并输出预测结果 . 这类机器学习可以
看作 浅层学习 ( Shallow Learning ). 浅层学习的一个重要特点是不涉及特征学
习 , 其特征主要靠人工经验或特征转换方法来抽取 .
当我们用机器学习来解决实际任务时 , 会面对多种多样的数据形式 , 比如声
音 、 图像 、 文本等 . 不同数据的特征构造方式差异很大 . 对于图像这类数据 , 我们
可以很自然地将其表示为一个连续的向量 .
而对于文本数据 , 因为其一般由离散
符号组成 , 并且每个符号在计算机内部都表示为无意义的编码 , 所以通常很难找
到合适的表示方式 . 因此 , 在实际任务中使用机器学习模型一般会包含以下几个
步骤 ( 如图 1.2 所示 ):
将图像数据表示为向量的方法有很多种, 比如直接将一幅图像的所有像素值(灰度值或RGB 值 ) 组成一个连续向量.
( 1 ) 数据预处理 : 经过数据的预处理 , 如去除噪声等 . 比如在文本分类中 ,
去除停用词等 .
( 2 ) 特征提取 : 从原始数据中提取一些有效的特征 . 比如在图像分类中 , 提
取边缘 、 尺度不变特征变换 ( Scale Invariant Feature Transform , SIFT ) 特征等 .
( 3 ) 特征转换 : 对特征进行一定的加工 , 比如降维和升维 .
降维包括 特征抽 取 ( Feature Extraction ) 和 特征选择 ( Feature Selection ) 两种途径 . 常用的特
征转换方法有主成分分析 ( Principal Components Analysis , PCA )、
线性判别分析( Linear Discriminant Analysis , LDA ) 等 .
( 4 ) 预测 : 机器学习的核心部分 , 学习一个函数并进行预测 .
很多特征转换方法也都是机器学习方法.
上述流程中 , 每步特征处理以及预测一般都是分开进行的 . 传统的机器学
习模型主要关注最后一步 , 即构建预测函数 . 但是实际操作过程中 , 不同预测模
型的性能相差不多 , 而前三步中的特征处理对最终系统的准确性有着十分关键
的作用 . 特征处理一般都需要人工干预完成 , 利用人类的经验来选取好的特征 ,
并最终提高机器学习系统的性能 . 因此 , 很多的机器学习问题变成了 特征工程
( Feature Engineering ) 问题 . 开发一个机器学习系统的主要工作量都消耗在了
预处理 、 特征提取以及特征转换上 .
1.3 表示学习
为了提高机器学习系统的准确率 , 我们就需要将输入信息转换为有效的 特
征 , 或者更一般性地称为 表示 ( Representation ). 如果有一种算法可以自动地学
习出有效的特征 , 并提高最终机器学习模型的性能 , 那么这种学习就可以叫作 表
示学习 ( Representation Learning ).
语义鸿沟 表示学习的关键是解决 语义鸿沟 ( Semantic Gap ) 问题 . 语义鸿沟问
题是指输入数据的底层特征和高层语义信息之间的不一致性和差异性 . 比如给
定一些关于 “ 车 ” 的图片 , 由于图片中每辆车的颜色和形状等属性都不尽相同 , 因
此不同图片在像素级别上的表示 ( 即底层特征 ) 差异性也会非常大 . 但是我们理
解这些图片是建立在比较抽象的高层语义概念上的 . 如果一个预测模型直接建
立在底层特征之上 , 会导致对预测模型的能力要求过高 . 如果可以有一个好的表
示在某种程度上能够反映出数据的高层语义特征 , 那么我们就能相对容易地构
建后续的机器学习模型 .
在表示学习中 , 有两个核心问题 : 一是 “ 什么是一个好的表示 ”; 二是 “ 如何学
习到好的表示 ”.
1.3.1 局部表示和分布式表示
“ 好的表示 ” 是一个非常主观的概念 , 没有一个明确的标准 . 但一般而言 , 一
个好的表示具有以下几个优点 :
( 1 ) 一个好的表示应该具有很强的表示能力 , 即同样大小的向量可以表示
更多信息 .
( 2 ) 一个好的表示应该使后续的学习任务变得简单 , 即需要包含更高层的
语义信息 .
( 3 ) 一个好的表示应该具有一般性 , 是任务或领域独立的 . 虽然目前的大
部分表示学习方法还是基于某个任务来学习 , 但我们期望其学到的表示可以比
较容易地迁移到其他任务上 .
在机器学习中 , 我们经常使用两种方式来表示特征 : 局部表示 ( Local Rep
resentation ) 和 分布式表示 ( Distributed Representation ).
以颜色表示为例 , 我们可以用很多词来形容不同的颜色 1 , 除了基本的 “ 红 ”
“ 蓝 ”“ 绿 ”“ 白 ”“ 黑 ” 等之外 , 还有很多以地区或物品命名的 , 比如 “ 中国红 ”“ 天蓝
色 ”“ 咖啡色 ”“ 琥珀色 ” 等 . 如果要在计算机中表示颜色 , 一般有两种表示方法 .
一种表示颜色的方法是以不同名字来命名不同的颜色 , 这种表示方式叫
作 局部表示 , 也称为 离散表示 或 符号表示 . 局部表示通常可以表示为 one-hot 向
量 的形式 . 假设所有颜色的名字构成一个词表 𝒱 , 词表大小为 |𝒱| . 我们可以用
一个 |𝒱| 维的 one-hot 向量来表示每一种颜色 . 在第 𝑖 种颜色对应的 one-hot 向量
中 , 第 𝑖 维的值为 1 , 其他都为 0 .
局部表示有两个优点 : 1 ) 这种离散的表示方式具有很好的解释性 , 有利于
人工归纳和总结特征 , 并通过特征组合进行高效的特征工程 ; 2 )通过多种特征
组合得到的表示向量通常是稀疏的二值向量 , 当用于线性模型时计算效率非常
高 . 但局部表示有两个不足之处 : 1 ) one-hot 向量的维数很高 , 且不能扩展 . 如果
有一种新的颜色 , 我们就需要增加一维来表示 ; 2 ) 不同颜色之间的相似度都为
0 , 即我们无法知道 “ 红色 ” 和 “ 中国红 ” 的相似度要高于 “ 红色 ” 和 “ 黑色 ” 的相
似度 .
另一种表示颜色的方法是用 RGB 值来表示颜色 , 不同颜色对应到 R 、 G 、 B 三
维空间中一个点 , 这种表示方式叫作 分布式表示 .
将 分 布 式 表 示 叫 作 分散式表示 可能更容易理解, 即一种颜色的语义分散到语义空间中的不同基向量上.
分布式表示通常可以表示为低维的稠密向量.
和局部表示相比 , 分布式表示的表示能力要强很多 , 分布式表示的向量维度
一般都比较低 . 我们只需要用一个三维的稠密向量就可以表示所有颜色 . 并且 ,
分布式表示也很容易表示新的颜色名 . 此外 , 不同颜色之间的相似度也很容易
计算 .
表 1.1 列出了 4 种颜色的局部表示和分布式表示 .
我们可以使用神经网络来将高维的局部表示空间 ℝ |𝒱| 映射到一个非常低维
的分布式表示空间 ℝ 𝐷 , 𝐷 ≪ |𝒱| . 在这个低维空间中 , 每个特征不再是坐标轴上
的点 , 而是分散在整个低维空间中 . 在机器学习中 , 这个过程也称为 嵌入 ( Em
bedding ). 嵌入通常指将一个度量空间中的一些对象映射到另一个低维的度量
空间中 , 并尽可能保持不同对象之间的拓扑关系 . 比如自然语言中词的分布式表
示 , 也经常叫作 词嵌入 .
图 1.3 展示了一个 3 维 one-hot 向量空间和一个 2 维嵌入空间的对比 . 在 one
hot 向量空间中 , 每个特征都位于坐标轴上 , 每个坐标轴上一个特征 . 而在低维的
嵌入空间中 , 每个特征都不在坐标轴上 , 特征之间可以计算相似度 .
1.3.2 表示学习
要学习到一种好的高层语义表示 ( 一般为分布式表示 ), 通常需要从底层特
征开始 , 经过多步非线性转换才能得到. 连续多次的线性转换等价于一次线性转换.
深层结构的优点是可以增加特征的重用
性 , 从而指数级地增加表示能力 . 因此 , 表示学习的关键是构建具有一定深度的
多层次特征表示 [ Bengio et al. , 2013 ] .
在传统的机器学习中 , 也有很多有关特征学习的方法 , 比如主成分分析 、 线
性判别分析 、 独立成分分析等 .
但是 , 传统的特征学习一般是通过人为地设计一
些准则 , 然后根据这些准则来选取有效的特征 . 特征的学习是和最终预测模型的
学习分开进行的 , 因此学习到的特征不一定可以提升最终模型的性能 .
1.4 深度学习
为了学习一种好的表示 , 需要构建具有一定 “ 深度 ” 的模型 , 并通过学习算法
来让模型自动学习出好的特征表示 ( 从底层特征 , 到中层特征 , 再到高层特征 ),
从而最终提升预测模型的准确率 . 所谓 “ 深度 ” 是指原始数据进行非线性特征转
换的次数 . 如果把一个表示学习系统看作一个有向图结构 , 深度也可以看作从输
入节点到输出节点所经过的最长路径的长度 .
这样我们就需要一种学习方法可以从数据中学习一个 “ 深度模型 ”, 这就
是 深度学习 ( Deep Learning , DL ). 深度学习是机器学习的一个子问题 , 其主要
目的是从数据中自动学习到有效的特征表示 .
图 1.4 给出了深度学习的数据处理流程 . 通过多层的特征转换 , 把原始数据
变成更高层次 、 更抽象的表示 . 这些学习到的表示可以替代人工设计的特征 , 从
而避免 “ 特征工程 ”.
深度学习是将原始的数据特征通过多步的特征转换得到一种特征表示 , 并
进一步输入到预测函数得到最终结果 . 和 “ 浅层学习 ” 不同 , 深度学习需要解决
的关键问题是 贡献度分配问题 ( Credit Assignment Problem , CAP ) [ Minsky ,
1961 ] , 即一个系统中不同的 组件 ( component ) 或其参数对最终系统输出结果
的贡献或影响 . 以下围棋为例 , 每当下完一盘棋 , 最后的结果要么赢要么输 . 我们
会思考哪几步棋导致了最后的胜利 , 或者又是哪几步棋导致了最后的败局 . 如何
判断每一步棋的贡献就是贡献度分配问题 , 这是一个非常困难的问题 . 从某种意
义上讲 , 深度学习可以看作一种 强化学习 ( Reinforcement Learning , RL ), 每个
内部组件并不能直接得到监督信息 , 需要通过整个模型的最终监督信息 ( 奖励 )
得到 , 并且有一定的延时性 .
目前 , 深度学习采用的模型主要是神经网络模型 , 其主要原因是神经网络模
型可以使用误差反向传播算法 , 从而可以比较好地解决贡献度分配问题 . 只要是
超过一层的神经网络都会存在贡献度分配问题 , 因此可以将超过一层的神经网
络都看作深度学习模型 . 随着深度学习的快速发展 , 模型深度也从早期的 5 ∼ 10
层增加到目前的数百层 . 随着模型深度的不断增加 , 其特征表示的能力也越来越
强 , 从而使后续的预测更加容易 .
1.4.1 端到端学习
在一些复杂任务中 , 传统机器学习方法需要将一个任务的输入和输出之间
人为地切割成很多子模块 ( 或多个阶段 ), 每个子模块分开学习 . 比如一个自然
语言理解任务 , 一般需要分词 、 词性标注 、 句法分析 、 语义分析 、 语义推理等步骤 .
这种学习方式有两个问题 : 一是每一个模块都需要单独优化 , 并且其优化目标和
任务总体目标并不能保证一致 ; 二是错误传播 , 即前一步的错误会对后续的模型
造成很大的影响 . 这样就增加了机器学习方法在实际应用中的难度 .
端到端学习 ( End-to-End Learning ), 也称 端到端训练 , 是指在学习过程中
不进行分模块或分阶段训练 , 直接优化任务的总体目标 . 在端到端学习中 , 一般
不需要明确地给出不同模块或阶段的功能 , 中间过程不需要人为干预 . 端到端学
习的训练数据为 “ 输入 - 输出 ” 对的形式 , 无须提供其他额外信息 . 因此 , 端到端学
习和深度学习一样 , 都是要解决 贡献度分配问题 . 目前 , 大部分采用神经网络模
型的深度学习也可以看作一种端到端的学习 .
1.5 神经网络
随着神经科学 、 认知科学的发展 , 我们逐渐知道人类的智能行为都和大脑活
动有关 . 人类大脑是一个可以产生意识 、 思想和情感的器官 . 受到人脑神经系统
的启发 , 早期的神经科学家构造了一种模仿人脑神经系统的数学模型 , 称为 人工
神经网络 , 简称 神经网络 . 在机器学习领域 , 神经网络是指由很多 人工神经元 构
成的网络结构模型 , 这些人工神经元之间的连接强度是可学习的参数 .
1.5.1 人脑神经网络
人类大脑是人体最复杂的器官 , 由神经元 、 神经胶质细胞 、 神经干细胞和血
管组成 . 其中 , 神经元 ( Neuron ), 也叫神经细胞 ( Nerve Cell ), 是携带和传输信
息的细胞 , 是人脑神经系统中最基本的单元 . 人脑神经系统是一个非常复杂的组
织 , 包含近 860 亿个神经元 [ Azevedo et al. , 2009 ] , 每个神经元有上千个突触和其
他神经元相连接 . 这些神经元和它们之间的连接形成巨大的复杂网络 , 其中神经
连接的总长度可达数千公里 . 我们人造的复杂网络 , 比如全球的计算机网络 , 和
大脑神经网络相比要 “ 简单 ” 得多 .
早在 1904 年 , 生物学家就已经发现了神经元的结构 . 典型的神经元结构大
致可分为细胞体和细胞突起 .
( 1 ) 细胞体 ( Soma ) 中的神经细胞膜上有各种受体和离子通道 , 胞膜的
受体可与相应的化学物质神经递质结合 , 引起离子通透性及膜内外电位差发生
改变 , 产生相应的生理活动 : 兴奋或抑制 .
( 2 ) 细胞突起 是由细胞体延伸出来的细长部分 , 又可分为树突和轴突 .
a ) 树突 ( Dendrite ) 可以接收刺激并将兴奋传入细胞体 . 每个神经元可
以有一或多个树突 .
b ) 轴突 ( Axon ) 可以把自身的兴奋状态从胞体传送到另一个神经元或
其他组织 . 每个神经元只有一个轴突 .
神经元可以接收其他神经元的信息 , 也可以发送信息给其他神经元 . 神经元
之间没有物理连接 , 两个 “ 连接 ” 的神经元之间留有 20 纳米左右的缝隙 , 并靠 突
触 ( Synapse ) 进行互联来传递信息 , 形成一个神经网络 , 即神经系统 . 突触可以
理解为神经元之间的连接 “ 接口 ”, 将一个神经元的兴奋状态传到另一个神经元 .
一个神经元可被视为一种只有两种状态的细胞 : 兴奋 和 抑制 . 神经元的状态取决
于从其他的神经细胞收到的输入信号量 , 以及突触的强度 ( 抑制或加强 ). 当信
号量总和超过了某个阈值时 , 细胞体就会兴奋 , 产生电脉冲 . 电脉冲沿着轴突并
通过突触传递到其他神经元 . 图 1.5 给出了一种典型的神经元结构 .
我们知道 , 一个人的智力不完全由遗传决定 , 大部分来自于生活经验 . 也就
是说人脑神经网络是一个具有学习能力的系统 . 那么人脑神经网络是如何学习
的呢 ? 在人脑神经网络中 , 每个神经元本身并不重要 , 重要的是神经元如何组成
网络 . 不同神经元之间的突触有强有弱 , 其强度是可以通过学习 ( 训练 ) 来不断
改变的 , 具有一定的可塑性 . 不同的连接形成了不同的记忆印痕 . 1949 年 , 加拿大
心理学家 Donald Hebb 在 《 行为的组织 》( The Organization of Behavior ) 一书
中提出突触可塑性的基本原理 ,
“ 当神经元 A 的一个轴突和神经元 B 很近 , 足以
对它产生影响 , 并且持续地 、 重复地参与了对神经元 B 的兴奋 , 那么在这两个神
经元或其中之一会发生某种生长过程或新陈代谢变化 , 以致神经元 A 作为能使
神经元 B 兴奋的细胞之一 , 它的效能加强了 .” 这个机制称为 赫布理论 ( Hebbian
Theory ) 或 赫布规则 ( Hebbian Rule , 或 Hebb’s Rule ). 如果两个神经元总是相
关联地受到刺激 , 它们之间的突触强度增加 . 这样的学习方法被称为赫布型学习
( Hebbian learning ). Hebb 认为人脑有两种记忆 : 长期记忆 和 短期记忆 . 短期记
忆持续时间不超过一分钟 . 如果一个经验重复足够的次数 , 此经验就可储存在长
期记忆中 . 短期记忆转化为长期记忆的过程就称为 凝固作用 . 人脑中的海马区为
大脑结构凝固作用的核心区域 .
1.5.2 人工神经网络
人工神经网络 是为模拟人脑神经网络而设计的一种计算模型 , 它从结构 、 实
现机理和功能上模拟人脑神经网络 . 人工神经网络与生物神经元类似 , 由多个节
点 ( 人工神经元 ) 互相连接而成 , 可以用来对数据之间的复杂关系进行建模 . 不
同节点之间的连接被赋予了不同的权重 , 每个权重代表了一个节点对另一个节
点的影响大小 . 每个节点代表一种特定函数 ,来自其他节点的信息经过其相应的
权重综合计算 , 输入到一个激活函数中并得到一个新的活性值 ( 兴奋或抑制 ).
从系统观点看 , 人工神经元网络是由大量神经元通过极其丰富和完善的连接而
构成的自适应非线性动态系统 .
虽然我们可以比较容易地构造一个人工神经网络 , 但是如何让人工神经网
络具有学习能力并不是一件容易的事情 . 早期的神经网络模型并不具备学习能
力 . 首个可学习的人工神经网络是 赫布网络 , 采用一种基于赫布规则的无监督学
习方法 . 感知器 是最早的具有机器学习思想的神经网络 , 但其学习方法无法扩展
到多层的神经网络上 . 直到 1980 年左右 , 反向传播算法 才有效地解决了多层神
感知器参见第 3.4 节 .
经网络的学习问题 , 并成为最为流行的神经网络学习算法 .
人工神经网络诞生之初并不是用来解决机器学习问题 .
在本书中 , 人工神经网络主要是作为一种映射函数, 即机器学习中的模型.
由于人工神经网络
可以用作一个通用的函数逼近器 ( 一个两层的神经网络可以逼近任意的函数 ),
因此我们可以将人工神经网络看作一个可学习的函数 , 并将其应用到机器学习
中 . 理论上 , 只要有足够的训练数据和神经元数量 , 人工神经网络就可以学到
很多复杂的函数 . 我们可以把一个人工神经网络塑造复杂函数的能力称为 网络
容量 ( Network Capacity ), 这与可以被储存在网络中的信息的复杂度以及数量
相关 .
1.5.3 神经网络的发展历史
神经网络的发展大致经过五个阶段 .
第一阶段 : 模型提出 第一阶段为 1943 年 ~ 1969 年 , 是神经网络发展的第一个高
潮期 . 在此期间 , 科学家们提出了许多神经元模型和学习规则 .
1943 年 , 心理学家 Warren McCulloch 和数学家 Walter Pitts 最早提出了一
种基于简单逻辑运算的人工神经网络 , 这种神经网络模型称为 MP 模型 , 至此
开启了人工神经网络研究的序幕 . 1948 年 , Alan Turing 提出了一种 “ B 型图
灵机 ”.“ B 型图灵机 ” 可以基于 Hebbian 法则 来进行学习 .
[ Rosenblatt , 1958 ] 提出了一种可以模拟人类感知能力的神经网络模型 , 称为 感知器 ( Percep
tron ), 并提出了一种接近于人类学习过程 ( 迭代 、 试错 ) 的学习算法 .
在这一时期 , 神经网络以其独特的结构和处理信息的方法 , 在许多实际应用
领域 ( 自动控制 、 模式识别等 ) 中取得了显著的成效 .
第二阶段 : 冰河期 第二阶段为 1969 年 ~ 1983 年 , 是神经网络发展的第一个低谷
期 . 在此期间 , 神经网络的研究处于长年停滞及低潮状态 .
1969 年 , Marvin Minsky 出版 《 感知器 》 一书 , 指出了神经网络的两个关键
缺陷 : 一是感知器无法处理 “ 异或 ” 回路问题 ;二是当时的计算机无法支持处理大
型神经网络所需要的计算能力 . 这些论断使得人们对以感知器为代表的神经网
络产生质疑 , 并导致神经网络的研究进入了十多年的 “ 冰河期 ”.
但在这一时期 , 依然有不少学者提出了很多有用的模型或算法 . 1974 年 ,
哈佛大学的 Paul Werbos 发明 反向传播算法 ( BackPropagation , BP ) [ Werbos ,
1974 ] , 但当时未受到应有的重视 . 1980 年 , 福岛邦彦提出了一种带卷积和子采样
操作的多层神经网络 : 新知机 ( Neocognitron ) [ Fukushima , 1980 ] . 新知机的提
出是受到了动物初级视皮层简单细胞和复杂细胞的感受野的启发 . 但新知机并
没有采用反向传播算法 , 而是采用了无监督学习的方式来训练 , 因此也没有引起
足够的重视 .
第三阶段 : 反向传播算法引起的复兴 第三阶段为 1983 年 ~ 1995 年 , 是神经网络
发展的第二个高潮期 . 这个时期中 , 反向传播算法重新激发了人们对神经网络的
兴趣 .
1983 年 , 物理学家 John Hopfield 提出了一种用于 联想记忆 ( Associative
Memory ) 的神经网络 , 称为 Hopfield 网络 . Hopfield 网络在旅行商问题上取得
了当时最好结果 , 并引起了轰动 .
1984 年 , Geoffrey Hinton 提出一种随机化版本
的 Hopfield 网络 , 即 玻尔兹曼机 ( Boltzmann Machine ).
真正引起神经网络第二次研究高潮的是 反向传播算法 . 20 世纪 80 年代中
期 , 一种连接主义模型开始流行 , 即 分布式并行处理 ( Parallel Distributed Pro
cessing , PDP ) 模型 [ McClelland et al. , 1986 ] . 反向传播算法也逐渐成为 PDP 模
型的主要学习算法 . 这时 , 神经网络才又开始引起人们的注意 , 并重新成为新的
研究热点 . 随后 ,
[ LeCun et al. , 1989 ] 将反向传播算法引入了卷积神经网络 , 并在
手写体数字识别上取得了很大的成功 [ LeCun et al. , 1998 ] . 反向传播算法是迄今
最为成功的神经网络学习算法 . 目前在深度学习中主要使用的 自动微分 可以看
作反向传播算法的一种扩展 .
然而 , 梯度消失问题 ( Vanishing Gradient Problem ) 阻碍神经网络的进一
步发展 , 特别是循环神经网络 . 为了解决这个问题 ,
[ Schmidhuber , 1992 ] 采用两
步来训练一个多层的循环神经网络 : 1 ) 通过无监督学习的方式来逐层训练每一
层循环神经网络 , 即预测下一个输入 ;
2 ) 通过反向传播算法进行精调 .
第四阶段 : 流行度降低 第四阶段为 1995 年 ~ 2006 年 , 在此期间 , 支持向量机和
其他更简单的方法 ( 例如线性分类器 ) 在机器学习领域的流行度逐渐超过了神
经网络 .
虽然神经网络可以很容易地增加层数 、 神经元数量 , 从而构建复杂的网络 ,
但其计算复杂性也会随之增长 . 当时的计算机性能和数据规模不足以支持训练
大规模神经网络 . 在 20 世纪 90 年代中期 , 统计学习理论和以支持向量机为代表
的机器学习模型开始兴起 . 相比之下 , 神经网络的理论基础不清晰 、 优化困难 、 可
解释性差等缺点更加凸显 , 因此神经网络的研究又一次陷入低潮 .
第五阶段 : 深度学习的崛起 第五阶段为从 2006 年开始至今 , 在这一时期研究
者逐渐掌握了训练深层神经网络的方法 , 使得神经网络重新崛起 .
[ Hinton et al. , 2006 ] 通过逐层预训练来学习一个深度信念网络 ,
并将其权重作为一个多层前馈神经网络的初始化权重, 再用反向传播算法进行精调 . 这
种 “ 预训练 + 精调 ” 的方式可以有效地解决深度神经网络难以训练的问题 . 随
着深度神经网络在语音识别 [ Hinton et al. , 2012 ] 和图像分类 [ Krizhevsky et al. ,
2012 ] 等任务上的巨大成功 , 以神经网络为基础的 深度学习 迅速崛起 . 近年来 , 随
着大规模并行计算以及 GPU 设备的普及 , 计算机的计算能力得以大幅提高 . 此
外 , 可供机器学习的数据规模也越来越大 . 在强大的计算能力和海量的数据规模
支持下 , 计算机已经可以端到端地训练一个大规模神经网络 , 不再需要借助预训
练的方式 . 各大科技公司都投入巨资研究深度学习 , 神经网络迎来第三次高潮 .
1.6 本书的知识体系
本书主要对神经网络和深度学习所涉及的知识提出一个较全面的基础性介
绍 . 本书的知识体系如图 1.6 所示 , 可以分为三大块 : 机器学习 、 神经网络和概率图
模型 .
本书的知识体系在各章节中的安排如下 :
机器学习 机器学习可以分为监督学习 、 无监督学习和强化学习 . 第 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 ) Theano : 由蒙特利尔大学的 Python 工具包 , 用来高效地定义、 优
化和计算张量数据的数学表达式 . Theano 可以透明地使用 GPU 和高效的符号
微分 .
( 2 ) Caffe : 由加州大学伯克利分校开发的针对卷积神经网络的计算框架 ,
主要用于计算机视觉 . Caffe 用 C++ 和 Python 实现 , 但可以通过配置文件来实
现所要的网络结构 , 不需要编码 .
Caffe2 已经被并入PyTorch中 .
( 3 ) TensorFlow : 由 Google 公司开发的深度学习框架 , 可以在任意具
备 CPU 或者 GPU 的设备上运行 . TensorFlow 的计算过程使用数据流图来表示 .
TensorFlow 的名字来源于其计算过程中的操作对象为多维数组 , 即张量 ( Ten
sor ). TensorFlow 1.0 版本采用静态计算图 , 2.0 版本之后也支持动态计算图 .
( 4 ) PyTorch : 由 Facebook 、 NVIDIA 、 Twitter 等公司开发维护的深度学
习框架 , 其前身为 Lua 语言的 Torch . PyTorch 也是基于动态计算图的框架 , 在
需要动态改变神经网络结构的任务中有着明显的优势 .
( 5 ) 飞桨 ( PaddlePaddle ) : 百度开发的一个高效和可扩展的深度学习框
架 , 同时支持动态图和静态图 . 飞桨提供强大的深度学习并行技术 , 可以同时支
持稠密参数和稀疏参数场景的超大规模深度学习并行训练 , 支持千亿规模参数
和数百个节点的高效并行训练 .
( 6 ) Chainer : 一个最早采用动态计算图的深度学习框架 , 其核心开发
团队为来自日本的一家机器学习创业公司 Preferred Networks . 和 Tensorflow 、
Theano 、 Caffe 等框架使用的静态计算图相比 , 动态计算图可以在运行时动态地
构建计算图 , 因此非常适合进行一些复杂的决策或推理任务 .
( 7 ) MXNet : 由亚马逊 、 华盛顿大学和卡内基 · 梅隆大学等开发维护的
深度学习框架 . MXNet 支持混合使用符号和命令式编程来最大化效率和生产率 ,
并可以有效地扩展到多个 GPU 和多台机器 .
在这些基础框架之上 , 还有一些建立在这些框架之上的高度模块化的神经
网络库 , 使得构建一个神经网络模型就像搭积木一样容易 . 其中比较有名的模块
化神经网络框架有 : 1 ) 基于 TensorFlow 和 Theano 的 Keras ; 2 ) 基于 Theano
的 Lasagne ;
目前 , Keras 已经被集成到TensorFlow 2.0 版本中.
3 ) 面向图结构数据的 DGL .
1.8 总结和深入阅读
要理解深度学习的意义或重要性 , 就得从机器学习或者是人工智能的更广
的视角来分析 . 在传统机器学习中 , 除了模型和学习算法外 , 特征 或 表示 也是影
响最终学习效果的重要因素 , 甚至在很多的任务上比算法更重要 . 因此 , 要开发
一个实际的机器学习系统 , 人们往往需要花费大量的精力去尝试设计不同的特
征以及特征组合 , 来提高最终的系统能力 , 这就是所谓的 特征工程 问题 .
如何自动学习有效的数据表示成为机器学习中的关键问题 . 早期的表示学
习方法 , 比如特征抽取和特征选择 , 都是人工引入一些主观假设来进行学习的 .
这种表示学习不是端到端的学习方式 , 得到的表示不一定对后续的机器学习任
务有效 . 而深度学习是将表示学习和预测模型的学习进行端到端的学习 , 中间不
需要人工干预 . 深度学习所要解决的问题是 贡献度分配问题 , 而神经网络恰好是
解决这个问题的有效模型 . 套用马克思的一句名言 ,“ 金银天然不是货币 , 但货币
天然是金银 ”, 我们可以说 , 神经网络天然不是深度学习 , 但深度学习天然是神经
网络 .
目前 , 深度学习主要以 神经网络 模型为基础 , 研究如何设计模型结构 , 如何
有效地学习模型的参数 , 如何优化模型性能以及在不同任务上的应用等 . [ Ben
gio et al. , 2013 ] 给出了一个很好的表示学习综述 . 若希望全面了解人工神经网络
和深度学习的知识 , 可以参考 《 Deep Learning 》 [ Goodfellow et al. , 2016 ] 以及文
献 [ Bengio , 2009 ] . 关于神经网络的历史可以参考文献 [ Anderson et al. , 2000 ] .
斯坦福大学的 CS231n 1 和 CS224n 2 是两门非常好的深度学习入门课程 , 分别从
计算机视觉和自然语言处理两个角度来讲授深度学习的基础知识和最新进展 .
深度学习的研究进展非常迅速 . 因此 , 最新的文献一般会发表在学术会议
上 . 和深度学习相关的学术会议主要有 :
( 1 ) 国际表示学习会议 3 ( International Conference on Learning Repre
sentations , ICLR ): 主要聚焦于深度学习 .
( 2 ) 神经信息处理系统年会 4 ( Annual Conference on Neural Informa
tion Processing Systems , NeurIPS ): 交叉学科会议 , 但偏重于机器学习 . 主要包
括神经信息处理 、 统计方法 、 学习理论以及应用等 .
( 3 ) 国际机器学习会议 5 ( International Conference on Machine Learn
ing , ICML ): 机器学习顶级会议 , 深度学习作为近年来的热点 , 也占据了 ICML
的很大比例 .
( 4 ) 国际人工智能联合会议 1 ( International Joint Conference on Artifi
cial Intelligence , IJCAI ): 人工智能领域最顶尖的综合性会议 . 历史悠久 , 从
1969 年开始举办 .
( 5 ) 美国人工智能协会年会 2 ( AAAI Conference on Artificial Intelligence ,
AAAI ): 人工智能领域的顶级会议 , 每年二月份左右召开 , 地点一般在北美 .
另外 , 人工智能的很多子领域也都有非常好的专业学术会议 . 在计算机视
觉领域 , 有计算机视觉与模式识别大会 ( IEEE Conference on Computer Vision
and Pattern Recognition , CVPR ) 和国际计算机视觉会议 ( International Com
ference on Computer Vision , ICCV ). 在自然语言处理领域 , 有计算语言学年
会 ( Annual Meeting of the Association for Computational Linguistics , ACL )
和自然语言处理实证方法大会 ( Conference on Empirical Methods in Natural
Language Processing , EMNLP ) 等 .
更多推荐
所有评论(0)