Redian新闻
>
从原理到代码理解语言模型训练和推理,通俗易懂,快速修炼LLM

从原理到代码理解语言模型训练和推理,通俗易懂,快速修炼LLM

科技

作者:养生的控制人
链接:https://zhuanlan.zhihu.com/p/656758138

今天分享一篇博客,介绍语言模型的训练和推理,通俗易懂且抓住本质核心,强烈推荐阅读。

标题:Language Model Training and Inference: From Concept to Code
作者:CAMERON R. WOLFE
原文
https://cameronrwolfe.substack.com/p/language-model-training-and-inference

要理解大语言模型(LLM),首先要理解它的本质,无论预训练、微调还是在推理阶段,核心都是next token prediction,也就是以自回归的方式从左到右逐步生成文本。

进NLP群—>加入NLP交流群

什么是token?

token是指文本中的一个词或者子词,给定一句文本,送入语言模型前首先要做的是对原始文本进行tokenize,也就是把一个文本序列拆分为离散的token序列

其中,tokenizer是在无标签的语料上训练得到的一个token数量固定且唯一的分词器,这里的token数量就是大家常说的词表,也就是语言模型知道的所有tokens。

当我们对文本进行分词后,每个token可以对应一个embedding,这也就是语言模型中的embedding层,获得某个token的embedding就类似一个查表的过程

我们知道文本序列是有顺序的,而常见的语言模型都是基于注意力机制的transformer结构,无法自动考虑文本的前后顺序,因此需要手动加上位置编码,也就是每个位置有一个位置embedding,然后和对应位置的token embedding进行相加

在模型训练或推理阶段大家经常会听到上下文长度这个词,它指的是模型训练时接收的token训练的最大长度,如果在训练阶段只学习了一个较短长度的位置embedding,那模型在推理阶段就不能够适用于较长文本(因为它没见过长文本的位置编码)

语言模型的预训练

当我们有了token embedding和位置embedding后,将它们送入一个decoder-only的transofrmer模型,它会在每个token的位置输出一个对应的embedding(可以理解为就像是做了个特征加工)

有了每个token的一个输出embedding后,我们就可以拿它来做next token prediction了,其实就是当作一个分类问题来看待

  • 首先我们把输出embedding送入一个线性层,输出的维度是词表的大小,就是让预测这个token的下一个token属于词表的“哪一类”
  • 为了将输出概率归一化,需要再进行一个softmax变换
  • 训练时就是最大化这个概率使得它能够预测真实的下一个token
  • 推理时就是从这个概率分布中采样下一个token

训练阶段:因为有causal自注意力的存在,我们可以一次性对一整个句子每个token进行下一个token的预测,并计算所有位置token的loss,因此只需要一forward

推理阶段:以自回归的方式进行预测

  • 每次预测下一个token
  • 将预测的token拼接到当前已经生成的句子上
  • 再基于拼接后的句子进行预测下一个token
  • 不断重复直到结束

其中,在预测下一个token时,每次我们都有一个概率分布用于采样,根据不同场景选择采样策略会略有不同,不然有贪婪策略、核采样、Top-k采样等,另外经常会看到Temperature这个概念,它是用来控制生成的随机性的,温度系数越小越稳定。

代码实现

下面代码来自项目https://github.com/karpathy/nanoGPT/tree/master,同样是一个很好的项目,推荐初学者可以看看。

对于各种基于Transformer的模型,它们都是由很多个Block堆起来的,每个Block主要有两个部分组成:

  • Multi-headed Causal Self-Attention
  • Feed-forward Neural Network 结构的示意图如下:

看图搭一下单个Block

然后看下一整个GPT的结构

主要就是两个embedding层(token、位置)、多个block、一些额外的dropout和LayerNorm层,以及最后用来预测下一个token的线性层。说破了就是这么简单。

这边还用到了weight tying的技巧,就是最后一层用来分类的线性层的权重和token embedding层的权重共享。

接下来重点来关注一下训练和推理的forward是如何进行的,这能帮助大家更好的理解原理。

首先需要构建token embedding和位置embedding,把它们叠加起来后过一个dropout,然后就可以送入transformer的block中了。

需要注意的是经过transforemr block后出来的tensor的维度跟之前是一样的。拿到每个token位置对应的输出embedding后,就可以通过最后的先行层进行分类,然后用交叉熵损失来进行优化。

再看一下完整的过程,其中只需要将输入左移一个位置就可以作为target了

接下来看推理阶段:

  • 根据当前输入序列进行一次前向传播
  • 利用温度系数对输出概率分布进行调整
  • 通过softmax进行归一化
  • 从概率分布进行采样下一个token
  • 拼接到当前句子并再进入下一轮循环

进NLP群—>加入NLP交流群

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
DreamLLM:多功能多模态大型语言模型,你的DreamLLM~最强大模型训练芯片H200发布!141G大内存,AI推理最高提升90%,还兼容H100大语言模型(LLM)预训练数据集调研分析ACL 2023 | 面向信息检索的结构感知语言模型训练方法Nostos学科探索系列 | 哈佛导师带你了解语言学MIT惊人再证大语言模型是世界模型!LLM能分清真理和谎言,还能被人类洗脑LLM大模型训练Trick系列之拒绝采样环法第十九天----催人泪下的兔子大语言模型真能“理解”语言吗?【万水千山, 一起走遍】台北故宫博物院, 至善园钗头凤 - 爱的星空OpenAI科学家最新大语言模型演讲火了,洞见LLM成功的关键通俗易懂k8s——核心组件AI 大语言模型 LLM,为啥老被翻译成「法学硕士」?!BELLE-7B-1M逻辑推理超预期?10B量级开源中文对话LLM,谁最「懂」逻辑推理?ACL 2023 | 使用语言模型解决数学推理问题的协同推理框架刘知远等众多机构提出ToolLLM:促进大型语言模型掌握16000+真实世界的APIsDocker中容器和镜像的关系,真正的通俗易懂!长篇小说《如絮》第一百六十二章 旧金山-1967年 反战口号大型语言模型训练加速专场在线研讨会上线,三位专家将主讲AI服务器、训练框架和云上高性能存储架构ACL2023 | 面向信息检索的结构感知语言模型训练方法更加与主接近北京理工大学发布双语轻量级语言模型,明德大模型—MindLLM,看小模型如何比肩大模型通俗解构语言大模型的工作原理懂3D的语言模型来了!UCLA、上交、MIT等联合提出3D-LLM:性能大涨9%ICCV 2023 | 基于预训练视觉语言模型和大语言模型的零样本图像到文本生成MIT惊人证明:大语言模型就是「世界模型」?吴恩达观点再被证实,LLM竟能理解空间和时间LoRA继任者ReLoRA登场,通过叠加多个低秩更新矩阵实现更高效大模型训练效果​开源模型在竞赛数学MATH上首次突破50%,清华、微软联合推出工具集成推理语言模型哈工大发布大模型思维链推理综述:200+文献全面解析大语言模型思维链推理最新进展32卡176%训练加速,开源大模型训练框架Megatron-LLaMA来了MetaMath:新数学推理语言模型,训练大模型的逆向思维通俗易懂k8s——服务的注册与发现词表的选择如何影响语言模型训练?这可能是目前见过最好的词表选择研究从感知到理解-融合语言模型的多模态大模型研究
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。