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

news/2024/5/16 5:46:54/文章来源:https://blog.csdn.net/m0_61819793/article/details/137155412

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

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

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

相关文章

前端web移动端学习day04

移动 Web 第四天 01-vw适配方案 vw和vh基本使用 vw和vh是相对单位,相对视口尺寸计算结果,相对于屏幕的逻辑参数 vw:viewport width(1vw 1/100视口宽度 )vh:lviewport height ( 1vh 1/100视口高度 ) …

二叉树:递归算法的理解和运用

上一期中,我们了解到了堆,堆的结构也可以叫做二叉树的顺序结构,今天我们一起来看看二叉树的链式结构,我们还要学习有关于二叉树递归的书写。 首先,这是一个二叉树,但是对于普通的二叉树来说,增…

蓝桥备赛——堆队列

AC code import os import sys import heapq a [] b [] n,k map(int,input().split())for _ in range(n):x,y map(int,input().split())a.append(x)b.append(y) q []# 第一种情况:不打第n个怪兽# 将前n-1个第一次所需能量加入堆 for i in range(n-1):heapq.h…

Selenium 自动化 —— 浏览器窗口操作

更多内容请关注我的专栏: 入门和 Hello World 实例使用WebDriverManager自动下载驱动Selenium IDE录制、回放、导出Java源码 当用 Selenium 打开浏览器后,我们就可以通过 Selenium 对浏览器做各种操作,就像我们日常用鼠标和键盘操作浏览器一…

c++初阶篇----string的底层模拟

string类的模拟 目录 string类的模拟功能介绍各功能的实现类的构造函数,拷贝构造函数,析构函数迭代器的实现string的内部容量访问成员函数string的修改成员函数string类的相关联函数string类的输入输出友元 汇总string功能的实现汇总测试代码 功能介绍 …

151 shell编程,正则表达式,在C语言中如何使用正则表达式

零,坑点记录:bash 和 dash 的区别,导致的坑点 查看当前用的shell 是啥,用的是/bin/bash hunandedehunandede-virtual-machine:~$ echo $SHELL /bin/bash 当shell 脚本运行的时候(后面会学到方法,这里是最…

Django屏蔽Server响应头信息

一、背景 最近我们被安全部门的漏洞扫描工具扫出了一个服务端口的漏洞。这个服务本身是一个Django启动的web服务,并且除了登录页面,其它页面或者接口都需要进行登录授权才能进行访问。 漏洞扫描信息和提示修复信息如下: 自然这些漏洞如何修复&#xff0c…

图论- 最小生成树

一、最小生成树-prim算法 1.1 最小生成树概念 一幅图可以有很多不同的生成树,比如下面这幅图,红色的边就组成了两棵不同的生成树: 对于加权图,每条边都有权重(用最小生成树算法的现实场景中,图的边权重…

每天五分钟深度学习:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…

java 溯本求源之基础(八)之 jar(下篇)

上篇中我们介绍了 Java 类加载顺序、JAR 命令的使用以及 MANIFEST.MF 文件的作用。Java 类加载顺序包括 Bootstrap classes、Extension classes 和 Class Path。JAR 命令是一个归档和压缩工具,用于打包 Java 应用程序。MANIFEST.MF 文件存储打包文件的元信息&#x…

Midjourney AI绘图工具介绍及使用

介绍 Midjourney是一款目前被誉为最强的AI绘图工具。只要输入想到的文字,就能通过人工智能产出相对应的图片。 官网只是宣传和登录入口,提供个人主页、订阅管理等功能,Midjourney实际的绘画功能,是在另外一个叫discord的产品中实…

关于未来自我的发展和一些学习方法(嵌入式方向)

我是一名大二的学生,考研还是就业,到底是重视专业课还是重视数学英语,这些问题一直困扰了我很久,但如今已经有了一些浅显的认识,所以才会想写这样一篇文章来记录一下自己的状态和未来的规划 下面的看法都是个人的看法&…

Day26 手撕各种集合底层源码(一)

Day26 手撕各种集合底层源码(一) 一、手撕ArrayList底层源码 1、概念: ArrayList的底层实现是基于数组的动态扩容结构。 2、思路: 1.研究继承关系 2.研究属性 3.理解创建集合的过程 – 构造方法的底层原理 4.研究添加元素的过程…

wpf 自定义命令

自定义命令 MyCommand.cs public class MyCommand : ICommand {private readonly Action<Object> execAction;private readonly Func<Object,bool> changedFunc;public event EventHandler? CanExecuteChanged;public MyCommand(Action<object> execAction…

离线linux服务器安装mysql8

本文的服务器环境&#xff1a;openEuler毛坯版的&#xff0c;很多常用的指令都没有预装&#xff0c;比如rpm、tar等等&#xff0c;没有网络坏境&#xff0c;需要自己手动配置本地yum仓库&#xff0c;安装相关指令 1、检查服务器是否已经安装了MySQL 1.1、查询mysql以安装的相关…

NRF52832修改OTA升级时的bootloader蓝牙MAC

NRF52832在OTA升级时&#xff0c;修改了APP的蓝牙MAC会导致无法升级&#xff0c;原因是OTA程序的蓝牙MAC没有被修改所以手机扫描蓝牙时无法连接 解决办法 在bootloader的程序里面加入修改蓝牙mac地址的代码实现原理&#xff1a; 在bootloader蓝牙广播开启之前修改蓝牙mac 通…

无人车网关案例:记SV900无人清扫车网关的现场应用

​随着无人驾驶技术的不断发展,无人车辆已经开始广泛应用于物流配送、环境保洁、巡逻监控等众多领域,助力城市运营更加高效智能。而要实现无人车辆的安全可靠运行,关键在于选择一款性能卓越的车载网络通信系统.在这一背景下,星创易联推出了SV900无人车网关系列产品。它集5G/4G网…

算法打卡day17

今日任务&#xff1a; 1&#xff09;654.最大二叉树 2&#xff09;617.合并二叉树 3&#xff09;700.二叉搜索树中的搜索 4&#xff09;98.证二叉搜索树 654.最大二叉树 题目链接&#xff1a;654. 最大二叉树 - 力扣&#xff08;LeetCode&#xff09; 给定一个不含重复元素的整…

计算机网络数据链路层知识总结

物理层知识总结传送门 计算机网络物理层知识点总结-CSDN博客 功能 功能概述 一些基本概念 结点:主机、路由器链路﹔网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。数据链路︰网络中两个结点之间的逻辑通道&a…

HarmonyOS实战开发-如何实现一个自定义抽奖圆形转盘

介绍 本篇Codelab是基于画布组件、显式动画&#xff0c;实现的一个自定义抽奖圆形转盘。包含如下功能&#xff1a; 通过画布组件Canvas&#xff0c;画出抽奖圆形转盘。通过显式动画启动抽奖功能。通过自定义弹窗弹出抽中的奖品。 相关概念 Stack组件&#xff1a;堆叠容器&am…