Deep learning笔记(更新中)

本文是Goodfellow和Bengio的Deep Learning一书的笔记

深度学习的核心思想是假设数据由因素或特征组合产生,这些因素或特征可能来自一个层次结构的多个层级

流形学习:
流形学习是在连续数值数据和无监督学习的设定下被引入的
关键假设仍然是概率质量高度集中

dropout
我们通常使用1/2的包含概率,权重比例规则一般相当于在训练结束后将权重除2,然后像平常一样使用模型。实现相同结果的另一种方法是在训练期间将单元 的状态乘2。无论哪种方式,我们的目标是确保在测试时一个单元的期望总输入是与在训练时该单元的期望总输入是大致相同。
(或者使用batch norm)
因为Dropout是一个正则化技术,它减少了模型的有效容量。为了抵消这种影响,我们必须增大模型规模。对于非常大的数据集,正则化带来的泛化误差减少得很小。在这些情况下,使用Dropout和更大模型的计算代价可能超过正则化带来的好处。
这种参数共享策略不一定要基于包括和排除。原则上,任何一种随机的修改都是可接受的。
Dropout强大的大部分是由于施加到隐藏单元的掩码噪声;Dropout的另一个重要方面是噪声是乘性的

mini batch
更大的batch会计算更精确的梯度估计,但是回报却是小于线性的(n-gram中n增加的收益也是随着n增加而减小)
多次遍历数据集时,只有第一遍满足泛化误差梯度的无偏估计。但是,额外的遍历更新会由于减少训练误差受益,以抵消其带来的训练误差和测试误差间距的增加
一阶梯度更新对采样误差鲁棒性稍好,可以使用较小的batch,如100;二阶方法需要更大的batch,如10000。

优化
当存在多个局部极小点或平坦区域时,优化算法可能无法找到全局最小点。在深度学习的背景下,即使找到的解不是真正最小的,但只要它们对应于代价函数的显著低的值,我们通常就能接受这样的解。
梯度范数明显随时间增加,而不是如我们所期望的那样随训练过程收敛到临界点而减小
带有潜变量的模型通常是不可辨认的,因为通过相互交换潜变量我们能够得到等价的模型。例如,考虑神经网络的第一层,我们可以交换单元i 和单元j 的传入权重向量、传出权重向量而得到等价的模型。其他因素包括将maxout单元的输入和输出权重放大和缩小同等倍数。
但是学者们现在猜想,对于足够大的神经网络而言,大部分局部极小值都具有很小的代价函数,我们能不能找到真正的全局最小点并不重要,而是需要在参数空间中找到一个具有很少(但不是最小)代价的点。
一种能够排除局部极小值是主要问题的检测方法是画出梯度范数随时间的变化。如果梯度范数没有缩小到一个微小的值,那么该问题既不是局部极小值,也不是其他形式的临界点。在高维空间中,很难正面证明是局部极小值导致的问题。许多并非局部极小值的结构也具有很小的梯度。
很多随机函数一个惊人性质是,当我们到达代价较低的区间时,Hessian矩阵的特征值为正的可能性更大。
循环网络在每个时间步上使用相同的矩阵W,而前馈网络并没有。因而即使是非常深层的前馈网络也能很大程度上避免梯度消失与爆炸问题。
如果存在一个区域,我们遵循局部下降便能合理地直接到达解决方案,并且我们能够在该良好区域上初始化学习,那么一些问题(局部梯度不能反映全局状态)都可以避免(选取多个随机初始值)

