“ChatGPT的基本概念在某种程度上相当简单:首先从互联网、书籍等获取人类创造的海量文本样本,然后训练一个神经网络来生成“与之类似”的文本。特别是,它能够从“提示”开始,继续生成与其训练数据相似的文本。" - 《这就是ChatGPT》
大型语言模型(LLM)和提示词已经成为众所周知的热点概念,数以千万计的人已经开始使用它们,有的人可以用提示词生成生动和绝美的图片。然而,它的运作原理对于没有AI 背景的人却成了一个复杂的谜题。如下是我这个没有任何技术背景的“老白”对大语言模型工作原理的极简和粗浅理解 (这些有限的理解是基于最近看的几本书和文章, 书和文章清单在文尾. 如下的总结也使用了perplexity ai来验证本人理解的正确性):
自然语言通过词向量转化的方式将token嵌入转化为大语言模型的数值输入。大语言模型基于Transformer架构,通过多层自注意力机制和前馈网络处理这些输入。在预训练阶段,模型可能使用’预测下一个token’或其他目标来学习语言表示。预训练后,模型通常会针对特定任务进行微调。整个过程涉及复杂的矩阵运算,包括输入嵌入、模型参数、注意力权重的计算,以及各种激活函数的应用。模型的输出可以是下一个token的预测,也可以是其他形式,取决于具体任务和模型设计。
LLM的发展历程有一定的convergence效应,比如2013年谷歌团队提出的word2vec (词向量可以对语言进行数学计算, 是自然语言处理的一个重要突破), 2017年提出的transformer的发展 (注意力机制)都促进了LLM的发展, 最新的发展趋势包括指令微调、思维链提示等技术, 进一步提升了LLM的能力。
理解词向量的多个维度,本质上是理解如何在有限的数值空间中有效地编码和表示语言的复杂性。这种表示方法使得计算机能够更好地处理和理解人类语言,为各种自然语言处理任务提供了基础, 也把语言学的问题转化成数学问题。维度数量决定了每个词能表达的信息量。更高的维度可以捕获更多细节, 但也会增加计算复杂性。最强大的 GPT-3 版本使用具有 12,288 个维度的词向量, 即每个单词都由一个包含 12,288 个数字的列表表示。
如下是以单词"苹果"为例的具体的多维度词向量的例子 (假设"苹果"这个i词300维的词向量):
“苹果” = [0.2, -0.1, 0.5, 0.3, -0.4, …, 0.1]
在这个300维的向量中,每个维度都代表了某种语义特征或属性。虽然我们无法准确解释每个维度的具体含义,但我们可以推测一些可能的语义关联:
维度1 (0.2):可能与"水果"这个概念相关
维度2 (-0.1):可能与"颜色"有关,负值可能表示不太关联红色
维度3 (0.5):可能与"可食用"的特性有较强关联
维度4 (0.3):可能表示与"圆形"这个形状特征有一定关联
维度5 (-0.4):可能与"电子产品"相关,负值表示不太关联
以此类推,直到第300个维度。每个维度的数值表示该词在该特定语义方面的强度或相关性。正值表示正相关,负值表示负相关,数值的绝对大小表示相关程度。
通过这种多维表示,词向量能够捕捉到"苹果"这个词的各种语义特征,包括它是一种水果,可以食用,通常呈圆形,有特定的颜色等。同时,它也可能包含一些与苹果公司相关的信息,体现了这个词的多义性。
这种多维表示使得我们可以进行词语之间的语义比较。例如,我们可以计算"苹果"和"梨"这两个词向量之间的余弦相似度,可能会得到一个较高的值,因为它们都是水果,有许多共同的特征。而"苹果"和"电脑"的相似度可能会相对较低,但仍然会有一定程度的相似性,反映了"苹果"作为公司名称的含义。这个例子展示了词向量如何通过多个维度来全面捕捉词语的语义信息,使得计算机能够更好地理解和处理人类语言。
在Tim Lee 和Sean Trott的文章《Large language models, explained with a minimum of math and jargon》里,有另外一个类比。
华盛顿特区的纬度是北纬 38.9 度,经度是西经77 度。我们可以使用向量记法表示这一点:
华盛顿特区为 [38.9, 77]
纽约市为 [40.7, 74]
伦敦为 [51.5, 0.1]
巴黎为 [48.9, -2.4]
这种表示方法对于推理空间关系非常有用。你可以判断纽约市靠近华盛顿特区,因为 38.9 接近 40.7,77 接近74。同样,巴黎也靠近伦敦。但是巴黎距离华盛顿特区很远。
几十年来,研究人员一直在尝试使用词向量,但直到 2013 年谷歌宣布其 word2vec 项目后,这个概念才真正流行起来。谷歌分析了从谷歌新闻中收集的数百万份文档,以找出哪些词倾向于出现在相似的句子中。随着时间的推移,训练过预测哪些词会与哪些其他词一起出现的神经网络学会将相似的词(例如“狗”和“猫”) 放置在向量空间中更接近的位置。词向量的使用把语言学的问题转化成数学问题。
Stephen Wolfram在仅有100多页的《What is ChatGPT doing?》 这本书里对神经网络有如下介绍: "神经网络发明于20世纪40年代 - 它在当时的形式与今天非常接近,可以视作对大脑工作机制的简单理想化。人类大脑有大约1000亿个神经元 (神经细胞), 每个神经元都能够产生电脉冲,最高可达每秒约1000次。这些神经元连接成复杂的网络,每个神经元都有树枝状的分支,从而能够向其他数千个神经元传递电信号。粗略地说,任意一个神经元在某个时刻是否产生电脉冲,取决于它从其他神经元接收到的电脉冲,而且神经元不同的连接方式会有不同的"权重"贡献。
当我们“看到一个图像”时,来自图像的光子落在我们眼睛后面的(光感受器)细胞上,它们会在神经细胞中产生电信号。这些神经细胞与其他神经细胞相连,信号最终会通过许多层神经元。在此过程中,我们"识别"出这个图像,最终"形成"我们"正在看数字2"的"想法"。”
神经网络模拟了人脑神经元的结构和工作方式。它由大量相互连接的人工神经元组成, 形成多层网络结构。每个神经元接收来自其他神经元或外部输入的信号, 对这些信号进行加权求和, 然后通过激活函数产生输出。网络中的连接具有权重, 表示连接的强度。每个神经元还可能有一个偏置项 (bias), 用于调整激活阈值。输入数据从输入层开始, 经过隐藏层的处理, 最终在输出层产生结果。这个过程称为前向传播. 训练过程中, 网络通过比较输出与目标值的差异, 计算误差并反向传播 (propagation), 调整权重和偏置,以最小化误差. 多层神经网络能够学习数据的层次化表示, 这是深度学习的基础. 神经网络的结构使其能够高效地进行并行计算,特别适合在GPU等硬件上运行。神经网络通过这种结构和学习机制, 能够从大量数据中学习复杂的模式和关系, 实现各种智能任务, 如图像识别、自然语言处理等。
拿上述"苹果"的例子, "苹果是一个手机品牌"经过词向量转化成为神经网络的输入。神经网络使用其当前参数(可能初始化自预训练模型)处理这个输入并产生输出。在训练阶段,如果输出不够准确,神经网络会通过反向传播算法计算梯度,并更新参数以改善性能。这个过程在特定任务的训练中不断重复,直到模型性能达到要求。
如下是我在跟《Neutral Network from Scratch in Python》 这本书学习时在Python的练习步骤,一个最简单的一层神经网络计算的例子(我的目标不是掌握整个复杂的矩阵运算过程。我编程基础为零,初衷是好奇和掌握小白层面的基本概念,缩小阅读相关文章和书籍的体感难度)。
预训练的目的是让模型在大规模数据上学习到广泛适用的特征表示,这是一个持续优化的过程。在训练新的神经网络时, 参数(包括权重和偏置)通常是随机初始化的。这意味着最开始给所有参数赋上随机值。预训练模型通常使用来自互联网、数字化书籍、维基百科等多种来源的海量文本数据。这种大规模、多样化的数据使模型能够学习丰富的语言知识和世界知识,为后续的各种自然语言处理任务奠定基础。
现代大型语言模型可能使用数百GB甚至TB级的文本数据。例如,GPT-3使用了大约45TB的压缩文本数据进行训练。使用多样化的数据源有助于模型学习更广泛的知识和语言用法, 包括不同领域、风格、和语言的文本。
原始数据通常需要经过清洗和预处理, 去除垃圾信息、重复内容、不适当的语言等。某些模型可能专注于特定领域的数据,如医学、法律或金融文本。一些模型使用多语言数据集,以支持跨语言应用。
预训练数据通常有一个截止日期,这就是为什么模型可能不了解最新事件。一些组织会定期用新数据更新他们的模型,以保持知识的时效性。
许多早期机器学习算法都需要人类手动标记训练示例。例如,训练数据可能包含狗或猫的照片,以及人类提供的标签(“狗"或"猫”)。由于需要人类标记数据,因此创建足够大的数据集来训练强大模型变得困难且昂贵。
李飞飞是计算机视觉和人工智能领域的知名科学家, 在她的《The Worlds I See》这本书里,李飞飞介绍了她在斯坦福大学领导的研究团队在初期收集ImageNet数据集的故事, 这是一个包含超过1400万张带标注图像的大规模视觉数据库。图片数据的收集最开始是研究团队手工在谷歌图片里一张张下载的,后来他们想到了众包方法,利用亚马逊的Mechanical Turk平台, 雇佣了数以万计的在线工人来标注和验证图像。这种方法允许他们以相对低成本的方式快速收集和标注大量数据。
大型语言模型的一项关键创新之处在于它们不需要明确标记的数据。相反,它们通过尝试预测普通文本段落中的下一个单词来学习。几乎任何书面材料——从维基百科页面到新闻文章再到计算机代码——都适合训练这些模型。
在Tim Lee 和Sean Trott的文章, 他们举了另外一个例子: 大型语言模型可能会被输入"我喜欢在咖啡里加奶油和", 并应该预测下一个词是"糖"。一个刚刚初始化的语言模型会非常糟糕,因为它的每个权重参数(GPT-3最强大版本中为 1750 亿个)都将从本质上随机的数字开始。但是随着模型看到更多示例(数百亿个单词),这些权重会逐渐调整以做出更好更准确的预测。
大型语言模型的每一层都是一个 Transformer,这是一种神经网络架构,由谷歌在2017 年的一篇具有里程碑意义的论文中首次提出。模型的输入是部分句子"John wants his bank to cash the"。这些词以向量表示,被输入到第一个 Transformer 中。一个非常简化的比如如下:
第一个Transformer 识别出“wants”和“cash”都是动词(这两个词也可以是名词), 并在模型中将其修改为词向量的方式来存储它,这些新的向量称为隐藏状态,会传递到堆栈中的下一个Transformer。
第二个 Transformer 添加了另外两个上下文信息:它澄清“bank”指的是金融机构而不是河岸,并且“his”是一个代词,指的是“John”。第二个 Transformer 生成另一组隐藏状态向量,这些向量反映了模型到目前为止学到的所有信息。真实的大型语言模型往往有远超两层的结构。例如,GPT-3 最强大的版本有96层。
研究表明,前几层专注于理解句子的语法并消除我们上面展示的歧义。后面的神经网络是用于发展对整个段落的整体理解。这种专门化并不是绝对的或预先设定的。每一层都在处理多个层次的语言特征。
例如,当一个大型语言模型"阅读"一个短篇故事时,它似乎会跟踪有关故事人物的各种信息:性别和年龄、与其他角色的关系、过去和现在的位置、性格和目标等等。研究人员还不理解大型语言模型如何跟踪这些信息,但从逻辑上讲,模型肯定是在将隐藏状态向量从一层传递到下一层时对其进行修改来实现这一点。在现代大型语言模型中,这些向量非常庞大。例如,最强大的 GPT-3 版本使用具有 12,288 个维度的词向量, 即每个单词都由一个包含 12,288 个数字的列表表示。所有这些额外的维度可以帮助GPT-3理解和记录每个单词的上下文。前几层做的笔记可以被后面的层读取和修改,使模型能够逐步加深它对整个段落的理解。
因此,假设我们将上面的例子改成一个由有 96 层的语言模型来解释的1000 字的故事。第 60 层可能包含一个 “John” 的向量,带有括号注释,例如 “(主要人物,男性,已婚,妻子是 Cheryl,堂兄是Donald,来自明尼苏达州,目前在博伊西,正在寻找他丢失的钱包)。同样,所有这些事实(可能还有更多)都将以某种方式编码成一个包含12,288 个数字的列表,对应单词"John"。或者其中一些信息可能被编码在故事中其他词语(例如Cheryl、Donald、Boise、wallet)的12,288 维向量中。目标是神经网络的第96 层(也是最后一层)为最终单词输出一个隐藏状态,其中包含预测下一个单词所需的所有信息。
Transformer 更新输入段落中每个单词的隐藏状态的过程分为两个步骤:
-
在注意力步骤中,单词会"环顾四周"寻找具有相关语境的其他单词,并相互共享信息。
-
在前馈步骤中,每个单词会"思考"先前注意力步骤中收集的信息,并尝试预测下一个单词。
当然,执行这些步骤的是网络,而不是单个单词。但我们用这种方式来强调 Transformer 将单词而不是整个句子或段落视为基本分析单元。这种方法使大型语言模型能够充分利用现代 GPU 芯片的强大并行处理能力。它还帮助大型语言模型扩展到包含数千个单词的段落。这些都是早期语言模型难以处理的领域。
注意力机制可以理解为单词的"匹配服务"。每个单词都会制作一个清单(称为_查询向量_),描述它正在寻找的单词的特征。每个单词还会制作一个清单(称为_键向量_),描述自己的特征。网络通过计算点积 (dot product)将每个键向量与每个查询向量进行比较,以找到最匹配的单词。一旦找到匹配项,它就会将生成键向量的单词的信息转移到生成查询向量的单词。
下图是按《Neutral Network from Scratch in Python》 这本书dot product例子的练习记录 (对于没有编程基础的我来说这一切都很新鲜):
在前面,我们展示了一个假设的 Transformer,它弄清楚了部分句子"John wants his bank to cash the"中的"his"指的是"John"。下面是它在内部可能的样子。用于"his"的查询向量可能会有效地表示"我正在寻找:描述男性的人的名词"。用于"John"的键向量可能会有效地表示"我是一个: 描述男性的人的名词"。网络会检测到这两个向量匹配,并将有关"John"向量的的信息移动到"his"的向量中。
每个注意力层都具有多个"注意力头 (Attention Head)",这意味着这个信息交换过程在神经网络的每一层都会多次 (并行) 发生。每个注意力头都关注不同的任务:
一个注意力头可能会将代词与名词匹配。
另一个注意力头可能用于解决像"bank" 这样的同音异义词的含义。
第三个注意力头可能会将"Joe Biden"之类的双词短语链接在一起。
注意力头经常按顺序运行,一层中的注意力操作的结果会成为后续层中注意力头的输入。事实上,我们刚刚列出的每个任务都可能需要多个注意力头,而不仅仅是一个。
GPT-3 的最大版本有 96 层,每层有 96个注意力头,因此每次预测新词时,GPT-3 都会执行9,216 次注意力操作。
“目前,我们对于大型语言模型如何完成这样的壮举并没有真正的洞察力。一些人认为这些例子表明模型开始真正理解训练集中单词的含义。另一些人则坚持认为语言模型只是"随机鹦鹉”, 只是不断重复越来越复杂的单词序列,并没有真正理解它们。这场辩论指向了一个深刻的哲学分歧,这个问题可能永远无法解决。如果一个语言模型能够始终为特定类型的问题给出正确答案,并且如果研究人员确信他们已经控制了混淆因素(例如,确保语言模型在训练期间没有接触过这些问题),那么无论它是否完全以人类的方式理解语言,这都是一个有趣且重要的结果。"
传统上,构建语言模型的一大挑战在于弄清楚表示不同单词的最有用方式- 这尤其困难,因为许多单词的含义在很大程度上取决于上下文。下一个单词预测方法允许研究人员通过将其变成一个经验问题来绕过这个棘手的理论难题。事实证明,如果我们提供足够的数据和计算能力,语言模型只需弄清楚如何最好地预测下一个单词,最终就会学到很多关于人类语言如何运作的知识。缺点是最终我们得到的是一些我们不完全理解其内部运作机制的系统。"
AI能理解人类的语言吗?在日本,乌鸦学会了一种聪明的技巧来吃坚果。这一现象最初在东京等大城市中被观察到。乌鸦会将坚果叼起飞到空中,然后将坚果扔在繁忙的交通道路上。汽车碾过坚果,破壳之后,乌鸦便可以享用里面的果仁。具体来说,乌鸦会选择在人行横道附近进行这一操作。这是因为当交通信号灯变红,行人通过时,它们可以安全地飞下来捡起被压碎的坚果。这一行为展示了乌鸦的高度智慧和适应能力,它们能够观察和利用人类社会的交通规则来满足自己的需求。乌鸦的学习能力对人类大语言模型的发展提供了一些有趣的启示。乌鸦的学习能力提醒我们,人类的大语言模型需要具备观察学习、环境适应、创新解决问题以及学习应用规则的能力,以更好地理解和生成人类语言。
GPT-4 展现了令人惊讶的高级推理能力,这不仅源于其庞大的规模和丰富的数据训练,还因为它在学习过程中自然发展出的复杂推理能力。尽管我们仍在探索这些模型的内部机制,但其实际性能和对复杂任务的解决能力无疑为人工智能研究开辟了新的前景。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