LLM学习记录

news2024/7/7 16:54:43

概述

语言模型的发展

语言模型经历过四个阶段的发展,依次从统计语言模型到神经网络语言模型(NLM),到出现以 BERT 和 Transformer 架构为代表的预训练语言模型(PLM),最终到大型语言模型阶段(LLM)。

NLM

使用神经网络(如循环神经网络RNN、长短时记忆网络LSTM等)来构建语言模型。这些模型通过学习输入文本序列,预测下一个单词或字符的概率分布

PLM阶段

大规模的未标注文本语料库上进行无监督预训练,学习通用的语言结构和表达。

LLM阶段

大型语言模型通常指的是具有极大量参数的预训练模型,如几千亿甚至上万亿参数。这些模型由于其庞大的规模,能够学习到更加丰富和精细的语言结构和知识

LLM的训练与推理流程

语言模型能把人类语言的字符转换成机器能够识别的序列,这些序列要通过位置编码来标记文本的前后顺序,再把序列输入到具体的算法模型中,模型的输出是归一化的token概率,
例如GPU平台的计算过程,将权重数据从显存(HBM)加载至on-chip的SRAM中,然后由SM读取并进行计算。计算结果再通过SRAM返回给显存。

embeding

指将某种类型的输入数据(如文本、图像、声音等)转换成一个稠密的数值向量,以便计算机能够识别和处理。
这些向量通常包含较多维度,每一个维度代表输入数据的某种抽象特征或属性。

推理过程

LLM的推理过程分为两个阶段,prefill(预填充)和decode(解码)。
预填充阶段会把整段prompt喂给模型做forward计算,
解码阶段即通过KV值计算attention,该阶段的耗时比较大

相关研究

训练相关

推理相关

LLM的推理分为两个阶段:prefill和decode

知乎:手抓饼熊:大模型推理加速系列分享

基于GPU的加速

知乎:猛猿:图解大模型计算加速系列:FlashAttention V1,从硬件到计算逻辑

Transformer

谷歌在2017年的论文《Attention Is All You Need》1提到了 Transformer 模型框架。模型提到了“自注力”(self-attention)机制,

基本架构

如图是 Transformer 模型架构图,该架构分为左侧的编码器右侧的解码器,编码器将新的输入字符序列映射成连续特征序列,解码层每次产生一个字符的输出序列,每次模型将自动递归,每产生下一个字符输出序列时,消耗之前产生的字符作为额外输入。

输入和输出

Inputs:新的字符输入通道,将位置编码向量与词嵌入相加,得到带有位置信息的输入向量:
X p o s = E p o s + P E p o s X_{pos}=E_{pos}+PE_{pos} Xpos=Epos+PEpos

E p o s E_{pos} Epos是第pos个词的词嵌入向量, P E p o s PE_{pos} PEpos是位置pos的位置编码向量。

Ouputs(shifted right):上一次的输出序列
Ouput Probabilities:输出序列

在这里插入图片描述

Encoder

包含6个识别层,每个识别层都有两个子层。
第一层时多头自注力机制层,第二层时一个简单的位置识别的全连接前馈神经网络。

Decoder

自注力机制

能够把单一序列的不同位置联系起来,从而能计算出这个序列的含义。

Scaled Dot-Product 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(\frac{QK^T}{\sqrt{d_{k}}})V Attention(Q,K,V)=softmax(dk QKT)V

Q,K,V 据论文描述是 Query、Key 和 Value 单词的缩写, K T K^T KT是K的转置。

Q = X W Q Q=XW_Q Q=XWQ
K = X W K K=XW_K K=XWK
V = X W V V=XW_V V=XWV
X ∈ R b a t c h _ s i z e ∗ s e q l e n ∗ e m b e d _ d i m X \in \mathbb{R^{batch\_size*seq_len*embed\_dim}} XRbatch_sizeseqlenembed_dim,表示输入数据
W V 、 W K 、 W Q ∈ R e m b e d _ d i m ∗ e m b e d _ d i m W_V、W_K、W_Q \in \mathbb{R^{embed\_dim*embed\_dim}} WVWKWQRembed_dimembed_dim,表示三个参数的权重

