专业的编程技术博客社区

网站首页 > 博客文章 正文

一篇文章让你搞懂大模型到底是什么?

baijin 2025-02-13 11:01:34 博客文章 19 ℃ 0 评论

自从2022年11月30日ChatGPT发布以后,大模型这个词就开始被大家津津乐道,到底什么是大模型?它的运行原理和工作过程又是怎样的?请往下看,我尽量用最通俗易懂的语言告诉你:

一、什么模型?

在不同的领域,模型的定义是不同的:

(1)在现实世界,模型是指模仿实物的原形,按一定的比例缩小或放大制成的样品。通常多用来展览或实验。只考虑主要部分,忽略其次要因素。如下图的火箭模型和分子模型:

(2)在数学领域,模型是指公式、方程或方程组:

上图模型的数学表达如下:

(3)在计算机领域,模型是指某种算法,算法就是解决问题的方法和步骤。如:

深度优先搜索算法

宽度优先搜索算法

(4)在人工智能领域,模型通常是指机器学习中的某种人工神经网络

而大模型指的是具有大量参数和复杂结构的机器学习模型。

二、什么是大模型?

大模型,英文名叫Large Language Model,其实刚开始的时候指的是大语言模型,简称LLM。当然现在,除了大语言模型之外,大绘画模型、大视觉模型、大多模态模型都简称大模型啦。

三、为什么叫它大模型?

原因有四:

(1)参数规模大;多到上千亿个参数。GPT-3的参数数量,大约是1750亿。GPT-4大约是1.8万亿。

(2)架构规模大;神经元节点数量很多,大模型的参数数量和神经元节点数有一定的关系。简单来说,神经元节点数越多,参数也就越多。以OpenAI公司的GPT-3为例。这个大模型的隐藏层一共有96层,每层的神经元数量达到2048个。

(3)训练数据大;GPT-3为例,采用了45TB的文本数据进行训练,绝对堪称海量。1TB存储空间大约可以装769,231本65万字的书。

(4)算力需求大;训练GPT-3大约需要3640PFLOP·天,即假如每秒计算一千万亿次,也需要计算3640天。如果采用512张英伟达的A100 GPU,大约需要1个月的时间。1张24GB显存的A100的GPU大概需要10万人民币。

四、大模型长什么样子?

这是一个比较典型的架构图,分为基础设施层、模型层、智能体、能力层、应用层。

(1)基础设施层:整个技术架构的基础支撑部分,包括硬件设施如服务器、存储设备、网络设备等,以及软件基础设施如操作系统、数据库管理系统、云计算平台等。它为上层的模型训练和运行提供强大的计算能力、存储能力和数据传输能力。通常大模型运行实例需要使用大量的高性能GPU服务器组成的集群,能够快速处理海量的数据,为模型的训练节省时间。

(2)模型层:这一层是大模型的核心所在,包含了各种类型和规模的模型。这些模型通常基于深度学习技术,如Transformer架构等,通过使用大规模的数据进行训练。模型的种类多样,有语言模型、图像模型、多模态模型等。例如GPT系列这样的语言模型,能够理解和生成人类语言。

(3)智能体:智能体可以理解为具有一定自主决策和行动能力的组件。它们能够根据环境和输入的信息,进行感知、分析和决策,并执行相应的动作。智能体可以与模型层进行交互,获取所需的信息和能力,以完成复杂的任务。比如在智能客服场景中,智能体可以根据用户的问题,调用模型的能力来生成回答。

(4)能力层:这一层提供了各种具体的能力和功能,如自然语言处理能力、图像识别能力、推理能力、预测能力等。这些能力是通过对模型层的输出进行进一步的加工和整合而形成的。例如,自然语言处理能力可以包括文本分类、情感分析、命名实体识别等。

(5)应用层:这是直接面向用户和业务的层面,将前面各层的技术和能力转化为实际的应用和服务。应用层涵盖了众多领域,如智能客服、智能写作、智能翻译、智能医疗等。例如,在智能写作应用中,利用底层的技术和能力,帮助用户快速生成文章、报告等内容。

总的来说,这五层相互协作,基础设施层提供基础支持,模型层提供核心智能,智能体实现灵活交互,能力层整合和提炼具体功能,最终通过应用层为用户和业务提供有价值的服务和解决方案。

五、GTP与ChatGPT有什么区别?

(1)GPT(Generative Pre-trained Transformer)中文意思是生成式预训练变换器:GPT 和ChatGPT都是基于Transformer架构的语言模型,但它们在设计和应用上存在区别:GPT模型旨在生成自然语言文本并处理各种自然语言处理任务,如文本生成、翻译、摘要等。它通常在单向生成的情况下使用,即根据给定的文本生成连贯的输出。

