动手学LLM(ch3)——编码注意力机制
前言
在ch2中,你学习了如何准备用于训练 LLM 的输入文本。这涉及将文本拆分为单独的单词和子单词标记,这些标记可以编码为LLM的向量表示,即所谓的嵌入。在本文中,我们现在将研究 LLM 架构本身的一个组成部分,即注意力机制。如下图所示
注意力机制是一个综合性的话题,这就是为什么我们用一整篇文章来讨论它。我们将在很大程度上孤立地看待这些注意力机制,并在机制层面上关注它们。在后面的内容中,我们将围绕自注意力机制对 LLM 的其余部分进行编码,以查看它的实际效果并创建一个模型来生成文本。在本文中,我们将实现四种不同的注意力机制变体 ,如下图所示,描述了我们将在本文中编写的不同注意力机制,从简化版本的自我注意力开始,然后添加可训练的权重。因果注意机制为自我注意力添加了一个掩码,允许 LLM 一次生成一个单词。最后,多头注意力将注意力机制组织成多个头,使模型能够并行捕获输入数据的各个方面。这些不同的注意力变体是相互构建的,目标是在本文末尾实现一个紧凑而高效的多头注意力实现,然后我们可以将其插入到我们后面中编写的 LLM 架构中。
本文内容从以下几个方面展开
- 探索在神经网络中使用注意力机制的原因
- 引入基本的自我注意力框架并逐步发展到增强的自我注意力机制
- 实现因果注意力模块,允许 LLM 一次生成一个令牌
- 用丢弃来掩盖随机选择的注意力权重,以减少过度拟合
- 将多个因果注意力模块堆叠到一个多头注意力模块中
3.1 长序列建模的问题
待续......