电子版:https://nndl.github.io/
B站视频:https://www.bilibili.com/video/BV1P3411u7c1
神经网络与深度学习
第一部分 机器学习基础
1. 绪论
1.1 人工智能
- 图灵测试:一个人在不接触对方的情况下,通过一种特殊的方式,和对方进行一系列的问答。如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机,那么就可以认为这个计算机是智能的
- 人工智能的诞生:1956年的达特茅斯(Dartmouth)会议
- 流派:符号主义、连接主义、行为主义
- 发展历史:推理期、知识期、学习期
1.2 机器学习
机器学习 ≈ 构建一个映射函数
1.准备数据(训练数据)
2.学习(相关性模型)
3.测试(测试数据)
1.3 表示学习
- 一般流程:原始数据->数据预处理->特征提取->特征转换->预测
- 浅层学习:不涉及特征学习,其特征主要靠人工经验或特征转换方法来抽取
- 语义鸿沟:底层特征 VS 高层语义
人们对文本、图像的理解无法从字符串或者图像的底层特征直接获得 - 局部表示vs分布式表示
局部表示:离散表示、符号表示、One-Hot向量
分布式表示:压缩、低维、稠密向量、用O(N)个参数表示 O(2k)区间(k为非0参数,k<N)
1.4 深度学习
深度学习=表示学习+决策学习
通过构建具有一定“深度”的模型,可以让模型来自动学习好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测或识别的准确性
- 贡献度分配问题:一个系统中不同的组件或其参数对最终系统输出结果的贡献或影响
- 端到端学习:在学习过程中不进行分模块或分阶段训练,直接优化任务的总体目标
1.5 神经网络
-
人脑神经网络
-
人工神经网络
- 人工神经元
- 主要内容:神经元的激活规则、网络的拓扑结构、学习算法
- 人工神经元
-
神经网络发展史
- 第一阶段:模型提出
- 第二阶段:冰河期
- 第三阶段:反向传播算法引起的复兴
- 第四阶段:流行度降低
- 第五阶段:深度学习的崛起
2. 机器学习概述
机器学习是对能通过经验自动改进的计算机算法的研究
通俗地讲,机器学习(Machine Learning,ML)就是让计算机从数据中进行自动学习,得到某种知识(或规律)
2.1 基本概念
- 机器学习 ≈ 构建一个映射函数
- 将一个标记好特征以及标签的芒果看作一个样本(Sample),也经常称为示例(Instance)
- 一组样本构成的集合称为数据集(Data Set). 一般将数据集分为两部分:训练集和测试集.训练集(Training Set)中的样本是用来训练模型的,也叫训练样本(Training Sample),而测试集(Test Set)中的样本是用来检验模型好坏的,也叫测试样本(Test Sample)
- 机器学习:通过算法使得机器能从大量数据中学习规律从而对新的样本做决策
2.2 机器学习的三个基本要素
2.2.1 模型
- 线性模型
线性模型的假设空间为一个参数化的线性函数族,即
- 非线性模型
广义的非线性模型可以写为多个非线性基函数𝜙(𝒙)的线性组合
2.2.2 学习准则
模型𝑓(𝒙; 𝜃)的好坏可以通过期望风险(Expected Risk)ℛ(𝜃)来衡量,其定义为
其中𝑝𝑟(𝒙, 𝑦)为真实的数据分布,ℒ(𝑦, 𝑓(𝒙; 𝜃))为损失函数,用来量化两个变量之间的差异
- 损失函数
- 0-1损失函数
- 平方损失函数
- 0-1损失函数
- 风险最小化准则
- 经验风险最小化
经验风险是在训练集上的平均损失
寻找一个参数θ∗ ,使得经验风险函数最小化
- 结构风险最小化
为了解决过拟合问题,在经验风险最小化的基础上再引入参数的正则化(Regularization)来限制模型能力,使其不要过度地最小化经验风险
过拟合和欠拟合示例
- 经验风险最小化
2.2.3 优化算法
在确定了训练集 𝒟、假设空间 ℱ 以及学习准则后,如何找到最优的模型𝑓(𝒙, 𝜃∗) 就成了一个最优化(Optimization)问题.机器学习的训练过程其实就是最优化问题的求解过程
- 梯度下降法
首先初始化参数𝜃0,然后按下面的迭代公式来计算训练集𝒟 上风险函数的最小值
- 提前停止
使用一个验证集(Validation Dataset)来测试每一次迭代的参数在验证集上是否最优。如果在验证集上的错误率不再下降,就停止迭代
- 随机梯度下降法
为了减少每次迭代的计算复杂度,在每次迭代时只采集一个样本,计算这个样本损失函数的梯度并更新参数
(为了防止某些样本随机选择不到,所以其实是先随机排序,再按顺序选择样本)
- 小批量梯度下降法
小批量梯度下降法是批量梯度下降和随机梯度下降的折中.每次迭代时随机选取一小部分训练样本来计算梯度并更新参
数,这样既可以兼顾随机梯度下降法的优点,也可以提高训练效率
2.3 机器学习的简单示例——线性回归
我们希望能够学习一个最优的线性回归的模型参数w
主要有四种参数估计方法(优化方法)
2.3.1 经验风险最小化
也称最小二乘法(在古代汉语中“平方”称为“二乘”)
学习准则:
2.3.2 结构风险最小化
结构风险最小化又称岭回归
2.3.3 *最大似然估计
2.3.4 *最大后验估计
2.4 *偏差-方差分解
其中,第一项为偏差,第二项为方差
- 机器学习模型的四种偏差和方差组合情况:
- 机器学习模型的期望错误、偏差和方差随复杂度的变化情况:
2.5 机器学习算法的类型
- 监督学习
目标是建模样本的特征 𝒙 和标签 𝑦 之间的关系,回归、分类等 - 无监督学习
从不包含目标标签的训练样本中自动学习到一些有价值的信息,聚类等 - 强化学习
通过与环境交互来学习
2.6 数据的特征表示
2.7 评价指标
- 准确率、错误率、精确率(查准率)、召回率(查全率)
- 交叉验证:把原始数据集平均分为𝐾 组不重复的子集,每次选 𝐾 − 1 组子集作为训练集,剩下的一组子集作为验证集.这样可以进行𝐾 次试验并得到𝐾 个模型,将这𝐾 个模型在各自验证集上的错误率的平均作为分类器的评价
2.8 理论和定理
2.8.1 *PAC学习理论
根据大数定律,当训练集大小|D|趋向无穷大时,泛化错误趋向于0,即经验风险趋近于期望风险
PAC学习
2.8.2 没有免费午餐定理
No Free Lunch Theorem,NFL
对于基于迭代的最优化算法,不存在某种算法对所有问题(有限的搜索空间内)都有效。如果一个算法对某些问题有效,那么它一定在另外一些问题上比纯随机搜索算法更差。
2.8.3 奥卡姆剃刀原理
如无必要,勿增实体
2.8.4 丑小鸭定理
丑小鸭与白天鹅之间的区别和两只白天鹅之间的区别一样大
2.8.5 归纳偏置
在机器学习中,很多学习算法经常会对学习的问题做一些假设,这些假设就称为归纳偏置(Inductive Bias)
3.线性模型
包括回归与分类问题,分类问题需要引入一个非线性的决策函数来预测输出目标
3.1 线性判别函数和决策边界
3.1.1 二分类
在二分类问题中,我们只需要一个线性判别函数 𝑓(𝒙; 𝒘) = 𝒘T𝒙 + 𝑏.特征空间 ℝ𝐷 中所有满足 𝑓(𝒙; 𝒘) = 0 的点组成一个分割超平面(Hyperplane),称为决策边界(Decision Boundary)或决策平面(Decision Surface).决策边界将特征空间一分为二,划分成两个区域,每个区域对应一个类别。
对于二分类问题,最直接的损失函数为0-1损失函数
3.1.2 多分类
多分类一般需要多个线性判别函数,但设计这些判别函数有很多种方式
- “一对其余”
把多分类问题转换为 𝐶 个“一对其余”的二分类问题.这种方式共需要 𝐶 个判别函数,其中第 𝑐 个判别函数 𝑓𝑐 是将类别 𝑐 的样本和不属于类别𝑐的样本分开 - “一对一”
把多分类问题转换为 𝐶(𝐶 − 1)/2 个“一对一”的二分类问题.这种方式共需要𝐶(𝐶 − 1)/2个判别函数,其中第(𝑖, 𝑗)个判别函数是把类别𝑖 和类别𝑗 的样本分开. - “argmax”
改进的“一对其余”方式,“argmax”方式的预测函数定义为:
3.2 Logistic回归
在Logistic回归中,使用Logistic函数来作为激活函数,也就是sigmoid函数
Logistic 回归采用交叉熵作为损失函数,并使用梯度下降法来对参数进行优化
- 风险函数
ℛ(𝒘) =
- 梯度
- 迭代更新
3.3 Softmax回归
Softmax回归是Logistic回归在多分类问题上的推广
- Softmax函数
- 风险函数
- 梯度
- 迭代更新
3.4 感知器
感知器是一种简单的两类线性分类模型,其分类准则如下
感知器学习算法试图找到一组参数𝒘∗,使得对于每个样本(𝒙(𝑛), 𝑦(𝑛))有
- 学习算法
感知器的学习算法是一种错误驱动的在线学习算法
先初始化一个权重向量w←0(通常是全零向量)
每次分错一个样本 (𝒙, 𝑦)时,即𝑦𝒘T𝒙 < 0,就用这个样本来更新权重
根据感知器的学习策略,可以反推出感知器的损失函数为
- 感知器的学习过程
- 感知器的收敛性
证明:
3.5 *支持向量机
支持向量机示例:
3.6 损失函数对比
-
线性分类模型小结
-
编程练习
https://github.com/nndl/exercise/tree/master/chap3_softmax_regression
第二部分 基础模型
4.前馈神经网络
神经网络最早是作为一种主要的连接主义模型
引入误差反向传播来改进其学习能力之后,神经网络也越来越多地应用在各种机器学习任务上
4.1 神经元
人工神经元(Artificial Neuron),简称神经元(Neuron),是构成神经网络的基本单元,其主要是模拟生物神经元的结构和特性,接收一组输入信号并产生输出
神经元的净输入经过激活函数得到活性值
- 激活函数的性质
连续并可导(允许少数点上不可导)的非线性函数;
激活函数及其导函数要尽可能的简单;
激活函数的导函数的值域要在一个合适的区间内。
4.1.1 Sigmoid型函数
Sigmoid 型函数是指一类 S 型曲线函数,为两端饱和函数
常用的 Sigmoid型函数有Logistic函数和Tanh函数
- Logistic函数
- Tanh函数
对比:
4.1.2 ReLU函数
ReLU(Rectified Linear Unit,修正线性单元)是目前深度神经网络中经常使用的激活函数
ReLU实际上是一个斜坡(ramp)函数
- 死亡ReLU问题
在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个 ReLU 神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活
- 带泄露的ReLU
Leaky ReLU
- 带参数的ReLU
Parametric ReLU,PReLU
PReLU 可以允许不同神经元具有不同的参数
- ELU函数
Exponential Linear Unit,指数线性单元
- softplus函数
ReLU函数对比:
4.1.3 Swish函数
Swish函数是一种自门控(Self-Gated)激活函数
Swish函数不同超参数β示例:
4.1.4 GELU函数
Gaussian Error Linear Unit,高斯误差线性单元
也是一种通过门控机制来调整其输出值的激活函数
其中P(X ≤ x)是高斯分布N(µ,σ 2 )的累积分布函数,其中µ,σ为超参数,一般设µ = 0,σ = 1即可
常见激活函数及其导数:
4.2 网络结构
通过一定的连接方式或信息传递方式进行协作的神经元可以看作一个网络,就是神经网络
4.2.1 前馈网络
前馈网络中各个神经元按接收信息的先后分为不同的组;每一组可以看作一个神经层;每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元;整个网络中的信息是朝一个方向传播,没有反向的信息传播
可以用一个有向无环路图表示
前馈网络包括全连接前馈网络和卷积神经网络等
4.2.2 记忆网络
网络中的神经元不但可以接收其他神经元的信息,也可以接收自己的历史信息
可用一个有向循环图或无向图来表示
记忆网络包括循环神经网络、Hopfield 网络、玻尔兹曼机、受限玻尔兹曼机等
4.2.3 图网络
图网络是定义在图结构数据上的神经网络;图中每个节点都由一个或一组神经元构成;节点之间的连接可以是有向的,也可以是无向的;每个节点可以收到来自相邻节点或自身的信息
4.3 前馈神经网络
各神经元分别属于不同的层,层内无连接;
相邻两层之间的神经元全部两两连接(全连接神经网络);
整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示
前馈神经网络通过不断迭代下面公式进行信息传播:
逐层进行前馈计算
4.3.1 通用近似定理
前馈神经网络具有很强的拟合能力,常见的连续非线性函数都可以用前馈神经网络来近似
4.3.2 应用到机器学习
神经网络可以作为一个“万能”函数来使用,可以用来进行复杂的特征转换,或逼近一个复杂的条件分布
𝜙(𝒙)为神经网络,g(·)为分类器
如果分类器 𝑔(⋅) 为 Logistic 回归分类器或 Softmax 回归分类器,那么 𝑔(⋅) 也可以看成是网络的最后一层
4.3.3 参数学习
采用交叉熵损失函数,对于样本(x,y),其损失函数为
给定训练集为D = {(x(n),y(n) )}n=1N ,将每个样本x(n)输入给前馈神经网络,得到网络输出为 y^(n),其在数据集D上的结构化风险函数为
采用梯度下降法更新权重
4.4 *反向传播算法
通过链式法则计算损失函数关于每个参数的导数
4.5 自动梯度计算
自动微分是利用链式法则来自动计算一个复合函数的梯度
- 自动微分示例
当 𝑥 = 1, 𝑤 = 0, 𝑏 = 0 时,计算图如下
复合函数𝑓(𝑥; 𝑤, 𝑏)的6个基本函数及其导数
- 前向模式和反向模式
反向模式和反向传播的计算梯度的方式相同 - 静态计算图和动态计算图
静态计算图是在编译时构建计算图,计算图构建好之后在程序运行时不能改变;
动态计算图是在程序运行时动态构建
4.6 优化问题
4.6.1 非凸优化问题
4.6.2梯度消失问题
由于 Sigmoid 型函数的饱和性,饱和区的导数更是接近于 0.这样,误差经过每一层传递都会不断衰减.当网络层数很深时,梯度就会不停衰减,甚至消失,使得整个网络很难训练.这就是所谓的梯度消失问题
5.卷积神经网络
一切都应该尽可能地简单,但不能过于简单.
——艾伯特·爱因斯坦
全连接前馈神经网络存在的问题:
- 参数太多
- 难以提取局部不变性特征
卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络
5.1 卷积
5.1.1 卷积的定义
- 一维卷积
给定一个输入信号序列x和滤波器(卷积核)w,卷积的输出为:
一维卷积示例:
- 二维卷积
二维卷积示例:
5.1.2 互相关
互相关(Cross-Correlation)是一个衡量两个序列相关性的函数,通常是用滑动窗口的点积计算来实现
在神经网络中使用卷积是为了进行特征抽取,卷积核是否进行翻转和其特征抽取的能力无关.特别是当卷积核是可学习的参数时,卷积和互相关在能力上是等价的
简单来说,卷积只是为了参数学习,参数下标顺序是无所谓的
5.1.3 卷积的变种
步长(Stride)是指卷积核在滑动时的时间间隔;
零填充(Zero Padding)是在输入向量两端进行补零
一般常用的卷积有以下三类:
- 窄卷积:步长 𝑇 = 1 ,两端不补零 𝑃 = 0 ,卷积后输出长度为 𝑀 − 𝐾 + 1
- 宽卷积:步长 𝑇 = 1 ,两端补零 𝑃 = 𝐾 − 1 ,卷积后输出长度 𝑀 + 𝐾 − 1
- 等宽卷积:步长 𝑇 = 1 ,两端补零 𝑃 =(𝐾 − 1)/2 ,卷积后输出长度 𝑀
5.2 卷积神经网络
卷积神经网络一般由卷积层、汇聚层和全连接层构成
5.2.1 用卷积来代替全连接
如果采用卷积来代替全连接,第𝑙 层的净输入𝒛(𝑙) 为第𝑙 − 1 层活性值 𝒂(𝑙−1)和卷积核𝒘(𝑙) ∈ ℝ𝐾 的卷积
卷积层的性质:局部连接;权重共享
5.2.2 卷积层
由于卷积网络主要应用在图像处理上,而图像为二维结构,因此为了更充分地利用图像的局部信息,通常将神经元组织为三维结构的神经层,其大小为高度𝑀×宽度𝑁×深度𝐷,由𝐷 个𝑀 × 𝑁 大小的特征映射构成,特征映射其实就是通道
卷积层的三维结构表示如下
(输入:MxNxD; 输出:M’xN’xP; 卷积核:UxVxPxD)
卷积计算过程如下
激活函数一般使用ReLU函数
卷积层中从输入特征映射组𝑿 到输出特征映射𝒀𝑝 的计算示例如下
5.2.3 汇聚层
汇聚层(Pooling Layer)也叫子采样层(Subsampling Layer),其作用是进行特征选择,降低特征数量,从而减少参数数量
将输入的通道组的每一个通道划分为很多区域,可以重叠也可以不重叠,对每个区域进行下采样(Down Sampling)得到一个值,作为这个区域的概括
常用的汇聚函数:
-
最大汇聚
-
平均汇聚
汇聚层中最大汇聚过程示例
5.2.4 卷积网络的整体结构
一个典型的卷积网络是由卷积层、汇聚层、全连接层交叉堆叠而成
趋向于小卷积、大深度、全卷积
常用的卷积网络整体结构如下
5.3 *参数学习
通过误差反向传播算法来进行参数学习
使用链式法则来计算梯度
- 汇聚层
- 卷积层
5.4 几种典型的卷积神经网络
5.4.1 LeNet-5
网络结构如下:
其中C3层卷积层用一个连接表来定义输入和输出通道之间的依赖关系,共使用 60 个 5 × 5 的卷积核
5.4.2 AlexNet
网络结构如下
因为网络规模超出了当时的单个GPU的内存限制,AlexNet将网络拆为两半,分别放在两个GPU上,GPU间只在某些层(比如第3层)进行通信
5.4.3 Inception网络
在Inception 网络中,一个卷积层包含多个不同大小的卷积操作,称为Inception 模块;Inception网络是由有多个Inception模块和少量的汇聚层堆叠而成
- Inception v1 的模块结构
- Inception模块 v3
使用两层3 × 3的卷积来替换v1中的5 × 5的卷积;使用连续的𝐾 × 1和1 × 𝐾 来替换𝐾 × 𝐾 的卷积
5.4.4 残差网络
残差网络(Residual Network,ResNet)是通过给非线性的卷积层增加直连边的方式来提高信息的传播效率
残差单元由多个级联的(等宽)卷积层和一个跨层的直连边组成,再经过ReLU激活后得到输出
残差网络就是将很多个残差单元串联起来构成的一个非常深的网络
5.5 其他卷积方式
5.5.1 转置卷积
低维特征映射到高维特征
步长𝑆 = 1,无零填充𝑃 = 0的二维卷积和其对应的转置卷积示例
- 微步卷积
可以通过减少转置卷积的步长 𝑆 < 1来实现上采样操作,大幅提高特征维数
为了实现微步卷积,我们可以在输入特征之间插入0来间接地使得步长变小
步长𝑆 = 2,无零填充𝑃 = 0的二维卷积和其对应的转置卷积示例
5.5.2 空洞卷积
空洞卷积(Atrous Convolution)是一种不增加参数数量,同时增加输出单元感受野的一种方法
空洞卷积通过给卷积核插入“空洞”来变相地增加其大小
空洞卷积示例
6.循环神经网络
循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构
6.1 给网络增加记忆能力
为了处理时序数据,需要让网络具有短期记忆能力
6.1.1 延时神经网络
Time Delay Neural Network,TDNN
建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等),这样,前馈网络就有了短期记忆的能力
示例如下
6.1.2 有外部输入的非线性自回归模型
自回归模型(AutoRegressive Model,AR)是统计学上常用的一类时间序列模型,用一个变量𝒚𝑡 的历史信息来预测自己
有外部输入的非线性自回归模型(Nonlinear AutoRegressive with Exogenous Inputs Model,NARX)是自回归模型的扩展
6.1.3 循环神经网络
循环神经网络(Recurrent Neural Network,RNN)通过使用带自反馈的神经元,能够处理任意长度的时序数据
循环神经网络通过下面公式更新带反馈边的隐藏层的活性值𝒉t
6.2 简单循环网络
在两层前馈神经网络的基础上,简单循环网络增加了从隐藏层到隐藏层的反馈连接
简单循环网络在时刻𝑡 的更新公式为
按时间展开的循环神经网络如下所示
- *一个完全连接的循环网络是任何非线性动力系统的近似器
- 图灵完备
一个完全连接的循环神经网络可以近似解决所有的可计算问题
6.3 应用到机器学习
6.3.1 序列到类别模式
输入为序列,输出为类别
正常模式:将 𝒉𝑇 看作整个序列的最终表示
按时间进行平均采样模式:对整个序列的所有状态进行平均,并用这个平均状态来作为整个序列的表示
6.3.2 同步的序列到序列模式
同步的序列到序列模式主要用于序列标注(Sequence Labeling)任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同
6.3.3 异步的序列到序列模式
也称为编码器-解码器(Encoder-Decoder)模型,先编码后解码
6.4 *参数学习
循环神经网络的参数可以通过梯度下降方法来进行学习
时刻𝑡 的损失函数
总损失函数
-
随时间反向传播算法
BackPropagation Through Time,BPTT-
计算偏导数
误差项随时间反向传播算法示例
-
参数梯度
整个序列的损失函数ℒ关于参数𝑼 的梯度
-
6.5 *长程依赖问题
循环神经网络在学习过程中的主要问题是由于梯度消失或爆炸问题,很难建模长时间间隔(Long Range)的状态之间的依赖关系
- 改进方法
循环边改为线性依赖关系
增加非线性
类似于残差网络
6.6 基于门控的循环神经网络
为了改善RNN中的长程依赖问题,引入了门控机制控制信息的积累速度,包括有选择地加入新的信息,并有选择地遗忘之前累积的信息
6.6.1 长短期记忆网络
Long Short-Term Memory Network,LSTM
-
新的内部状态
LSTM网络引入一个新的内部状态(internal state)𝒄𝑡 ∈ ℝ𝐷 专门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态𝒉𝑡 ∈ ℝ𝐷
在每个时刻𝑡,LSTM网络的内部状态𝒄𝑡 记录了到当前时刻为止的历史信息 -
门控机制
LSTM网络中的“门”是一种“软”门,取值在 (0, 1)之间,表示以一定的比例允许信息通过- 遗忘门𝒇𝑡 控制上一个时刻的内部状态𝒄𝑡−1 需要遗忘多少信息
- 输入门𝒊𝑡 控制当前时刻的候选状态 ̃ 𝒄𝑡 有多少信息需要保存
- 输出门 𝒐𝑡 控制当前时刻的内部状态 𝒄𝑡 有多少信息需要输出给外部状态𝒉t
LSTM网络的循环单元结构:
计算公式:
-
记忆
在简单循环网络中,隐状态h每个时刻都会被重写,因此可以看作一种短期记忆(Short-Term Memory)
长期记忆(Long-Term Memory)可以看作网络参数
记忆单元 𝒄 中保存信息的生命周期要长于短期记忆 𝒉,但又远远短于长期记忆,因此称为长短期记忆(Long Short-Term Memory)
长短期记忆是指长的“短期记忆”
6.6.2 LSTM网络的各种变体
目前主流的 LSTM 网络用三个门来动态地控制内部状态应该遗忘多少历史信息,输入多少新信息,以及输出多少信息。我们可以对门控机制进行改进并获得LSTM网络的不同变体
- 无遗忘门的 LSTM 网络
记忆单元 𝒄 会不断增大。当输入序列的长度非常大时,记忆单元的容量会饱和,从而大大降低LSTM模型的性能 - peephole 连接
三个门不但依赖于输入 𝒙𝑡 和上一时刻的隐状态𝒉𝑡−1,也依赖于上一个时刻的记忆单元𝒄𝑡−1
- 耦合输入门和遗忘门
6.6.3 门控循环单元网络
Gated Recurrent Unit,GRU
比LSTM更简单,可视为LSTM的一种变体,相较于LSTM能降低过拟合风险
GRU网络的循环单元结构:
重置门:
更新门:
候选状态:
GRU网络的状态更新方式为:
6.7 深层循环神经网络
我们可以增加循环神经网络的深度从而增强循环神经网络的能力
6.7.1 堆叠循环神经网络
将多个循环网络堆叠起来,称为堆叠循环神经网络(Stacked Recurrent Neural Network,SRNN)
按时间展开的堆叠循环神经网络:
6.7.2 双向循环神经网络
增加一个按照时间的逆序来传递信息的网络层,来增强网络的能力
双向循环神经网络(Bidirectional Recurrent Neural Network,Bi-RNN)由两层循环神经网络组成,它们的输入相同,只是信息传递的方向不同
按时间展开的双向循环神经网络:
6.8 扩展到图结构
6.8.1 递归神经网络
递归神经网络(Recursive Neural Network,RecNN)是循环神经网络在有向无循环图上的扩展
- 一般结构
- 退化结构
退化为循环神经网络
6.8.2 图神经网络
图神经网络(Graph Neural Network,GNN)是将消息传递的思想扩展到图结构数据上的神经网络
图中每个节点 𝑣 都用一组神经元来表示其状态 𝒉(𝑣),初始状态可以为节点 𝑣的输入特征𝒙(𝑣);每个节点可以收到来自相邻节点的消息,并更新自己的状态
7.网络优化与正则化
优化问题:神经网络的损失函数是一个非凸函数,找到全局最优解通常比较困难;深度神经网络的参数通常非常多,训练数据也比较大;存在梯度消失与梯度爆炸问题
泛化问题:容易过拟合,需要通过一定的正则化方法来改进网络的泛化能力
7.1 网络优化
网络优化是指寻找一个神经网络模型来使得经验(或结构)风险最小化的过程,风险最小化是一个非凸优化问题
7.1.1 网络结构多样性
由于网络结构的多样性,我们很难找到一种通用的优化方法;不同优化方法在不同网络结构上的表现也有比较大的差异;神经网络超参数一般也比较多,难以优化
7.1.2 高维变量的非凸优化
对于低维空间来说,主要是存在一些局部最优点,基于梯度下降的优化方法可能陷入局部最优点,如何初始化参数以及逃离局部最优点,这是低维变量的非凸优化问题
深度神经网络的参数非常多,其参数学习是在非常高维空间中的非凸优化问题
-
鞍点
鞍点(Saddle Point)的梯度是0,但是在一些维度上是最高点,在另一些维度上是最低点
在高维空间中大部分驻点都是鞍点
随机梯度下降对于高维空间中的非凸优化问题十分重要,通过在梯度方向上引入随机性,可以有效地逃离鞍点 -
平坦最小值
深度神经网络的参数非常多,并且有一定的冗余性,这使得每单个参数对最终损失的影响都比较小,因此会导致损失函数在局部最小解附近通常是一个平坦的区域,称为平坦最小值(Flat Minima)
当一个模型收敛到一个平坦的局部最小值时,其鲁棒性会更好;具备良好泛化能力的模型通常应该是鲁棒的,因此理
想的局部最小值应该是平坦的 -
局部最小解的等价性
在非常大的神经网络中,大部分的局部最小解是等价的,网络规模很大时,陷入局部最小值的概率会很低
7.1.3 神经网络优化的改善方法
改善神经网络优化的目标是找到更好的局部最小值和提高优化效率
- 使用更有效的优化算法来提高梯度下降优化方法的效率和稳定性
- 使用更好的参数初始化方法、数据预处理方法来提高优化效率
- 修改网络结构来得到更好的优化地形(Optimization Landscape)
- 使用更好的超参数优化方法
7.2 优化算法
7.2.1 小批量梯度下降
训练数据规模较大时,梯度下降效率很低,因此,在训练深度神经网络时,经常使用小批量梯度下降法(Mini-Batch Gradient Descent)
每次选取K个训练样本,计算偏导数
K为批量大小
定义梯度
更新参数
7.2.2 批量大小选择
一般而言,批量大小不影响随机梯度的期望,但是会影响随机梯度的方差
学习率通常要随着批量大小的增大而相应地增大
线性缩放规则(Linear Scaling Rule):当批量大小增加𝑚倍时,学习率也增加𝑚倍
在MNIST数据集上批量大小对损失下降的影响如下:
7.2.3 *学习率调整
-
学习率衰减
Learning Rate Decay 这里的衰减方式设置为按迭代次数进行衰减- 分段常数衰减(Piecewise Constant Decay)/ 阶梯衰减(Step Decay):每经过 𝑇1, 𝑇2, ⋯ , 𝑇𝑚 次迭代将学习率衰减为原来的 𝛽1, 𝛽2, ⋯ , 𝛽𝑚 倍
- 逆时衰减(Inverse Time Decay)
- 指数衰减(Exponential Decay)
- 自然指数衰减(Natural Exponential Decay)
- 余弦衰减(Cosine Decay)
不同学习率衰减方法的比较
-
学习率预热
为了提高训练稳定性,在最初几轮迭代时,采用比较小的学习率,等梯度下降到一定程度后再恢复到初始的学习率,这种方法称为学习率预热(Learning Rate Warmup)
逐渐预热:
-
*周期性学习率调整
为了使得梯度下降法能够逃离鞍点或尖锐最小值,一种经验性的方式是在训练过程中周期性地增大学习率- 循环学习率
Cyclic Learning Rate 让学习率在一个区间内周期性地增大和缩小,通常可以使用线性缩放来调整学习率,称为三角循环学习率(Triangular Cyclic Learning Rate)
- 带热重启的随机梯度下降
Stochastic Gradient Descent with Warm Restarts,SGDR 学习率每间隔一定周期后重新初始化为某个预先设定
值,然后逐渐衰减
- 循环学习率
-
*自适应学习率
根据不同参数的收敛情况分别设置学习率- AdaGrad算法
- RMSprop算法
- AdaDelta算法
7.2.4 *梯度估计修正
随机梯度下降方法中每次迭代的梯度估计和整个训练集上的最优梯度并不一致,具有一定的随机性
通过使用最近一段时间内的平均梯度来代替当前时刻的随机梯度来作为参数更新的方向,从而提高优化速度
- 动量法
动量法(Momentum Method)是用之前积累动量来替代真正的梯度
- Nesterov加速梯度
Nesterov Accelerated Gradient,NAG 对动量法的改进
Δ𝜃𝑡 可以被拆分为两步进行
动量法和Nesterov加速梯度的比较:
-
*Adam算法
可以看作动量法和RMSprop算法的结合,不但使用动量作为参数更新方向,而且可以自适应调整学习率 -
梯度截断
当梯度的模大于一定阈值时,就对梯度进行截断,称为梯度截断(Gradient Clipping)
梯度截断是一种比较简单的启发式方法,把梯度的模限定在一个区间,当梯度的模小于或大于这个区间时就进行截断- 按值截断
- 按模截断
- 按值截断
7.3 参数初始化
神经网络的参数学习是一个非凸优化问题
参数初始化的方式通常有以下三种:
- 预训练初始化
一个已经在大规模数据上训练过的模型可以提供一个好的参数初始值 - 随机初始化
神经网络若将参数全部初始化为0会出现对称权重现象,比较好的方式是对每个参数都随机初始化,使得不同神经元之间的区分性更好 - 固定值初始化
对于一些特殊的参数,我们可以根据经验用一个特殊的固定值来进行初始化
好的随机初始化方法对训练神经网络模型来说十分重要
7.3.1 基于固定方差的参数初始化
- 高斯分布初始化
使用一个高斯分布𝒩(0, 𝜎2)对每个参数进行随机初始化 - 均匀分布初始化
在一个给定的区间[−𝑟, 𝑟]内采用均匀分布来初始化参数
7.3.2 *基于方差缩放的参数初始化
初始化一个深度网络时,为了缓解梯度消失或爆炸问题,尽可能保持每个神经元的输入和输出的方差一致,根据神经元的连接数量来自适应地调整初始化分布的方差,这类方法称为方差缩放(Variance Scaling)
- Xavier初始化
- He初始化
7.3.3 *正交初始化
将𝑾(𝑙) 初始化为正交矩阵,即𝑾(𝑙)(𝑾(𝑙))T =𝐼,这种方法称为正交初始化(Orthogonal Initialization)
7.4 数据预处理
如果一个机器学习算法在缩放全部或部分特征后不影响它的学习和预测,我们就称该算法具有尺度不变性(Scale Invariance)
对于尺度敏感的模型,必须先对样本进行预处理,将各个维度的特征转换到相同的取值区间,并且消除不同特征之间的相关性,才能获得比较理想的结果
数据归一化对梯度的影响:
归一化(Normalization)方法泛指把数据特征转换为相同尺度的方法
- 最小最大值归一化
- 标准化
- 白化
输入数据经过白化处理后,特征之间相关性较低,并且所有特征具有相同的方差
7.5 *逐层归一化
逐层归一化(Layer-wise Normalization)是将传统机器学习中的数据归一化方法应用到深度神经网络中,对神经网络中隐藏层的输入进行归一化,从而使得网络更容易训练
- 更好的尺度不变性
- 更平滑的优化地形
7.5.1 *批量归一化
对z(l)进行归一化
给定一个包含K 个样本的小批量样本集合,计算均值和方差
批量归一化
7.5.2 *层归一化
对一个中间层的所有神经元进行归一化
对于一个深度神经网络,令第𝑙 层神经元的净输入为𝒛(𝑙),其均值和方差为
层归一化
7.6 超参数优化
7.6.1 网格搜索
通过尝试所有超参数的组合来寻址合适一组超参数配置
网格搜索根据这些超参数的不同组合分别训练一个模型,然后测试这些模型在开发集上的性能,选取一组性能最好的配置
7.6.2 随机搜索
不同超参数对模型性能的影响有很大差异
对超参数进行随机组合,然后选取一个性能最好的配置,这就是随机搜索(Random Search)
7.7 网络正则化
正则化(Regularization)是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法,比如引入约束、增加先验、提前停止等
7.7.1 * ℓ1 和ℓ2 正则化
优化问题可以写为
不同范数约束条件下的最优化问题示例
7.7.2 权重衰减
在每次参数更新时,引入一个衰减系数
7.7.3 提前停止
使用一个和训练集独立的样本集合,称为验证集(Validation Set),并用验证集上的错误来代替期望错误;当验证集上的错误率不再下降,就停止迭代
7.7.4 *丢弃法
对于一个神经层y = f(Wx+b),引入一个丢弃函数d(·)使得y = f(Wd(x)+b)
丢弃法示例
7.7.5 数据增强
图像数据的增强主要是通过算法对图像进行转变,引入噪声等方法来增加数据的多样性
7.7.6 标签平滑
在输出标签中添加噪声来避免模型过拟合
一个样本x的标签一般用onehot向量表示,称之为硬目标
引入一个噪声对标签进行平滑,即假设样本以ϵ的概率为其它类,平滑后的标签为
称之为软目标