(2)ChatGPT:ChatGPT中的“chat”代表“聊天”,ChatGPT则专注于对话和交互式对话。它经过特定的训练,以更好地处理多轮对话和上下文理解。ChatGPT设计用于提供流畅、连贯和有趣的对话体验,以响应用户的输入并生成合适的回复。

六、什么是Transformer架构?

Transformer是啥意思?Transformer 的意思是变换器,但在机器学习领域特指一种基于自注意力机制的深度神经网络模型。

上图是Transformer的立体图,下图是Transformer的平面图:

从上图可以看出,Transformer架构分为两部分,左边是编码器,负责对你的输入进行处理,比如你输入:“给我讲一讲什么是深度优先搜索?”它会对你输入的这句话进行处理。

右边是解码器,主要负责对输出的处理。

各模块分别介绍:

(1)Input Embedding(输入嵌入)

此模块的工作原理:将输入的字或单词或符号转换为固定大小的向量表示。这些向量捕捉了单词的语义信息。什么是向量呢?向量就是指多个量,比如一个人用多个量表示:{姓名 性别 年龄 身高 体重}。横着写就是行向量,竖着写就是列向量。这些量好像有了方向,所以叫向量,多个向量就构成了矩阵。

为什么要变成向量呢?因为计算机不认识字,它只认识0和1,我们把字变成数字化的向量,计算机就很容易的转换成0和1,这样它就知道我们的输入是什么了。

对于人工智能来讲,它首先得理解你输入的是什么意思,才能对你的需求进行解答。

理解字词首先得对它进行归类。研究人员提出了一种方法:将词语在不同维度上进行拆解,拆解成词元(token),词元就是我们输入到模型中的单一单位。就像是语言里的小积木,是文本中最小有意义的部分。(之前的模型使用字符作为词元,现在使用整个单词作为词元的较多,当然也可以使用短语作为词元,看情况而定,比如cats,拆成cat和s比较好)。从而对字词进行归类。整个变换过程可以粗略的表示为:

比如有四个词语:西瓜、草莓、番茄和樱桃。AI在两个维度上对这些词语拆解:颜色:用1代表红色,2代表绿色。形状:用1代表圆形,2代表椭圆形。

西瓜:颜色=2(绿色),形状=1(圆形);草莓:颜色=1(红色),形状=2(椭圆形);番茄:颜色=1(红色),形状=1(圆形);樱桃:颜色=1(红色),形状=1(圆形)

当然还可以从大小、甜度、是否有籽等大量维度对他们进行打分,从而分类。当然,对于每一个词元,我们可以从动词、名词、形容词、褒义词、贬义词、表达语气强弱等很多个维度进行量化打分,只要维度足够多、打分足够准确,AI模型就可以越精准地理解一个词语的含义。对于目前较为先进的AI模型来说,通常维度的数量可以达到上千个。

向量在空间里的位置和数值分布能表示 Token 的语义。语义相近的 Token,向量位置近,某些维度的数值也相似。比如表示颜色的 “红色”“蓝色”“绿色”,它们的向量在和颜色相关的维度上数值可能相似,其他维度有差异。通过计算向量的距离(像欧几里得距离、余弦距离)或者相似度(像余弦相似度),模型能判断 Token 语义的相似程度。

在模型推理和理解语言时,向量的这种语义表示能力很有用。比如在文本分类任务中,模型根据文本中 Token 的向量判断主题类别;在情感分析中,通过分析向量里的情感倾向信息确定文本的情感态度。向量之间的运算也能模拟一些语义关系,像 “国王 - 男人 + 女人 = 王后”,通过向量运算能得到和 “王后” 向量相近的结果,这说明模型能理解一些语义逻辑关系,提升语言理解和处理能力,更好地应对各种复杂的语言情况和任务。

想象你有一堆单词,但它们都是“文盲”,不知道自己是什么。你需要给每个单词发一张“身份证”(向量),这张身份证上写满了这个单词的个性和特点(语义信息)。这样,单词们就可以带着自己的身份证去参加Transformer的“派对”了。

词模块的工作过程:每个单词通过查找嵌入矩阵被转换为一个高维向量。这些向量随后会被传递到下一层。

(2) Positional Encoding(位置编码)


Transformer派对上的单词们要站成一排,但它们不知道自己的位置。于是,组织者给每个单词发了一个“座位号”(位置编码),告诉它们:“你是第一个,你是第二个……”这样,单词们就知道自己的位置了。

