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

文章目录

  • 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.xdnf.cn/news/141703.html

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

相关文章

Crypto:一眼就解密

题目 根据题目给出的信息可知&#xff0c;flag的为base64编码&#xff0c;数字后面的可以知道为base64编码&#xff0c;解码可得

oracle 根据分号分割为多个列

oracle 没有split 函数&#xff0c;因此没法直接使用&#xff0c;但是时间上会遇到需要分割的时候&#xff0c;可以使用正则表达式 SELECT REGEXP_SUBSTR(administration, [^;], 1, 1) AS SKILL1, REGEXP_SUBSTR(administration, [^;], 1, 2) AS SKILL2, REGEXP_SUBSTR(admini…

Cpp/Qt-day050921Qt

目录 实现使用数据库的登录注册功能 头文件&#xff1a; registrwidget.h: widget.h: 源文件&#xff1a; registrwidget.c: widget.h: 效果图&#xff1a; 思维导图 实现使用数据库的登录注册功能 头文件&#xff1a; registrwidget.h: #ifndef REGISTRWIDGET_H #de…

【Kafka系列】(二)Kafka的基本使用

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 文章更新计划[2] 系列文章地址[3] Kafka 线上集群部署方案怎么做 操作系统 先说结论&#xff0c;Kafka 部署在 Linux 上要比 Window…

[网鼎杯 2020 朱雀组]Nmap 通过nmap写入木马 argcmd过滤实现逃逸

这道题也很好玩 啊 原本以为是ssrf 或者会不会是rce 结果是通过nmap写入木马 我们来玩一下 传入木马 映入眼帘是nmap 我们首先就要了解nmap的指令 Nmap 相关参数-iL 读取文件内容&#xff0c;以文件内容作为搜索目标 -o 输出到文件-oN 标准保存-oX XML保存-oG Grep保存-oA…

北工大汇编——综合题(2)

题目要求 编写一个比赛得分程序。共有7 个评委&#xff0c;按百分制打分&#xff0c;计分 原则是去掉一个最高分和一个最低分&#xff0c;求平均值。要求&#xff1a; 评委的打分以十进制从键盘输入。成绩以十进制给出&#xff0c;并保留 1位小数。输入输出时屏幕上要有相应提…

分治算法求解:逆序对,Max Sum,棋盘覆盖,a-Good String——中山大学软件工程学院算法第四次实验课 必做+选做题

写英文注释不是要“秀英文”&#xff0c;而是因为鄙人正在准备雅思&#xff0c;顺手练习 逆序对 题目描述 完整代码 #include<iostream> using namespace std; int num[500010]; // input numbers int tmp[500010]; // sequence after merging left and right part lon…

鼠标不动了怎么办?3招解决问题!

“这是怎么回事呢&#xff1f;我的鼠标怎么会用着用着就突然不动了呢&#xff1f;现在有一些比较重要的工作要处理。请问有什么方法可以快速解决这个问题吗&#xff1f;” 随着电脑在我们日常生活和工作中的广泛应用&#xff0c;鼠标是我们操作电脑不可或缺的工具之一。但是&am…

WebGL 绘制圆形的点

目录 前言 如何实现圆形的点&#xff1f; 片元着色器内置变量&#xff08;gl_FragCoord、gl_PointCoord&#xff09; gl_PointCoord的含义 示例程序&#xff08;RoundedPoint.js&#xff09; 代码详解 前言 本文将讨论示例程序RoundedPoint&#xff0c;该程序绘制了圆…

Spring底层原理之 BeanFactory 与 ApplicationContext

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Spring底层原理 一、 BeanFactory 与 Appli…

爬虫怎么批量采集完成任务

目录 一、了解网络爬虫 二、Python与网络爬虫 三、批量采集任务的实现 1.确定采集网站及关键词 2.安装相关库 3.发送请求并获取响应 4.解析HTML文档 5.提取文章内容 6.保存文章内容 7.循环采集多篇文章 8.增加异常处理机制 9.优化代码性能 四、注意事项 总结 在当…

登录业务实现 - token登录鉴权

登录业务实现&#xff1a; 登录成功/失败实现 -> pinia管理用户数据及数据持久化 -> 不同登录状态的模板适配 -> 请求拦截器携带token&#xff08;登录鉴权&#xff09; -> 退出登录实现 -> token失效&#xff08;401响应拦截&#xff09; 1. 登录成…

(循环)mysql定时器删除某表中数据例子

CREATE EVENT clear_interactive_logs ON SCHEDULE EVERY 1 DAY STARTS 2023-09-21 23:36:36 DO DELETE from t_interactive_log WHERE id not IN (SELECT * from (SELECT id from t_interactive_log ORDER BY occer_time DESC limit 20000) x ); END ———————————…

Java编程的精髓:深入理解JVM和性能优化

文章目录 Java虚拟机&#xff08;JVM&#xff09;的核心概念1. 类加载器&#xff08;Class Loader&#xff09;2. 内存区域3. 垃圾回收&#xff08;Garbage Collection&#xff09;4. 类型转换和多态 JVM性能调优1. JVM参数调整2. 内存管理3. 多线程优化4. 使用性能分析工具5. …

【技术分享】NetLogon于域内提权漏洞(CVE-2020-1472)

一、漏洞介绍 CVE-2020-1472是一个Windows域控中严重的远程权限提升漏洞。攻击者在通过NetLogon&#xff08;MS-NRPC&#xff09;协议与AD域控建立安全通道时&#xff0c;可利用该漏洞将AD域控的计算机账号密码置为空&#xff0c;从而控制域控服务器。该漏洞适用于Win2008及后…

C++:优先级队列模拟实现和仿函数的概念使用

文章目录 使用方法Compare仿函数一些场景模板参数和函数参数 本篇总结优先级队列 使用方法 首先在官网查看它的一些用法 template <class T, class Container vector<T>,class Compare less<typename Container::value_type> > class priority_queue;从…

S09-录入的数据快速分列

选中某一列数据&#xff0c;数据-》分列 确定分隔符

Blender导出FBX给UE5

最近在学习UE5的资源导入&#xff0c;总结如下&#xff1a; 建模使用Blender&#xff0c;UE5版本是5.3 1.纯静态模型导入UE5 Blender FBX导出设置保持默认即可&#xff0c; UE5把导入设置里Miscellaneous下Force Front XAxis和Convert Scene Unit勾选即可 2.带骨骼动画的模型…

命令执行(rce)

1.命令与代码执行原理 命令执行原理 参数给变量未经过滤&#xff0c;直接使用了不安全的函数处理了变量 127.0.0.1&&ipconfig 有漏洞 常用的函数 assert,system,exec,shell_exec, eval,(反单引号&#xff09; 代码执行原理 参数给变量未经过滤&#xff…

Postgresql源码(113)表达式JIT计算简单分析

相关 《Postgresql源码&#xff08;85&#xff09;查询执行——表达式解析器分析&#xff08;select 11如何执行&#xff09;》 《Postgresql源码&#xff08;113&#xff09;表达式JIT计算简单分析》 1 普通表达式计算 普通表达式计算发生在优化器preprocess_expression中&am…