优化算法
随机梯度下降:
通过计算独立同分布地从数据生成分布中抽取的m个minibatch样本的梯度均值,我们可以得到梯度的无偏估计。
SGD需要随时间退役降低学习率,因为SGD梯度估计引入的噪源(m 个训练样本的随机采样)并不会在极小值处消失。
SGD收敛的一个充分条件是:学习率的和趋近于无穷,而学习率的平方和小于无穷(tf的exponential_decay不满足)。
对于机器学习任务,不值得探寻收敛快于O(1/k)的优化算法——更快的收敛可能对应着过拟合。
动量:
动量方法旨在加速学习,特别是处理高曲率,小但一致的梯度,或是带噪扰的梯度。动量算法积累了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。动量的主要目的是解决两个问题:Hessian矩阵的不良条件数和随机梯度的方差。
SGD中,步长只是梯度范数乘以学习速率。在梯度方法中,步长取决于梯度序列的大小和排列。当许多连续的梯度指向相同的方向时,步长最大;如果动量算法总是观测到梯度g,那么它会在方向g 上不停加速。
在实践中,alpha的一般取值为0:5,0:9 和0:99。和学习速率一样,alpha也会随着时间变化。一般初始值是一个较小的值,随后会慢慢变大。随着时间推移,改变alpha没有收缩因子epsilon更重要。
自适应:
AdaGrad 算法,独立地适应所有模型参数的学习速率,放缩每个参数反比于其所有梯度历史平方值总和的平方根。
RMSProp算法修改AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动均值。

batch normalization
batch normalization仅标准化每个单元的均值和方差,使得学习稳定,但允许单元和单个单元的非线性统计量之间的关系发生变化。
训练中的均值和方差由mini batch的样本贡献,测试时为训练阶段收集的运行均值。
batch norm的意义和去掉网络中所以线性部分的作用类似,但后者的代价大得多。
无batch norm时,H的均值取决于H下层中参数的复杂关联。在batch norm(加入超参数beta和gamma)中,gammaH′+beta的均值仅由beta确定。新参数很容易通过梯度下降来学习。
batch normalization作用于XW+b(比作用于X效果好)。

坐标下降
当一个变量的值很大程度地影响另一个变量的最优值时,坐标下降不是一个很好的方法。
坐标下降(coordinate descent)一次优化一个坐标。更一般地,块坐标下降(block coordinate descent) 是指对于某个子集的变量同时最小化。

Polyak平均
平均优化算法在参数空间访问轨迹中的几个点。使用指数衰减计算平均值。

监督预训练
在直接训练目标模型求解目标问题之前,训练简单模型求解简化问题的方法统称为预训练(pretraining)。

设计有助于优化的模型
现代神经网络的设计选择体现在层之间的线性变换,几乎处处可导的激励函数,和大部分定义域都有明显的梯度(如LSTM和maxout)。这些模型都具有简化优化的性质。换言之,现代神经网络的设计方案旨在使其局部梯度信息合理地对应着移向一个遥远的解。
其他的模型设计策略有助于使优化更简单。例如,层之间的线性路径或是跳过连接减少了从较低层参数到输出最短路径的长度,因而缓解了梯度消失的问题。一个和跳过连接相关的想法是添加和网络中间隐藏层相连的输出的额外副本,如GoogLeNet和深度监督网络。这些“辅助头”被训练来执行和网络顶层主要输出相同的任务,以确保底层网络能够接受较大的梯度。当训练完成时,辅助头可能被丢弃。这是预训练策略的替代方法。以这种方式,我们可以在一个阶段联合训练所有层,而不改变架构,使得中间层(特别是低层)能够通过更短的路径得到一些有些如何更新的有用信息。这些信息为底层提供了误差信号。

连续方法和课程学习
许多优化挑战都来自于代价函数的全局结构,不能仅通过局部更新方向上更好的估计来解决。解决这个问题的主要方法是尝试初始化参数到某种区域内,该区域可以通过局部下降很快连接到参数空间中的解。
连续方法(continuation method) 是一族通过挑选初始点使优化更容易的方法,以确保局部优化花费大部分时间在表现良好的空间。思想是构造一系列具有相同参数的目标函数。
课程学习规划学习过程的想法是,首先学习简单的概念,然后逐步学习依赖于这些简化概念的复杂概念。

