熟悉LLM的重要机制

智能计算   作者:高焕堂 时间:2024-06-11来源:EEPW


1 前言

在前一期里,介绍过大语言模型(LLM)幕后核心的注意力(Attention)机制。本期就来继续扩大,介绍大名鼎鼎的转换器(Transformer)模型。其中,要特别阐述:为什么当今主流LLM都采用<仅译码器>(Decoder-Only Transformer)模型。

在 2017 年, 首先在「Attention is All You Need」这篇论文中提出了经典的Transformer架构,它内含编码器(Encoder)和译码器(Decoder)两部分。后来,自从GPT-2之后,整个大趋势逐渐转向<仅译码器>(Decoder-Only Transformer)模型。随着LLM的流行,在其应用于下游任务的微调(Fine-tuning) 过程中,经常会看到<仅译码器>的身影,所以更深刻领会这个大趋势,也更熟悉这个重要机制,对于LLM 的各项应用是很有帮助的。

2 从典型的Transformer架构说起

最初在 2017 年的论文「Attention is All You Need」中介绍,Transformer具有译码器(Decoder)和编码器(Encoder)部分,如图1。


image.png

图1

这图里的左半部分是编译程序(Encoder)部分,而右半部分是解释器(Decoder)部分。

刚才提到了,当今主流的GPT模型,由于其在文字生成方面的出色性能,LLM大趋势是转向<仅译码器>(Decoder-Only Transformer)模型。这种模型的强大之处在于它们不仅能够模仿类似人类的文本,而且还能够创造性地做出回应。他们可以写故事、回答问题,甚至进行自然流畅的对话。这种功能使它们在广泛的应用中非常有用,从聊天机器人和数字助理到内容创建、抽象总结和讲故事。

如今,这仅译码器架构已经是GPT-3、ChatGPT、GPT-4、PaLM、LaMDa和Falcon等主要语言模型的核心了。它专注于生成新内容,而不是解释或分析所输入的内容( 如文本)。例如,除了能够解析人类文本的涵意,还能够创造性地写故事、回答问题、以及流畅对话等。这种功能对于这些大语言模型(LLM)在广泛应用的效益很大。为什么当今的LLM,主要都采用仅译码器架构呢?其原因,除了可提升训练效率之外,还有在生成任务上,引入编译程序的双向注意力机制并无太多帮助。于是,大趋势就逐渐转向< 仅译码器> 模型。

1718065507389198.png

图2

https://cameronrwolfe.substack.com/p/decoder-only-transformers-the-workhorse

3 认识Decoder-Only Transformer架构

刚才已经看到了,上图-1里的右半部分是解释器。所以仅译码器模型的核心架构反而必较简单。它通常是是由多个具有相同结构的区块按顺序堆栈而成的。在每个译码器区块(Decoder Block)都包含两个主要组件:

1)屏蔽多头自注意力(Masked, multi-headed attention)层。这是在前一期里介绍过的注意力机制,它在理解输入序列的涵意方面扮演非常关键的角色。其中的< 屏蔽>的用意是要确保其预测标记(Token) 时,仅专注于当前位置之前产生的标记,而不考虑之后的标记,这样可发挥自回归(Autoregressive)模型的特性和功能。也就是,它很擅长于从句子中前面的单字收集信息,来预测出下一个词的机率估计值( 例如文字接龙)。这是生成式AI的魅力源头。

2)逐位置的前馈网络(Position-wise feed-forward network) 层。这用来引入非线性的变换,协助注意力机制( 纯线性数据变换) 来捕捉更复杂的模式和关系。例如,使用非线性活化函数( 如ReLU 或GeLU 等) 来让模型能够逼近任何函数,以便提供更强的表达能力。它常常放在自注意力层之后,并且添加了有关序列中每个标记的位置的信息,这对于理解单字的顺序至关重要。其用意是在每个序列的位置单独应用一个全连接前馈网络,所以称为:逐位置(Position-wise)方式。

