当前位置: 首页 > article >正文

大语言模型-2.1-Transformer架构及详细配置

简介

本博客内容是《大语言模型》一书的读书笔记,该书是中国人民大学高瓴人工智能学院赵鑫教授团队出品,覆盖大语言模型训练与使用的全流程,从预训练到微调与对齐,从使用技术到评测应用,帮助学员全面掌握大语言模型的核心技术。并且,课程内容基于大量的代码实战与讲解,通过实际项目与案例,学员能将理论知识应用于真实场景,提升解决实际问题的能力。
在这里插入图片描述

本文主要记录datawhale的活动学习笔记,可点击活动连接

参考

参考
Attention Is All You Need (Transformer) 论文精读

注意力的神经科学基础

https://zhuanlan.zhihu.com/p/338817680

2.1-Transformer架构及详细配置

关于文本翻译

机器翻译,就是将某种语言的一段文字翻译成另一段文字。
由于翻译没有唯一的正确答案,用准确率来衡量一个机器翻译算法并不合适。因此,机器翻译的数据集通常会为每一条输入准备若干个参考输出。统计算法输出和参考输出之间的重复程度,就能评价算法输出的好坏了。这种评价指标叫做BLEU Score。这一指标越高越好。
在这里插入图片描述
在深度学习时代早期,人们使用RNN(循环神经网络)来处理机器翻译任务。一段输入先是会被预处理成一个token序列。RNN会对每个token逐个做计算,并维护一个表示整段文字整体信息的状态。根据当前时刻的状态,RNN可以输出当前时刻的一个token。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种架构存在不足:编码器和解码器之间只通过一个隐状态来传递信息。在处理较长的文章时,这种架构的表现不够理想。为此,有人提出了基于注意力的架构。这种架构依然使用了编码器和解码器,只不过解码器的输入是编码器的状态的加权和,而不再是一个简单的中间状态。每一个输出对每一个输入的权重叫做注意力,注意力的大小取决于输出和输入的相关关系。这种架构优化了编码器和解码器之间的信息交流方式,在处理长文章时更加有效。
在这里插入图片描述
所有基于RNN的模型都面临着同样一个问题:RNN本轮的输入状态取决于上一轮的输出状态,这使RNN的计算必须串行执行。因此,RNN的训练通常比较缓慢。
在这一背景下,抛弃RNN,只使用注意力机制的Transformer横空出世了。

Attention Is All You Need

大模型神经网络的奠基之作
参考:Attention Is All You Need (Transformer) 论文精读

为什么是attention

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

长距离依赖问题

举个例子,考虑这个句子:
“The cat, which was very hungry, finally found its food in the kitchen after searching for hours.”
这只猫非常饿,经过几个小时的寻找,终于在厨房里找到了食物。

在这个句子中,要理解“its”指的是“cat”,你需要在文本中跨越很长的距离。

在传统的RNN中,由于每次只处理一个元素,且下一个元素的处理依赖于前一个元素的输出,信息很难在长距离内有效传递,这就是所谓的长距离依赖问题。

注意力机制

注意力机制可以视为一种基于相似度的查表
在这里插入图片描述

注意力机制通过为每个输入元素分配一个权重来解决这个问题。这些权重决定了在生成输出时应该“注意”序列中的哪些部分。

以机器翻译为例,当模型试图翻译一个单词时,它会“查看”输入序列中的所有单词,并根据它们与当前要翻译的单词的相关性来赋予不同的权重。

想象一下,你在一个非常嘈杂的聚会中,你试图专注于一个朋友的谈话。尽管周围有很多声音,但你可以“调整”你的注意力,集中在你朋友的声音上,同时忽略其他的噪音。这个过程,就有点像注意力机制的工作原理。

Self-Attention 的公式如下:

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax\left ( \frac{QK^T}{\sqrt{d_k} } \right ) V Attention(Q,K,V)=softmax(dk QKT)V

我们以上面的嘈杂聚会中要专注于一个朋友的谈话场景来解释:

查询 (Query) 代表当前的焦点或需要翻译的部分。这就像是你想要听的你朋友的声音。
键 (K) 和 值 (V) 代表输入序列。其中,键表示要检索的信息,值表示一旦检索到对应键,应该返回的信息。

键(Key) - 这些是周围所有的声音,包括你朋友的声音和其他人的声音。
值(Value) - 如果你朋友的声音(键)是你想要的,那么他们的谈话内容(值)就是你想要专注的信息。

Q K T QK^T QKT的计算是在寻找查询和键之间的匹配程度,即找出输入序列中哪些部分与当前关注点最相关。
s o f t m a x ( Q K T d k ) softmax\left ( \frac{QK^T}{\sqrt{d_k} } \right ) softmax(dk QKT)这一部分将这些匹配分数转换成概率形式,这些概率(权重)决定了每个输入元素的重要性。
d k d_k dk 是键的维度,用来缩放点积,避免得到太大的数值。
softmax函数用来将分数转化为概率,确保所有的关注度分数加起来等于1。
最后,这些权重被用来加权值 ( V ) (V) (V),得到加权求和的输出,这个输出就是模型对当前焦点或查询的最终响应。

