【Roadmap to learn LLM】Large Language Models in Five Formulas

by Alexander Rush

Our hope: reasoning about LLMs
Our Issue

文章目录

  • Perpexity(Generation)
  • Attention(Memory)
  • GEMM(Efficiency)
    • 用矩阵乘法说明GPU的工作原理
  • Chinchilla(Scaling)
  • RASP(Reasoning)
  • 结论
  • 参考资料

the five formulas

  1. perpexity —— generation
  2. attention —— memory
  3. GEMM —— efficiency
  4. Chinchilla —— scaling
  5. RASP —— reasoning

Perpexity(Generation)

simplified language 文档 word tokens 词典
language model 文档的概率模型 p ( x 1 , x 2 , . . . , x T ; θ ) p(x_1, x_2, ..., x_T; \theta) p(x1,x2,...,xT;θ)
chain rule 利用chain rule 将joint probability转换为conditional probability
p ( x 1 , . . . , x T ) = ∏ t = 1 T p ( x t ∣ x 1 , . . . , x t − 1 ) p(x_1, ..., x_T) = \prod_{t=1}^Tp(x_t|x_1, ..., x_{t-1}) p(x1,...,xT)=t=1Tp(xtx1,...,xt1)
Auto-Regressive,自动从之前的结果即已有tokens预测之后的token
word classification:每一个条件概率都可以被视为一个采样,在word tokens字典上形成一个概率分布
sampling:条件概率告诉我们每次采样一个word token

Markovian
一些假设
n-grams/Markovian假设:word x t x_t xt 仅仅依赖于离他一定距离以内的有限个word tokens
categorical假设:下一个单词的概率可以用分类分布来建模

Shannon
这样一个问题:如何度量一个language model的语言建模能力有多强

Metric:Accuracy

words和language遵循zipfian Distribution(长尾效应、幂律关系、最省力原则)
常见的单词占据了概率分布的一大部分,预测不同单词(有着不同的分布频率)情形出现的概率不同,因而不能直接用预测的单词对不对来评判语言模型预测下一个单词的能力,因为零概率单词的存在

处理方法:将概率转换为二进制字符串,字符串的长度是通过概率计算得到的,并且字符串长度 L L L满足 L = − l o g 2 p ( x t ∣ x 1 , . . . , x t − 1 ) L = -log_2p(x_t|x_1,..., x_{t-1}) L=log2p(xtx1,...,xt1)

p e r p l e x i t y = 2 − ∑ t l o g 2 p ( x t ∣ x 1 , . . . , x t − 1 ) / T perplexity = 2^{-\sum_tlog_2p(x_t|x_1,..., x_{t-1})/T} perplexity=2tlog2p(xtx1,...,xt1)/T

在Wall Street Journal上进行语言建模的perplexity结果
image.png

为什么perplexity重要
语言建模可以直接用于其他任务。举个例子,法语到英语的机器翻译可以理解为将法语句子和已经生成的英文words共同作为条件来predict下一个word。
->语言模型的perplexity与将其用于下游任务的效果密切相关
image.png

->语言模型的perplexity越低,它的泛化能力越强,甚至是在训练之外的任务上
image.png

->现在,perplexity已经作为llm性能的重要衡量指标,我们甚至可以相信说,一个有着更低perplexity的llm会在整体性能上都更好
image.png

从Shannon的模型到GPT-3
两个主要假设

  1. 使用深度神经网络模型
  2. 在预测下一个token时考虑已经生成的全部tokens

Attention(Memory)

语言模型参数化
Markovina假设: p ( x t ∣ x t − 2 , x t − 1 ; θ ) p(x_t|x_{t-2}, x_{t-1};\theta) p(xtxt2,xt1;θ) 通过前两个单词预测当前单词

神经网络语言模型
s o f t m a x ( N N ( x t − 2 , x t − 1 ) ) softmax(NN(x_{t-2}, x_{t-1})) softmax(NN(xt2,xt1)) 得到下一个单词的预测概率分布
x t − 2 x_{t-2} xt2 x t − 1 x_{t-1} xt1均为one-hot向量,预测的 x t x_t xt也为一个one-hot向量
image.png

softmax
将输出转化为词汇表上的概率分布,保证词汇表上每个word对应的概率均为正且所有word的概率加和为1
s o f t m a x ( z ) v = e x p ( z v ) ∑ v ′ e x p ( z v ′ ) softmax(z)_v = \frac{exp(z_v)}{\sum_{v'}exp(z_{v'})} softmax(z)v=vexp(zv)exp(zv)
image.png

