LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】

news2024/11/18 3:38:02

文章目录

  • 2.大语言模型基础
    • 2.1、编码器和解码器架构
    • 2.2、注意力机制
      • 2.2.1、注意力机制(`Attention`)
      • 2.2.2、自注意力机制(`Self-attention`)
      • 2.2.3、多头自注意力(`Multi-headed Self-attention`)
    • 2.3、transformer
    • 2.4、BERT
    • 2.5、GPT
    • 2.6、LLaMA

2.大语言模型基础

2.1、编码器和解码器架构

在这里插入图片描述

这个架构常用于编码器-解码器架构是一种常用于序列到序列(Seq2Seq)任务的深度学习架构。序列到序列的问题举例:NLP问题(机器翻译、问答系统和文本摘要)。

编码器(Encoder)
将输入形式编码成中间表达形式。
中间表示被称为“编码”或“特征”。
解码器(Decoder)
将中间表示解码成输出形式。
也会有额外的输入。为啥?
输入一些额外的信息来帮助解码器生成正确的输出序列。这些额外的信息可以是一些上下文信息,例如输入序列的长度、标点符号和语法结构等。

2.2、注意力机制

2.2.1、注意力机制(Attention

注意力机制允许模型在处理信息时更加灵活和智能地选择性地关注输入的不同部分,从而提高了模型的性能和表现力。
相比于全连接层、汇聚层,注意力机制就多了个自主提示。
self-attention 是复杂化的CNN,因此也可以退化成CNN。
在这里插入图片描述

组件

  • query(自主提示):人为引导控制。
  • key(非自主提示/不由自主):被物体的突出易见特征 吸引。
  • value:与key配对。
  • 注意力权重
  • 注意力分数(Attention Scores):α(x, x i x_i xi)
  • 注意力输出(Attention Output)

    在这里插入图片描述

注意力计算规则
f ( x ) = ∑ i = 1 n α ( x , x i ) y i = ∑ i = 1 n s o f t m a x ( − 1 2 ( x − x i ) 2 ) y i f(x) = \sum_{i=1}^nα(x,x_i)y_i = \sum_{i=1}^{n} softmax(-\frac{1}{2}(x-x_i)^2)y_i f(x)=i=1nα(x,xi)yi=i=1nsoftmax(21(xxi)2)yi
其中, x = q u e r y , x i = k e y , y i = v a l u e x = query,x_i= key,y_i = value x=queryxi=keyyi=value

在这里插入图片描述

2.2.2、自注意力机制(Self-attention

自注意力(Self-Attention)是一种注意力机制的特殊情况,其中 Query、Key 和 Value 都来自相同的输入序列。
考虑到整个句子的资讯,FC 受到参数体量限制,提出self-attention,来考虑整个句子中哪些是与当前输入 a x a_x ax相关的讯息,通过计算输入之间的相关性α来得出。

计算关联程度α的模组

在这里插入图片描述

所有的α计算模组(query要计算自相关)

在这里插入图片描述
解释q,k,v的来源
q 1 = W q a 1 q_1 = W_qa_1 q1=Wqa1
k 1 = W k a 1 k_1 = W_ka_1 k1=Wka1
v 1 = W v a 1 v_1 = W_va_1 v1=Wva1
再往前,a的来源
最底层的输入(x1, x2, x3) 表示输入的序列数据,通过嵌入层(可选)将它们进行初步的embedding得到的a1,a2,a3

2.2.3、多头自注意力(Multi-headed Self-attention

概括:注意力机制组合使用查询、键和值。
在这里插入图片描述
对于特定的 x i x_i xi来说,与多组 W Q , W K , W V W_Q,W_K,W_V WQ,WK,WV与之相乘,得到多组的 q i , k i , v i q_i,k_i,v_i qi,ki,vi

2.3、transformer

基于transformer的EncoderDecoder模型结构图
在这里插入图片描述

嵌入层 任务

  • 为文本序列每个单词创建一个相应的向量表示;
  • 与位置编码相加送入下一层。

Feed-Forward Network层任务
考虑注意力机制可能对复杂过程的拟合程度不够, 通过增加两层网络来增强模型的能力。

掩码(mask)作用
解码端则负责生成目标语言序列,这一生成过程是自回归的,即对于每一个单词的生成过程,仅有当前单词之前的目标语言序列是可以被观测的,因此这一额外增加的掩码是用来掩盖后续的文本信息,以防模型在训练阶段直接看到后续的文本序列进而无法得到有效地训练。

token
词元。嵌入层输入词元序列(tokens),输出 vector。
原始输入词序列通过词元分析后,词被切分或保留作为token,这些token序列表示原始词序列。

输出层
softmax通常是在解码器的最后一层或输出层上应用一次,用于将整个目标序列的分布概率计算出来,而不是在每个时间步都应用softmax。这种方式有助于生成整个序列的概率分布,然后可以根据这个分布来选择最终的目标序列。
其它参考:https://zhuanlan.zhihu.com/p/396221959

计算过程
注意力计算。

 class Transformer(nn.Module):
     
     def __init__(self, src_vocab, trg_vocab, d_model, N, heads, dropout):
         super().__init__()
         self.encoder = Encoder(src_vocab, d_model, N, heads, dropout)
         self.decoder = Decoder(trg_vocab, d_model, N, heads, dropout)
         self.out = nn.Linear(d_model, trg_vocab)
         
     def forward(self, src, trg, src_mask, trg_mask):
         e_outputs = self.encoder(src, src_mask)
         d_output = self.decoder(trg, e_outputs, src_mask, trg_mask)
         output = self.out(d_output)
         return output

其中,d_output = self.decoder(trg, e_outputs, src_mask, trg_mask),d_output 是自回归得到的,需要src_maske_outputs 一起确保编码器输出的正确使用,src编码时也用到了src_mask,而 trg_masktrg 一起确保解码器生成目标序列的合适性。trg 包含了模型要生成的目标语言文本序列。解码器的主要目标是逐步生成 trg 中的每个词汇或标记,直到整个目标序列生成完毕。trg就是答案,一个一个对答案用到了trg_mask

2.4、BERT

预训练模型:在大规模数据事先训练,然后在特定任务上微调。

只有编码器的 transformer
base版本:#blocks = 12, hidden size = 768, #heads = 12, #parameters = 110M
Large版本:#blocks = 24, hidden size =1024, #heads = 16, #parameters = 340M
模型结构图
在这里插入图片描述
计算过程
BERT分词器:WordPiece,源词序列——>词元。

WordPiece词元分析算法(BERT

  • 先评分
  • 再合并,合并使得训练数据似然概率增加最高的词元对。
    HuggingFace 提供的评分公式:
    s c o r e = 词元对出现的频率 第一个词元出现的频率 × 第二个词元出现的频率 score = \frac{词元对出现的频率}{第一个词元出现的频率 × 第二个词元出现的频率} score=第一个词元出现的频率×第二个词元出现的频率词元对出现的频率

预训练任务1:语言模型每次随机(15%)将一些词元换成(mask:带掩码)。
预训练任务2:下一句子预测,预测一个句子对中两个句子是不是相邻。
句子对<cls> this movie is great <sep> I like it <sep>

  • <cls>标记通常用于表示序列(例如句子)的开始或整体表示
  • <sep>标记通常用于表示序列的边界或分隔不同的句子或段落
  • <eos> end of sequences,结束划分。

预训练bert
预训练阶段包括了编码器和解码器的部分,用于学习通用表示,而下游任务通常涉及到对编码器和解码器的微调,以适应具体任务。在某些情况下,下游任务可能只需要编码器或解码器的一部分,具体取决于任务的性质。
微调bert
微调流程图(instruct tuning)
在这里插入图片描述
第二种微调方式Performance会更好,但实际在做的能做的是第一种。拿到预训练好的模型为底座,按照上述流程图去进行特定任务的微调。

2.5、GPT

模型结构图
在这里插入图片描述
计算过程
h ( L ) = T r a n s f o r m e r − B l o c k ( L ) ( h ( 0 ) ) h (L) = Transformer-Block(L) (h(0)) h(L)=TransformerBlock(L)(h(0))
微调公式
L P T ( w ) = − ∑ i = 1 n l o g P ( w i ∣ w 0... w i − 1 ; θ ) L^{PT}(w) = -\sum_{i=1}^n logP(w_i|w0...w_{i-1};θ) LPT(w)=i=1nlogP(wiw0...wi1;θ)
L F T ( D ) = − ∑ ( x , y ) l o g P ( y ∣ x 1 . . x n ) L^{FT}(D) =-\sum_{(x,y)}log P(y|x_1..x_n) LFT(D)=(x,y)logP(yx1..xn)
L = L F T ( D ) + λ L P T ( D ) L = L^{FT}(D) + \lambda L^{PT}(D) L=LFT(D)+λLPT(D)

L:loss
PT:pre-training
FT:fine-tuning
w:文本序列w = w1w2…wn
D:下游任务标注数据集

2.6、LLaMA

模型结构图
在这里插入图片描述

  • 前置层归一化(Pre-normalization)
  • 整体 Transformer 架构与 GPT-2 类似
  • RMSNorm 归一化函数 (Normalizing Function)
  • R M S ( a ) = 1 n ∑ i = 1 n a i 2 RMS(a) = \sqrt{\frac{1}{n}\sum_{i=1}^n a_i^2} RMS(a)=n1i=1nai2
  • a i ˉ = a i R M S ( a ) \bar{a_i} = \frac{a_i}{RMS(a)} aiˉ=RMS(a)ai
  • 可进一步引入偏移系数 g i g_i gi,偏移参数 $ b i b_i bi
  • a i ˉ = a i R M S ( a ) g i + b i \bar{a_i} = \frac{a_i}{RMS(a)}g_i + b_i aiˉ=RMS(a)aigi+bi
  • Feed-Forword Network激活函数更换为 SwiGLU
  • 旋转位置嵌入(RoPE
  • 相对位置编码代替绝对位置编码
  • q ~ m = f ( q , m ) k ~ n = f ( k , n ) \tilde{q}_m = f(q,m) \tilde{k}_n = f(k,n) q~m=f(q,m)k~n=f(k,n)
  • f(m-n)表示绝对位置m、绝对位置n的相对位置,第m个token与第n个token的位置关系,和第n个token与第m个token的位置关系一定要有区分度,f(m-n) ≠ f (n-m)。矩阵不满足交换律

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity之Hololens如何实现3D物体交互

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

【算法】算法设计与分析 课程笔记 第二章 递归与分治策略

2.1 递归 直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。 2.1.1 阶乘 首先得想到一个求阶乘的函数&#xff1a; 这个函数的下面那个式子就用到了调用自身&#xff0c;所以可以用递归来实现&#xff0c;将主问题拆分成若干层的子问题&am…

分享从零开始学习网络设备配置--任务3.7 使用动态路由RIPv2实现网络连通

任务描述 某公司随着规模的不断扩大&#xff0c;路由器的数量开始有所增加。网络管理员发现原有的静态路由已经不适合现在的公司&#xff0c;实施动态路由RIPv2协议配置&#xff0c;实现网络中所有主机之间互相通信。 在路由器较多的网络环境中&#xff0c;手工配置静态路由…

Level FHE 的高效实现 兼容 Level FHE 的高级算法

参考文献&#xff1a; [CS05] Choi Y, Swartzlander E E. Parallel prefix adder design with matrix representation[C]//17th IEEE Symposium on Computer Arithmetic (ARITH’05). IEEE, 2005: 90-98.[SV11] Smart N P, Vercauteren F. Fully homomorphic SIMD operations[…

基于微信小程序的校园商铺系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言学生端微信端&#xff0c;主要功能有&#xff1a;商家的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 …

商家收款2000手续费多少

目前不管是微信商户或者支付宝商户最低费率可以达到0.2%费率&#xff1b;市面上普通个体商户或者企业商家的收款费率一般在0.6左右&#xff0c;一些使用第三方聚合支付平台的也有使用0.38的&#xff0c;总体也就是10000块钱的费率是38-60块钱&#xff0c;对于一些流水比较大的商…

微调大模型工具-LoRA

介绍 微调 在机器学习领域&#xff0c;大型模型已成为解决各种问题的首选解决方案。从自然语言处理到计算机视觉&#xff0c;这些计算能力的庞然大物都表现出了无与伦比的性能。然而&#xff0c;这种性能实际上是有代价的。微调这些大型模型以适应特定任务或领域是一个资源密…

GE IS220PVIBH1A 336A4940CSP16 电源模块

GE IS220PVIBH1A 336A4940CSP16 电源模块是通用电气&#xff08;GE&#xff09;的一种电源模块&#xff0c;用于工业控制和电力系统中&#xff0c;提供电源供应和保护功能。以下是这种类型电源模块的一般特点和功能&#xff1a; 电源供应&#xff1a;GE IS220PVIBH1A 336A4940C…

编写基于冒泡排序算法的qsort函数

目录 1.简单认识冒泡排序 2.进入正文分析如何实现函数 3.1比较两个相邻元素的大小 3.2比较两个相邻元素大小后要换函数 4.my_qsort函数&#xff1a; 5.总结&#xff1a; 1.简单认识冒泡排序 冒泡排序的步骤如下&#xff1a; 比较相邻的两个元素&#xff0c;如果第一个元素比…

TS编译选项——不允许使用隐式any类型、不明确类型的this、严格检查空值、编译后文件自动设置严格模式

一、不允许使用隐式any类型 在tsconfig.js文件中配置noImplicitAny属性 {"compilerOptions": {// 不允许使用隐式any类型"noImplicitAny": true} } 开启后即可禁止使用隐式的any类型 注意&#xff1a;显式的any类型并不会被禁止 二、不允许使用不明确类…

亚马逊儿童自行车,滑板车等电动移动设备合规标准UL报告如何办理?UL 2272、UL 2849

加拿大 儿童自行车 儿童自行车适用于 14 岁以下儿童。儿童自行车的车轮由两个轮子组成&#xff0c;一个在另一个后面&#xff0c;通过踩踏推动&#xff0c;用连接在前轮上的车把操纵。其中一些可能配备有训练轮&#xff0c;这是一对平行于后轮的额外的车轮&#xff0c;可防止自…

ShapeableImageView 不只是圆形ImageView

偶然间看到了这位老哥的 https://juejin.cn/post/6869376452040196109#comment 文章&#xff0c;发现了ShapeableImageView–一个多形状的ImageView &#xff0c;虽然似乎发布了很久了&#xff0c;现在学习不晚。 效果图 布局文件 <com.google.android.material.imageview.S…

yyyy/MM/dd与yyyy-MM-dd使用new Date().getTime()时间转换不相等?!!

起源 该问题发现于日期组件增加国家法定假节假日的禁用&#xff0c;通过pickerOptions属性定义disabledDate方法实现 export default {data () {return {holidayList: [2023-01-01,2023-01-02,2023-01-21,2023-01-22,2023-01-23,2023-01-24,2023-01-25,2023-01-26,2023-01-27…

SQL注入——预编译CASE注入

文章目录 预编译 CASE 注入1. SQL注入漏洞防御2. WEBGOAT SQL注入2.1 WebGoat 8.02.2 Order by 注入2.2.1 构造 when 的条件2.2.2 代码审计 预编译 CASE 注入 预编译 CASE&#xff08;Prepared CASE&#xff09;是一种数据库查询语言&#xff08;如SQL&#xff09;中的控制语句…

Android Studio 的android.jar文件在哪儿

一般在&#xff1a;C:\Users\admin\AppData\Local\Android\Sdk\platforms\android-33下&#xff08;不一定是33&#xff0c;这个得看你Android Studio->app->builde.gradle的targetSdk是多少&#xff09; 怎么找&#xff1a; 1.打开Android Studio 粘贴地址后&#xff0…

【C++】stack queue

stack & queue 一、容器适配器二、deque&#xff08;了解&#xff09;三、stack1. stack 的介绍2. 模拟实现 stack 四、queue1. queue 的使用2. 模拟实现 queue3. priority_queue&#xff08;1&#xff09;priority_queue 的介绍&#xff08;2&#xff09;priority_queue 的…

数字IC笔试千题解--单选题篇(二)

前言 出笔试题汇总&#xff0c;是为了总结秋招可能遇到的问题&#xff0c;做题不是目的&#xff0c;在做题的过程中发现自己的漏洞&#xff0c;巩固基础才是目的。 所有题目结果和解释由笔者给出&#xff0c;答案主观性较强&#xff0c;若有错误欢迎评论区指出&#xff0c;资料…

如何通过Python实现接口自动化的参数关联?

前言 通常在接口自动化中&#xff0c;经常会参数关联的问题&#xff0c;那么什么是参数关联&#xff1f; 参数关联就是上一个接口的返回值会被下一个接口当做参数运用&#xff0c;其中Python中可以实现参数关联的方法有很多种&#xff0c;今天小编给大家介绍下&#xff0c;如…

IC验证| Verilog语法详解之条件语句

Verilog 是一种用于数字逻辑电路设计的硬件描述语言&#xff0c;可以用来进行数字电路的仿真验证、时序分析、逻辑综合。 既是一种行为级&#xff08;可用于电路的功能描述&#xff09;描述语言又是一种结构性&#xff08;可用于元器件及其之间的连接&#xff09;描述语言。 …