系列文章目录
第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.3.1 随机初始化
- 7.3.2 数据预处理
- 7.4 逐层归一化
- 7.4.1 批量归一化
- 7.4.2 层归一化
- 7.4.3 归一化比较
- 7.5 超参数优化
- 7.5.1 网格搜索
- 7.5.2 随机搜索
- 7.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 网络正则化
去去去