第十二周学习笔记

第十二周学习笔记

第六章 深度前馈网络

主要内容

1.特征选择

可以通过特征选择将性模型到扩展为非线性模型,特征选择是一个非线性映射,有多种方式来选择这个非线性映射 ϕ \phi

  • 核函数
  • 专家手动设计
  • 学习 ϕ \phi (深度学习策略)
    • 缺点 放弃了问题的凸性。
    • 优点 通过广泛的函数族 ϕ ( x ; θ ) \phi(x;\theta) ,可以使其获得第一种方法的优点——高度通用,通过限制函数族,可以融入专家的先验知识,同时,只需要选择函数族,而不必精确设定函数(特征工程)。

2.XOR

线性模型无法解决亦或问题,因为在二维平面上的二进制点是非线性可分的

3.损失函数

大多数情况中的损失函数就是定义了分布 p ( y x ; θ ) p(y|x;\theta) ,损失函数为负对数似然(交叉熵)
J ( θ ) = E x , y p ^ d a t a l o g p m o d e l ( y x ) J(\theta)=-E_{x,y\sim \hat{p}_{data}}log p_{model}(y|x)

当最小化这个损失函数时,等价于最小化KL散度,因为交叉熵
H ( P , Q ) = E x P l o g Q ( x ) = H ( P ) + D K L ( P Q ) H(P,Q)=-E_{x\sim P}logQ(x)=H(P)+D_{KL}(P||Q)

二式对应可知, P P 是数据的分布,是未知的,我们仅仅通过采样来近似得到这个分布, Q Q 是模型拟合的分布, H ( P ) H(P) 在采样完成后就固定了,与模型参数的选择无关,故在梯度方法中可以省略,因此最小化交叉熵等价于最小化KL散度,同时,此时我们倾向于选择给定x,当Q大时也大的P。

4.隐藏单元

  • 整流线性单元
    g ( z ) = m a x { 0 , z } g(z)=max\{0,z\}
    初始化时,往往将偏置项初始化为小的正值,使得初始状态下大多数输入被激活,允许导数通过
  • logistic sigmoid与双曲正切函数
    sigmoid在大部分定义域中都饱和,当饱和时,学习就变得十分困难,这是因为此时sigmoid的梯度接近于0,因此最后的梯度会很小
    双曲正切函数通常比sigmoid函数更好

5.万能近似定理

万能近似定理表明,一个前馈神经网络如果具有线性输出层和至少一层具有任何一种“挤压”性质的激活函数的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的Borel可测函数。但并没有说明如何找到这个网络

6.反向传播(Back propagation)

计算图能精确地描述反向传播算法。
反向传播算法的算法一般包括两种:

  • 符号到数值微分(Torch and Caffe):微分返回在输入值处的一组梯度值
  • 符号到符号微分(Theano TensorFlow):添加额外的节点,提供导数的符号描述

反向传播算法本身并不需要知道任何微分法则,它只需要使用正确的参数调用每个操作的bprop方法即可。

动态规划:在反向传播算法中,计算梯度会反复计算很多相同的表达式,因此可以采用一个表格记录中间结果。

值得注意的地方

1.sigmoid实现

在实现过程中,尽量将损失函数写作 z = θ x + b z=\theta x+b 的函数,不要写成 σ ( z ) \sigma(z) 的函数,因为指数和对数的运算可能导致数值问题。

2.softmax实现

过度参数化的softmax更加容易

扫描二维码关注公众号,回复: 4001018 查看本文章

3.更深的和更广阔的模型

更深的模型往往表现更好,这不仅仅是因为模型更大,这可能导致学习由更简单的表示所组成的表示,或者学习具有依赖步骤的程序。

4.定义梯度和自动求导

自动求导算法中,需要人为定义一些基本运算的导数,然后按照求导法则将复杂计算图的求导化归成这些基本操作的组合,因此,算法本身不需要知道微分的法则,只需要知道基本的运算的微分结果即可。
对于一些结果简单,过程复杂的求导步骤,比如softmax的求导,直接定义导数比算法逐步求导要快很多。

5.前馈神经网络性能提升的原因

  • 大数据
  • 高性能计算机
  • 交叉熵替代均方差
  • 分段线性整流单元替代Sigmoid

第七章 深度学习中的正则化

