0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

深度学习自然语言处理 来源:深度学习自然语言处理 2023-09-19 16:25 次阅读

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

标题: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,也就是以自回归的方式从左到右逐步生成文本。

什么是token?

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

340537bc-56c3-11ee-939d-92fbcf53809c.png

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

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

3416725c-56c3-11ee-939d-92fbcf53809c.png

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

3426a866-56c3-11ee-939d-92fbcf53809c.png

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

34357954-56c3-11ee-939d-92fbcf53809c.png

语言模型的预训练

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

34423e6e-56c3-11ee-939d-92fbcf53809c.png

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

首先我们把输出embedding送入一个线性层,输出的维度是词表的大小,就是让预测这个token的下一个token属于词表的“哪一类”

为了将输出概率归一化,需要再进行一个softmax变换

训练时就是最大化这个概率使得它能够预测真实的下一个token

推理时就是从这个概率分布中采样下一个token

3456930a-56c3-11ee-939d-92fbcf53809c.png

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

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

每次预测下一个token

将预测的token拼接到当前已经生成的句子上

再基于拼接后的句子进行预测下一个token

不断重复直到结束

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

3471acb2-56c3-11ee-939d-92fbcf53809c.png

代码实现

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

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

Multi-headed Causal Self-Attention

Feed-forward Neural Network结构的示意图如下:

348137fe-56c3-11ee-939d-92fbcf53809c.png

看图搭一下单个Block

348f6e5a-56c3-11ee-939d-92fbcf53809c.png

然后看下一整个GPT的结构

349c3c70-56c3-11ee-939d-92fbcf53809c.png

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

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

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

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

34ac7e8c-56c3-11ee-939d-92fbcf53809c.png

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

34c3aa94-56c3-11ee-939d-92fbcf53809c.png

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

34d55122-56c3-11ee-939d-92fbcf53809c.png

接下来看推理阶段:

根据当前输入序列进行一次前向传播

利用温度系数对输出概率分布进行调整

通过softmax进行归一化

从概率分布进行采样下一个token

拼接到当前句子并再进入下一轮循环

34ea1436-56c3-11ee-939d-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 语言模型
    +关注

    关注

    0

    文章

    523

    浏览量

    10277
  • LLM
    LLM
    +关注

    关注

    0

    文章

    287

    浏览量

    331

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

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    通俗易懂的PID教程

    本帖最后由 Calvin248 于 2013-5-5 15:31 编辑 帮助大家更好的理解PID算法,讲解的很通俗易懂,并且附有程序,帮助大家理解掌握!
    发表于 05-05 15:30

    通俗易懂的PID算法

    发几个通俗易懂的PID算法,需要的拿走
    发表于 01-26 00:54

    通俗易懂系列整合—电源基础知识讲解

    之前发表了六篇用通俗易懂的话讲解电源知识的文章,分别是关于三极管、电阻、电容、电感、二极管和场效应管的讲解。怕想学习的坛友找不到内容,所以这边整合一下,给大家分享文章的链接。用通俗易懂的话让你明白
    发表于 02-17 09:43

    PID通俗易懂

    PID通俗易懂.....................
    发表于 06-30 18:54

    通俗易懂之电子称开发导航篇

    通俗易懂之电子称开发立项篇https://bbs.elecfans.com/jishu_919726_1_1.html通俗易懂之电子称开发硬件篇https://bbs.elecfans.com
    发表于 07-18 21:22

    通俗易懂的单片机教程

    通俗易懂的单片机教程
    发表于 09-29 15:45 637次下载
    <b class='flag-5'>通俗易懂</b>的单片机教程

    卡尔曼滤波的原理说明(通俗易懂)

    通俗易懂的 卡尔曼滤波原理 由浅入深不光是公式的介绍
    发表于 12-08 18:13 37次下载

    卡尔曼滤波的原理说明(通俗易懂)

    这是关于卡尔曼滤波的原理说明(通俗易懂),适合初学者
    发表于 03-16 14:40 0次下载

    PID通俗易懂

    PID通俗易懂PID通俗易懂PID通俗易懂PID通俗易懂PID通俗易懂PID通俗易懂
    发表于 04-19 09:54 21次下载

    卡尔曼滤波器[附带例程]通俗易懂

    卡尔曼滤波器[附带例程] 通俗易懂 附上工程代码 C语言 c++ 以及matlab
    发表于 09-27 16:34 17次下载

    步进电机基本原理(通俗易懂)

    步进电机基本原理(通俗易懂)
    发表于 11-30 11:55 0次下载

    通俗易懂的讲解FFT的让你快速了解FFT

    相信网上现在有很多关于FFT的教程,我曾经也参阅了很多网上的教程,感觉都不怎么通俗易懂。在基本上的研究FFT,并且通过编程的形式实现之后。我决定写一篇通俗易懂的关于FFT的讲解。因此我在接下来的叙述中尽量非常通俗细致的讲解。
    的头像 发表于 03-24 11:52 3.6w次阅读
    <b class='flag-5'>通俗易懂</b>的讲解FFT的让你<b class='flag-5'>快速</b>了解FFT

    大型语言模型LLM)的自定义训练:包含代码示例的详细指南

    近年来,像 GPT-4 这样的大型语言模型LLM) 因其在自然语言理解和生成方面的惊人能力而受到广泛关注。但是,要根据特定任务或领域定制
    发表于 06-12 09:35 2763次阅读

    通俗易懂的ArkTS语言入门指南

    本文为我整理出来最通俗易懂的 ArkTS 语言入门指南。
    的头像 发表于 06-18 15:12 2.3w次阅读
    最<b class='flag-5'>通俗易懂</b>的ArkTS<b class='flag-5'>语言</b>入门指南

    语言模型(LLM)快速理解

    自2022年,ChatGPT发布之后,大语言模型(LargeLanguageModel),简称LLM掀起了一波狂潮。作为学习理解LLM的开始
    的头像 发表于 06-04 08:27 979次阅读
    大<b class='flag-5'>语言</b><b class='flag-5'>模型</b>(<b class='flag-5'>LLM</b>)<b class='flag-5'>快速</b><b class='flag-5'>理解</b>