电子版:https://nndl.github.io/
B站视频:https://www.bilibili.com/video/BV1P3411u7c1
机器学习 ≈ 构建一个映射函数
1.准备数据(训练数据)
2.学习(相关性模型)
3.测试(测试数据)
深度学习=表示学习+决策学习
通过构建具有一定“深度”的模型,可以让模型来自动学习好的特征表示(从底层特征,到中层特征,再到高层特征),从而最终提升预测或识别的准确性
人脑神经网络
人工神经网络
神经网络发展史
机器学习是对能通过经验自动改进的计算机算法的研究
通俗地讲,机器学习(Machine Learning,ML)就是让计算机从数据中进行自动学习,得到某种知识(或规律)
模型(; )的好坏可以通过期望风险(Expected Risk)ℛ()来衡量,其定义为
其中(, )为真实的数据分布,ℒ(, (; ))为损失函数,用来量化两个变量之间的差异
在确定了训练集 、假设空间 ℱ 以及学习准则后,如何找到最优的模型(, ∗) 就成了一个最优化(Optimization)问题.机器学习的训练过程其实就是最优化问题的求解过程
我们希望能够学习一个最优的线性回归的模型参数w
主要有四种参数估计方法(优化方法)
也称最小二乘法(在古代汉语中“平方”称为“二乘”)
学习准则:
结构风险最小化又称岭回归
其中,第一项为偏差,第二项为方差
根据大数定律,当训练集大小|D|趋向无穷大时,泛化错误趋向于0,即经验风险趋近于期望风险
PAC学习
No Free Lunch Theorem,NFL
对于基于迭代的最优化算法,不存在某种算法对所有问题(有限的搜索空间内)都有效。如果一个算法对某些问题有效,那么它一定在另外一些问题上比纯随机搜索算法更差。
如无必要,勿增实体
丑小鸭与白天鹅之间的区别和两只白天鹅之间的区别一样大
在机器学习中,很多学习算法经常会对学习的问题做一些假设,这些假设就称为归纳偏置(Inductive Bias)
包括回归与分类问题,分类问题需要引入一个非线性的决策函数来预测输出目标
在二分类问题中,我们只需要一个线性判别函数 (; ) = T + .特征空间 ℝ 中所有满足 (; ) = 0 的点组成一个分割超平面(Hyperplane),称为决策边界(Decision Boundary)或决策平面(Decision Surface).决策边界将特征空间一分为二,划分成两个区域,每个区域对应一个类别。
对于二分类问题,最直接的损失函数为0-1损失函数
多分类一般需要多个线性判别函数,但设计这些判别函数有很多种方式
在Logistic回归中,使用Logistic函数来作为激活函数,也就是sigmoid函数
Logistic 回归采用交叉熵作为损失函数,并使用梯度下降法来对参数进行优化
Softmax回归是Logistic回归在多分类问题上的推广
感知器是一种简单的两类线性分类模型,其分类准则如下
感知器学习算法试图找到一组参数∗,使得对于每个样本((), ())有
支持向量机示例:
线性分类模型小结
编程练习
https://github.com/nndl/exercise/tree/master/chap3_softmax_regression
神经网络最早是作为一种主要的连接主义模型
引入误差反向传播来改进其学习能力之后,神经网络也越来越多地应用在各种机器学习任务上
人工神经元(Artificial Neuron),简称神经元(Neuron),是构成神经网络的基本单元,其主要是模拟生物神经元的结构和特性,接收一组输入信号并产生输出
神经元的净输入经过激活函数得到活性值
Sigmoid 型函数是指一类 S 型曲线函数,为两端饱和函数
常用的 Sigmoid型函数有Logistic函数和Tanh函数
对比:
ReLU(Rectified Linear Unit,修正线性单元)是目前深度神经网络中经常使用的激活函数
ReLU实际上是一个斜坡(ramp)函数
ReLU函数对比:
Swish函数是一种自门控(Self-Gated)激活函数
Swish函数不同超参数β示例:
Gaussian Error Linear Unit,高斯误差线性单元
也是一种通过门控机制来调整其输出值的激活函数
其中P(X ≤ x)是高斯分布N(µ,σ 2 )的累积分布函数,其中µ,σ为超参数,一般设µ = 0,σ = 1即可
常见激活函数及其导数:
通过一定的连接方式或信息传递方式进行协作的神经元可以看作一个网络,就是神经网络
前馈网络中各个神经元按接收信息的先后分为不同的组;每一组可以看作一个神经层;每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元;整个网络中的信息是朝一个方向传播,没有反向的信息传播
可以用一个有向无环路图表示
前馈网络包括全连接前馈网络和卷积神经网络等
网络中的神经元不但可以接收其他神经元的信息,也可以接收自己的历史信息
可用一个有向循环图或无向图来表示
记忆网络包括循环神经网络、Hopfield 网络、玻尔兹曼机、受限玻尔兹曼机等
图网络是定义在图结构数据上的神经网络;图中每个节点都由一个或一组神经元构成;节点之间的连接可以是有向的,也可以是无向的;每个节点可以收到来自相邻节点或自身的信息
各神经元分别属于不同的层,层内无连接;
相邻两层之间的神经元全部两两连接(全连接神经网络);
整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示
前馈神经网络通过不断迭代下面公式进行信息传播:
逐层进行前馈计算
前馈神经网络具有很强的拟合能力,常见的连续非线性函数都可以用前馈神经网络来近似
神经网络可以作为一个“万能”函数来使用,可以用来进行复杂的特征转换,或逼近一个复杂的条件分布
()为神经网络,g(·)为分类器
如果分类器 (⋅) 为 Logistic 回归分类器或 Softmax 回归分类器,那么 (⋅) 也可以看成是网络的最后一层
采用交叉熵损失函数,对于样本(x,y),其损失函数为
给定训练集为D = {(x(n),y(n) )}n=1N ,将每个样本x(n)输入给前馈神经网络,得到网络输出为 y^(n),其在数据集D上的结构化风险函数为
采用梯度下降法更新权重
通过链式法则计算损失函数关于每个参数的导数
自动微分是利用链式法则来自动计算一个复合函数的梯度
由于 Sigmoid 型函数的饱和性,饱和区的导数更是接近于 0.这样,误差经过每一层传递都会不断衰减.当网络层数很深时,梯度就会不停衰减,甚至消失,使得整个网络很难训练.这就是所谓的梯度消失问题
一切都应该尽可能地简单,但不能过于简单.
——艾伯特·爱因斯坦
全连接前馈神经网络存在的问题:
卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络
互相关(Cross-Correlation)是一个衡量两个序列相关性的函数,通常是用滑动窗口的点积计算来实现
在神经网络中使用卷积是为了进行特征抽取,卷积核是否进行翻转和其特征抽取的能力无关.特别是当卷积核是可学习的参数时,卷积和互相关在能力上是等价的
简单来说,卷积只是为了参数学习,参数下标顺序是无所谓的
步长(Stride)是指卷积核在滑动时的时间间隔;
零填充(Zero Padding)是在输入向量两端进行补零
一般常用的卷积有以下三类:
卷积神经网络一般由卷积层、汇聚层和全连接层构成
如果采用卷积来代替全连接,第 层的净输入() 为第 − 1 层活性值 (−1)和卷积核() ∈ ℝ 的卷积
卷积层的性质:局部连接;权重共享
由于卷积网络主要应用在图像处理上,而图像为二维结构,因此为了更充分地利用图像的局部信息,通常将神经元组织为三维结构的神经层,其大小为高度×宽度×深度,由 个 × 大小的特征映射构成,特征映射其实就是通道
卷积层的三维结构表示如下
(输入:MxNxD; 输出:M’xN’xP; 卷积核:UxVxPxD)
卷积计算过程如下
激活函数一般使用ReLU函数
卷积层中从输入特征映射组 到输出特征映射 的计算示例如下
汇聚层(Pooling Layer)也叫子采样层(Subsampling Layer),其作用是进行特征选择,降低特征数量,从而减少参数数量
将输入的通道组的每一个通道划分为很多区域,可以重叠也可以不重叠,对每个区域进行下采样(Down Sampling)得到一个值,作为这个区域的概括
常用的汇聚函数:
最大汇聚
平均汇聚
汇聚层中最大汇聚过程示例
一个典型的卷积网络是由卷积层、汇聚层、全连接层交叉堆叠而成
趋向于小卷积、大深度、全卷积
常用的卷积网络整体结构如下
通过误差反向传播算法来进行参数学习
使用链式法则来计算梯度
网络结构如下:
其中C3层卷积层用一个连接表来定义输入和输出通道之间的依赖关系,共使用 60 个 5 × 5 的卷积核
网络结构如下
因为网络规模超出了当时的单个GPU的内存限制,AlexNet将网络拆为两半,分别放在两个GPU上,GPU间只在某些层(比如第3层)进行通信
在Inception 网络中,一个卷积层包含多个不同大小的卷积操作,称为Inception 模块;Inception网络是由有多个Inception模块和少量的汇聚层堆叠而成
残差网络(Residual Network,ResNet)是通过给非线性的卷积层增加直连边的方式来提高信息的传播效率
残差单元由多个级联的(等宽)卷积层和一个跨层的直连边组成,再经过ReLU激活后得到输出
残差网络就是将很多个残差单元串联起来构成的一个非常深的网络
低维特征映射到高维特征
步长 = 1,无零填充 = 0的二维卷积和其对应的转置卷积示例
步长 = 2,无零填充 = 0的二维卷积和其对应的转置卷积示例
空洞卷积(Atrous Convolution)是一种不增加参数数量,同时增加输出单元感受野的一种方法
空洞卷积通过给卷积核插入“空洞”来变相地增加其大小
空洞卷积示例
循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其他神经元的信息,也可以接受自身的信息,形成具有环路的网络结构
为了处理时序数据,需要让网络具有短期记忆能力
Time Delay Neural Network,TDNN
建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等),这样,前馈网络就有了短期记忆的能力
示例如下
自回归模型(AutoRegressive Model,AR)是统计学上常用的一类时间序列模型,用一个变量 的历史信息来预测自己
有外部输入的非线性自回归模型(Nonlinear AutoRegressive with Exogenous Inputs Model,NARX)是自回归模型的扩展
循环神经网络(Recurrent Neural Network,RNN)通过使用带自反馈的神经元,能够处理任意长度的时序数据
循环神经网络通过下面公式更新带反馈边的隐藏层的活性值t
在两层前馈神经网络的基础上,简单循环网络增加了从隐藏层到隐藏层的反馈连接
简单循环网络在时刻 的更新公式为
按时间展开的循环神经网络如下所示
输入为序列,输出为类别
正常模式:将 看作整个序列的最终表示
按时间进行平均采样模式:对整个序列的所有状态进行平均,并用这个平均状态来作为整个序列的表示
同步的序列到序列模式主要用于序列标注(Sequence Labeling)任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同
也称为编码器-解码器(Encoder-Decoder)模型,先编码后解码
循环神经网络的参数可以通过梯度下降方法来进行学习
时刻 的损失函数
总损失函数
随时间反向传播算法
BackPropagation Through Time,BPTT
计算偏导数
误差项随时间反向传播算法示例
参数梯度
整个序列的损失函数ℒ关于参数 的梯度
循环神经网络在学习过程中的主要问题是由于梯度消失或爆炸问题,很难建模长时间间隔(Long Range)的状态之间的依赖关系
为了改善RNN中的长程依赖问题,引入了门控机制控制信息的积累速度,包括有选择地加入新的信息,并有选择地遗忘之前累积的信息
Long Short-Term Memory Network,LSTM
新的内部状态
LSTM网络引入一个新的内部状态(internal state) ∈ ℝ 专门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态 ∈ ℝ
在每个时刻,LSTM网络的内部状态 记录了到当前时刻为止的历史信息
门控机制
LSTM网络中的“门”是一种“软”门,取值在 (0, 1)之间,表示以一定的比例允许信息通过
LSTM网络的循环单元结构:
计算公式:
记忆
在简单循环网络中,隐状态h每个时刻都会被重写,因此可以看作一种短期记忆(Short-Term Memory)
长期记忆(Long-Term Memory)可以看作网络参数
记忆单元 中保存信息的生命周期要长于短期记忆 ,但又远远短于长期记忆,因此称为长短期记忆(Long Short-Term Memory)
长短期记忆是指长的“短期记忆”
目前主流的 LSTM 网络用三个门来动态地控制内部状态应该遗忘多少历史信息,输入多少新信息,以及输出多少信息。我们可以对门控机制进行改进并获得LSTM网络的不同变体
Gated Recurrent Unit,GRU
比LSTM更简单,可视为LSTM的一种变体,相较于LSTM能降低过拟合风险
GRU网络的循环单元结构:
重置门:
更新门:
候选状态:
GRU网络的状态更新方式为:
我们可以增加循环神经网络的深度从而增强循环神经网络的能力
将多个循环网络堆叠起来,称为堆叠循环神经网络(Stacked Recurrent Neural Network,SRNN)
按时间展开的堆叠循环神经网络:
增加一个按照时间的逆序来传递信息的网络层,来增强网络的能力
双向循环神经网络(Bidirectional Recurrent Neural Network,Bi-RNN)由两层循环神经网络组成,它们的输入相同,只是信息传递的方向不同
按时间展开的双向循环神经网络:
递归神经网络(Recursive Neural Network,RecNN)是循环神经网络在有向无循环图上的扩展
图神经网络(Graph Neural Network,GNN)是将消息传递的思想扩展到图结构数据上的神经网络
图中每个节点 都用一组神经元来表示其状态 (),初始状态可以为节点 的输入特征();每个节点可以收到来自相邻节点的消息,并更新自己的状态
优化问题:神经网络的损失函数是一个非凸函数,找到全局最优解通常比较困难;深度神经网络的参数通常非常多,训练数据也比较大;存在梯度消失与梯度爆炸问题
泛化问题:容易过拟合,需要通过一定的正则化方法来改进网络的泛化能力
网络优化是指寻找一个神经网络模型来使得经验(或结构)风险最小化的过程,风险最小化是一个非凸优化问题
由于网络结构的多样性,我们很难找到一种通用的优化方法;不同优化方法在不同网络结构上的表现也有比较大的差异;神经网络超参数一般也比较多,难以优化
对于低维空间来说,主要是存在一些局部最优点,基于梯度下降的优化方法可能陷入局部最优点,如何初始化参数以及逃离局部最优点,这是低维变量的非凸优化问题
深度神经网络的参数非常多,其参数学习是在非常高维空间中的非凸优化问题
鞍点
鞍点(Saddle Point)的梯度是0,但是在一些维度上是最高点,在另一些维度上是最低点
在高维空间中大部分驻点都是鞍点
随机梯度下降对于高维空间中的非凸优化问题十分重要,通过在梯度方向上引入随机性,可以有效地逃离鞍点
平坦最小值
深度神经网络的参数非常多,并且有一定的冗余性,这使得每单个参数对最终损失的影响都比较小,因此会导致损失函数在局部最小解附近通常是一个平坦的区域,称为平坦最小值(Flat Minima)
当一个模型收敛到一个平坦的局部最小值时,其鲁棒性会更好;具备良好泛化能力的模型通常应该是鲁棒的,因此理
想的局部最小值应该是平坦的
局部最小解的等价性
在非常大的神经网络中,大部分的局部最小解是等价的,网络规模很大时,陷入局部最小值的概率会很低
改善神经网络优化的目标是找到更好的局部最小值和提高优化效率
训练数据规模较大时,梯度下降效率很低,因此,在训练深度神经网络时,经常使用小批量梯度下降法(Mini-Batch Gradient Descent)
每次选取K个训练样本,计算偏导数
K为批量大小
定义梯度
更新参数
一般而言,批量大小不影响随机梯度的期望,但是会影响随机梯度的方差
学习率通常要随着批量大小的增大而相应地增大
线性缩放规则(Linear Scaling Rule):当批量大小增加倍时,学习率也增加倍
在MNIST数据集上批量大小对损失下降的影响如下:
学习率衰减
Learning Rate Decay 这里的衰减方式设置为按迭代次数进行衰减
学习率预热
为了提高训练稳定性,在最初几轮迭代时,采用比较小的学习率,等梯度下降到一定程度后再恢复到初始的学习率,这种方法称为学习率预热(Learning Rate Warmup)
逐渐预热:
*周期性学习率调整
为了使得梯度下降法能够逃离鞍点或尖锐最小值,一种经验性的方式是在训练过程中周期性地增大学习率
*自适应学习率
根据不同参数的收敛情况分别设置学习率
随机梯度下降方法中每次迭代的梯度估计和整个训练集上的最优梯度并不一致,具有一定的随机性
通过使用最近一段时间内的平均梯度来代替当前时刻的随机梯度来作为参数更新的方向,从而提高优化速度
动量法和Nesterov加速梯度的比较:
*Adam算法
可以看作动量法和RMSprop算法的结合,不但使用动量作为参数更新方向,而且可以自适应调整学习率
梯度截断
当梯度的模大于一定阈值时,就对梯度进行截断,称为梯度截断(Gradient Clipping)
梯度截断是一种比较简单的启发式方法,把梯度的模限定在一个区间,当梯度的模小于或大于这个区间时就进行截断