Early Breakthrough: Word2Vec
很重要的一个模型,之后语言建模技术的基础

深度语言模型
image.png

这样的语言建模存在的问题
有些token的预测依赖于长上下文的,而当前的语言模型仅仅只考虑了前两个token,传递的信息是不够的
举个例子:这里需要语言模型输出一个在之前段落中提到过的人的姓氏,这对于一个仅仅考虑tokens nearby的语言模型而言是不可能完成的
image.png

Fully Auto-Regressive Models
完全自回归模型,理论上这些模型是使用所有以前的tokens来预测接下来的token
p ( x t ∣ x 1 , . . . , x t − 1 ; θ ) p(x_t|x_1, ..., x_{t-1}; \theta) p(xtx1,...,xt1;θ)

为什么是注意力机制而不是普通的神经网络
普通的神经网络不能对上下文进行动态的语言建模,举个例子,当我们在预测position 7的token时,普通的神经网络将学习到关于position 7的非常具体的信息

解决方案:Attention
当今所有llm的核心
类似于随机读取的缓存"RAM"或者跳表
将之前的信息缓存起来为之后的使用做准备

Attention的使用
举个例子,现在我们需要语言模型预测the blank word。在使用注意力机制的时候,我们有一个query vector和一个lookup table,lookup table是之前所有token的相关信息,存储形式为key-value的键值对。当语言模型进行预测任务时,query vector在lookup表里与所有key值进行匹配得到与待预测token最相关的key,将它的value值传递到后面的深度神经网络中,从而完成预测token任务
image.png

总结一下Attention mechanism做了什么事情
image.png

存在的问题
argmax函数不存在导数
image.png

解决办法:将argmax函数替换为softmax函数,从而生成先前tokens的位置分布
image.png

将argmax改为softmax后的新process
在第二步使用softmax函数求得各个位置key的标准化分数,在第三步对各个位置的分数值进行加权得到最后的结果传递给深度神经网络
image.png

Attention is all you need(2017)
语言建模领域的重要论文,揭示了深度神经网络+注意力=Transformer

Tranformer结构
由两个阶段构成,第一个阶段是注意力机制,第二个阶段是深度神经网络。这两个阶段在最后的预测之前会重复多次
image.png

如何解释llm中的注意力
Attention就像记忆一样
Tranformer架构中使用的Attention机制高效且并行化能力高

Final Process
image.png
我们得到了这样一个完整的自回归语言模型,这个模型被称为"generative language model"
这样一个计算过程包括矩阵乘法和softmax计算,是高度可并行化的,利用GPU加速

GEMM(Efficiency)

general purpose GPUs
GPU在llm构建过程中发挥的核心地位,GPU/算力直接决定我们能够构建出什么样性能的llm

用softmax的计算说明GPU发挥的巨大作用
在GPU广泛使用之前,softmax函数的分母计算给CPU造成了巨大的挑战,很多研究都在探究怎么样找到一个近似的函数来对分母的求和进行逼近。而当2010年之后GPU通用编程开始兴起,这个计算变成了一个很简单的问题
image.png

用矩阵乘法说明GPU的工作原理

GPU是什么
大量并行运行的PC,有着多个线程,可以同时运行相同的代码

下面将一个GPU线程比作一个小机器人,对GPU的结构进行说明:

GPU线程
image.png

GPU block
一个block中的所有线程(这里是12个)同时运行相同的代码,从block的local memory存取数据是快且高效的
image.png

GPU Grid
一个Grid对应了一个全局memory被所有线程共享,线程从这个全局memory中读取数据是更慢的
image.png

规则
局部性原理,通过在整个grid中进行block分块,使得块内线程读取块内存储相较于全局存储是更高效的

GPU中的分层存储
全局存储和本地存储直接有交换关系,每个线程只会读取本地线程以获得更高效的性能
image.png

举个例子进行说明
3X3的矩阵乘法在GPU上的运算过程
B A BA BA
如果在计算结果的一个项时只使用一个线程,会带来大量低效的全局访存操作
image.png