初始化
初始化模型参数的方法有(1)简单固定方法(2)随机方法(3)用机器学习方法。
初始参数需要在不同单元间”破坏对称性“。
每个单元的偏置和额外的参数(如编码预测条件方差的参数)设置为启发式选择的常数。随机初始
化权重。
几乎总是初始化模型的权重为高斯或均匀分布中随机抽取的值。高斯或均匀分布的选择似乎不会有很大的差别。
更大的初始权重具有更强的破坏对称性的作用,有助于避免冗余的单元。它们也有助于避免在每层线性成分的前向或反向传播中丢失信号——矩阵中更大的值在矩阵乘法中有更大的输出。如果初始权重太大,那么会在前向传播或反向传播中产生爆炸的值。在循环网络中,很大的权重也可能导致混乱(chaos)(对于输入中很小的扰动非常敏感,导致确定性前向传播过程表现随机)。在一定程度上,梯度爆炸问题可以通过梯度截断来缓解(执行梯度下降步骤之前设置梯度的阈值)。较大的权重也会产生使得激励函数饱和的值,导致饱和单元的梯度完全丢失。这些竞争因素决定了权重的理想初始大小。
设置偏置为非零值的情况:(1)如果偏置是作为输出单元,那么初始化偏置以获取正确的输出边缘统计通常是有利的。(2)可能想要选择偏置以避免初始化引起太大饱和(如relu偏置为0.1)。(3)一个单元会控制其他单元能否参与到方差中(如LSTM遗忘门偏置为1)

卷积神经网络
卷积对平移等变(equivariance),对尺度和角度变换不等变。
当输入作出少量平移时,池化能帮助我们的表示近似不变(invariant)。对于平移的不变性是说当我们把输入平移一微小的量,大多数通过池化函数的输出值并不会发生改变。局部平移不变性是一个很重要的性质,尤其是当我们关心某个特征是否出现而不关心它出现的具体位置时。使用池化可以看作是增加了一个无限强的先验:卷积层学得的函数必须具有对少量平移的不变性。当这个假设成立时,池化可以极大地提高网络的统计效率。
池化对于处理不同大小的输入具有重要作用。
先验被认为是强或者弱取决于先验中概率密度的集中程度。弱先验具有较高的熵值,例如方差很大的高斯分布,这样的先验允许数据对于参数的改变具有或多或少的自由性。强先验具有较低的熵值,例如方差很小的高斯分布,这样的先验在决定参数最终取值时起着更加积极的作用。一个无限强的先验对一些参数的概率置零并且要求禁止对这些参数赋值,无论数据对于这些参数的值给出了多大的支持。
卷积神经网络和全连接网络类似,但对于这个全连接网络的权值有一个无限强的先验。这个无限强的先验是说一个隐藏单元的权值必须和它邻居的权值相等,但在空间中改变。这个先验也要求除了那些处在隐藏单元空间连续的小的接收域以内的权值外,其余的权值都为零。总之,我们可以把卷积的使用当作是对网络中一层的参数引入了一个无限强的先验概率分布。这个先验是说该层应该学得的函数只包含局部连接关系并且对平移具有等变性。类似的,使用池化也是一个无限强的先验:每一个单元都具有对少量平移的不变性。
卷积和池化可能导致欠拟合,和任何先验类似,卷积和池化只有当先验的假设合理且正确时才有用。一些卷积神经网络为了既获得具有较高不变性的特征又获得当平移不变性不合理时不会导致欠拟合的特征,被设计成在一些通道上使用池化而在另一些通道上不使用。当一项任务涉及到要对输入中相隔较远的信息进行合并时,那么卷积所需要的先验可能就不正确了。
通常零填充的最优数量(对于测试集的分类正确率)处于“有效卷积“和“相同卷积”之间的某个位置。
由卷积和随后的池化组成的层,当赋予随机权值时,自然地变得具有频率选择和平移不变性。他们认为这提供了一种廉价的方法来选择卷积网络的结构:首先通过仅训练最后一层来评估几个卷积网络结构的性能,然后选择最好的结构并使用更昂贵的方法来训练整个网络。
贪心逐层式预训练,独立地训练第一层,然后从第一层提取所有特征一次,然后用那些特征隔离训练第二层,以此类推。