在计算机处理信息的时候,特别是处理像句子这样的序列数据时,也需要知道每个单词的位置。这是因为句子中词的位置很重要,比如,“狗追猫”和“猫追狗”意思完全不同。

为了让模型能够理解这些位置,我们需要给每个位置一个独特的标识。但是,如果我们只是简单地使用一个数字来表示位置,那么模型可能无法很好地利用这些信息。因此,研究人员使用了一种巧妙的方法:通过不同的频率来标记位置。

想象一下,你在海边听海浪的声音。海浪有大有小,有快有慢。如果我们将海浪比作正弦波,那么大的波就是低频的,小的波就是高频的。当我们把每个位置与不同频率的正弦波相结合时,每个位置就有了自己独特的声音。

我们将位置编号与不同频率的正弦波结合(即相乘),就可以得到一个对于每个位置而言独一无二的标识符。

此模块的工作原理:由于Transformer模型不使用传统的循环或卷积结构,它需要一种方式来捕捉输入序列中单词的位置信息。

此模块的工作过程:位置编码向量被添加到输入嵌入向量中,以提供单词在序列中的位置信息。这些编码通常是正弦和余弦函数生成的。所以我们看到图中有这个符号。

(3)Multi-Head Attention(多头注意力)

这个需要先解释自注意力机制(Self-Attention),自注意力机制的核心是为输入序列中的每一个位置学习一个权重分布,这样模型就能知道在处理当前位置时,哪些位置的信息更为重要。Self-Attention特指在序列内部进行的注意力计算,即序列中的每一个位置都要和其他所有位置进行注意力权重的计算。

就像你有一堆小伙伴。有些小伙伴本身也是朋友,他们喜欢一起玩。比如,水浒传中,武松喜欢和鲁智深、孙二娘在一起,阮小二喜欢和阮小五、阮小七在一起。当你找某一个伙伴时,你会想,哪些伙伴是他的好朋友?自注意力机制就像是帮助伙伴找到它们的好朋友。这样,伙伴们就可以更好地一起玩,让游戏更有趣。字词也是一样,有些词语喜欢一起使用,比如:生日和快乐,万事和如意等。

Multi-Head Attention(多头注意力机制):假如你有一群不同的小朋友,每个人都有自己最喜欢的玩具。一个小朋友可能最喜欢超级英雄,另一个可能喜欢动物,还有一个可能喜欢车子。当他们一起玩时,每个人都会关注不同的玩具。然后,他们一起分享他们玩的故事,这样就可以组成一个大故事,每个玩具都有自己的角色。

多头注意力机制就像这群小朋友一样。电脑不只从一个角度看问题,而是像很多个小朋友一样,从不同的角度来看。这样,电脑就可以了解更多的事情,像小朋友们分享他们的故事一样,电脑也可以把这些不同的视角放在一起,让它更好地理解整个问题。

在计算机的世界里,自注意力机制帮助电脑找出一句话里哪些词是“好朋友”,哪些词需要一起被理解。这就像帮助玩具找到它们的好朋友,让整个故事更有意思。

回到Transformer派对就是,派对上的单词们开始互相聊天。每个单词都有一群“小助手”(注意力头),这些小助手会帮它看看其他单词在说什么。有的小助手关注情感,有的关注主题,有的关注细节。最后,单词们把这些信息汇总起来,决定自己接下来该说什么。

用输入实例来讲,Self-Attention(自注意力机制):

①输入:序列“我爱AI”经过嵌入层,每个词(如“我”)被映射到一个512维的向量。

②注意力权重计算:对于“我”这个词,Self-Attention机制会计算它与序列中其他所有词(“爱”、“A”、“I”)之间的注意力权重。这意味着,对于“我”的512维嵌入向量,我们会计算它与“爱”、“A”、“I”的嵌入向量之间的注意力得分。

③输出:根据计算出的注意力权重,对输入序列中的词向量进行加权求和,得到自注意力机制处理后的输出向量。

Multi-Head Attention(多头注意力机制):

①子空间拆分:原始的512维嵌入空间被拆分成多个子空间(例如,8个头,则每个子空间64维)。对于“我”这个词,其512维嵌入向量被相应地拆分成8个64维的子向量。

② 独立注意力权重计算:

在每个64维的子空间内,独立地计算“我”与“爱”、“A”、“I”之间的注意力权重。这意味着在每个子空间中,我们都有一套独立的注意力得分来计算加权求和。

③结果拼接与转换:

将每个子空间计算得到的注意力输出拼接起来,形成一个更大的向量(在这个例子中是8个64维向量拼接成的512维向量)。通过一个线性层,将这个拼接后的向量转换回原始的512维空间,得到Multi-Head Attention的最终输出。