GPU使用的方法,先将待乘的矩阵数据读取缓存到块存储中,再进行计算
step1: 从全局存储中将待计算的矩阵数据读取到block存储中
step2: 在block存储中计算矩阵乘法
step3: 从block存储中将计算结果写回全局存储
image.png

两种方法的对比
image.png

GEMM
更generally的情况是,还会给矩阵乘法结果加上一个矩阵作为偏置项
image.png

Chinchilla(Scaling)

预训练阶段的两个变量
llm的参数量和训练数据量
image.png

在考虑计算量的时候,数据量和参数量这两个变量形成了乘法关系(a multiplicative relationship):每个参与训练的token需要与每个参数进行计算
image.png

Scaling Laws
大语言模型的性能随着模型规模、训练数据量和使用的计算资源的增大而增强,它们之间满足幂律。log perplexity与计算资源大致成一个线性关系
image.png

一个直觉性的结论:尽可能地增加模型参数量和训练数据量

存在的问题
计算资源总是有限的,我们应当如何分配,模型参数量和训练数据量之间的分配比例?
如下图所示,我们应该使用更多的训练数据(左图)还是使用更多的模型参数量(右图)
image.png

如何找到最佳的计算资源分配
使用模型参数量 N N N和训练数据量 D D D拟合语言模型的perplexity,拟合结果如下图中的公式所示:
image.png

最后的结果——Chinchilla
模型参数量和训练数据量的重要程度大致相当,因而如果我们以大致相等的比例缩放数据和模型,将会得到有限计算资源下最好的perplexity,即最好的llm
image.png

不同模型的参数-训练数据量比展示:
image.png

注意:推理运用
在训练过程中故意使用一个不对称的N/D,比如使用相对更多的训练数据,使用一些计算资源来得到一个相对更小的模型

举个例子:Llama
image.png

RASP(Reasoning)

到目前为止,我们所做的,让模型在巨大的训练数据集上进行训练,我们的评测指标只是llm的perplexity是否下降,然后依赖“perplexity的下降会带来llm在其他相关任务上同样有更好的性能”,进行模型的训练优化。
但是我们并不知道也没有办法解释llm到底学到了什么

RASP
一种可以被翻译为一个Transformer语言模型的形式语言,类似于有限自动机

RASP编程
每一个操作都类似于注意力机制中的操作,将query vector、key vector和value vecotr转换为output
image.png

几个RASP程序
没怎么看懂,应该是通过RASP语言实现了Transformer中一个个简单的操作并直观地展示出来
第一个程序,匹配所有索引小于查询索引的key-value
image.png

第二个程序,将input序列右移一个位
image.png

结论

LLM的五个公式相关的研究都在不断发展
将人类反馈(RLFH)纳入模型优化的评价指标,作为对perplexity的扩展
考虑全部的input序列,是否有除开Transformer之外的其他架构
GPU的新架构、新扩展
Transformer带来硬件如何相互协调工作?以及其他有关llm可解释性的研究
image.png

参考资料

  1. Large Language Models in Five Formulas

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm中配置PyQt5并添加外部工具

Qt Designer、PyUIC和PyRcc是Qt框架下的三个重要工具,总的来说,这三个工具各司其职,相辅相成,能显著提升Qt开发的速度与效率。 Qt Designer:是一个用于创建图形用户界面的工具,可轻松构建复杂的用户界面。…

matlab及其在数字信号处理中的应用001:软件下载及安装

目录 一,matlab的概述 matlab是什么 matlab适用于的问题 matlab的易扩展性 二,matlab的安装 1,解压所有压缩文件 2,解压镜像压缩文件 3,运行setup.exe 4,开始安装 5,不要运行软件…

EasyBoss ERP上线实时数据大屏,Shopee本土店铺数据实时监测

近日,灵隐寺PPT汇报用上数据大屏疯狂刷屏,有做东南亚本土电商的老板发现这种数据大屏的模式可以很好地展现店铺运营状况。 所以就有老板来问:EasyBoss能不能也上线实时数据大屏的功能?没问题!立马安排! 要有…

BasicVSR++模型转JIT并用c++libtorch推理

BasicVSR模型转JIT并用clibtorch推理 文章目录 BasicVSR模型转JIT并用clibtorch推理安装BasicVSR 环境1.下载源码2. 新建一个conda环境3. 安装pytorch4. 安装 mim 和 mmcv-full5. 安装 mmedit6. 下载模型文件7. 测试一下能否正常运行 转换为JIT模型用c libtorch推理效果 安装Ba…