主要内容

1.正则化

正则化定义为“对学习算法的修改——旨在减少泛化误差而不是训练误差”,在学习模型上添加额外的约束和惩罚,它们可以是

  • 编码特定的先验知识
  • 偏好简单的模型

2.参数范数惩罚

通常只对权重做惩罚而不对偏置做惩罚,对偏置的正则化可能导致明显的欠拟合

  • L2参数正则化,使权重更加接近原点
  • L1参数正则化,可以导出稀疏的特征,因此被广泛用于特征选择

3.数据集增强

平移、旋转、缩放都是有效的数据集增强方法。

4.噪声鲁棒性

有些情况中,向输入添加方差极小的噪声等价于对权重加上范数惩罚,同时推动模型进入对权重小的变化相对不敏感的区域。

5.提前终止

提前终止,可能是深度学习中最常用的正则化形式,主要是因为

  • 简单性,几乎不影响原训练过程
  • 有效性,能显著减少测试误差
  • 节约计算资源
    提前终止某种程度上将参数限制在了初始点的附近,防止参数搜索空间过大导致的过拟合现象。

6.模型平均

模型平均是通过几个模型降低泛化误差的技术,主要思想是分别训练几个不同的模型,然后让所有模型表决测试样例的输出,集成至少与它的任何成员表现得一样好。

7.Dropout

在一种近似下,Dropout可以被认为是集成大量深层神经网络的实用Bagging方法,Dropout提供了一种廉价的Bagging集成近似。Dropout在抑制不同神经元时,类似于训练不同的分类器,最终得到的结果就近似于各种不同分类器的近似集成。但是,Dropout与Bagging又有不一样,在Bagging情况下,所有模型都是独立的,但在Dropout下所有模型共享参数。在Bagging下,所有模型被训练到收敛,但在Dropout下,只训练一小部分子网络。
Dropout的优点:

  • 计算方便
  • 不限制适用的模型或训练过程

但是Dropout减少了模型的有效容量,因此需要增大模型规模
重要的观点:Dropout是一种共享隐藏单元的集成模型。

深度模型中的优化

主要内容

1.学习和纯优化的不同

ERM和代理损失函数

所有学习模型的目标是最小化

J ( θ ) = E ( x , y ) p d a t a L ( f ( x ; θ ) , y ) J^{\star}(\theta)=E_{(x,y)\sim p_{data}}L(f(x;\theta),y)

其中, L L 是一个样本的误差函数, f f 是学习的模型。
但通常无法知道 p d a t a p_{data} ,因此,只能最小化经验风险

J ( θ ) = E ( x , y ) p ^ d a t a L ( f ( x ; θ ) , y ) J^{\star}(\theta)=E_{(x,y)\sim \hat{p}_{data}}L(f(x;\theta),y)

这被称为经验风险最小化(Empirical risk minimization)ERM但这有很高的过拟合风险,高容量的模型会简单地记住训练集

当关心的损失函数无法被高效优化时,我们会优化代理损失函数,有时优化代理损失函数能给我们更好的模型。

批量算法和小批量算法

批量算法更新一次的代价很大,而且大部分样本对更新的方向贡献是相似的,因此可以使用小批量算法替代批量算法,小批量的样本个数通常设置为2的幂数,为了与硬件的结构适配。
小批量应当是随机抽取的,以保证样本间的独立性而产生导数的无偏估计,避免自然排列的样本前后直接的相关性。有趣的是,当模型遍历一遍样本后,第二次遍历时,结果将会是有偏的。

2.神经网络优化中的挑战

局部极值与不可辨识性

神经网络的代价函数中可能存在很多局部极小值点,切神经网络模型是不可辨识的,因为任意交换同层的两个隐层节点可以得到相同的模型。然而,神经网络的局部极小点很多时候是一个可以接受的解。

梯度法与牛顿法

高纬非凸函数中,鞍点远多于局部极值,梯度法的目标是向下坡移动,而牛顿法的目标是找到梯度为零的点,实验中梯度下降可以在许多情况下逃离鞍点,而牛顿法可能跳入一个鞍点,这可能解释了神经网络训练中为什么二阶方法无法取代梯度下降的原因。

悬崖和梯度爆炸

