系列文章目录
第1章 绪论
第2章 机器学习概述
第3章 线性模型
第4章 前馈神经网络
第5章 卷积神经网络
第6章 循环神经网络
第7章 网络优化与正则化
第8章 注意力机制与外部记忆
第9章 无监督学习
第10章 模型独立的学习方式
第11章 概率图模型
第12章 深度信念网络
第13章 深度生成模型
第14章 深度强化学习
第15章 序列生成模型
文章目录
- 系列文章目录
- 前言
- 7.1 网格优化
-
- 7.1.1 网格优化所面临的难点
- 7.1.2 高维空间的非凸优化问题
- 7.1.3 神经网络优化的改善方法
- 7.2 优化算法
-
- 7.2.1 小批量梯度下降
- 7.2.2 批量大小的选择
- 7.2.3 学习率调整
-
- 7.2.3.1 学习率的影响效果
- 7.2.3.2 学习率的衰减方式
- 7.2.4 梯度估计修整
-
- 7.2.4.1 梯度方向优化
- 7.2.4.2 梯度方向优化+自适应学习率
- 7.2.4.3 梯度截断
- 7.2.5 优化算法改进小结
- 7.3 参数初始化
-
- 7.4 逐层归一化
-
- 7.4.1 批量归一化
- 7.4.2 层归一化
- 7.4.3 归一化比较
- 7.5 超参数优化
-
- 7.6 网络正则化
-
- 7.6.1 L1与L2正则化
- 7.6.2 提前停止
- 7.6.3 权重衰减
- 7.6.4 丢弃法(Dropout Method)
- 7.6.5 数据增强
- 7.6.6 标签平滑
- 总结
前言
7.1 网格优化
7.1.1 网格优化所面临的难点
- 结构差异大,没有通用的优化算法,超参数多
- 对于非凸优化问题,要解决参数初始化,以及结果逃离局部最优或鞍点的问题
- 解决梯度爆炸或梯度消失问题
7.1.2 高维空间的非凸优化问题
- 鞍点问题:
在二维空间中容易出现驻点问题,而在多维空间中更容易出现鞍点(梯度为0的点)问题。
- 平坦最小值
一个平坦最小值的邻域内,所有点对应的训练损失都比较接近;大部分的局部最小解是等价的;
局部最小解对应的训练损失都可能非常接近于全局最小解对应的训练损失。
- 优化地形的的可视化
通过添加残差网络,解决非凸优化问题的问题
7.1.3 神经网络优化的改善方法
- 更有效的优化算法来提高优化方法的效率和稳定性,如动态学习率调整,梯度估计修正;
- 更好的参数初始化方法、数据预处理方法来提高优化效率;
- 修改网络结构来得到更好的优化地形,如优化地形( Optimization Landscape )指在高维空间中损失函数的曲面形状,好的优化地形通常比较平滑,使用 ReLU 激活函数、残差连接、逐层归一化等。
- 使用更好的超参数优化方法
7.2 优化算法
7.2.1 小批量梯度下降
-
随机梯度下降法:
- 小批量梯度下降法MiniBatch:
(1). 选取K个训练样本 { x ( K ) , y ( K ) } k = 1 K \{x^{(K)},y^{(K)}\}^K_{k=1} {x(K),y(K)}k=1K,计算偏导数
(2). 定义梯度
(3). 更新参数
7.2.2 批量大小的选择
影响方式:
- 批量大小不影响随机梯度的期望,但是会影响随机梯度的方差;
- 批量越大,随机梯度的方差越小,引入的噪声也越小,训练也越稳定,因此可以设置较大的学习率。
- 而批量较小时,需要设置较小的学习率,否则模型会不收敛。
改进训练参数的方法:
7.2.3 学习率调整
7.2.3.1 学习率的影响效果
- 学习率过小,权重参数更新慢;
- 学习率过大,无法获得最优解。
7.2.3.2 学习率的衰减方式
学习率衰减的含义:随着训练发的进行,学习率的总趋势在不断减小。
- 常见的衰减方式为梯级衰减与线性衰减。
- 假设初始化学习率为 α 0 α_0 α0,在第t次迭代时的学习率 α t α_t αt。可以设置衰减方式为按迭代次数进行衰减,如:
- 逆时衰减(inverse time decay)
α t = α 0 1 1 + β × t α_t=α_0\frac{1}{1+\beta \times t} αt=α01+β×t1
- 指数衰减(exponential decay)
α t = α 0 β t α_t=α_0\beta^t αt=α0βt
- 自然指数衰减(exponential decay)
α t = α 0 e − β t α_t=α_0e^{-\beta t} αt=α0e−βt
- 采用周期性学习率调整 Cyclical Learning Rates,在训练过程中遵循学习率减小的趋势,跳出局部最优,从而获得最优解。
下面左图为一次性到达全局最优,右图为先到达局部最优,之后经过几次热重启到达全局最优。
- 学习率的自适应调整
根据梯度以及前一次的训练结果自动地调整学习率。
7.2.4 梯度估计修整
7.2.4.1 梯度方向优化
- 动量法
用之前积累动量来替代真正的梯度。每次迭代的梯度可以看作是加速度。在第t次迭代时,计算负梯度的“加权移动平均”作为参数的更新方向:
Δ θ t = ρ Δ θ t − 1 − α g t = − α ∑ τ = 1 t β t − τ g τ \Delta\theta_t=ρ\Delta\theta_{t-1}-\alpha g_t\\ =-\alpha \sum_{\tau=1}^t\beta^{t-\tau}g_{\tau} Δθt=ρΔθt−1−αgt=−ατ=1∑tβt−τgτ
其中 ρ \rho ρ为动量因子,通常设为0.9, α \alpha α为学习率。
- Nesterov加速梯度
Δ θ t = ρ Δ θ t − 1 − α g t ( θ t − 1 + ρ Δ θ t − 1 ) \Delta\theta_t=ρ\Delta\theta_{t-1}-\alpha g_t(\theta_{t-1}+ρ\Delta\theta_{t-1}) Δθt=ρΔθt−1−αgt(θt−1+ρΔθt−1)
7.2.4.2 梯度方向优化+自适应学习率
Adam算法≈动量法+RMSprop
先计算两个移动平均:
偏差修整:
更新:
7.2.4.3 梯度截断
梯度截断是一种比较简单的启发式方法,把梯度的模限定在一个区间,当梯度的模小于或大于这个区间时就进行截断。
7.2.5 优化算法改进小结
-
大部分优化算法可以使用下面公式来统一描述概括:
g_t 为第t步的梯度,α_t 为第t步的学习率。
-
各算法列表比较
-
在鞍部各算法比较
-
求解最小各函数比较
7.3 参数初始化
参数初始化的方法有预训练初始化、随机初始化、固定值初始化(偏置( Bias )通常用 0 来初始化)。
7.3.1 随机初始化
Gaussian分布初始化 :
Gaussian初始化方法是最简单的初始化方法,参数从一个固定均值(比如0)和固定方差(比如0.01)的Gaussian分布进行随机初始化。
均匀分布初始化
参数可以在区间[−r,r]内采用均匀分布进行初始化。
范数保持性( Norm-Preserving )
一个 层的等宽线性网络
为了避免梯度消失或梯度爆炸问题,我们希望误差项:
基于方差缩放的参数初始化
Xavier 初始化和 He 初始化
正交初始化
- 用均值为 0 、方差为 1 的高斯分布初始化一个矩阵;
- 将这个矩阵用奇异值分解得到两个正交矩阵,并使用其中之一作为权重矩阵。
7.3.2 数据预处理
- 尺度不变性:机器学习算法在缩放全部或部分特征后不影响学习和预测。
- 归一化(Normalization):将数据转换到规定范围。
- 数据归一化常用方法
- 最小最大规范化
x ^ ( n ) = x ( n ) − m i n n ( x ( n ) ) m a x n ( x ( n ) ) − m i n n ( x ( n ) ) \hat x^{(n)}=\frac {x_{(n)}-min_n(x^{(n)})} {max_n(x^{(n)})-min_n(x^{(n)})} x^(n)=maxn(x(n))−minn(x(n))x(n)−minn(x(n))
- 标准化
x ^ ( n ) = x ( n ) − μ σ , μ = 1 N ∑ n = 1 N x ( n ) , σ 2 = 1 N ∑ n = 1 N ( x ( n ) − μ ) 2 \hat x^{(n)}=\frac{x^{(n)}-\mu}{\sigma},\\ \\ \mu=\frac{1}{N}\sum^N_{n=1}x_{(n)},\\ \sigma^2=\frac{1}{N}\sum_{n=1}^N(x^{(n)}-\mu)^2 x^(n)=σx(n)−μ,μ=N1n=1∑Nx(n),σ2=N1n=1∑N(x(n)−μ)2
- PCA
- 数据归一化对梯度的影响
7.4 逐层归一化
逐层归一化的目的:通过内部协变量偏移获得更好的尺寸不变性,可以更平滑地优化地形。
7.4.1 批量归一化
对于一个深层神经网络,令第l层的净输入为 Z ( l ) Z^{(l)} Z(l),神经元的输出为 a ( l ) a^{(l)} a(l),即:
a ( l ) = f ( z ( l ) ) = f ( W a ( l − 1 ) + b ) a^{(l)}=f(z^{(l)})=f(Wa^{(l-1)}+b) a(l)=f(z(l))=f(Wa(l−1)+b)
其中f(.)是激活函数,W和b是可学习的参数。
给定一个包含K 个样本的小批量样本集合,计算均值和方差
批量归一化
7.4.2 层归一化
第l层神经元的净输入为 z ( l ) z^{(l)} z(l):
层归一化定义为:
7.4.3 归一化比较
批量归一化与层归一化比较
各种归一化的比较
7.5 超参数优化
常见的超参数:
层数、每层神经元个数、激活函数、学习率(以及动态调整算法)、正则化系数、mini-batch 大小。
优化方法:
网格搜索、随机搜索、贝叶斯优化、动态资源分配、神经架构搜索。
7.5.1 网格搜索
假设总共有K 个超参数,第k个超参数的可以取m_k 个值。如果参数是连续的,可以将参数离散化,选择几个“经验”值。比如学习率α,我们可以设置:
α ∈ 0.01 , 0.1 , 0.5 , 1.0 α ∈ {0.01,0.1,0.5,1.0} α∈0.01,0.1,0.5,1.0
这些超参数可以有 m 1 × m 2 × ⋅ ⋅ ⋅ × m K m_1 × m_2 ×···× m_K m1×m2×⋅⋅⋅×mK 个取值组合。
7.5.2 随机搜索
假设总共有K 个超参数,第k个超参数的可以取m_k 个值。如果参数是连续的,可以将参数离散化,然后采用随机函数产生参数范围中的参数:
随机搜索与网格搜索的比较
7.6 网络正则化
由于神经网络过度参数化,导致训练结果拟合能力过强,泛化性降低,所以我们要想一些办法降低过拟合,提高泛化性能,即采用正则化来损害优化。
正则化:所有损害优化的方法都是正则化,常用的方法有增加约束(L1,L2约束、数据增强)和干扰优化过程(权重衰减、随机梯度下降、提前停止)。
7.6.1 L1与L2正则化
优化问题可以写为:
ℓ p ℓ_p ℓp为范数函数,p的取值通常为{1,2}代表 ℓ 1 ℓ_1 ℓ1和 ℓ 2 ℓ_2 ℓ2范数,λ为正则化系数。
隐藏层的神经元个数对泛化能力的影响:
正则化系数对泛化能力的影响:
可以看出,正则化系数越小,泛化能力越差。
7.6.2 提前停止
我们使用一个验证集(Validation Dataset)来测试每一次迭代的参数在验证集上是否最优。如果在验证集上的错误率不再下降,就停止迭代。
7.6.3 权重衰减
在每次参数更新时,引入一个衰减系数w
- 在标准的随机梯度下降中,权重衰减正则化和 ℓ 2 ℓ_2 ℓ2正则化的效果相同。
- 在较为复杂的优化方法(比如Adam)中,权重衰减和 ℓ 2 ℓ_2 ℓ2正则化并不等价。
7.6.4 丢弃法(Dropout Method)
对于一个神经层y = f(Wx+b),引入一个丢弃函数d(·)使得y = f(Wd(x)+b)。
其中 m ∈ { 0 , 1 } d m ∈\{0,1\}^d m∈{0,1}d 是丢弃掩码(dropout mask),通过以概率为p的贝努力分布随机生成。
丢弃法的意义:
- 集成学习的解释:每做一次丢弃,相当于从原始的网络中采样得到一个子网络。如果一个神经网络有n个神经元,那么总共可以采样出2n个子网络。
- 贝叶斯解释
其中f(x,θm)为第m次应用丢弃方法后的网络。
循环神经网络上的丢弃法:
- 当在循环神经网络上应用丢弃法,不能直接对每个时刻的隐状态进行随机丢弃,这样会损害循环网络在时间维度上记忆能力。
- 根据贝叶斯学习的解释,丢弃法是一种对参数θ的采样。
每次采样的参数需要在每个时刻保持不变。因此,在对循环神经网络上使用丢弃法时,需要对参数矩阵的每个元素进行随机丢弃,并在所有时刻都使用相同的丢弃掩码。
相同颜色表示使用相同的丢弃掩码
7.6.5 数据增强
- 图像数据的增强方法:
- 旋转(Rotation):将图像按顺时针或逆时针方向随机旋转一定角度;
- 翻转(Flip):将图像沿水平或垂直方法随机翻转一定角度;
- 缩放(Zoom In/Out):将图像放大或缩小一定比例;
- 平移(Shift):将图像沿水平或垂直方法平移一定步长;
- 加噪声(Noise):加入随机噪声。
- 文本数据的增强方法:
- 词汇替换
- 回译(Back Translation 如将英语用机器翻译为汉语再翻译为英语)
- 随机编辑噪音(增删查改、句子乱序)。
7.6.6 标签平滑
含义:
在输出标签中添加噪声来避免模型过拟合。
实例:
一个样本x的标签一般用onehot向量表示:
引入一个噪声对标签进行平滑,即假设样本以ϵ的概率为其它类。平滑后的标签为:
去去去
总结