这个模块的工作原理:允许模型同时关注输入序列的不同部分,捕捉不同位置的依赖关系。

举个例子,假设你在读一句话:“我昨天去了公园,那里有很多人在跑步。”

“我” 和 “去了” 有关系,表示“我”是动作的执行者。“公园” 和 “那里” 有关系,表示“那里”指的是“公园”。“很多人” 和 “跑步” 有关系,表示“很多人”在做“跑步”这件事。

如果模型只能一个词一个词地看,它可能会忽略这些词之间的关系。但如果模型能同时关注句子的不同部分,它就能更好地理解这些词之间的联系,从而更准确地理解句子的意思。

这个模块的工作过程:输入序列通过线性变换生成查询(Query)、键(Key)和值(Value)向量。注意力机制计算这些向量之间的相似度,生成加权和表示。

想象你在厨房里做饭,面前摆着一堆食材(输入序列)。为了做出一道美味的菜,你需要做以下几件事:

①生成查询(Query)、键(Key)和值(Value)向量:

Query(查询):就像你心里想的问题:“我现在最需要什么食材?”

Key(键):就像每个食材的标签,告诉你它是什么(比如“胡萝卜”、“洋葱”)。

Value(值):就是食材本身的实际内容(比如胡萝卜的营养、洋葱的味道)。

你可以把这些看作是:你通过“问题”(Query)去匹配“标签”(Key),然后找到对应的“内容”(Value)。

②计算相似度:

你开始思考:“我现在最需要什么?”然后看看每个食材的标签(Key)和你的问题(Query)有多匹配。

比如你现在想做汤,那么“洋葱”和“胡萝卜”可能比“辣椒”更匹配你的需求。

③生成加权和表示:

你根据匹配程度,决定用多少洋葱、多少胡萝卜。匹配度高的食材(比如洋葱)会多用一点,匹配度低的(比如辣椒)就少用一点。

最后,你把所有食材按比例混合在一起,做出一道美味的汤。

对应到注意力机制:

Query:模型想知道当前需要关注什么。

Key:输入序列中每个部分的“标签”,帮助模型判断哪些部分重要。

Value:输入序列中每个部分的实际内容。

相似度计算:模型通过比较 Query 和 Key,判断哪些部分需要重点关注。

加权和:模型根据重要性,把不同部分的内容按比例组合起来,生成最终的表示。

(4)Add & Norm(残差连接和层归一化)

①残差连接

想象你在搭积木,目标是搭一个很高的塔。每次你往上加一层积木时,可能会不小心把塔弄歪或者弄倒。为了避免这种情况,你想到一个聪明的办法:

保留原来的塔:每次加新积木时,不直接拆掉原来的塔,而是在原来的塔旁边加一层新积木。

新旧结合:最后,你把原来的塔和新加的积木连在一起,形成一个更稳固的新塔。

这样,即使新加的积木不太完美,原来的塔也能帮你“兜底”,不至于让整个塔垮掉。

对应到模型:

残差连接:模型在每一层的计算中,保留输入,并把它直接加到输出上。

作用:避免信息丢失,帮助模型更好地训练深层网络。

层归一化

你搭完一层积木后,发现这一层有点歪,或者某些积木太高、太矮,导致整体不平衡。

于是你拿出一个“水平仪”,把这一层的积木调整到统一的高度,让它们更整齐、更稳定。

对应到模型:

②层归一化:模型对每一层的输出进行标准化,调整它们的分布,让它们更稳定。

作用:避免某些值过大或过小,帮助模型更快收敛。

残差连接 + 层归一化

现在我们把两者结合起来:

残差连接:你把原来的塔和新加的积木连在一起。层归一化:你调整新塔的高度,让它更整齐、更稳固。

对应到模型:

残差连接:保留输入信息,避免梯度消失。层归一化:调整输出分布,让训练更稳定。

这个模块的工作原理是:残差连接帮助模型训练更深层的网络,层归一化则稳定了训练过程。

这个模块的工作过程是:输入和输出通过残差连接相加,然后进行层归一化,以标准化输出。

回到Transformer派对就是,单词们在聊天过程中可能会有点“跑偏”,于是组织者提醒它们:“别忘了带上你原来的身份证!”(残差连接)。然后,组织者还会帮单词们整理一下思路,让它们的表达更清晰(层归一化)。

(5)Feed Forward(前馈网络)

Feed Forward 就是一个简单的神经网络,它接收输入,经过一些计算,然后输出结果。在 Transformer 中,它的作用就像是一个“加工厂”:

