1. 讲一下Transformer的残差结构以及意义
在Transformer中,残差结构是指在每个子层(子层通常包括自注意力机制和前馈神经网络)中加入一个“跳跃连接”,即输入可以直接通过这个连接跳到输出端。这种结构可以表示为:
Output = Layer ( x ) + x \text{Output} = \text{Layer}(x) + x Output=Layer(x)+x
这里的 Layer ( x ) \text{Layer}(x) Layer(x)指的是经过某一子层的处理结果,(x)是输入。意义:
- 缓解梯度消失问题:在深层网络中,梯度可能会逐渐变小,导致训练困难。残差结构通过直接连接输入和输出,有助于梯度的反向传播。
- 加速收敛:由于每一层学习的是残差(即变化部分),而不是完整的输出,因此训练速度更快。
- 提高模型性能:实验证明,使用残差结构的网络在许多任务上表现更好。
2. 为什么transformer块使用LayerNorm而不是BatchNorm?LayerNorm 在Transformer的位置是哪里?
原因:
- 适应序列数据:BatchNorm依赖于批次数据的统计量,而序列数据在长度和批次内分布变化较大时,BatchNorm的效果不佳。LayerNorm则是对每个样本的特征进行归一化,不依赖于批次数据的统计量,适用于变长序列数据。
- 消除批次间依赖:BatchNorm会引入批次间的依赖,而LayerNorm则不会,这在训练和推理阶段的一致性上有优势。
LayerNorm在Transformer中的位置:
- 在自注意力层和前馈神经网络之后:每个子层(自注意力机制和前馈神经网络)之后都会进行一次LayerNorm。
- 在残差连接之前:即LayerNorm处理的输出会与残差连接的输入相加。
3. 讲一下BatchNorm技术,以及它的优缺点
BatchNorm技术:批量归一化(Batch Normalization)通过对每一批次的数据进行归一化处理,以减少内部协变量偏移。具体过程为:
- 计算批次数据的均值和方差。
- 利用均值和方差对数据进行归一化。
- 引入可训练的缩放和平移参数,对归一化后的数据进行线性变换。
优点:
- 加速训练:通过减少内部协变量偏移,模型训练更稳定,收敛速度更快。
- 缓解梯度消失/爆炸问题:对输入数据进行归一化,梯度更易于传播。
- 允许使用更高的学习率:提高了模型的训练效率。
缺点:
- 依赖批次大小:小批次数据时效果较差,因为统计量不稳定。
- 对RNN等变长序列数据效果差:在序列长度和批次分布变化较大时效果不佳。
- 引入额外计算开销:每一批次数据需要额外计算均值和方差。
4. 描述一下Transformer中的前馈神经网络?使用了什么激活函数?相关优缺点?
描述:
在Transformer中,前馈神经网络(Feedforward Neural Network, FFN)由两层线性变换和一个非线性激活函数组成。其形式为:
FFN ( x ) = max ( 0 , x W 1 + b 1 ) W 2 + b 2 \text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 FFN(x)=max(0,xW1+b1)W2+b2这里, max ( 0 , x W 1 + b 1 ) \max(0, xW_1 + b_1) max(0,xW1+b1)是ReLU激活函数。
激活函数:
- 通常使用ReLU(Rectified Linear Unit)激活函数。
优点:
- 计算效率高:线性变换和ReLU激活函数的计算成本低。
- 易于并行化:FFN可以独立处理每个位置上的特征,适合并行计算。
- 非线性增强表达能力:ReLU引入非线性,使网络可以学习更复杂的特征。
缺点:
- 无序列依赖:FFN只处理每个位置上的特征,不考虑序列间的依赖关系。
- 参数量大:两层全连接网络需要大量参数,可能导致模型过大。
5. Encoder端和Decoder端是如何进行交互的?
- 编码器生成上下文表示:编码器将输入序列编码为一系列上下文表示(Contextual Embeddings),这些表示包含了输入序列的全部信息。
- 解码器通过注意力机制访问编码器的表示:解码器在生成目标序列的过程中,通过多头注意力机制访问编码器的输出表示,从而获取输入序列的相关信息。
- 编码器-解码器注意力:在解码器的每一层中,都会有一个专门的编码器-解码器注意力层,这一层利用编码器的输出和当前解码器的输入,通过注意力机制计算出与生成当前输出最相关的输入表示。
6. Decoder阶段的多头自注意力和encoder的多头自注意力有什么区别?
- 遮掩机制(Masking):解码器的多头自注意力机制中使用了未来位置的遮掩(Masked Self-Attention),即在计算注意力权重时,屏蔽掉当前时刻之后的所有位置。这是为了确保解码器在生成第t个词时,只能看到第t-1个词及之前的词。而编码器的多头自注意力没有这种遮掩机制。
- 交互对象不同:编码器的多头自注意力只在输入序列内进行计算,而解码器的多头自注意力则是在目标序列内进行计算,同时还包含了与编码器输出的交互。
7. Transformer的并行化体现在哪个地方?
- 自注意力机制:自注意力机制可以并行计算每个位置与其他所有位置的关系,不需要依赖前后位置的信息,适合GPU等并行计算设备。
- 前馈神经网络:前馈神经网络的计算可以独立处理每个位置上的特征,易于并行化。
- 无时序依赖:Transformer摒弃了传统RNN的时序依赖,每个位置的计算不依赖于其他位置的输出,进一步提升了并行计算的效率。
这样,Transformer可以充分利用现代硬件的并行计算能力,大大提高了模型的训练和推理速度。