可以看到 Encoder 的内部除了 Multi-Head Attention 模块,还有 Feed Forward Network、Add & Norm 模块,这两个模块都是跟在 Multi-Head Attention 模块之后做 “加强表现” 效果的在线课堂。
Encoder 架构
▐ 6 .1 FFN 模块
首先,可以看到不论 Encoder 还是 Decoder,在做完 Multi-Head Attention 后,都会接一个 FFN 网络,那这个 FFN 网络到底有什么用呢?要搞清这个问题,还是要先从原理入手在线课堂。
FFN 的计算公式: 通过公式,其实不难得出,FFN 是由全连接层(FC)和激活函数 Relu 组成在线课堂。其实通过分析公式,已经可以得出 FFN 的作用,即对矩阵进行 空间的变换 ,引入 非线性特征 ,来增强模型的表现能力。
FFN 模块架构图
可能有些同学会存在疑问,在 Multi-Head Attention 的最后其实有线性矩阵 的计算,已经将结果映射成和输入 X 相同维度了,为什么这里还要增加一个 FFN 模块?笔者认为这里是把向量先 线性变化到高维空间 再重新变换回来可以得到更加抽象的数据,泛化效果更好在线课堂。当然把 FFN 模块去掉也可以使用,但是效果差了很多。(笔者观点,有待讨论~)
▐ 6 .2 Add & Norm 模块
Add & Norm 层由 Add 和 Norm 两部分组成在线课堂,其计算公式如下:
从公式开始分析,X 为 Multi-Head Attention 或者 Feed Forward 的输入(从架构图中更能清晰得出),MultiHeadAttention (X) 和 FeedForward (X) 则表示输出 在线课堂。有些同学会疑问这两者是否可以直接相加?其实我们看前面所有的技术介绍时,可以发现所有的模块在最后都经过了 线性的变换 , 从而保证输出和输入的 X 矩阵维持同样的维度,比如在 Multi-Head Attention 模块,最后乘了 矩阵保证了输出和输入相同维度。
Add 是指 X + MultiHeadAttention (X) 和 X + FeedForward (X),这是一种残差网络,通常用于解决深度学习中多层网络训练的问题, 通过将前一层的信息无差别的传递到下一层,从而可以让网络只关注当前差异的部分 在线课堂。(具体残差网络的知识不在此展开)
残差网络
Norm 模块则代表了 Layer Normalization,简单来说它的作用是 规范优化空间,加速训练的收敛 在线课堂。
当我们使用梯度下降算法做优化时,我们可能会对输入数据进行归一化,但是经过网络层作用后,我们的数据已经不是归一化的了在线课堂。随着网络层数的增加,数据分布不断发生变化,偏差越来越大,导致我们不得不使用更小的学习率来稳定梯度。Layer Normalization 的作用就是 保证数据特征分布的稳定性,将数据标准化到 ReLU 激活函数的作用区域,可以使得激活函数更好的发挥作用。