输入:你给它一些原材料(比如注意力机制处理后的信息)。

加工:它在内部对这些原材料进行加工(比如提取特征、增强信息)。

输出:最后输出一个更“精致”的产品。

用做饭来比喻,想象你在做一道菜,比如炒面。你已经完成了以下步骤:

①选食材(注意力机制):你挑选了面条、蔬菜、鸡蛋等食材。

②切菜(注意力机制):你把蔬菜切好,鸡蛋打散。

接下来,你需要一个关键的步骤:炒菜!这就是 Feed Forward 的作用:

③炒菜:你把所有食材倒进锅里,加热、翻炒,让它们混合在一起,变成一道美味的炒面。

作用:通过加热和翻炒,食材的味道融合在一起,变得更香、更好吃。

对应到模型:

Feed Forward:把注意力机制处理后的信息“翻炒”一下,提取更深层次的特征,增强模型的表达能力。

为什么需要 Feed Forward?

增强特征:注意力机制主要关注输入之间的关系,而 Feed Forward 可以进一步提取和增强这些特征。

非线性能力:Feed Forward 引入了非线性变换,让模型能够学习更复杂的模式。

独立处理:每个位置的输入都会独立经过 Feed Forward,这样可以更好地捕捉局部特征。

这个模块的工作原理是:一个简单的全连接神经网络,用于进一步处理注意力机制的输出。

这个模块的工作过程是:输入通过两个线性变换和一个激活函数(如ReLU)进行处理,生成最终的输出。

想象你有一堆水果(输入),你想把它们变成一杯美味的果汁(输出)。你需要经过以下步骤:

①第一次榨汁(第一个线性变换):你把水果放进榨汁机,榨出第一遍果汁。这一步就像“第一个线性变换”,把输入(水果)转换成一种中间状态(果汁)。

②过滤(激活函数,比如ReLU):榨出来的果汁可能还有一些果渣,你用一个滤网把果渣过滤掉,只留下纯净的果汁。这一步就像“激活函数”,它会把中间状态中没用的部分去掉,只保留有用的部分。

③第二次调味(第二个线性变换):你觉得果汁的味道还不够完美,于是你加了一点糖或者蜂蜜,调整一下味道。这一步就像“第二个线性变换”,把过滤后的果汁进一步加工,变成最终的输出。

对应到模型

第一个线性变换:把输入数据(比如词向量)转换成一种中间表示。

激活函数(如ReLU):去掉中间表示中没用的部分,只保留有用的信息。

第二个线性变换:把过滤后的信息进一步加工,生成最终的输出。

回到Transformer派对就是,单词们聊完天后,还需要进一步“消化”这些信息。于是,它们走进一个小房间(前馈网络),里面有两台“信息加工机”(线性变换)和一台“激活器”(ReLU),帮它们把聊天的内容整理成更有用的信息。

(6)Nx:

Nx表示这个块重复N次。基本上,你在将一个块层层堆叠,前一个块的输出作为下一个块的输入。这样可以使神经网络更深。从图上看,编码器输出如何传递给解码器可能让人困惑。假设N=5。我们是否将每层编码器输出传递给对应的解码器层?不是的。实际上你只需运行一次编码器,然后将同一表示提供给5个解码器层。

回到Transformer派对就是,Transformer派对不止一层,而是有很多层(N层)。每一层都是一个独立的“聊天室”,单词们会一层一层地往上走,每层都会让它们的表达更丰富、更准确。

(7)Outputs (shifted right)(右移输出)

想象你在玩一个猜句子的游戏,规则是:你每次只能说一个词。你说完一个词后,对方会根据你说的词猜下一个词。

比如,你想让对方猜出句子:“我今天很开心”。

第一步:你说“我”。

第二步:对方听到“我”后,猜下一个词可能是“今天”。

第三步:你接着说“今天”。

第四步:对方听到“今天”后,猜下一个词可能是“很”。

第五步:你接着说“很”。

第六步:对方听到“很”后,猜下一个词可能是“开心”。

在这个过程中,你的输出(“我”“今天”“很”)总是比对方的输入(“今天”“很”“开心”)慢一步,也就是右移了一位。

对应到模型

在 Transformer 的解码器中,Outputs (shifted right) 的意思是:

模型在生成输出时,每次只能生成一个词。这个词会成为下一个时间步的输入。因此,输出序列总是比输入序列慢一步,也就是右移了一位。

举个例子:

输入序列:[<开始>, "我", "今天", "很"]

输出序列:["我", "今天", "很", "开心"]

可以看到,输出序列比输入序列右移了一位。