Q K T QK^T QKT可以理解为词向量的接近程度,详细可参考该文2的第4章节。
除以 d k \sqrt{d_{k}} dk 是为了把 Q K T QK^T QKT矩阵变成标准正态分布,使得softmax归一化之后的结果更加稳定,以便反向传播的时候获取平衡的梯度。

softmax的计算

Softmax 函数是一种将一个 K 维实数向量(或矩阵的最后一维)转化为一个归一化概率分布的函数。在机器学习和深度学习中,尤其是在多分类问题中,softmax 函数常常被用作输出层的激活函数,将模型预测的原始得分转换为概率值。
即对于一个K维向量 z = [ z 1 , z 2 , . . . , z K ] z=[z_1,z_2,...,z_K] z=[z1,z2,...,zK],则softmax的输出向量s为:
s j = e z j ∑ k = 1 K e z k s_j=\frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}} sj=k=1Kezkezj

Multi-Head Attention

如图所示,V、K、Q经过Linear拆分后,得到heads个矩阵,每个结果都经过上述Scaled Dot-Product Attention计算,最后通过Concat拼接起来,最后再作Linear操作。

在这里插入图片描述
M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d h ) W O MultiHead(Q,K,V)=Concat(head_1,...,head_h)W^O MultiHead(Q,K,V)=Concat(head1,...,headh)WO
其中 h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) head_i=Attention(Q{W_i}^Q,K{W_i}^K,V{W_i}^V) headi=Attention(QWiQ,KWiK,VWiV)

残差连接

如下图所示,将Multi-Head Attention的输入和输出连接,继而累加,即为残差连接。这样引入捷径的方式,使得信息能够更快的bypass地穿过深层网络,从而改善模型地训练效果和性能。
在这里插入图片描述

层归一化

