深度学习模型设计模式
随着深度学习的不断发展,各式各样包括bert、transformer在内的深度神经网络架构层出不穷,在这些不同的网络架构中往往包含一些通用的深度网络设计模式,主要理解三种:
- batch/layer normalization
- 残差
- 注意力机制
Normalization
Batch Normalization
对输入的一个batch进行标准化处理(减均值,除以方差),能够有效的降低深度网络的学习难度
- l从梯度角度理解,当从x->y的梯度变化 $\beta$ 变化较大时,梯度下降时沿着x点梯度移动,学习会出现偏差(斜率替代每个点的导数,如果导数变化过大,沿着斜率走就会偏离函数图像)
- 对于分布变化较大的数据要采用较小的学习率,否则就需要通过Batch Normalization对输入进行平滑化(smooth)
- 只对线性方法起作用,深度神经不起作用
批量归一化的主要步骤:
首先将输入转化为2D形式数据
标准化
还原
- $\beta_j $ $\gamma_j$两个参数神经网络学习决定
- 形式上理解为 由模型通过学习决定是否真的需要normalization
转换为输入形状,输出
实现代码如下
训练过程中 并不保留所有batch的均值和方差平均值 供预测使用
每次使用动量更新一个新的moving_var,moving_mean在预测中使用
完整代码:
Layer Normalization
BN在batch上做归一化,LN在样本上做归一化
由于RNN循环计算特性,不同时间步类似于不同的batch,均值和方差变化较大,无法共享使用(若输入长度为10,需要维护10个不同时间步的均值和方差,当预测长度为20时,后10个时间步在训练过程中没有均值和方差)
相较于Batch Normalization,将时间步看作为batch维度,reshape维度改变,其他操作不同
More Normalization
总结
- Normalization的主要目的是为了 使目标函数平滑化,降低模型学习难度(即可以使用更大的学习率)
- 一般步骤包括
- reshape
- normalization
- recovery
注意力机制
略
残差
略