1. 模型学习能力
1.1 模型深度(隐藏层数量) 理论上来讲,只要隐藏层内具有足够的神经元数量(层宽度),仅含一个隐藏层的神经网络就足以对最复杂的输入特征做出准确预测。但对复杂特征来说,深层网络的参数效率要显著高于(具有更多神经元的)浅层网络。
因为:与浅层网络相比,深层网络可以使用更少的神经元对复杂函数进行建模,且每层习得不同抽象层次的数据特征,从而更快地收敛到一个更好的解,并同时具有更好的泛化性能。所以模型设计中,更倾向于先增加隐藏层的数量,然后再调整每个隐藏层中的神经元数量,来获得合适输入特征复杂度的模型学习能力。
1.2 模型宽度(隐藏层中的神经元数量) 一般来讲,隐藏层中的神经元数量越多,模型的学习能力越强,可以解析更复杂的输入特征。对于含有多个隐藏层的神经网络,不同隐藏层中的神经元数量常见:塔状结构和桶装结构两种设计方案。
塔状结构中,每一层的神经元数量越来越少,因为它认为:许多低层特征可以合并成更少的高层特征。桶装结构中,所有隐藏层使用同样的神经元数量,它与塔式结构相比,减少了需调整的超参数数量,且在大多数情况下二者表现效果相似。
所以,目前神经网络中,基本均采取桶式结构(模型宽度只需调整一个超参数)(塔式结构很大程度上已被放弃,但不排除未来复活的可能性)。
2. 梯度稳定性
2.1 初始化策略 神经网络中常见的参数初始化方法,如下表所示1:
初始化方法 | 最适合的激活函数 | 基于正态分布的实现(normal) | 基于均匀分布的实现(uniform) |
---|---|---|---|
Constant | - | - | - |
Random | - | η = 0 , σ 2 = 1 \begin{matrix} \eta = 0, & \sigma^{2} = 1 \end{matrix} η=0,?σ2=1? | ? r = ? 1 , r = 1 \begin{matrix} -r = -1, & r = 1 \end{matrix} ?r=?1,?r=1? |
Glorot(Xavier) | None、tanh、sigmoid(logistic)、softmax | η = 0 , σ 2 = 1 / f a n a v g \begin{matrix} \eta = 0, & \sigma^{2} = 1 / fan_{avg} \end{matrix} η=0,?σ2=1/fanavg?? | ? r = ? 3 / f a n a v g , r = 3 / f a n a v g \begin{matrix} -r = -\sqrt{3/fan_{avg}} , & r = \sqrt{3/fan_{avg}} \end{matrix} ?r=?3/fanavg? ?,?r=3/fanavg? ?? |
He | ReLU、Leaky ReLU、RReLU、PReLU、ELU | η = 0 , σ 2 = 2 / f a n i n \begin{matrix} \eta = 0, & \sigma^{2} = 2 / fan_{in} \end{matrix} η=0,?σ2=2/fanin?? | ? r = ? 6 / f a n i n , r = 6 / f a n i n \begin{matrix} -r = -\sqrt{6/fan_{in}} , & r = \sqrt{6/fan_{in}} \end{matrix} ?r=?6/fanin? ?,?r=6/fanin? ?? |
LeCun | SELU | η = 0 , σ 2 = 1 / f a n i n \begin{matrix} \eta = 0, & \sigma^{2} = 1 / fan_{in} \end{matrix} η=0,?σ2=1/fanin?? | ? r = ? 3 / f a n i n , r = 3 / f a n i n \begin{matrix} -r = -\sqrt{3/fan_{in}} , & r = \sqrt{3/fan_{in}} \end{matrix} ?r=?3/fanin? ?,?r=3/fanin? ?? |
Orthogonal | - | - | - |
神经网络的权重(weights / kernel)参数,默认采用Glorot初始化(也称Xavier初始化)策略,它在增强训练过程中的梯度稳定性的同时,也可显著加快模型训练速度。当使用 ReLU 及其变体作为激活函数时,改用 He (权重)初始化策略,可取得更好的梯度稳定性效果,但这也会影响(减慢)模型训练速度2。
循环神经网络的状态权重(recurrent_kernel)参数初始化时,必须采用 Orthogonal 方法,以避免沿时间步方向传播过程中的梯度消失现象。
2.2 激活函数 神经网络中,常用的激活函数可分为饱和激活函数和非饱和激活函数两大类,其中非饱和激活函数有助于缓解训练过程中的“梯度消失”问题,如下表所示:
分类 | 激活函数 | 改善梯度消失效果 | 运算速度 | 适用场景 |
---|---|---|---|---|
饱和 | Sigmoid | 无 | 一般 | - |
饱和 | tanh | 无 | 一般 | - |
非饱和 | ReLU | 一般 | 高 | - |
非饱和 | LeakyReLU | 较高 | 较高 | - |
非饱和 | RReLU | 较高 | 较高 | 存在过拟合 |
非饱和 | PReLU | 较高 | 较高 | 大训练数据集 |
非饱和 | ELU | 高 | 一般 | - |
非饱和 | SELU | 高 | 一般 | 顺序架构网络3 |
2.3 归一化 批量归一化(Batch Normalization)和层归一化(Layer Normalization)是两种常用的归一化方法,它们可有效改善训练过程中,由数据大小量级差异引起的梯度不稳定现象(梯度消失和梯度爆炸)。
二者的差异主要在于数据归一化的方向不同,批量归一化主要消除不同样本间数据大小量级间的差异,层归一化主要消除同一个样本内不同时间步间数据大小量级间的差异。图像处理任务中,批量归一化的效果好;自然语言处理任务中,层归一化的效果更好。
2.4 梯度裁剪 梯度裁剪是缓解梯度爆炸的另一种主流技术。它常用于循环神经网络,因为在RNN类网络中难以使用批量归一化。对于其他类型的神经网络,批量归一化通常就已足够好了。
3. 避免过拟合 目前主流的神经网络正则化方法有提前停止(Early Stopping)、 l 1 l_{1} l1? 或l 2 l_{2} l2? 正则化和 Dropout 三种。其中,提前停止应用于改进模型训练策略, l 1 l_{1} l1? 或l 2 l_{2} l2? 正则化为损失函数添加正则化惩罚系数,Dropout 改进模型结构。神经网络中,常用 Dropout 代替l 1 l_{1} l1? 或l 2 l_{2} l2? 正则化起到防止过拟合的作用,并在训练过程中配合提前停止(Early Stopping)一起使用。
Dropout 的原理是:在每个训练步骤(step)中,每个神经元(包括输入层神经元,但不包括输出层神经元)都有暂时“删除”的概率p4,这意味着这个训练步骤(step)中该神经元被完全忽略,但在下一步中仍可能处于活动状态。
采用 Dropout 技术后,每个训练步骤(step)中的网络结构都不相同(因为共有2 N 2^{N} 2N 种可能的网络结构,其中 N 是可以 dropout 的神经元总数),因此经过 dropout 训练的神经元不能与其相邻的神经元相互适应,必须自己发挥最大的作用,且不能过分依赖少数神经元的作用,而要必须关注到每一个神经元对预测结果的影响;这显著提高了模型的鲁棒性,使其对输入的微小变化不太敏感,有更好的泛化能力。
- 其中:
r = 3 σ 2 r = \sqrt{3\sigma^{2}} r=3σ2 ?
f a n a v g = ( f a n i n + f a n o u t ) / 2 fan_{avg} = (fan_{in}+fan_{out})/2 fanavg?=(fanin?+fanout?)/2
f a n i n fan_{in} fanin? 是待初始化层输入向量的维度
f a n o u t fan_{out} fanout? 是待初始化层输出向量的维度(它也等于该层网络的神经元数量,即层宽度) ??
- 更多关于初始化策略和激活函数的信息可参阅《机器学习实战》的11.1.1节(P295页) ??
- 在非顺序架构网络(如RNN类网络)中,ELU的效果可能会优于SELU(因为SELU在 z=0 处不光滑) ??
- 超参数 p 称为dropout率,通常设置在 0.1 到 0.5 之间;
在循环神经网络中,常设置在 0.2 到 0.3 之间;
在卷积神经网络中,常设置在 0.4 到 0.5 之间;
特别注意,当 p=0.5 时神经元的权重需要特殊处理,详见《机器学习实战》的第233至234页。 ??
推荐阅读
- 深度学习|李宏毅机器学习2021——Optimization(最优化)
- 机器学习|Graph Neural Network学习笔记-Day2
- 学习笔记|学习笔记 Graph Neural Network (李宏毅 机器学习)
- 视频分类|VidSage: Unsupervised Video Representational Learning with Graph Convolutional Networks个人论文笔记
- 图表示学习|《Graph Representation Learning》笔记 Chapter5
- GNN|李宏毅助教GNN视频笔记
- GNN|【GNN笔记】Dynamic Graph的分类(16)
- 论文深析|[论]【DSTG】Dynamic SpatiotemporalGraph Convolutional Neural Networks for Traffic Data Imputation
- 前沿AI技术体验(从文字直接产生图片,结果真的震撼! 非常有意思!)