其中,这个模型背后的真正驱动力,即是上述的多头自注意力机制。这种机制允许模型在预测每个标记时专注于输入序列的不同部分,从而促进上下文相关文字的生成。

4 以Gemma的<仅译码器>模型为例

刚才已经介绍了,在每个译码器区块里,都包含两个主要组件:自注意力机制(Attention) 和前馈网络(FFN)。其结构如图2 所示。

其中的归一化層(Layer Normalization),用來对网络中的每个神经元的输出进行归一化,使得网络中每一层的输出都具有相似的分布。該技術應用於每個子層(自註意力和前饋)之後,可以標準化激活並穩定訓練過程。

此外,还常添加残差连接(Residual Connections) 层,它提供了一條捷徑,允許梯度在反向傳播過程中自由流過網路,可缓解梯度消失和爆炸的问题,并有助于学习更强大的特征,以及提高训练过程的整体易用性和稳定性。

# Gemma 的译码器区块的结构

class RMSNorm(torch.nn.Module):

def __init__(….. ):

#...............................

#...............................

class GemmaMLP(nn.Module):

def __init__( ….. ):

#...............................

#...............................

class GemmaAttention(nn.Module):

def __init__( ….. ):

#...............................

#...............................

class GemmaDecoderLayer(nn.Module):

def __init__( …..):

#...............................

self.self_attn = GemmaAttention(…..)

self.mlp = GemmaMLP(…..)

self.input_layernorm = RMSNorm(…..)

s e l f . p o s t _ a t t e n t ion_ l ayernorm =

RMSNorm(…..)

#...............................

#...............................

基于上述的译码器区块(Decoder Block),就可以依据需求的不同,而有多个彼此堆栈的译码器区块,如图3所示。

1718066001466281.png

图3

https://cameronrwolfe.substack.com/p/decoder-only-transformers-the-workhorse

这样子,就将多个区块堆栈起来,成为一个仅译码器模型了。各層区块都各负责从输入数据中提取越来越抽象的特征。例如,前几层可能捕捉到局部的相关性,而更深的层可以捕捉更复杂的远程依赖性。这种分层方法讓模型建立输入数据的丰富表示。

其中,各区块里的注意机制,让模型在产生输出时专注于输入序列的各个不同部分。然后,将多层的自注意力协同合作,使模型能够逐步细化这些注意力权重,来提升对输入有更细致和上下文感知更广阔的理解。于是,每个区块在输入数据的分层处理中都发挥其重要的作用,并协同合作,来提升模型掌握复杂依赖关系的能力,来捕捉各种复杂的模式(Pattern)。

例如,在Gemma 的源码中,將译码器区块( 名為:GemmaDecoderLayer) 疊加起來,成為仅译码器模型( 名為:GemmaModel),如下:

# Gemma 的仅译码器模型结构

#...............................

#...............................

class GemmaDecoderLayer(nn.Module):

def __init__( …..):

#...............................

self.self_attn = GemmaAttention(…..)

self.mlp = GemmaMLP(…..)

self.input_layernorm = RMSNorm(…..)

s e l f . p o s t _ a t t e n t ion_ l ayernorm =

RMSNorm(…..)

#...............................

#...............................

class GemmaModel(nn.Module):

def __init__(self, config):

#...............................

self.layers = nn.ModuleList()

for _ in range(config.num_hidden_layers):

self.layers.append( GemmaDecoderLayer(…..) )

#...............................

#...............................

从这Gemma的源码结构而观之,尽管这些年来,LLM取得了快速的进步,但是其中的核心组成部分仍然保持不变,就是:仅译码器架构。

5 结束语

在仅译码器模型中,拥有多层互相迭加的译码器区块,将输入序列进行分层,透过多层处理来提升从输入序列中学习和泛化的能力。这种深度让模型能处理复杂的依赖关系,然后生成高质量的作品,即是LLM 魅力的源头。

(本文来源于《EEPW》202406)

关键词: 202406 LLM

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版