为什么要右移?

避免作弊:如果输出和输入完全对齐,模型可能会直接“偷看”答案,而不是真正学会预测下一个词。

模拟真实场景:在实际应用中(比如机器翻译),模型也是根据已经生成的词来预测下一个词,而不是提前知道完整的句子。

这个模块的工作原理是:在训练过程中,解码器的输入是目标序列右移一位的结果,以确保模型在生成当前单词时只能看到之前的单词。

这个模块的工作过程是:目标序列向右移动一位,作为解码器的输入。

回到Transformer派对就是,在派对的“解码器”部分,单词们开始生成新的句子。为了防止它们“作弊”(提前看到未来的单词),组织者把句子向右移动一位,这样每个单词只能看到它前面的单词,然后猜猜下一个该说什么。

(8)Output Embedding

Output Embedding与intput Embedding作用一样,不再解释。

(9)Positional Encoding(位置编码)

与编码器的Positional Encoding(位置编码)一样,不再解释。

(10)Masked Multi-Head Attention(掩码多头注意力)

掩码多头自注意力机制(Masked Multi-Head Attention)中的掩码(Mask)主要用于防止模型在生成当前词时“偷看”未来的词,确保生成过程的因果性。

想象你在玩拼图游戏,目标是拼出一幅完整的画。拼图有很多小块,你需要一块一块地拼上去。但有一个规则:你只能看到已经拼好的部分,还没拼的部分是隐藏的(被“掩码”遮住了)。

多头注意力:你有多个“助手”(多头),每个助手都会从不同角度观察已经拼好的部分,给出拼下一块的建议。比如,一个助手关注颜色,另一个助手关注形状,综合他们的建议,你可以更准确地选择下一块拼图。

掩码机制:你只能看到已经拼好的部分,还没拼的部分是被遮住的(掩码)。这样做的目的是避免“作弊”,你不能提前看到后面的拼图。

对应到模型

多头注意力:模型会从多个角度(多个头)同时关注输入序列的不同部分,提取更丰富的信息。比如,一个头关注词语的语义,另一个头关注词语的位置关系。

掩码机制:在生成输出时,模型只能看到已经生成的词,后面的词是被遮住的(掩码)。这样可以避免模型“偷看”未来的信息,确保它只能根据已经生成的内容预测下一个词。

为什么要用掩码?

模拟真实场景:在实际应用中(比如机器翻译),模型只能根据已经生成的词预测下一个词,而不是提前知道完整的句子。

防止作弊:如果没有掩码,模型可能会直接“复制”未来的信息,而不是真正学会预测。

这个模块的工作原理是:在解码器中,为了防止模型在生成当前单词时看到未来的单词,使用掩码来屏蔽未来的信息。

这个模块的工作过程是:多头注意力机制并行地计算多个注意力头,每个头关注输入序列的不同部分。掩码确保每个位置只能关注到它之前的位置。

回到Transformer派对就是,在解码器的聊天室里,单词们戴上了“眼罩”(掩码),只能看到前面的单词,看不到后面的。这样,它们就不会“剧透”未来的内容了。

(11)Add & Norm(残差连接和层归一化)

与编码器的Add & Norm(残差连接和层归一化)作用一样,不再解释。

(12)Multi-Head Attention(多头注意力)

与编码器的Multi-Head Attention(多头注意力)作用一样,不再解释。

(13)Add & Norm(残差连接和层归一化)

又一次进行残差连接和层归一化

(14)Feed Forward(前馈网络)

与编码器的Feed Forward(前馈网络)作用一样,不再解释。

(15)Add & Norm(残差连接和层归一化)

又一次进行残差连接和层归一化

(16)Linear(线性层)

在Transformer模型中,输出部分包括两个关键组件:线性层和Softmax层。这两个层的作用是不可或缺的,它们共同将模型的输出转换为实际的语言输出。

线性层的作用:降维与映射

首先,线性层就像一个魔法师,它负责将解码器输出的高维向量映射到目标词汇表上的每个单词的嵌入向量。这个过程是通过全连接层来实现的。线性层将Transformer模型最后一个编码器的输出转换为一个向量,这个向量可以表示不同类别的概率分布。这个全连接层是可学习的,意味着它可以随着训练的进行不断调整参数,以优化模型的性能。

想象你在做菜,手里有一堆食材(输入数据),你想把它们变成一道美味的菜(输出数据)。线性层的作用就像是一个“调味台”:

食材:你有一些切好的蔬菜、肉和调料(输入数据)。

调味台:你把食材放到调味台上,按照一定的比例混合(线性变换)。