循环和递归神经网络
解释RNN作为图模型的一种方法是将RNN视为定义一个结构为完全图的图模型,且能够表示任何一对y 值之间的直接联系(Markov链只有部分变量直接有直接关系)。
参数共享大大减少了RNN的参数,代价是优化参数可能变得困难。
在循环网络中使用的参数共享依赖于相同参数可用于不同时间步的假设。等效地,假设给定时刻t 的变量后,时刻t+1 变量的条件概率分布是平稳的(stationary),这意味着之前的时间步与下个时间步之间的关系并不依赖于t。原则上,可以使用t作为每个时间步的额外输入,并让学习器在发现任何时间依赖性的同时,在不同时间步之间尽可能多地共享。相比在每个t 使用不同的条件概率分布已经好很多了,但网络将必须在面对新t 时进行推断。
RNN必须有某种机制来确定序列的长度。这可以通过多种方式实现。在当输出是从词汇表获取的符号的情况下,我们可以添加一个对应于序列末端的特殊符号。当产生该符号时,采样过程停止。在训练集中,我们将该符号作为序列的一个额外成员,即紧跟每个训练样本x(t) 之后。另一种选择是在模型中引入一个额外的Bernoulli输出,表示在每个时间步决定继续或停止。相比向词汇表增加一个额外符号,这种方法更普遍,因为它适用于任何RNN,而不仅仅是输出符号序列的RNN。例如,它可以应用于一个产生实数序列的RNN。新的输出单元通常使用sigmoid单元,并通过交叉熵训练。在这种方法中,sigmoid被训练为最大化正确预测的对数似然,即在每个时间步序列决定结束或继续。
RNN必须有某种机制来确定序列的长度。这可以通过多种方式实现。(1)在当输出是从词汇表获取的符号的情况下,我们可以添加一个对应于序列末端的特殊符号。当产生该符号时,采样过程停止。在训练集中,我们将该符号作为序列的一个额外成员,即紧跟每个训练样本x(t) 之后。(2)另一种选择是在模型中引入一个额外的Bernoulli输出,表示在每个时间步决定继续或停止。相比向词汇表增加一个额外符号,这种方法更普遍,因为它适用于任何RNN,而不仅仅是输出符号序列的RNN。例如,它可以应用于一个产生实数序列的RNN。新的输出单元通常使用sigmoid单元,并通过交叉熵训练。在这种方法中,sigmoid被训练为最大化正确预测的对数似然,即在每个时间步序列决定结束或继续。(3)确定序列长度T的另一种方法是将一个额外的输出添加到模型并预测整数T本身。模型可以采出T的值,然后采T步有价值的数据。这种方法需要在每个时间步的循环更新中增加一个额外输入,使得循环更新知道它是否是靠近所产生序列的末尾。这种额外的输入可以是T的值,也可以是T-t即剩下时间步的数量。如果没有这个额外的输入,RNN可能会产生突然结束序列,如一个句子在最终完整前结束。
将固定长度的向量x映射到序列Y上分布的RNN,适用于很多任务如图注,其中单个图像作为模型的输入,然后产生描述图像的词序列。观察到的输出序列的每个元素y(t)同时用作输入(对于当前时间步)和训练期间的目标(对于前一时间步)。
如果没有y(t-1)到h(t)的连接,只有h(t-1)到h(t)的连接,则RNN只能表示在给定x值的情况下,y值彼此条件独立的分布。加上y(t-1)到h(t)的连接后,RNN可以对给定x的序列后相同长度的y序列的任意分布建模。
向量到序列RNN至少有两种接受输入的方法:(1)输入被提供为RNN的初始状态(2)输入连接到每个时间步中的隐藏单元。这两种方法也可以结合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值