神经网络与深度学习系列
写于2023.2.23-
1 基础知识
1.1 表示学习
表示形式:
局部表示:一个维度表示语义
分布式表述是所有维度共同表示语义,表示性更强,可以计算二者的相似度
局部和分布式(embedding)可以相互转换
传统特征提取vs表示学习
传统特征提取并不能保证下游任务的效果
表示学习没有明确的目标,需要和模型的预测结果一起学习,即端到端的学习
1.2 深度学习
核心问题:贡献度分配问题,不知道哪一步对结果影响最大
2 机器学习
2.1 优化方法
梯度下降:每次迭代需要计算每个样本上的损失函数的梯度并求和。计算复杂度高
随机梯度下降:每次迭代计算单个样本的损失函数,对样本进行随机排序进行遍历训练模型
小批量随机梯度下降:每次迭代随机选取小部分样本计算损失函数
2.2 泛化与正则化
泛化误差=期望风险-经验风险
过拟合:训练数据较少和噪声,在训练集上错误率很低,在测试集上错误率很高
过拟合就是经验风险低,期望风险高,泛化误差大
我们希望经验风险低,泛化误差低
------->正则化
所有损害优化的方法都是正则化:增加优化约束和干扰优化过程
2.3 线性回归
参数估计方法
经验风险最小化:最小二乘法;当XXT不可逆时,用SGD,降维
结构风险最小化(岭回归):加入正则化项,λ是正则化系数
概率角度看线性回归
最大似然函数
似然函数是关于统计模型p(x;w)的参数w的函数
概率p(x;w)是描述固定参数w时随机变量x的分布情况
似然p(x;w)是描述已知随机变量x时不同参数w对其分布的影响
最大似然估计的解与最小二乘法的解相同
贝叶斯视角
2.5 多项式回归
其余和线性模型相同,
如何选择多项式的次数?
正则化和增加训练样本数量
3 信息论
自信息:一个随机事件所包含的信息量,对于一个随机变量X,如果X=x时的自信息I(x)定义为I(x)=-log(x)。意义:一个事情经常发生,信息量就少。
自信息性质:可加性。log函数
熵:随机事件的不确定性;熵越大随机变量信息越多。随机变量X的自信息的数学期望
如果其概率分布为一个均匀分布,则熵最大。
熵编码
在对分布p(y)的符号进行编码时,熵H§也是理论上最优的平均编码长度,这种编码方式称为熵编码。
信息少,编码长。
交叉熵:按照概率分布为q的最优编码对真实分布为p的信息进行编码的长度
KL散度:衡量两个分布的差异
应用到机器学习
最小化KL散度—>最小化交叉熵损失---->对大化对数似然
3 线性模型
二分类
多分类:一对多(C个分类器,打分机制)、一对一(c(c-1)/2个分类器)、argmax(改进的一对多,得分高)
3.1 Logistic回归
对数几率回归、对率回归
下边这个模型不可导
如何解决?
把分类问题看作条件概率估计问题---->激活函数
Logistic函数,sigmoid函数
用到交叉熵损失,梯度下降
3.2 softmax回归
多分类问题,用argmax,C个二分类器
将C个而分类器的得分用softmax函数得到概率
损失函数:交叉熵损失
梯度下降
3.3 感知器
在线学习算法
感知器是只要犯错就更新
logistic回归还需要看犯错的程度,这样看,logistic更合理。但还是要看情况
收敛性:如果训练集线性可分,则更新次数是有限次
3.4 支持向量机
假设训练数据是线性可分的,那么利用感知器,可以得到很多好的分类器
间隔:决策边界到分类样本的最短距离
支持向量机是选择间隔最大的决策边界
软间隔
如果不是线性可分的,引入松弛变量
优化:约束优化问题、SMO算法、梯度下降
可以和核方法结合
3.5 线性模型小结
损失函数对比
广义线性模型:自定义基函数,将非线性输入映射为线性输入
4 前馈神经网络
前馈神经网络,又称全连接神经网络、多层感知器
见吴恩达机器学习神经网络
网络结构
单向传递,层内无连接,可以用一个有向无环图来表示,相邻两层之间的神经元全部两两连接。
根据通用近似定理,对于具有线性输出层和至少一个使用“挤压”性质的激活函数的隐藏层组成的前馈神经网络,只要其隐藏层神经元的数量足够,它可以以任意的精度来近似任何一个定义在实数空间的有界闭集函数。
----->前馈神经网络具有很强的拟合能力,常见的连续非线性函数都可以用前馈神经网络来近似。但并没有给出如何找到这样一个网络,以及是否是最优的
参数学习:
对于多分类问题,如果使用softmax,就是在网络最后一层设置C个神经元,其输出经过softmax进行归一化可以作为每个类的条件概率,采用交叉熵损失函数。
4.1优化方法
梯度下降法—>在神经网络中经常使用反向传播或自动微分
使用反向传播算法的随机梯度下降:第l层的误差项可以通过l+1层的误差项计算得到,几位误差的反向传播
缺点:梯度是手动计算的,易出错
计算图与自动微分
自动微分是利用链式法则来自动计算一个复合函数的梯度
反向传播算法是自动微分的反向模式
4.2静态计算图和动态计算图
4.3 优化问题
神经网络的参数学习比较困难
1.非凸优化问题
局部最优、鞍点,影响迭代
2.梯度消失问题
下层参数比较难调
3.参数过多,影响训练
参数解释起来比较困难
5 卷积神经网络
全连接前馈神经网络
1.权重矩阵的参数非常多
2.局部不变性特征
自然图像中的物体具有局部不变性特征,尺度缩放、平移、旋转等操作不影响其语义信息
全连接前馈网络很难提取这些局部不变特征
也是一种前馈神经网络,局部连接、权重共享、空间或时间上的次采样
5.1 卷积
卷积的定义:注意滤波器或卷积核的概念
给定一个输入信号序列X和滤波器w,卷积的输出为
作用
近似微分
高通滤波、低通滤波
卷积扩展:引入滤波器的滑动步长和零填充
输入长度M,滑动步长S,滤波长度K,零填充P(两端各补P个0),输出长度为(M-K+2P)S+1
目前提到卷积就是等宽卷积
二维卷积
图像处理,图像是以二维矩阵的形式输入到神经网络中
作为特征提取器:经过卷积得到结果为特征映射。高斯滤波器可以对图像进行平滑去噪;有的可以用来提起边缘特征
互相关
计算卷积需要及逆行卷积核翻转,在神经网络中翻转是不必要的
5.2 卷积神经网络
卷积操作的目标:提取特征
- 用卷积层代替全连接层,连接数大大减少
- 权重共享:作为参数的卷积核w(l)对l层的所有神经元是相同的。权重共享可以理解为一个卷积核只捕捉输入数据中的一种特定的局部特征------->如何增强卷积层的能力:引入多个卷积核提取多个特征
由于局部连接和权重共享,卷积层的参数只有一个K维的权重w(l)和l维的偏置b,共K+1个参数。参数个数和神经元的数量无关。此外l层的神经元个数不是随意选择的,M(l)=M(l-1)-K+1
卷积层
输入:D个特征映射MND;输出:P个特征映射M’N’D
输入的特征映射与输出的特征映射是全连接的关系
每一个输出特征映射需要D个卷积核以及一个偏置。假设每个卷积核的大小为UV,则需要PD(U*V)+P个参数
汇聚层
卷积层虽然减少了连接数,但是每个特征映射的神经元个数并没有减少–>汇聚层
进行特征选择,减低特征数量从而减少参数数量,还可以使得网络对一些小的局部形态改变保持不变性并拥有更大的视野
有时输出层的分类数较少,引入汇聚层
最大汇聚、平均汇聚
卷积网络结构
由卷积层、汇聚层、全连接层交叉堆叠而成
趋向更小的卷积核和更深的结构。
趋向于全卷积。由于卷积的操作性越来越灵活,汇聚层的作用越来越小。
5.3 其他卷积方式
如何增加输出单元的感受野
- 增加卷积核的大小
- 增加层数
- 在卷积之前进行汇聚操作
空洞卷积:通过给卷积核插入空洞来变相增加其大小
转置卷积/微步卷积:低维特征映射到高维特征
卷积核不变,在输入上插入0
5.4 几种典型的卷积神经网络
LeNet5
基于此的手写数字识别系统用来识别支票上的手写数字
共有7层
输入:图像大小32*32=1024,输出对应10个类别
连接表:输入和输出之间的映射关系(自定义,非全连接)
AlexNet
第一个现代深度卷积网络模型
- 使用GPU进行并行训练
- 采用了relu作为非线性激活函数
- 使用Dropout防止过拟合
- 使用数据增强
5个卷积层、3个汇聚层、3个全连接层
在前两个汇聚层之后进行了局部响应归一化,增强模型的泛化能力
输入:2242243,输出1000个类别的条件概率
Inception网络
Inception模块:一个卷积层包含多个不同大小的卷积操作。Inception网络是由多个Inception模块和少量的汇聚层堆叠而成
GoogleNet是其中一个版本
在V1版本中,采用四组平行的特征抽取方式,使用11,33,55的卷积和33的最大汇聚,将得到的特征映射在深度上堆叠起来作为输出特征映射
卷积和最大汇聚都是等宽的。
使用11来减少特征映射的深度。如果输入特征映射之间存在冗余信息,11卷积相当于先进行一次特征抽取。不同通道不同深度上的特征融合
V3:用多层的小卷积核来替换大的卷积核,以减少计算量和参数量,并保持感受野不变
- 使用两层33的卷积替代V1中的55的卷积
- 用连续的n1和1n替代n*n的卷积
残差网络(ResNet)
通过给非线性的卷积层增加直连边的方式来提高信息的传播效率
假设在一个深度网络中,我们期待一个非线性单元f(x,θ)去逼近一个目标函数h(x).
根据通用近似定理,神经网络可以近似逼近原始目标函数和残差函数,后者简单
---->用神经网络拟合残差函数,直连边拟合恒等函数
5.5 卷积神经网络的应用
AlphaGo
输入:191948图像
输出:19*19的分类问题–下棋的位置或者标量—预测带来的平均收益
目标检测(RCN)
效率低
Mask RCNN
像素级的图像分割
OCR
光学字符识别
难点:野外场景文字识别
应用到文本数据
Ngram特征(可以理解为滑动窗口)与卷积
一维gram:提取单个单词,丢掉了顺序
二维gram:提取相邻两个单词
Ngram是离散特征的滑动窗口但是卷积是一个连续的
—>如何变成文本连续的呢?
每个词通过查表变成d维向量(端到端的学习)
可以看成一维卷积,7个单词就是7个信号
也可以是二维卷积,D*k,得到一个一维序列
6 循环神经网络
前馈网络的特点
- 相邻两层之间单向连接,层内无连接
- 有向无环图
- 输入和输出的维数是固定的,不能任意改变,而时序数据的长度一般是不固定的
- 无法处理变长的序列数据(卷积层是可以处理序列数据的,参数共享,卷积操作与序列长度无关,但卷积层一般后边 会加一些全连接层,使得它的大小不能任意变化)
- 假设每次输入都是独立的,也就是说每次网络的输出只依赖当前的输入,难以处理时序数据
但是,很多任务中,网络的输出不仅与当前时刻的输入有关,还与过去一段时间的输出有关。
比如,有限状态自动机,下一时刻的输出与当前输入和上一时刻的输出有关
图灵机是一种抽象数学模型,可以用来模拟任何可计算问题,输出与输入和控制器记录的内容有关
可计算问题
6.1 如何给网络增加记忆能力?
时延神经网络
在前馈网络的非输出层都添加一个延时器,记录神经元的最近几次活性值。在T个时刻,第l层神经元的活性值取决于l-1层神经元最近K个时刻的活性值。
自回归模型和有外部输入的非线性自回归模型
- 自回归模型:用一个变量Yt的历史信息预测自己
- 有外部输入的非线性自回归模型:延时器记录最近K次的外部输入和输出,用于预测该时刻的输出
6.2 循环神经网络
循环神经网络通过使用带自反馈的神经元,能够处理任意长度的时序数据。
- 比前馈神经网络更加符合生物神经网络的结构。
- 广泛应用在语音识别、语言模型以及自然语言生成等任务上
既短又深,存在梯度消失的问题
简单循环网络:一个完全连接的循环网络是任何非线性动力系统的近似器
RNN图灵完备,可以实现图灵机的所有功能解决所有的可计算问题
一个完全连接的循环神经网络可以近似解决所有的可计算问题。
循环神经网络作用
- 输入-输出映射
- 机器学习模型(本节主要关注这种情况)
- 存储器
- 联想记忆模型
6.3 应用到机器学习
序列到类别模式:输入为序列,输出为类别
将序列中的样本按不同时刻输入到RNN中,得到不同时刻的隐藏状态h1,h2…ht。
正常模式:将ht看作整个序列的最终表示
按时间进行平均采样模式:对整个序列的所有状态进行平均作为整个序列的表示
同步的序列到序列模式:主要用于序列标注任务,每一时刻都有输入和输出,输入和输出序列长度相同。每一时刻的隐状态代表了当前时刻和历史的信息
例子:词性标注、信息抽取(从无结构的文本中抽取结构化的知识)、语音识别
异步的序列到序列模式:也称为编码器-解码器。输入和输出之间不需要严格对应,也不需要相同的长度
编码器:将序列中的样本按不同时刻输入到RNN1中,得到ht
解码器:用RNN2得到输出序列
为了建立输出序列之间的依赖关系,在解码器中通常使用非线性的自回归模型
6.4 参数学习
采用梯度下降的方法进行参数学习
随时间的反向传播:BPTT
长程依赖问题:由于梯度爆炸或者消失问题,实际上只能学习到短周期的依赖关系
如何解决长程依赖问题?RNN在时间维度上非常深
- 梯度爆炸:权重衰减、梯度截断
- 梯度消失:改进模型
- 循环边改为线性依赖关系,ht和ht-1之间取消非线性关系
- 增加非线性,非线性关系移到后边
6.5 GRU和LSTM
基于6.4改进方法后的改进
GRU:门控循环单元网络
- 引入一个更新门zt来控制当前状态需要从历史状态中保留多少信息(不经过非线性变换)以及需要从候选状态中接受多少新信息。
- 如果ht只和xt相关,需要引入一个重置门rt。
LSTM:长短期记忆神经网络
引入一个新的内部状态ct,专门进行线性的循环信息传递,同时(非线性地)输出信息给隐藏层的外部状态
ft遗忘门:控制上一时刻的内部状态ct-1需要遗忘多少信息
it输入门:控制当前时刻的候选状态ct~有多少信息需要保存
ot输出门:控制当前时刻的内部状态ct有多少信息需要输出给外部状态
第一步:首先利用上一时刻的外部状态ht-1和xt计算三个门以及候选状态ct~
第二步:结合遗忘门ft和输入门it来更新记忆单元ct
第三步:结合输出门ot,将内部状态的信息传递给外部状态ht
LSTM的变种
6.6深层循环神经网络
堆叠循环神经网络
底图为按时间展开的堆叠循环神经网络,红色箭头和黄色箭头为其他堆叠方式
双向循环神经网络
有些任务中,一个时刻的输出不但和过去时刻的信息有关,也和后续时刻的信息有关。
---->可以增加一个按时间的逆序来传递信息的网络层
双向循环神经网络由两层RNN组成,它们的输入相同,只是信息传递的方向不同。
文本识别、语音识别等等
6.7 RNN小结及应用
RNN小结
优点
- 引入短期记忆
- 图灵完备,万能程序
缺点 - 长程依赖问题
- 记忆容量问题
- 并行能力
语言模型
条件概率模型
作词机、作诗
机器翻译:编码-解码
看图说话:编码CNN,解码RNN
对话系统
6.7 扩展到图结构
递归神经网络
图神经网络
在实际应用中,很多数据是图结构的,比如知识图谱、社交网络、分子网络等。而前馈网络和循环网络很难处理图结构的数据。
---->图机器学习
7 网络优化与正则化
- 优化问题:损失函数是一个非凸函数,找全局最优较难(难点在于参数初始化,逃离局部最优或鞍点)。参数多,训练数据大,无法使用计算代价很高的二阶优化方法,一阶优化方法的训练效率通常比较低。此外,存在梯度消失和爆炸问题,使得基于梯度的优化方法失效。
- 泛化问题:复杂度高,拟合能力强,易过拟合。因此采用正则化方法提高泛化能力
7.1 优化问题
高维空间的非凸优化问题
- 在高维空间中,局部最小值要求在每一维度上都是最低点,这个概率非常低。大部分梯度为0的点是鞍点----->如何逃离鞍点
- 平坦最小值:参数多,有一定的冗余性,使得每个参数针对最终损失的影响都比较小,因此会导致损失函数在局部最小解附近通常是一个平坦的区域。平坦最小值与泛化能力有关。若模型收敛到平坦最小值,微小的参数变动不会剧烈影响模型能力,收敛到尖锐的局部最小值,鲁棒性较差。理想的局部最小值应该是平坦的。
- 局部最小解的等价性:一个平坦最小值的邻域内,所有点对应的训练损失都比较接近。大部分的局部最小解是等价的。局部最小解对应的训练损失都可能非常接近于全局最小解对应的训练损失
NN优化的改善算法
1.更有效的优化算法来提高优化方法的效率和稳定性
- 动态学习率调整
- 梯度估计修正
2.更好的参数初始化方法、数据预处理方法来提高优化效率
3.修改网络结构来得到更好的优化地形
- 好的优化地形通常比较平滑
- 使用 ReLU 激活函数、残差连接、逐层归一化等
4.使用更好的超参数优化方法
7.2 优化算法
优化算法:随机梯度下降
每次迭代都要计算整个训练数据的梯度
小批量梯度下降
每次优化时选取K个训练样本优化参数。K称为批量大小
影响因素:小批量样本数量、梯度、学习率
批量大小不影响随机梯度的期望,但是会影响随机梯度的方差.
批量越大,随机梯度的方差越小,引入的噪声也越小,训练也越稳定,因此可以设置较大的学习率.
而批量较小时,需要设置较小的学习率,否则模型会不收敛.
批量大小和学习率的关系:线性缩放规则,K批量则学习率为Kα,1批量学习率为α
选择:
计算效率(K大,计算效率快,但是优化效率慢)
泛化能力(K小,随机性越强,泛化能力强)
训练样本足够多,K越大越好,充分利用计算机资源
训练样本不够时,泛化能力是比较重要的,K小一些
动态学习率
1.学习率衰减
阶梯衰减,线性衰减、逆时衰减、指数衰减、自然之数衰减、余弦衰减、
2. 周期学习率调整
整体下降,跳出局部最优,趋向于平坦最优
循环学习率:让学习率在一个区间内周期性地增大和缩小
带热重启的随机梯度下降:用热重启的方式替代学习率衰减的方法
3. 增大批量大小
相当于衰减了学习率
4. 学习率预热
一开始使得学习率小一些,经过几次迭代之后再使得学习率很大,再逐步迭代
5. Adagrad
每个参数的维度上收敛速度都不同,因此根据不同参数的收敛情况分别设置学习率。
每次迭代时,计算每个参数梯度平方的累计值,自适应地调整每个参数的学习率。
缺点:经过一定次数的迭代依然没有找到最优点时,由于这时的学习率已经非常小,很难继续找到最优点
6.RMSprop
计算每次迭代梯度平方的指数衰减移动平均
避免Adagrad学习率不断单调下降以至过于早衰的特点。在迭代的过程中,每个参数的学习率不是衰减,而是可以变大也可以变小
7. Adadelta:Adagrad的改进
计算每次迭代梯度平方的指数衰减移动平均来调整学习率,初始学习率改为动态计算的(参数更新插值的平方的指数衰减权移动平均的开根)
一定程度上平抑了学习率的波动
梯度
- Momentum:用之前的累积动量来替代真正的梯度,考虑上一次的运动方向
计算负梯度的“加权移动平均”作为参数的更新方向
当某个参数在最近一段时间的梯度方向不一致时,真实的参数更新幅度变小 - Nesterov accelerated gradient
拆成两步更新。动量法在第二步更新时用的梯度是上一时刻的梯度,但实际上此时梯度已经发生变化
- Adam=动量法+RMSprop
- 梯度截断:用来解决梯度爆炸
如果梯度突然增大,用大的梯度更新参数反而会导致其远离最优点。(梯度消失和梯度下降参考https://zhuanlan.zhihu.com/p/33006526)
把梯度的模限定在一个区间,当梯度的模小于或大于这个区间时就进行截断。
按值截断和按模截断
小结
7.3 参数初始化
神经网络的参数不能初始化为0,所有神经元的行为表现一致—>参数初始化不一样
初始化方法
- 预训练初始化,预训练模型在目标任务上的学习过程也称为精调
- 随机初始化
- 固定值初始化:偏置( Bias )通常用 0 来初始化
希望误差项具有范数保持性
基于固定方差的参数初始化
1.Gaussian分布初始化
Gaussian初始化方法是最简单的初始化方法,参数从一个固定均值(比如0)和固定方差(比如0.01)的Gaussian分布进行随机初始化。
2.均匀分布初始化
参数可以在区间[−r,r]内采用均匀分布进行初始化。
关键是方差。参数范围太小,会导致神经元的输出过小,经过多层之后信号慢慢消失;二是会使sigmoid激活函数丢失非线性的能力。
基于固定方差的方法需要配合逐层归一化
基于方差缩放的参数初始化
尽可能保持每个神经元的输入和输出的方差保持一致,根据神经元的连接数量来自适应地调整初始化分布的方差
Xavier 初始化和 He 初始化
正交初始化
1 )用均值为 0 、方差为 1 的高斯分布初始化一个矩阵;
2 )将这个矩阵用奇异值分解得到两个正交矩阵,并使用其中之一作为权重矩阵。
7.4 数据预处理
尺度不变性:机器学习算法在缩放全部或部分特征后不影响学习和预测
可以通过参数的调整来适应不同特征的尺度,但参数初始化比较困难。当不同输入特征的尺度差异较大时,梯度下降法的效率会受到影响---->规范化指把数据特征转换为相同尺度的方法
- 最小最大值归一化
- 标准化,将每一维特征调整为均值为0,方差为1的分布(标准差不能为0)
- PCA,白化,降低输入数据特征之间的冗余性
7.5 逐层规范化
是将传统机器学习中的数据规范化方法应用到深层神经网络中。
核心:将神经网络的逐层或者每隔几层进行一次规范化
有效提升训练效率的原因:
1.更好的尺度不变性
内部协变量偏移
2.更平滑的优化地形
- 批量归一化(Batch Normalization,BN):提高优化效率,隐形的正则化方法。但是小批量样本的数量不能太小,无法应用到循环神经网络。
- 层归一化(Layer Normalization):看每一层神经元内部的均值和方差,应用范围比批量广
- 权重归一化(Weight Normalization)
- 局部响应归一化(Local Response Normalization,LRN)
在卷积上用层多一些,在循环上用批量多一些
7.6 超参数优化
- 超参数
层数
每层神经元个数
激活函数
学习率(以及动态调整算法)
正则化系数
mini-batch 大小 - 优化方法
网格搜索:离散参数可能取m个值(连续参数选择m个值),这些值逐个搜索。
随机搜索:参数在每个维度随机取值。当在某个维度上参数的影响较小,那么随机搜索比网格搜索更高效
贝叶斯优化:条件概率
动态资源分配:如果有很多超参数的组合,有些组合在开始的阶段表现就不好,就直接舍弃。资源动态分配
神经架构搜索:所有参数都用计算机,特别是神经网络,来搜索
7.7 网络正则化
神经网络拟合能力强,过度参数化。但是泛化性较差
不仅与模型优化,还可能与优化方法有关
- 增加优化约束
L1/L2约束
数据增强 - 干扰优化过程
权重衰减
随机梯度下降
早停法
暂退法
- 早停法
神经网络首先记住一般性规律再记噪声,利用早停法避免过拟合
使用一个验证集来测试每一次迭代的参数在验证集上是否最优。如果在验证机上的错误率不再下降,就停止迭代。
- 权重衰减
通过限制权重的取值范围来干扰优化过程,降低模型能力
在每次参数更新时,引入一个衰减系数𝑤。一般取值较小,比如0.0005
注:在标准的随机梯度下降中,权重衰减正则化和ℓ_2正则化的效果相同;在较为复杂的优化方法(比如Adam)中,权重衰减和ℓ_2正则化并不等价。 - 暂退法dropout method
引入一个掩蔽函数,m通过概率为p的伯努利分布随机生成
训练时采用标准网络,会使得训练和测试时网络的输出不一致
—>解决方法就是在测试时,mask(x)=px,把每个神经元的活性降低
意义:
集成学习的解释
每做一次丢弃,相当于从原始的网络中采样得到一个子网络。如果一个神经网络有n个神经元,那么总共可以采样出2^n个子网络。
贝叶斯学习的解释
当在循环神经网络上应用丢弃法,不能直接对每个时刻的隐状态进行随机丢弃,这样会损害循环网络在时间维度上记忆能力。
---->变分Dropout
根据贝叶斯学习的解释,丢弃法是一种对参数θ的采样。
每次采样的参数需要在每个时刻保持不变。因此,在对循环神经网络上使用丢弃法时,需要对参数矩阵的每个元素进行随机丢弃,并在所有时刻都使用相同的丢弃掩码。
- L1和L2正则化
正则化系数越大,分界限越平滑,泛化能力越强
- 数据增强
图像数据的增强主要是通过算法对图像进行转变,引入噪声等方法来增加数据的多样性。
图像数据的增强方法:
旋转(Rotation):将图像按顺时针或逆时针方向随机旋转一定角度;
翻转(Flip):将图像沿水平或垂直方法随机翻转一定角度;
缩放(Zoom In/Out):将图像放大或缩小一定比例;
平移(Shift):将图像沿水平或垂直方法平移一定步长;
加噪声(Noise):加入随机噪声。
文本数据:
词汇替换
回译
随机编辑噪声:增删改查、句子乱序
标签平滑
7.8 小结
8 注意力机制与外部记忆
网络部件,可以与其他网络类型进行结合
注意力机制和记忆增强网络相辅相成
全连接前馈网络:全连接,连接数较多,在少量数据上比较难学,容易过拟合
卷积网络:可以用相对较少的参数去实现能力更强大的模型;卷积参数共享,具有平移不变性,有pooling操作
循环网络:引入内部记忆,处理时序数据
图网络:任意的图定义网络结构
8.1 注意力机制
8.1.1 注意力机制
人脑通过注意力来解决信息超载问题。
两种注意力:
自下而上:不需要主动关注,汇聚(pooling)
自上而下:带着问题去关注,会聚(focus)
硬注意力,软注意力是打分(soft-attention)
- 注意力机制的步骤
- 注意力打分函数
- 注意力机制的变体
- 硬性注意力机制,离散决策(1或0),难学,一般用于强化学习
- 键值对注意力机制
在软性注意力机制中,输入参数在两个步骤中都用到,一个是计算softmax,另一个是计算加权平均,作用是不一样的。键值对注意力机制是将输入参数x拆分成键值对,分别用于两个不同的计算,功能分离,更灵活 - 多头注意力机制
利用多个查询q,同时从输入信息中选取多组信息。每个注意力头关注信息的不同部分。可以选择更全面的信息 - 结构化注意力
相对来说比较复杂 - 指针网络
只利用注意力机制中的第一步,将注意力分布作为一个软性的指针来指出相关信息的位置。单独使用时可以用于数组排序
- 注意力机制的应用
- 文本分类,RNN可以进行分类,比如情感分类、市场分类等等。但是RNN需要对每个场景进行一次建模。利用注意力机制关注到不同部分,加入一个查询向量即可。复杂一些:层次注意力模型
- 机器翻译,RNN做编码得到源语言的向量表示,再用一个RNN 做解码。这种模型对RNN模型要求很高,RNN得到的向量需要涵盖所有文本信息,还有长程依赖问题。—>编码不变,把每个词的hidden state保留作为候选的decoder输入信息
- 看图说话:卷积
- 阅读理解
8.1.2 自注意力模型与Transformer
注意力机制有一个外部的查询向量q。自注意力机制查询向量来自于内部。
- 变长序列的建模
当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络或循环网络进行编码来得到一个相同长度的输出向量序列。
以下两类网络在建模时只建模了输入信息的局部依赖关系
如何建立非局部的依赖关系
早期是采用全连接,但无法处理变长问题,wij只和位置相关,但很多时候是内容相关的。不太擅长语义组合的序列关系
采用自注意力机制 - 自注意力机制
连接权重由注意力机制动态生成,那么权重不和位置相关