只出现一次的数字 II

题目链接 只出现一次的数字 II 题目描述 注意点 nums中,除某个元素仅出现一次外,其余每个元素都恰出现三次设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题 解答思路 本题与只出现一次的数字的数字类似,区别是重复的数字会…

深度学习InputStreamReader类

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…

SpringMVC注解及使用规则

文章目录 前言一、SpringMVC注解是什么?二、使用步骤1.注解使用2创建JSP3 SpringMVC视图1. 逻辑视图(Logical View)2. 物理视图(Physical View)区别和关系 4 SpringMVC注解总结 总结 前言 提示:这里可以添…

Java运算符-三元运算符,这你必须得会!

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…

08-研发流程设计(上):如何设计Go项目的开发流程?

在Go 项目开发中,我们不仅要完成产品功能的开发,还要确保整个过程是高效的,代码是高质量的。 所以,Go 项目开发一定要设计一个合理的研发流程,来提高开发效率、减少软件维护成本。研发流程会因为项目、团队和开发模式…

基于SSM的百货中心供应链管理系统设计与实现(论文+源码)_kaic

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套百货中心供应链管理系统有管理…

政安晨:【Keras机器学习实践要点】(九)—— 保存、序列化和导出模型

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 这篇文章是保存、序列化和导出模型的完整指南。 …

python实战之进阶篇(一)

定义类 1. 构造方法 2. 实例方法 3. 类方法 类似于Java中的静态方法, 使用方式: 类名.类方法 4. 私有变量 5. 私有方法 6. 使用属性set和get

vue3+threejs新手从零开发卡牌游戏(二十一):添加战斗与生命值关联逻辑

首先将双方玩家的HP存入store中,stores/common.ts代码如下: import { ref, computed } from vue import { defineStore } from piniaexport const useCommonStore defineStore(common, () > {const _font ref() // 字体const p1HP ref(4000) // 己…

4、Cocos Creator 动画系统

目录 1、Clip 参数 2、动画编辑器 3、基本操作 更改时间轴缩放比例 移动显示区域 更改当前选中的时间轴节点 播放 / 暂停动画 修改 clip 属性 快捷键 4、模拟实验 5、动画事件 6、注意事项 参考 Animation 组件是节点上的一个组件。Clip 动画剪辑就是一份动画的声…

【edge浏览器无法登录某些网站,以及迅雷插件无法生效的解决办法】

edge浏览器无法登录某些网站,以及迅雷插件无法生效的解决办法 edge浏览器无法登录某些网站,但chrome浏览器可以登录浏览器插件无法使用,比如迅雷如果重装插件重装浏览器重装迅雷后仍然出现问题 edge浏览器无法登录某些网站,但chro…

InfoNCE loss

InfoNCE loss是一种用于自监督学习的损失函数,通常用于训练对比学习模型,如自编码器或神经网络。全称是"InfoNCE: Contrastive Estimation of Neural Entropy",基于对比学习的思想,旨在最大化正样本的相似性&#xff0c…

QSplashScreen

以前打红警的时候进入游戏界面会有一个启动界面,比如美国是有伞兵,英国有狙击手,韩国有黑鹰战机的一些介绍,这些就是启动界面,就是由QSplashScreen这个类来实现的。 QSplashScreen 是 Qt 框架中的一个类,用…

【每日跟读】常用英语500句(300~400)

【每日跟读】常用英语500句 I had to take a shower. 我洗了个澡 Go on in. 赶紧进去吧 Hold up. 等一下 They seem like nice people. 他们看起来像好人 Such a wonderful age. 如此美好的年纪 That’s very impressive. 真厉害 I can see that. 看得出来 You should …

绘制多个box箱型图

1.首先生成随机数据 import random # 创建一个153629行,13列的数据, random_data np.random.randn(153629, 13) #创建数据标签,后续将根据数据标签绘制不同的箱型图 label [0,1,2,3] labels np.asarray(random.choices(label,k 153629))…

U盘文件突然消失:原因分析与恢复策略

U盘遭遇“幽灵”之手,文件不翼而飞 你是否曾遭遇过这样的诡异情况:前一天还好好存放在U盘里的文件,第二天却突然消失得无影无踪?这简直就像是一场无声的灾难,令人措手不及。U盘作为我们日常工作和生活中不可或缺的数据…