比如,你加一点盐、一点酱油、一点糖,调整每种食材的味道。

成品:最后,你得到一道调好味的菜(输出数据)。

对应到模型

输入:模型有一些数据(比如词向量或特征向量)。

线性变换:模型通过一个公式 y = Wx + b 对输入数据进行变换:W 是权重矩阵,决定每个输入特征的重要性。b 是偏置向量,用来调整输出的基准值。

输出:经过线性变换后,输入数据被映射到一个新的空间,变成更高级的特征表示。

为什么要用线性层?

特征变换:线性层可以把输入数据转换成更适合任务的形式。

比如,把词向量转换成更抽象的语义表示。

维度调整:线性层可以改变数据的维度。

比如,把 100 维的向量变成 50 维的向量。

简单高效:线性层的计算速度快,适合大规模数据处理。

这个模块的工作原理是:将解码器的输出映射到词汇表大小的向量空间。

这个模块的工作过程是:通过一个线性变换,将解码器的输出转换为每个单词的得分。

回到Transformer派对就是,当单词们终于决定好下一个该说什么时,它们会把想法交给一个“翻译官”(线性层)。翻译官会把它们的想法转换成一种“得分”,表示每个单词的可能性。

(17)Softmax(Softmax函数)

Softmax层:从概率到决策

Softmax层就像一个决策者,它负责将线性层输出的向量转换为单词概率分布。在机器翻译任务中,这个概率分布表示当前生成的目标词是词汇表中的每个单词的概率。在文本分类任务中,这个概率分布表示当前文本属于每个类别的概率。Softmax层通过将每个单词的嵌入向量进行归一化处理,得到一个概率分布,使得每个类别的概率值都在0到1之间,并且所有类别的概率之和为1。Softmax函数的定义是将向量中的每个元素取指数,然后再进行归一化。

想象你在看一场选秀比赛,评委们需要从一群选手中选出冠军。每个选手都有自己的得分(线性层输出的向量),但评委们需要把这些得分转换成具体的获奖概率。

选手得分:每个选手都有一个原始得分(线性层的输出)。

Softmax 的作用:

①指数放大:Softmax 先把每个选手的得分“放大”,让高分更高,低分更低(取指数)。

②归一化:然后,它把所有人的得分转换成概率,确保所有选手的获奖概率加起来是 100%。

③结果:最后,每个选手都有一个获奖概率,比如:

选手 A:60% 的概率夺冠。

选手 B:30% 的概率夺冠。

选手 C:10% 的概率夺冠。

对应到模型

输入:线性层输出的向量(每个词或类别的得分)。

Softmax 的计算:

取指数:把每个得分放大,让高分更高,低分更低。

归一化:把所有得分转换成概率,确保概率值在 0 到 1 之间,且总和为 1。

输出:一个概率分布,表示每个词或类别的可能性。

这个模块的工作原理是:将线性层的输出转换为概率分布。

这个模块的工作过程是:Softmax函数将得分转换为概率,表示每个单词成为下一个单词的可能性。

回到Transformer派对就是,翻译官把得分交给一个“魔法师”(Softmax),魔法师会用魔法把这些得分变成“概率”。比如,单词“苹果”有80%的概率,单词“香蕉”有20%的概率。

(18)Output Probabilities(输出概率分布)

在输入通过所有Transformer块处理后,输出通过最后的线性层传递,以准备进行token预测。该层将最终表示投影到50,257维空间,其中词汇表中的每个token都有一个对应的值(称为logit)。任何token都可能是下一个词,因此这个过程允许我们根据它们的可能性对这些token进行排序。然后,我们应用softmax函数将logit转换为概率分布,总和为1。这使我们能够根据概率采样下一个token。

温度超参数在此过程中起着关键作用。从数学上讲,这是一个非常简单的操作:模型输出的logit除以温度值:

温度=1:logit除以1对softmax输出没有影响。

温度<1:较低的温度使模型更加自信和确定性,通过锐化概率分布,生成更可预测的输出。

温度>1:较高的温度生成更平滑的概率分布,允许生成更多随机性文本——有些人称之为模型的“创造力”。

调整温度,看看你如何在确定性和多样性输出之间找到平衡!

模型输出的概率分布表示每个位置上每个词的预测概率,用于生成最终的预测结果。

例如:问你一个问题:

我在餐厅吃( )。( )填个字,你会填什么?

根据你既往的经验,大概率你会填“饭”。其实,( )还可以是“饼”、“面”、“蛋”等等。

像人一样,生成式AI也会根据它学到的经验,给这些字加上概率。然后选择概率高的词作为生成的内容。接着,AI 将重复这一过程,选择下一个可能性最高的词语,从而生成更多内容。

