Abstract: The book Deep Learning(by Goodfellow, Bengio & Courville) has been read through. This blog is a reading note which record some key knowledge and points for memos.
第一部分 应用数学与机器学习基础
第二章 线性代数
无
第三章 概率与信息论
3.9 常用概率分布
高斯混合模型是概率密度的万能近似器,在这种意义下,任何平滑的概率密度都可以用具有足够多组件的高斯混合模型以任意精度逼近。
3.13信息论
1.可以用KL散度来衡量两个分布的差异:
2.因为KL散度是非负的并且衡量的是两个分布之间的差异,它经常被用作分布之间的某种距离。
一个和KL散度密切联系的量是交叉熵,即
它和KL散度很像,但是缺少左边一项:
针对Q最小化交叉熵等价于最小化KL散度。
第四章 数值计算
4.3 基于梯度的优化方法
1.优化指的是改变$x$以最小化或最大化某个函数$f(x)$的任务。我们通常以最小化$f(x)$指代大多数最优化问题。
2.梯度是相对一个向量求导的导数:$f$的导数是包含所有偏导的向量,记为$\bigtriangledown _{x}f(x)$。梯度的第$i$个元素是$f$关于$x_i$的偏导数。
3.我们在负梯度方向上移动可以减小$f$。这被称为最速下降法或梯度下降。
4.最速下降在梯度的每一个元素为零时收敛(或在实践中,很接近零时)。
5.有时我们需要计算输入和输出都为向量的函数的所有偏导数。包含所有这样的偏导数的矩阵被称为Jacobian矩阵。
6.Hessian等价于梯度的Jacobian矩阵。
7.在临界点处($\bigtriangledown _{x}f(x)$ = 0),我们通过检测Hessian的特征值来判断该临界点是一个局部极大点、全局极小点还是鞍点。
8.本书大部分上下文使用的优化算法适用于各种各样的函数,但是几乎都没有理论保证。在深度学习的背景下,限制函数满足Lipschitz连续或其导数Lipschitz连续可以获得一些保证。
9.最成功的的特定优化领域或许是凸优化,凸优化通过更强的限制提供更多的保证。凸优化算法只对凸函数适用,即Hessian处处半正定的函数。
4.4 约束优化
Karush-Kuhn-Tucker(KKT)方法是针对约束优化非常通用的解决办法。
第五章 机器学习基础
5.1 学习算法
1.传统上,人们将回归、分类或者结构化输出问题称为监督学习,将支持其他任务的密度估计通常被称为无监督学习。
2.参数是控制系统行为的值。
5.2 容量、过拟合和欠拟合
1.欠拟合是指模型不能在训练集上获得足够低的误差。而过拟合是指训练误差和和测试误差之间的差距太大。
2.模型的容量是指其拟合各种函数的能力。
3.统计学习理论提供了量化模型容量的不同方法。在这些中,最有名的是Vapnik-Chervonenkis维度(Vapnik-Chervonenkis dimension, VC),简称VC维。
4.这意味着机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法,而是理解什么样的分布与人工智能获取经验的“真实世界”相关,以及什么样的学习算法在我们关注的数据生成分布上效果最好。
5.可以加入权重衰减(weight decay)来修改线性回归的训练标准。
6.表示对函数的偏好是比增减假设空间的成员函数更一般的控制模型容量的方法。
7.正则化是指修改学习算法,使其降低泛化误差而非训练误差。正则化是机器学习领域的中心问题之一,只有优化能够与其重要性相提并论。
5.3 超参数和验证集
我们总是从训练数据中构建验证集。
5.4 估计、偏差和方差
偏差和方差度量着估计量的两个不同误差来源。偏差度量着偏离真实函数或参数的误差期望,而方差度量着数据上任意特定采样可能导致的估计期望的偏差。
5.5 最大似然估计
1.一种解释最大似然估计的观点是将它看作最小化训练集上的经验分布$\hat{p}_{data}$和模型分布之间的差异,两者之间的差异程度可以通过KL散度度量。
2.因为这些原因(一致性和统计效率),最大似然通常是机器学习中的首选估计方法。
5.6 贝叶斯估计
1.相对于最大似然估计,贝叶斯估计有两个重要区别。第一,不像最大似然方法预测时使用$\theta$的点估计,贝叶斯方法使用$\theta$的全分布。贝叶斯方法和最大似然方法的第二个最大区别是由贝叶斯先验分布造成的。
2.正如全贝叶斯推断,MAP贝叶斯推断的优势是能够利用来自先验的信息,这些信息无法从训练数据中获得。
3.许多正规化估计方法,例如权重衰减正则化的最大似然学习,可以被解释为贝叶斯推断的MAP近似。
5.7 监督学习算法
逻辑回归(logistic regression)这个名字有点奇怪,因为该模型用于分类而非回归。
5.8 无监督学习算法
1.有很多方式定义较简单的表示。最常见的三种包括低维表示、稀疏表示和独立表示。
2.PCA这种将数据变换为元素之间彼此不相关表示的能力是PCA的一个重要性质。它是消除数据中未知变化因素的简单表示示例。
5.9 随机梯度下降
随机梯度下降的核心是,梯度是期望。期望可使用小规模的样本近似估计。
5.10 构建机器学习算法
几乎所有的深度学习算法都可以被描述为一个相当简单的配方:特定的数据集、代价函数、优化过程和模型。
第二部分 深度网络:现代实现
第六章 深度前馈网络
1.前馈网络的目标是近似某个函数$f^∗$。
2.这种通过学习特征来改善模型的一般化原则不仅仅适用于本章描述的前馈神经网络。它是深度学习中反复出现的主题,适用于全书描述的所有种类的模型。
6.2 基于梯度的学习
1.对于前馈神经网络,将所有的权重值初始化为小随机数是很重要的。偏置可以初始化为零或者小的正值。
2.训练算法几乎总是基于使用梯度来使得代价函数下降的各种方法即可。
3.在大多数情况下,我们的参数模型定义了一个分布$p(y|x;\theta)$并且我们简单地使用最大似然原理。这意味着我们使用训练数据和模型预测间的交叉熵作为代价函数。
4.有时,我们使用一个更简单的方法,不是预测$y$的完整概率分布,而是仅仅预测在给定$x$的条件下$y$的某种统计量。某些专门的损失函数允许我们来训练这些估计量的预测器。
5.之前,我们看到了对输出分布的最大似然估计和对线性模型均方误差的最小化之间的等价性,但事实上,这种等价性并不要求$f(x;\theta)$用于预测高斯分布的均值。
6.贯穿神经网络设计的一个反复出现的主题是代价函数的梯度必须足够的大和具有足够的预测性,来为学习算法提供一个好的指引。
7.可惜的是,均方误差和平均绝对误差在使用基于梯度的优化方法时往往成效不佳。
8.因此,最大似然几乎总是训练sigmoid输出单元的优选方法。
9.有报告说基于梯度的优化方法对于混合条件高斯(作为神经网络的输出)可能是不可靠的,部分是因为涉及到除法(除以方差)可能是数值不稳定的(当某个方差对于特定的实例变得非常小时,会导致非常大的梯度)。一种解决方法是梯度截断(clip gradient),另外一种是启发式缩放梯度。
6.3 架构设计
1.在这些链式架构中,主要的架构考虑是选择网络的深度和每一层的宽度。
2.万能近似定理(universal approximation theorem)表明,一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数(例如logistic sigmoid激活函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的Borel可测函数。
3.万能近似定理意味着无论我们试图学习什么函数,我们知道一个大的MLP一定能够表示这个函数。然而,我们不能保证训练算法能够学得这个函数。
4.我们隐含地陈述了一些先验,这些先验是关于算法应该学得什么样的函数的。选择深度模型默许了一个非常普遍的信念,那就是我们想要学得的函数应该涉及几个更加简单的函数的组合。
5.根据经验,更深的模型似乎确实在广泛的任务中泛化得更好。
6.5 反向传播和其他的微分算法
1.反向传播(back propagation)算法,经常简称为backprop,允许来自代价函数的信息通过网络向后流动,以便计算梯度。
2.反向传播仅指用于计算梯度的方法,而另一种算法,例如随机梯度下降,使用该梯度来进行学习。
3.微积分中的链式法则(为了不与概率中的链式法则相混淆)用于计算复合函数的导数。反向传播是一种计算链式法则的算法,使用高效的特定运算顺序。
4.使用构造导数的计算图的方法来描述反向传播算法。
5.通过顺序填充这些表的条目,反向传播算法避免了重复计算许多公共子表达式。这种表填充策略有时被称为动态规划(dynamic programming)。
6.对于MLP,计算成本主要来源于矩阵乘法。
7.反向传播不是计算梯度的唯一方式或最佳方式,但它是一个非常实用的方法。
8.其中一个算法上的变化是用交叉熵族损失函数替代均方误差损失函数。
第七章 深度学习中的正则化
1.在机器学习中,许多策略显式地被设计来减少测试误差(可能会以增大训练误差为代价)。这些策略被统称为正则化。
2.有些策略向机器学习模型添加限制参数值的额外约束。有些策略向目标函数增加额外项来对参数值进行软约束。
7.1 参数范数惩罚
1.当我们的训练算法最小化正则化后的目标函数$\tilde{J}$时,它会降低原始目标$J$关于训练数据的误差并同时减小在某些衡量标准下参数$\theta$(或参数子集)的规模。
2.我们通常只对权重做惩罚而不对偏置做正则惩罚。
3.因此,我们使用向量$\omega$表示所有应受范 数惩罚影响的权重,而向量$\theta$表示所有参数 (包括$\omega$和无需正则化的参数)。
4.$L^2$也被称为岭回归或Tikhonov正则。
5.我们可以看到,$L^2$正则化能让学习算法“感知”到具有较高方差的输入$x$,因此与输出目标的协方差较小(相对增加方差)的特征的权重将会收缩。
6.相比$L^2$正则化,$L^1$正则化会产生更稀疏(sparse)的解。此处稀疏性指的是最优值中的一些参数为 0。
7.由$L^1$正则化导出的稀疏性质已经被广泛地用于特征选择(feature selection)机制。
7.2 作为约束的范数惩罚
1.我们可以构造一个广义 Lagrange函数来最小化带约束的函数,即在原始目标函数上添加一系列惩罚项。每个惩罚是一个被称为Karush–Kuhn–Tucker(Karush–Kuhn–Tucker)乘子的系数以及一个表示约束是否满足的函数之间的乘积。
2.有时候,我们希望使用显式的限制,而不是惩罚。
7.3 正则化和欠约束问题
1.机器学习中许多线性模型,包括线性回归和PCA,都依赖于对矩阵$X^⊤X$求逆。
2.在这种情况下,正则化的许多形式对应求逆$X^⊤X+\alpha I$。这个正则化矩阵可以保证是可逆的。
3.大多数形式的正则化能够保证应用于欠定问题的迭代方法收敛。
4.因此,我们可以将伪逆解释为使用正则化来稳定欠定问题。
7.4 数据集增强
在神经网络的输入层注入噪声也可以被看作是数据增强的一种方式。
7.5 噪声鲁棒性
1.噪声添加:输入、隐藏、输出、权重。
2.另一种正则化模型的噪声使用方式是将其加到权重。这项技术主要用于循环神经网络。
7.6 半监督学习
1.在深度学习的背景下,半监督学习通常指的是学习一个表示$h = f(x)$。学习表示的目的是使相同类中的样本有类似的表示。
2.使用主成分分析作为分类前(在投影后的数据上分类)的预处理步骤。
7.7 多任务学习
1.当模型的一部分被多个额外的任务共享时,这部分将被约束为良好的值(如果共享合理),通常会带来更好的泛化能力。
2.从深度学习的观点看,底层的先验知识如下:能解释数据变化(在与之相关联的不同任务中观察到)的因素中,某些因素是跨两个或更多任务共享的。
7.8 提前终止
1.在每次验证集误差有所改善后,我们存储模型参数的副本。当训练算法终止时,我们返回这些参数而不是最新的参数。当验证集上的误差在事先指定的循环次数内没有进一步改善时,算法就会终止。
2.这种策略被称为提前终止(early stopping)。这可能是深度学习中最常用的正则化形式。它的流行主要是因为有效性和简单性。
3.“训练时间”是唯一只要跑一次训练就能尝试很多值的超参数。通过提前终止自动选择超参数的唯一显著的代价是训练期间要定期评估验证集。
4.提前终止需要验证集,这意味着某些训练数据不能被馈送到模型。为了更好地利用这一额外的数据,我们可以在完成提前终止的首次训练之后,进行额外的训练。
5.提前终止为何具有正则化效果:为提前终止可以将优化过程的参数空间限制在初始参数值$\theta _0$的小邻域内。
6.长度为$\gamma$的轨迹结束于$L^2$正则化目标的极小点。
7.10 稀疏表示
1.表示的范数惩罚正则化是通过向损失函数$J$添加对表示的范数惩罚来实现的。
2.还有一些其他方法通过激活值的硬性约束来获得表示稀疏。例如,正交匹配追踪 (orthogonal matching pursuit)。
7.11 Bagging 和其他集成方法
1.Bagging(bootstrap aggregating)是通过结合几个模型降低泛化误差的技术。主要想法是分别训练几个不同的模型,然后让所有模型表决测 试样例的输出。这是机器学习中常规策略的一个例子,被称为模型平均(model averaging)。采用这种策略的技术被称为集成方法。
2.不是所有构建集成的技术都是为了让集成模型比单一模型更加正则化。例如,一种被称为Boosting的技术 构建比单个模型容量更高的集成模型。
7.12 Dropout
1.在第一种近似下,Dropout可以被认为是集成大量深层神经网络的实用Bagging方法。
2.具体而言,Dropout训练的集成包括所有从基础网络除去非输出单元后形成的子网络。
3.Dropout训练与Bagging训练不太一样。在Bagging的情况下,所有模型都是独立的。在Dropout的情况下,所有模型共享参数,其中每个模型继承父神经网络参数的不同子集。
4.除了这些,Dropout与Bagging算法一样。
5.涉及Dropout的一个重要观点是,我们可以通过评估模型中$p(y|x)$来近似$p_{ensemble}$:该模型具有所有单元,但我们将单元$i$的输出的权重乘以单元$i$的被包含概率。这个修改的动机是得到从该单元输出的正确期望值。我们把这种方法称为权重比例推断规则(weight scaling inference rule)。
6.实验发现,在对集成预测的近似方面,权重比例推断规则比蒙特卡罗近似更好(就分类精度而言)。
7.一个关于Dropout的重要见解是,通过随机行为训练网络并平均多个随机决定进行预测,实现了一种参数共享的Bagging形式。
8.Dropout不仅仅是训练一个Bagging的集成模型,并且是共享隐藏单元的集成模型。
9.Dropout强大的大部分原因来自施加到隐藏单元的掩码噪声,了解这一事实是重要的。
10.Dropout的另一个重要方面是噪声是乘性。
11.另一种深度学习算法——批标准化,在训练时向隐藏单元引入加性和乘性噪声重新参数化模型。批标准化的主要目的是改善优化,但噪声具有正则化的效果,有时没必要再使用Dropout。
第八章 深度学习中的优化
本章主要关注这一类特定的优化问题:寻找神经网络上的一组参数$\theta$,它能显著地降低代价函数$J(\theta)$,该代价函数通常包括整个训练集上的性能评估和额外的正则化项。
8.1 学习和纯优化有什么不同
1.大多数用于深度学习的算法介于以上两者之间,使用一个以上,而又不是全部的训练样本。传统上,这些会被称为小批量(minibatch)或小批量随机(minibatch stochastic)方法,现在通常将它们简单地称为随机(stochastic)方法。
2.小批量随机梯度下降的一个有趣动机是,只要没有重复使用样本,它将遵循着真实泛化误差的梯度。很多小批量随机梯度下降方法的实现都会打乱数据顺序一次,然后多次遍历数据来更新参数。
8.2 神经网络优化中的挑战
1.如果一个足够大的训练集可以唯 一确定一组模型参数,那么该模型被称为可辨认的。
2.这些模型可辨识性问题意味着神经网络代价函数具有非常多、甚至不可数无限多的局部极小值。
3.很多从业者将神经网络优化中的所有困难都归结于局部极小值。
4.多类随机函数表现出以下性质:低维空间中,局部极小值很普遍。在更高维空间中,局部极小值很罕见,而鞍点则很常见。
5.启发式梯度截断(gradient clipping)来避免其严重的后果。
6.当计算图变得极深时,神经网络优化算法会面临的另外一个难题就是长期依赖问题——由于变深的结构使模型丧失了学习到先前信息的能力,让优化变得极其困难。
7.许多现有研究方法在求解具有困难全局结构的问题时,旨在寻求良好的初始点,而不是开发非局部范围更新的算法。
8.梯度下降和基本上所有的可以有效训练神经网络的学习算法,都是基于局部较小更新。
9.一些理论结果表明,我们为神经网络设计的任何优化算法都有性能限制。
8.3 基本算法
1.学习率可通过试验和误差来选取,通常最好的选择方法是监测目标函数值随时间变化的学习曲线。
2.SGD及相关的小批量亦或更广义的基于梯度优化的在线学习算法,一个重要的性质是每一步更新的计算时间不依赖训练样本数目的多寡。
3.研究优化算法的收敛率,一般会衡量额外误差(excess error)$J(\theta)−min_{\theta} J(\theta)$,即当前代价函数超出最低可能代价的量。
4.对于大数据集,SGD只需非常少量样本计算梯度从而实现初始快速更新,远远超过了其缓慢的渐近收敛。
5.从形式上看,动量算法引入了变量$v$充当速度角色——它代表参数在参数空间移动的方向和速率。速度被设为负梯度的指数衰减平均。
6.动量的主要目的是解决两个问题:Hessian矩阵的病态条件和随机梯度的方差。
8.4 参数初始化策略
1.也许完全确知的唯一特性是初始参数需要在不同单元间“破坏对称性”。
2.我们几乎总是初始化模型的权重为高斯或均匀分布中随机抽取的值。
8.5 自适应学习率算法
1.如果损失对于某个给定模型参数的偏导保持相同的符号,那么学习率应该增加。如果对于该参数的偏导变化 了符号,那么学习率应减小。
2.目前,最流行并且使用很高的优化算法包括 SGD、具动量的 SGD、RMSProp、 具动量的RMSProp、AdaDelta 和 Adam。
8.7 优化策略和元算法
1.批标准化提出了一种几乎可以重参数化所有深度网络的优雅方法。重参数化显著减少了多层之间协调更新的问题。批标准化可应用于网络的任何输入层或隐藏层。
2.批标准化仅标准化每个单元的均值和方差,以稳定化学习,但允许单元和单个单元的非线性统计量之间的关系发生变化。
3.标准化一个单元的均值和标准差会降低包含该单元的神经网络的表达能力。为了保持网络的表现力,通常会将批量隐藏单元激活$H$替换为$\gamma H’+\beta$,而不是简单地使用标准化的$H’$。
4.这些在直接训练目标模型求解目标问题之前,训练简单模型求解简化问题的方法统称为预训练(pretraining)。
5.将监督学习问题分解成其他简化的监督学习问题的预训练算法。这种方法被称为贪心监督预训练(greedy supervised pretraining)。
6.在实践中,选择一族容易优化的模型比使用一个强大的优化算法更重要。