在残差连接计算后,需要对结果归一化处理,从而改善模型中地梯度传播问题,进而提高模型地训练效率和性能。具体计算方式:
对于矩阵每一行x,计算器均值 μ \mu μ和方差 σ 2 \sigma^2 σ2
μ = 1 m ∑ i = 0 n − 1 x i \mu=\frac{1}{m}\sum_{i=0}^{n-1} x_i μ=m1i=0n1xi
σ 2 = 1 m ∑ i = 0 n − 1 ( x i − μ ) 2 \sigma^2=\frac{1}{m}\sum_{i=0}^{n-1} (x_i-\mu)^2 σ2=m1i=0n1(xiμ)2
归一化地处理如下,其中 ϵ \epsilon ϵ是一个较小地常数, γ \gamma γ β \beta β是标量参数,通过反向传播和梯度下降学习:
L a y e r N o r m ( x ) = γ x i − μ σ 2 + ϵ + β LayerNorm(x)=\gamma\frac{x_i-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta LayerNorm(x)=γσ2+ϵ xiμ+β

前馈神经网络(FFN)

FFN是一个全连接的前馈神经网络结构,内部结构包括两个线性变换层,中间插入一个非线性激活函数。
在这里插入图片描述

第一层线性变换

将自注力机制的输出结果记为 X X X,通过一个线性映射将输入转换成新的向量表示:
H = W 1 X + b 1 H=W_{1}X+b_1 H=W1X+b1
并通过ReLU激活函数进行非线性处理:
H ′ = R e L U ( H ) H^{'}=ReLU(H) H=ReLU(H)

第二层线性变换

对ReLU激活后的向量 H ′ H^{'} H再次进行线性映射:
F F N ( X ) = W 2 H ′ + b 2 FFN(X)=W_{2}H^{'}+b_2 FFN(X)=W2H+b2

计算特征

参考该文的第二章节,从attention计算的不同流程分析了两种限制:计算限制和内存限制。
图解大模型计算加速系列:FlashAttention V1,从硬件到计算逻辑

输入位置编码向量与词嵌入相加

浮点数的加法操作

自注力矩阵的计算

Q K T QK^T QKT的矩阵乘计算, d k \sqrt{d_k} dk 的根号运算,以及两个结果相除计算
再将结果进行softmax函数计算,包括乘法、求和、除法运算。
s o f t m a x ( Q K T d k ) softmax(\frac{QK^T}{\sqrt{d_{k}}}) softmax(dk QKT)

multi-Head Attention的conact和linear操作

残差求和操作

层归一化

平均数求和和除法操作
求方差操作
归一化处理(求差、除法等)

FFN的两级线性乘加运算

参考文献


  1. Google:《Attention Is All You Need》 ↩︎

  2. 知乎:大模型背后的Transformer模型究竟是什么? ↩︎

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

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

相关文章

第一后裔怎么绑定NEXON账号 NEXON账号绑定Steam第一后裔教程

刚上线就特别好评的多人刷榜刚上线就特别好评的多人刷宝射击爽游《第一后裔》免费上线了,快和小伙伴们一起来闯荡这个神秘的世界吧,整体还是mmo的玩法,开放世界任意探索,全新虚幻五引擎带来的不俗的画面表现,在游戏中扮…

Sharding-JDBC分库分表的基本使用

前言 传统的小型应用通常一个项目一个数据库,单表的数据量在百万以内,对于数据库的操作不会成为系统性能的瓶颈。但是对于互联网应用,单表的数据量动辄上千万、上亿,此时通过数据库优化、索引优化等手段,对数据库操作…

昇思25天学习打卡营第04天 | 数据集 Dataset

昇思25天学习打卡营第04天 | 数据集 Dataset 文章目录 昇思25天学习打卡营第04天 | 数据集 Dataset数据集加载数据集迭代数据集的变换shufflemapbatch 自定义数据集可随机访问数据集对象可迭代数据集生成器 总结打卡 数据集Dataset对原始数据进行封装、变换,为神经网…

OpenSSH漏洞扫描(CVE-2024-6387、CVE-2006-5051、CVE-2008-4109)

目录 POC:ssh_poc.py 使用方法 github CVE-2024-6387 漏洞信息 补丁 POC:ssh_poc.py import sys import socket import argparse import threading import queue import os from datetime import datetime from urllib.parse import urlparse from…

全年免费!环信发布出海创新版,助力泛娱乐创业者扬帆起航

目前,以陌生人社交、直播、语聊、电商等热门场景为代表的社交泛娱乐出海正发展得如火如荼,成为企业新的增长曲线。但随着出海企业增多,海外市场争夺、资源竞争与技术博弈也愈加激烈。 为了让更多创业者与创新者获得支持,快速高效…

宠物博主亲测养宠好物安利,口碑好的狗毛空气净化器推荐

作为一名6年资深铲屎官,一到春季换季就开始各种疯狂打喷嚏、全身过敏红肿,这是因为宠物在换季的时候就疯狂掉毛,家里就想下雪一样,空气中都是宠物浮毛。而宠物毛上附带的细菌会跟随浮毛被人吸入人体,从而产生打喷嚏、过…

VBA字典与数组第十六讲:行、列数不相同的数组间运算规律

《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。…

云服务器中的地域和可用区是什么意思?

一、地域介绍 1、概念 地域(Region):从地理位置和网络时延维度划分,同一个地域内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。不同地域之间完全隔离,保证不同地域间最大程度的稳定性和容…

0628_ARM4

练习&#xff1a; stm32流水灯 .text .global _start _start: 使能GPIOE外设时钟 0X50000A28 RCC_MP_AHB4ENSETR[4]->1 LDR R0,0x50000a28 指定操作的内存地址 LDR R1,[R0] 将R0对应的地址空间中的值读取出来 ORR R1,R1,#(0x3<<4) 将第4,5位设置为1 STR…

ForkJoinPool与ThreadPoolExecutor

ThreadPoolExecutor不多介绍&#xff0c;重点介绍ForkJoinPool&#xff0c;以及二者的区别 ForkJoinPool ForkJoinPool 是 Java 7 引入的一种用于并行计算的框架&#xff0c;特别适合处理递归任务。它是 java.util.concurrent 包的一部分&#xff0c;基于工作窃取算法&#x…

【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人

系列篇章&#x1f4a5; No.文章1【Qwen部署实战】探索Qwen-7B-Chat&#xff1a;阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验&#xff1a;用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B&#xff1a;通过FastApi框架实现API的部署与调用4【Q…

java 程序、进程 、线程,cpu,并行、并发、启动线程两种方式

1、重写 Thread 父类方法 后创建实例调用 start 方法 2、将创建自实现 Runable 接口后的实例 作为参数传递给 Thread 的构造方法 两个条件同时存在&#xff0c;那个生效&#xff1f; new Thread(/* condition 1 */threadTest2) {Override/* condition 2 */public void run() {T…

如何查看xpf文件

xpf文件是什么 XPF文件是“XML Paper Specification File”的缩写&#xff0c;它是一种文件保存格式&#xff0c;具有以下特点和相关信息&#xff1a; 一、定义与用途 定义&#xff1a;XPF文件用于保留文档的固定布局&#xff0c;包括文本、图片以及其他文档元素的确切位置。…

【HarmonyOS NEXT】鸿蒙如何动态添加组件(NodeController)

NodeController用于实现自定义节点的创建、显示、更新等操作的管理&#xff0c;并负责将自定义节点挂载到NodeContainer上。 说明 本模块首批接口从API version 11开始支持 当前不支持在预览器中使用NodeController。 导入模块 import { NodeController } from "ohos…

23种设计模式之装饰者模式

深入理解装饰者模式 一、装饰者模式简介1.1 定义1.2 模式类型1.3 主要作用1.4 优点1.5 缺点 二、模式动机三、模式结构四、 装饰者模式的实现4.1 组件接口4.2 具体组件4.3 装饰者抽象类4.4 具体装饰者4.5 使用装饰者模式4.6 输出结果&#xff1a; 五、 应用场景5.1 图形用户界面…

嵌入式Linux系统编程 — 6.2 signal和 sigaction信号处理函数

目录 1 信号如何处理 2 signal()函数 2.1 signal()函数介绍 2.2 示例程序 3 sigaction()函数 3.1 sigaction()函数介绍 3.2 示例程序 1 信号如何处理 信号通常是发送给对应的进程&#xff0c;当信号到达后&#xff0c; 该进程需要做出相应的处理措施&#xff0c;可以通…

ROS——Server、Client的编程实现,服务数据的定义与使用,参数的使用和编程方法

客户端 创建功能包 创建客户端、创建服务、配置请求数据、请求调用、等待应答 设置编译规则 编译运行客户端 服务端 创建服务器 编译成目标执行文件、相关库的连接 add_executable(turtle_command_server src/turtle_command_server.cpp) target_link_libraries(turtle_comman…

第2章 寄存器

第2章 寄存器 一个 CPU 由运算器&#xff0c;控制器&#xff0c;寄存器等器件构成&#xff0c;这些器件靠内部总线进行相连。简单的说 CPU 中&#xff1a; 运算器进行信息处理寄存器进行信息存储控制器控制各种器件进行工作内部总线连接各个器件&#xff0c;在他们之间进行各种…

工业交换机端口统计功能

工业交换机端口统计功能不仅是一项技术手段&#xff0c;更是一双透视企业网络健康状态的慧眼。通过这一功能&#xff0c;企业能够实时捕捉到网络中每一个端口的流量情况&#xff0c;这不仅仅是数据的积累&#xff0c;更是对网络脉搏的精准把握。当网络的每一个脉动都被记录在案…

git基本使用(一):git的基本概念

Git 是一种分布式版本控制系统&#xff0c;最初由 Linus Torvalds 于 2005 年为 Linux 内核开发。它主要用于跟踪文件的更改&#xff0c;特别是在软件开发过程中&#xff0c;可以帮助团队成员协同工作。它在实际项目开发中&#xff0c;应用非常广泛&#xff0c;我们这一节来掌握…