通过这种方式,Self-Attention 机制能够捕捉序列中的长距离依赖关系,并为每个位置产生一个新的表示,这个表示是所有位置的加权和,权重由元素之间的相似度决定。

为什么要用QKV三个?而不是一个?

Attention 中使用三个不同的Q(查询)、K(键)、V(值)矩阵,可以想象成我们在处理信息时,不同的角度和目的会使用不同的工具或方法。

比如说,你在一个图书馆里寻找信息:
查询(Q):

这就像你的问题清单,比如你想了解有关历史的信息。你的问题清单会指导你去哪里查找,找什么样的书。

键(K):

这对应于每本书的目录或索引,你会用它来判断哪本书可能包含你需要的信息。

值(V):

这就是书中的实际内容。一旦你确定了哪些书的目录与你的问题清单匹配,你就会去阅读那些书的具体内容。

如果Attention /Transformer只用输入x自己,而不去创建这些专门的Q、K、V矩阵,那就相当于你只用一种方法去处理所有类型的信息,不管是提出问题、搜索索引还是阅读内容。这样做不仅效率低,而且很难深入挖掘更复杂或更细微的信息。

使用不同的Q、K、V就像是给Attention /Transformer装备了不同的工具,使其能够在处理信息时更加精准和高效。这样可以增强网络处理不同类型信息的能力,就像给图书馆的访问者提供了详细的问题列表、高效的索引系统和丰富的书籍内容一样。

这样的设计提高了Attention /Transformer的表达能力,让它可以更好地学习和更新参数,从而更好地处理复杂的任务,如理解和生成语言。

Transformer

Transformer是2017年的一篇论文《Attention is All You Need》提出的一种模型架构,这篇论文里只针对机器翻译这一种场景做了实验,全面击败了当时的机器翻译各个benchmark上的SOTA。其优点除了效果好之外,由于encoder端是并行计算的,训练的时间也被大大缩短了。
它开创性的思想,颠覆了以往序列建模和RNN划等号的思路,现在被广泛应用于NLP的各个领域。目前在NLP各业务全面开花的语言模型如GPT, BERT等,都是基于Transformer模型的。
Transformer的核心思想是:使用attention机制, 在一个序列的不同位置之间建立distance = 1的平行关系,从而解决RNN的长路径依赖问题(distance = N)。
在这里插入图片描述
理解“平行”的含义:在Transformer结构中,序列的不同pos(位置)之间距离都是1

架构

整体架构

在这里插入图片描述
编码器:将输入变换为隐藏层特征
在这里插入图片描述

解码器:将隐藏层特征变换为自然语言序列
在这里插入图片描述

多头注意力层:建模任意距离词元间的语义关系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意力的思考

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

输入编码

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

网络结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特别好理解的Transformer的计算过程

参考:https://zhuanlan.zhihu.com/p/338817680

Transformer的计算过程1

参考:再聊Transformer:从计算过程认识transformer
整个架构可以分为四个模块:

输入模块(源文本输入和目标文本输入)、
编码模块encoder、
解码模块decoder、
输出模块
在这里插入图片描述

1、输入模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、Encoder模块

在这里插入图片描述
在这里插入图片描述
计算的时候需要得到Q,K,V矩阵,Q,K,V矩阵是由输入矩阵与线性变换矩阵相乘得到的,计算过程如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3、deconder模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

4、输出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/590830.html

相关文章:

  • ubuntu安装NVIDIA显卡驱动及CUDA环境
  • DICOM医学影像数据访问控制与身份验证技术应用的重要性及其实现方法详解
  • 【AI学习从零至壹】Pytorch神经⽹络
  • 文件管理系统
  • tf1.x和tf2.x在使用上的区别和联系是什么
  • 蓝桥杯练习day1:拆分数位-四位数字的最小和
  • [模拟实现]unique_ptr、shared_ptr智能指针--C++版本的代码实现
  • 【自学笔记】MongoDB基础知识点总览-持续更新
  • 一条SQL在mysql数据库中经历的过程
  • STM32——基本定时器
  • 相机光学(四十七)——相纸材质
  • 神经网络量化3-全连接层实现量化
  • 相机标定之DLT算法学习
  • 对话傅盛:AI时代的超级应用是什么?
  • 【Python】10、集合
  • 使用fastapi部署stable diffusion模型
  • 3D点云目标检测——KITTI数据集读取与处理
  • 完全托管的DeepSeek-R1模型正式登陆Amazon Bedrock:安全部署与使用指南
  • Java的继承:方法;属性?
  • 个人学习编程(3-18) leetcode刷题