但有的时候,我们希望答案是丰富多彩的,回到刚刚那个例子,我们现在不希望AI接的下一个字是“饭”,那要怎么办呢?

AI提供了一个调节参数,叫温度,范围从0到1。

在温度为0时,说明匹配概率要选尽量大的,在以上例子中,AI很可能选择“饭”;

在温度为1时,说明匹配概率要选尽量小的,在以上例子中,AI很可能选择“饼”。

数值越接近1,得到的内容越天马行空。

比如,温度设为0.8,那么AI生成的句子可能是:

我在餐厅吃饼,这个饼又大又圆,我想把它套在脖子上......

但是,我们看到大多数AI产品,只有一个对话框,如何修改温度参数呢?

答案是“提示词”,也就是我们通常所说的prompt。

如果你输入是“你是一名某某领域的专家,请用严谨的口吻写一篇关于xx的文献综述。”这时AI的温度接近0,就会选择匹配概率尽量高的词语生成句子。

如果你输入是“请你请畅想一下xx的未来。”这时AI的温度接近1,就会选择匹配概率尽量低的词语组成句子,生成意想不到的内容。现在知道prompt的重要性了吧!

所以,我们可以认为,AI生成的本质就是一场词语接龙:AI根据当前字,联系它之前记录的下个字的出现概率以及你的期望,选择接下来的字。所以,大模型的功能就是如何把话说的更漂亮,至于对不对另说。所以,有时候你会看到ChatGPT整个一个一本正经的胡说八道。

回到Transformer派对就是,最后,单词们拿到了一张“概率表”,上面写着每个单词成为下一个单词的可能性。它们会根据这张表,选出最合适的单词,完成句子的生成。

(19)Transformer的工作流程

①输入嵌入(Input Embedding):首先,输入的词被转换成向量形式,就像把文字变成计算机能理解的数字。

②位置编码(Positional Encoding):然后,给这些向量加上位置信息,告诉模型每个词在句子中的位置。

③进入编码器(Nx):接下来,这些带有位置信息的向量进入编码器部分。编码器由多个相同的层(Nx)组成,每一层都有两个主要步骤:

多头注意力机制(Multi-Head Attention):模型通过这个机制来理解词与词之间的关系。

前馈网络(Feed Forward):对注意力机制的结果进行进一步处理。

每一步之后都会进行加法和归一化(Add & Norm),就像调整和稳定信息。

④进入解码器(Nx):编码器的输出会传递给解码器。解码器也由多个相同的层(Nx)组成,每一层有三个主要步骤:

掩码多头注意力机制(Masked Multi-Head Attention):解码器只能看到已经生成的词,不能看到未来的词。

多头注意力机制(Multi-Head Attention):解码器会结合编码器的输出和已经生成的词来生成下一个词。

前馈网络(Feed Forward):对注意力机制的结果进行进一步处理。

同样,每一步之后都会进行加法和归一化(Add & Norm)。

⑤输出嵌入(Output Embedding):解码器的输出会被转换成向量形式。

⑥线性层和Softmax(Linear & Softmax):最后,这些向量通过一个线性层和Softmax函数,生成最终的输出概率分布,告诉我们每个词出现的可能性。

用Transformer开派对的例子讲,就是:

①输入嵌入:给单词发身份证。

②位置编码:给单词安排座位。

③多头注意力:单词们互相聊天。

④残差连接和层归一化:整理思路,防止跑偏。

⑤前馈网络:进一步加工信息。

⑥解码器:生成新的句子,戴上眼罩防止剧透。

⑦线性层和Softmax:翻译和魔法,决定下一个单词。

⑧这样,Transformer就能完成从输入到输出的神奇任务啦!

七、大模型的训练

(1)预训练

在预训练时,我们首先要选择一个大模型框架,例如transformer。然后,通过“投喂”前面说的海量数据,让大模型学习到通用的特征表示。

(2)微调

预训练学习之后,我们就得到了一个通用大模型。这种模型一般不能直接拿来用,因为它在完成特定任务时往往表现不佳。这时,我们需要对模型进行微调。

微调,是给大模型提供特定领域的标注数据集,对预训练的模型参数进行微小的调整,让模型更好的完成特定任务。

微调之后的大模型,可以称之为行业大模型。例如,通过基于金融证券数据集的微调,可以得到一个金融证券大模型。

如果再基于更细分的专业领域进行微调,就是专业大模型(也叫垂直大模型)。

我们可以把通用大模型理解为中小学生,行业大模型是大学本科生,专业大模型是研究生。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表