现在很多朋友都在研究AI大模型;
对各个公司的大模型更是数如家珍。
“chatgpt、Claude、Gemini、Llama3、文心一言、千问…”
国外的、国内的、开源的、不开源的;
只要出来一个大模型,就要注册,试一试效果。
但我想问的是:
你真正了解它们是如何工作的吗?
大家可以尝试回答下面这几个问题;
就能知道自己是不是真懂,什么是LLM大语言模型了。
例如:
“为什么基于生成式的模型,可以模拟出聊天对话的样子?”
“为什么大语言模型,可以生成不同的、非固定的对话回复?”
“生成式的AI大模型,依赖的是Transformer中的哪一部分?”
“几乎所有的大模型的最后一层都是softmax层,它的作用是什么?”
“如何快速的在笔记本电脑上,部署大语言模型进行实验?”
看完今天的文章,上面的问题都会迎刃而解!
最后希望能帮助大家:
真正理解AI大模型的工作原理。
具体来说,我会从三个方面进行讲解:
1)文本生成的原理,怎样基于文本生成模拟对话。
2)基于llama模型的结构,讲解大模型的推理过程。
3)基于openai的GPT2模型,进行推理实验。
1.文本生成的原理
你是否困惑过,无论向chatgpt输入什么样的问题,它都能准确的回复。
并且,chatgpt还能参考过去的对话内容,生成符合历史对话的新回复。
不仅如此,如果我们觉得chatgpt回复效果不够好;
还可以让它重新生成一个、不同于之前的回复。
这究竟是什么样的原理呢?
实际上,我们看似是与chatgpt进行问答式的沟通与对话交流;
但对于gpt来说,它做的事情,仍然是文本生成。
也就是基于过去的数据,预测出下一个最有可能出现的单词。
下面我举两个例子,来说明这个问题。
1)到底什么是文本生成?
假如我们有一个AI大模型,比如GPT2。
此时我们向模型输入,“[cls]、今、天、天、气、真”,一共6个字(单词)。
我们希望模型基于这6个字,生成第7个字。
此时,模型会输出第7个字,是“的”字。
这里要需要特殊说明:
最开始的[cls],是一个特殊标记;
它用于标记句子的起始位置;
模型需要基于一些特殊的标记来进行计算。
现在不太理解也没关系,可以暂时忽略这个cls标记。
接着,我们要生成第8个字。
对于第8个字的生成,就会依赖初始输入的6个字,与刚刚生成的第7个“的”字。
基于这7个字,模型会继续生成“很”字。
接着,我们可以再基于这8个字,再向后生成一个字;
也就是第9个字,模型会输出“好”字。
以此类推,接着往后生成“,我们一行人去吃的,我们点了一个牛肉锅”。
总结来说:
文本生成,就是使用前面的字作为输入,生成新的字。
而到底要生成多少内容,取决于我们希望生成多少内容。
也就是,只要你愿意,大语言模型可以生成无穷无尽的文本。
2)chatgpt和文本生成又有什么关系?
chatgpt就是对话形式的文本生成。
假如此时,我们有一个经过对话数据微调的、中文GPT2大语言模型。
同样向这个模型输入“[cls]、今、天、天、气、真”,一共6个字。
这一次我们会发现,生成的下一个字是“好”;
然后是“[SEP]”;
接着是“是的,你最近怎么样[SEP]挺好的,你呢[SEP]”。
这又代表什么意思呢?
SEP分隔符
实际上,SEP就像一开始的[cls],是一种预定义的特殊字符;
SEP用于表示对话的分隔符。
我们可以将SEP看做是两个人对话的分隔标记。
模型专门输出这个特殊字符[SEP],来指示对话的结构。
例如,如果以SEP分割模型生成的文本,就会模拟出两个人的对话。
例如,我们可以将:
第1句“今天天气真好”看做是A说的;
第2句“是的,你最近怎么样”看做是B说的;
第3句“挺好的,你呢”,又是A说的;
第4句“我也是,还在上班”,又是B说的。
这样就得到了,对话形式的生成结果。
我们在使用模型的输出时,也就是chatgpt在展示结果的时候:
只需要展示、输出第1个SEP后与第2个SEP前的文本就可以了。
也就是说,chatgpt会回复:
“是的,你最近怎么样”,这样就可以了。
这之后的输出,对于此时的对话是没有意义的。
当看到SEP后,就代表了本次的回复结束了。
综合上面这两个例子:
我们就会发现:
chatgpt的本质,就是文本生成。
模型本身,并没有试图去理解对话本身的意义。
chatgpt仅仅是通过文本生成,模拟出对话的效果而已。
所以,大家会不会觉得:
AI大模型也不过如此呢?
2.如何推理计算出下一个字
如何基于已有的文本,计算出下一个字呢?
也就是:
到底如何基于“[cls]、今、天、天、气、真、”;
计算出下一个单词是“的”;
再下一个字是“很”;
再下一个是“好”呢?
下面我基于llama3模型,来说明这个问题。
简单介绍Llama3,它是Meta的开源AI大模型;
效果先放一边,最关键的是它的资料非常全面;
对于学习者来说,是难得的学习资源。
Llama3基于Transformer架构。
如果真想搞懂llama,
肯定需要先理解Transformer。
下面我会基于Transformer和llama的模型结构图;
来解释大语言模型的推理过程。
大家即使看着似懂非懂也没关系,关键是感受一下大模型是如何工作的。
下面进入正题!
1)模型的结构:
左图是Transformer结构图,右图是llama结构图。
Transformer中的左侧结构是编码器,右侧是解码器。
对比观察这两个结构图可以看到,llama模型借鉴了Transformer的解码器。
实际上,生成式的AI大模型,都依赖Transformer的解码器架构。
如果深入来看模型方框中的结构;
Transformer的解码器和llama模型,同时都包括了:
-
红色的embedding层
-
绿色的标准化层
-
橙色的自注意力机制
-
蓝色的前馈神经网络
在模型的输出位置,又同时都有:
- 一个灰色linear线性层
- 一个绿色的softmax层
2)数据流的计算
输入数据Input标记为1,会从下方输入。
首先经过2号embedding,进行词嵌入,将单词序列转为向量序列。
接着进入N个transformer块,进行特征提取。
虚线框中的结构,编号3到10,都是Transformer块中的内容。
我们只需要知道,它们会将Input,转换为一个固定长度的向量。
接着,这个向量会被11号RMS-norm和12号Linear层处理。
3)预测下一个字
预测下一个字,就是使用Linear层+softmax层。
Linear层用于将特征向量的维度数,转换为字典中字的数量。
softmax层用于计算下一个字出现的概率,也就是预测下一个字。
这实际上是一个分类的过程!
假如在中文词汇表中,有1000个字:
那么它就是一个1000个类别的多分类任务。
具体来说:
给定的输入文本会被Transformer转为固定长度的向量:
图中标记的4096,就是输入文本转换后的维度。
这个4096的向量会输入到Linear线性层:
通过Linear线性层:
我们可以将这个4096维的向量,转换为字典中字的个数的维度的向量;
比如字典中有1000个字,那么就被转为1000维的向量。
从而进行1000个类别的分类。
分类的结果,就是具体的某一个字。
将1000维的向量,继续输入到softmax层:
softmax层会给出1000个字,每个字可能的概率。
例如,对输入文本“今天天气真”进行“分类”,就得到“好”字。
4)如何选择输出结果
贪心方式选择:
如果我们选择概率最大的字作为下一个字,进行输出;
这是贪心的方式来选择结果。
例如,1000个字:
“好”字的概率是0.67;
“糟”字的概率是0.32;
其他所有加一起是“0.01”。
这时我们可以直接输出“好”字。
这种选择结果的方式,虽然简单,但也存在弊端:
因为直接输出概率最大的字,输出结果总是固定的。
chatgpt的回复就没有多样性了。
基于概率分布选择:
我们可以基于概率分布,随机的取出下一个字作为输出。
就像从一个黑箱中有放回的摸球,
摸到哪个字,就输出哪个字;
我们也不用担心摸到不常用的字;
因为我们可以将概率过低的字进行丢弃。
这时我们就会选择“好”字,或者“糟”字;
从而生成出两不同的结果了。
这就是为什么,chatgpt可以生成不同结果的原理。
3.GPT2模型的推理实验
最后我们在本地电脑,进行大模型的推理实验。
这里选择GPT2进行实验。
简单介绍GPT2:
它是GPT4的前身,是openai的最后一个开源版本。
之所选择GPT2进行推理实验,是因为它所依赖的资源很少;
单机环境就可以运行大模型推理;
并且对于初学者,如果你想学大语言模型;
GPT2就是最合适的!
因为它的资料,真的很多!
1)模型下载
gpt2的中文模型,可以从huggingface上下载。
我们选择其中的clue-corpus-small,这个版本。
为了部署模型,需要下载其中的3个关键文件:
模型的配置:config.json
模型本身:pytorch_model.bin
切词字典:vocab.txt
2)实验代码1
使用这个模型需要基于Transformer库。
主要需要使用Transformer库的切词组件与GPT2模型组件。
下面在讲解代码时,我会基于代码的调试信息来说明。
实验整体包括两个部分,分词部分和推理部分。
分词部分:
首先定义设备变量device,打印后会看到我们当前的设备是cuda,GPU设备。
定义分词器,BertTokenizerFast。
使用分词器的encode函数,可以将句子分词,并将中文词语转为数字索引的形式。
例如,输入句子“[CLS]今天天气真”;
它就会被转换为6个整数索引,分别是101、791等等。
我们可以在字典vacab.txt中,找到这些词和对应的索引。
打开vacab.txt文件观察:
找到字典的第102行,就是[CLS]这个词。
找到字典的第792行,就是“今”这个字。
推理部分:
接着,我们使用接口from_pretrained,加载预训练模型。
定义max_len=20,表示向后生成20个字。
在循环中,每循环一次,就生成一个字。
将输入序列input_ids输入到模型model后,会计算出推理结果output。
这里我们直接选择概率最大的字,作为下一个字。
也就是使用softmax函数,计算出所有字出现的概率后;
使用torch.max,贪心的选择最大概率的字。
将这个字作为下一个生成结果,添加到response中。
然后更新输入序列input_ids,把新生成的next_token,cat到input_ids中。
接着我们将input_ids的整数索引与文本形式打印出来。
输出结果:
这时会看到,每一轮循环,都会生成一个字。
i=0时,生成了“的”字;
i=1时,生成了“很”字;
i=2时,生成了“好”字;
…
i=19时,就基于前面的19个字,就会生成最后一个“锅”字。
这样我们就基于“[CLS]今天天气真”;
生成了“的很好,我们一行人去吃的,点了一个牛肉锅”。
3)实验代码2:
实验代码1,是普通的文本生成;
实验代码2,是对话形式的文本生成。
这两个代码,只是加载的模型不同:
左侧是基础中文gpt2模型,右侧是中文对话微调的gpt2模型。
我们会发现,使用对话文本微调的gpt2模型,输出的结果包括了SEP分隔符。
如果输入“[CLS]今天天气真”;
就会输出“好[SEP]是的,你最近怎么样”等等。
通过SEP分隔符,我们就可以模拟出对话的效果了。
以上就是AI大模型的基本工作原理。
如何系统的去学习大模型LLM ?
作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。
但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料
包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
阶段1:AI大模型时代的基础理解
- 目标:了解AI大模型的基本概念、发展历程和核心原理。
- 内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践 - L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
- 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
- 内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例 - L2.2 Prompt框架
- L2.2.1 什么是Prompt
- L2.2.2 Prompt框架应用现状
- L2.2.3 基于GPTAS的Prompt框架
- L2.2.4 Prompt框架与Thought
- L2.2.5 Prompt框架与提示词 - L2.3 流水线工程
- L2.3.1 流水线工程的概念
- L2.3.2 流水线工程的优点
- L2.3.3 流水线工程的应用 - L2.4 总结与展望
- L2.1 API接口
阶段3:AI大模型应用架构实践
- 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
- 内容:
- L3.1 Agent模型框架
- L3.1.1 Agent模型框架的设计理念
- L3.1.2 Agent模型框架的核心组件
- L3.1.3 Agent模型框架的实现细节 - L3.2 MetaGPT
- L3.2.1 MetaGPT的基本概念
- L3.2.2 MetaGPT的工作原理
- L3.2.3 MetaGPT的应用场景 - L3.3 ChatGLM
- L3.3.1 ChatGLM的特点
- L3.3.2 ChatGLM的开发环境
- L3.3.3 ChatGLM的使用示例 - L3.4 LLAMA
- L3.4.1 LLAMA的特点
- L3.4.2 LLAMA的开发环境
- L3.4.3 LLAMA的使用示例 - L3.5 其他大模型介绍
- L3.1 Agent模型框架
阶段4:AI大模型私有化部署
- 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
- 内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
学习计划:
- 阶段1:1-2个月,建立AI大模型的基础知识体系。
- 阶段2:2-3个月,专注于API应用开发能力的提升。
- 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
- 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