终于到序列模型课程最后一周的内容了,本篇博客依然是基于Andrew Ng的深度学习专项课程的序列模型来编写的,本篇内容不会很多,主要就是Transformer网络相关的知识点,Transformer网络是一种基于注意力机制的神经网络架构,被广泛应用于自然语言处理领域,尤其是机器翻译任务中。本文将详细介绍Transformer网络的关键概念和工作原理。废话不多说,现在开始吧。 Transformer 网络介绍我们前面讲解过在序列模型中常用的技术包括RNN、GRU和LSTM,这些模型虽然解决了一些问题,包括梯度消失、长距离依赖等,但模型的复杂度也随之增加了不少。它们都是顺序模型,会将输入一个词或一个标记地顺序处理。显然这样的处理性能是比较弱的。 Transformer架构创新性地将注意力机制和CNN相结合,允许我们对整个序列进行并行计算,可以一次处理整个句子,而不是从左到右逐词处理。它的核心理念主要是自注意力(Self Attention)和多头注意力(Multi-Head Attention) 这两点。 Self-Attention自注意力(Self-Attention)机制是Transformer网络的核心组件。它可以对序列进行并行计算,为序列中的每个词汇生成一个注意力向量,表示其在特定上下文中的含义。 自注意力机制可以帮助我们理解每个单词在特定上下文中的含义。比如,'Africa'这个词,在不同的上下文中可能代表历史兴趣的地点,或者假期的目的地,或者世界第二大洲。自注意力机制会根据周围的单词来确定在此句子中我们谈论的'非洲'的最合适的表示方式。 ![]() 自注意力机制为序列中每个词汇计算出一个Query向量、Key向量和Value向量。其具体计算步骤如下:
自注意力机制的优点在于可以根据整个序列的上下文来获得每个词汇的表示,而非仅依赖于临近词汇。同时,其并行计算性质也大大提升了模型的训练和推理效率。 我们对序列中的所有单词执行上述计算过程,以获取相应的自注意力表示。最后,所有这些计算可以由Attention(Q, K, V)进行概括,其中Q,K,V是所有查询、键和值的矩阵。值得注意的是,这里Query、Key、Value矩阵的计算都使用了不同的权重矩阵,这使得自注意力机制可以学习输入序列的不同表示。 ![]() 自注意力机制的结果是每个词的表示都更为丰富和细致,因为它考虑了每个词左右的上下文。 Multi-Head AttentionMulti-Head Attention 机制对自注意力机制进行拓展,允许模型联合学习序列的不同表示子空间。 多头注意力将输入序列重复进行自注意力计算n次,每次使用不同的权重矩阵,得到n个注意力向量序列。然后将这n个序列拼接并线性转换,得到最终的序列表示,即: 每次计算一个序列的自注意力被称为一个'头',因此,'多头注意力'就是多次进行自注意力计算。每个'头'可能对应着不同的问题,例如第一个'头'可能关注'发生了什么',第二个'头'可能关注'何时发生',第三个'头'可能关注'与谁有关'等等。 多头注意力的计算过程与自注意力基本一致,但是使用了不同的权重矩阵(,并且将所有的注意力向量(一般情况下是8个)进行拼接,再乘以一个权重矩阵,最后得到的结果就是多头注意力的输出。在实际计算中,由于不同'头'的计算互不影响,可以同时计算所有的'头',即并行计算,以提高计算效率。 总的来说,多头注意力机制可以为每个单词学习到更丰富、更好的表示,每个'头'都能从不同的角度去理解序列中的每个单词。 Transformer 网络在Transformer网络中,Encoder和Decoder均由多头注意力层和全连接前馈网络组成,网络的高层结构如下:
![]() 我们以一个法语翻译成英语的例子来讲解这个过程:
总结Transformer网络通过引入自注意力和多头注意力等机制,实现了序列建模的质的飞跃,在机器翻译、文本摘要、问答系统等任务上都取得了极大的成功。研究表明,其并行计算结构也使Transformer网络相比RNN等模型具有显著的计算效率优势,如今百家争鸣的大模型底层其实也离不开它的身影,理解它对于学习那些大语言模型是非常有帮助的。 |
|
来自: 汉无为 > 《Transform》