损失函数在悬崖处会出现大梯度从而大大增加参数的更新步伐,但需要记住的是梯度仅提供了更新的最佳方向而非步长,梯度截断可以帮助解决此时更新步伐过大的问题。

梯度消失和梯度爆炸

深层的计算图中,涉及大量连续的矩阵乘法,可能导致梯度消失和爆炸的问题。

良好的初始解

训练时间往往与参数到局部极值的路径长度决定,一个好的初始解是十分重要的。

3.基本算法

随机梯度下降

沿着随机挑选的小批量数据的梯度下降方向,在实践中有必要使用逐渐降低的学习率,如线性衰减学习率

ϵ k = ( 1 α ) ϵ 0 + α ϵ τ \epsilon_k=(1-\alpha)\epsilon_0+\alpha\epsilon_{\tau}

其中 α = k τ \alpha=\frac{k}{\tau} ,在 τ \tau 步迭代之后,保持 τ \tau 为常数。

经验上, ϵ τ \epsilon_\tau 设置为 ϵ 0 \epsilon_0 的1%, τ \tau 被设置为几百次,可以检测前几轮迭代,从中选择更大的学习率。

动量

动量旨在加速学习,处理高曲率、小但一致的梯度,或带噪声的梯度,积累之前梯度的指数级衰减的移动平均,并继续沿着该方向移动。其更新准则是

v α v ϵ θ ( 1 m i = 1 m L ( f ( x ( i ) ; θ ) , y ( i ) ) ) v\leftarrow\alpha v - \epsilon\nabla_{\theta}\left( \dfrac{1}{m}\sum_{i=1}^m{L(f(x^{(i)};\theta),y^{(i)})} \right)\\

θ θ + v \theta\leftarrow\theta+v

实践时候, α \alpha 通常设置为0.5,0.9和0.99。
物理上理解,将梯度理解为力,参数更新的步长理解为速度,之前的梯度不断给粒子力使得更新的梯度在各次更新一致的方向上的速度(梯度)越来越大,而由于噪声导致的其他方向的力由于相互抵消而消失,最后使得粒子向着正确的梯度方向大幅前进!

4.参数初始化策略

深度学习算法通常是迭代的,而且初始点能够决定算法是否收敛。
初始化时需要破坏参数的对称性
参数初始化的优化观点和正则化观点:

  • 优化观点:初始化越大越好,从而能传播信息
  • 正则化观点:初始化越小越好,从而引入参数为0的先验,即单元之间不交互比交互更可能的先验,从而在训练过程中,表现出强烈交互愿望的权值才会更突出。

如果计算资源允许,将每层权重的初始值范围设为超参数通常是个好主意,然后使用超参数搜索方法来确定这些超参数。

5.自适应学习率算法

  • AdaGrad
  • RMSProp
  • Adam

当前流行的优化算法包括SGD、具有动量的SGD、RMSProp、具有动量的RMSProp、AdaDelta和Adam。

6.二阶近似方法

牛顿法:计算成本大(Hessian矩阵的维数随着参数数量平方增长),且易跳入鞍点,因此适用于少参数的优化。
共轭梯度法:通过相互正交的搜索方向,解决了最速下降法前后次迭代优化效果抵消的问题。
BFGS:拟牛顿法,通过估计的方法避免Hessian的求逆,但也需要大量存储空间。
L-BFGS:优化了BFGS需要大存储空间的问题。

7.优化策略和元算法

批标准化

深度网络包括了复杂的函数符合,而计算梯度时有其他参数不变这一假设,因此,所有层参数共同改变时,会出现意想不到的后果。
批标准化提出了一种几乎可以重参数化所有深度网络的优雅方法,显著减少了多层之间协调更新的问题。

坐标下降

坐标下降既指块坐标下降,也指严格的单个坐标下降,通过固定部分(单个)参数来优化其余部分(单个)参数,当一个变量的值很大程度地影响另一个变量的最优值时,坐标下降不是一个很好的方法。

Polyak平均

使用在参数空间访问点的平均来得到参数的估计。

监督预训练

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

设计有助于优化的模型

改进优化的最好方法并不总是改进优化算法,相反,深度模型中优化的许多该进来自设计易于优化的模型。

延拓法

逐步优化越来越难优化的损失函数

猜你喜欢

转载自blog.csdn.net/luo3300612/article/details/83344579