郭震 AI公众号:郭震AI

21 Transformer架构分析

发布日期:

最近更新:

分类: 30个神经网络

预计阅读: 4 分钟

阅读次数: 0

系列进度

AI 30 个神经网络 · 第 21 / 62

预计阅读4 分钟
结构重点6 个
图文要点6 张
正文规模1.7k 字
Transformer架构分析结构图查看大图
Transformer架构分析结构图

Transformer 把序列建模从一步步递推,变成一次性看清 token 之间的关系。理解它时,先看注意力矩阵如何分配信息。这篇重点看评估。速度、精度、显存和可复现设置要一起记录,单个指标不能代表全部。

Transformer架构分析实操核对图查看大图
Transformer架构分析实操核对图

我会检查序列长度、mask、位置编码和多头输出形状。注意力相关 bug 往往藏在 mask 和维度里。

在继承了RNN在序列数据处理中的优越性能之后,Transformer以一种全新的方式对结构进行了革新。在上篇中,我们探讨了RNN在自然语言处理(NLP)中的实际应用,而在这一篇中,我们将深入分析Transformer的架构及其关键组成部分,为下一篇关于Transformer优势的讨论做铺垫。

Transformer的基本架构

Transformer架构由“编码器-解码器”模式构成,广泛应用于NLP任务,如机器翻译、文本生成等。它的主要创新在于完全摒弃了传统RNN的循环结构,而是采用“自注意力机制”来捕捉序列中元素之间的关系。

Transformer架构判断卡查看大图
Transformer架构判断卡

分析 Transformer 架构时,先看输入嵌入、位置编码、多头注意力、前馈网络、残差归一化和输出任务。

编码器与解码器

Transformer的结构主要由两个部分组成:编码器和解码器。

  1. 编码器:由一系列相同的层堆叠而成,每一层主要包括两个子层:

    • 自注意力层:计算当前输入序列中各个位置之间的相对重要性。其核心操作为计算查询(Q)、键(K)、值(V)矩阵的点积,公式如下:
    Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

    这里,dkd_k是键的维度,softmax用于归一化得分,使其变成权重。

  • 前馈神经网络:经过两个线性变换和一个激活函数,通常采用ReLU激活。
  • 解码器:同样由若干层堆叠,除了自注意力层和前馈神经网络外,还增加了一层“编码器-解码器注意力”,用于关注与编码器输出的相关信息。

  • 残差连接与层归一化

    每个子层都采用了残差连接,确保在反向传播过程中信号的稳定性。随后,进行层归一化来加快收敛速度并防止训练过程中的梯度消失。

    位置编码

    由于Transformer缺乏序列信息的顺序结构,位置编码作为一种关键机制被引入,以帮助模型理解输入单词的位置。位置编码会被加到输入的嵌入表示中,其公式为:

    神经网络阅读地图卡查看大图
    神经网络阅读地图卡

    读完《Transformer架构分析》后,可以回头问三件事:它解决什么问题,哪一步最容易出错,自己能否拿一个小例子跑通。

    PE(pos,2i)=sin(pos100002i/dmodel)PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right) PE(pos,2i+1)=cos(pos100002i/dmodel)PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)

    这里,pospos为位置索引,ii为维度索引,dmodeld_{model}为嵌入的维度。

    案例:机器翻译

    以机器翻译为例,Transformer架构的实际应用展现了其卓越的性能。传统的RNN模型在长句子翻译时容易出现信息遗失,而Transformer通过自注意力有效地捕获了长距离依赖关系,使翻译质量显著提高。

    以TensorFlow实现Transformer的一部分代码如下:

    import tensorflow as tf
    
    def get_positional_encoding(maximum_position_encoding, d_model):
        angle_rads = tf.keras.backend.arange(maximum_position_encoding, dtype=tf.float32)[:, tf.newaxis] / tf.pow(10000, (2 * (tf.keras.backend.arange(d_model, dtype=tf.float32) // 2)) / d_model)
        angle_rads[0:, 0::2] = tf.sin(angle_rads[0:, 0::2])  # dim 2i
        angle_rads[0:, 1::2] = tf.cos(angle_rads[0:, 1::2])  # dim 2i+1
        return angle_rads
    

    在这个代码中,我们生成了位置编码并将其应用于输入嵌入中。这样,模型就能够理解单词在句子中的具体位置,从而做出更准确的预测。

    Transformer架构分析应用复盘卡查看大图
    Transformer架构分析应用复盘卡

    复习《Transformer架构分析》时,建议把关键概念、操作步骤和可见结果放在同一页里回看。

    Transformer架构分析应用检查卡查看大图
    Transformer架构分析应用检查卡

    练习《Transformer架构分析》时,建议把输入条件、处理动作和可见结果写在一起,方便下次复查。

    总结

    Transformer架构通过自注意力机制、残差连接以及位置编码的创新设计,极大地提升了序列数据处理的效率和效果。与传统RNN相比,Transformer在捕获长距离依赖和并行处理上显然有着无法比拟的优势。在下一篇中,我们将深入讨论Transformer的具体优势,揭示其在现代NLP任务中的广泛应用潜力。

    相关教程

    相关入口

    AI 教程总索引

    分享文章

    转发到常用平台

    微信/朋友圈可先复制链接

    相关教程

    AI 教程总索引

    相关内容

    相关 AI 教程

    返回栏目

    Reader Messages

    读者留言

    有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

    最多 800 字

    为了防刷,每条留言会做长度、链接数量和提交频率限制。

    0/800

    留言列表

    0
    正在加载留言...