✈️白话讲解ChatGPT实现原理
00 分钟
2024-4-14
2024-4-21
type
status
date
slug
summary
tags
category
icon
password
URL

前言

大语言模型是一种强大的工具,但很少有人了解它们如何工作。通常,我们知道它们可以预测下一个词,但具体细节却像个谜。这是因为它们的开发方式与传统软件截然不同,为计算机提供明确的逐步的指令。大语言模型不是由人类编写的,而是建立在数十亿个词汇的神经网络上。因此,即使是专家也不完全理解其内部工作原理。研究人员正在努力理解这些模型,但这是一个漫长的过程。凯叔的目标是以易懂的方式向大众解释这些模型的工作原理,而不涉及复杂的技术术语或高级数学。

常见名词解释

  1. 🔠 Token(标记):就像书中的字一样,文本数据的最小单元。例如,一本书中的每个字就是一个标记。
  1. 🔢 Vector(向量):可以想象成是一种编码方式,就像每个词都有一个数字表示(注:GPT-3最强大的版本使用了有12,288个纬度的词向量,也就是说每一个词由一个包含了12,288个数字序列表示)。比如,我们可以用一个向量来表示一个水果的特征,如[红色, 圆形, 甜味]。
  1. 🌌 词空间(Word Space):词空间是指将词语映射到向量空间中的过程,其中每个词都用一个向量来表示,这些向量之间的距离和角度反映了词语之间的语义关系。在自然语言处理中,词空间是表示词语语义的重要工具,常用于词语相似度计算、文本分类、信息检索等任务中。
  1. 🎯 Embedding(嵌入):就像把一个水果放在特定的盒子里一样,用来表示词语在向量空间中的位置和含义。例如,将单词“苹果”嵌入到一个向量空间中,使得其在该空间中与其他水果的位置和关系能够被准确表示。
  1. 🧠 Attention(注意力):就像是在聊天中更加关注对方说的重要信息一样,在模型中表示词语在上下文中的重要性。比如,在阅读一段文字时,我们会更加关注一些关键词,这些关键词就像是引起我们注意力的焦点。
  1. 🛠 Encoder(编码器):就像是把一段对话录入到计算机中一样,用来将输入文本序列编码成连续向量表示的部分。例如,在自动回复消息的应用中,编码器负责将接收到的消息转换成计算机能够理解的向量表示。
  1. 🖥 Decoder(解码器):就像是把计算机的回复翻译成自然语言一样,用来将连续向量表示解码成输出文本序列的部分。比如,在聊天机器人中,解码器负责将计算机生成的向量表示翻译成自然语言文本并回复给用户。
  1. 🔄 Transformer(变换器):就像是一种处理信息的机器,可以处理大量的文本数据。比如,我们可以将变换器比作一个文本编辑器,可以处理大量的文字信息并进行编辑、排版等操作。
  1. 🔧 Fine-tuning(微调):就像是给一辆汽车进行调整,使其更适合特定的道路和环境一样,通过在预训练模型上进行额外训练,使其适应特定任务或领域。例如,将预训练的语言模型在特定领域进行微调,以提高其在该领域的性能。
  1. 💡 Generation(生成):就像是一台智能写作机器,可以根据输入的提示生成相应的文本。比如,输入“写一篇关于夏天的短文”,模型可以生成一篇关于夏天的描述性文章。
  1. 💬 Prompt(提示):就像是对话中提出的问题一样,用于向 ChatGPT 模型提供初始文题,以启动文本生成过程。例如,在与聊天机器人交流时,用户提出的问题就是提示。

ChatGPT 开发难点

notion image
  1. 🔍 理解词的语境:模型需要准确理解词语在不同语境下的含义。例如,在描述天气时,“大雨”在夏季可能表示清凉的天气,但在冬季可能表示寒冷的天气。
  1. 🧩 处理复杂的语法结构:自然语言具有多种语法结构,模型需要能够处理这些复杂结构。比如,在复合句中,模型需要正确区分主句和从句,并理解它们之间的逻辑关系。
  1. 🤔 处理歧义和模糊性:语言中常常存在歧义和模糊性,模型需要能够根据上下文进行推断。例如,“他看着她走”中的“她”可能指的是任何一个女性或者是上下文中的一个角色,这个在自然语言中我们就需要根据上下文需要确定具体指代的是谁。
  1. 🌐 长距离依赖建模:模型需要能够捕捉句子中远距离词语之间的关系。例如,在描述一部小说情节时,模型需要能够理解前文中提到的角色和事件,并将其与后文进行连接,以推测剧情发展。
  1. 💻 数据量和计算资源:训练一个强大的语言模型需要大量数据和计算资源。例如,如果要训练一个能够生成优质文本的 ChatGPT 模型,就需要大量的文本语料和高性能的GPU。
  1. 🛡️ 避免过拟合:模型需要避免在训练数据上表现良好但在测试数据上表现不佳的情况。例如,训练一个用于自动文摘的模型时,需要确保模型在处理新文本时能够准确地提取重要信息,而不是简单地复制训练样本的内容。
ChatGPT 在处理语言时面临多个挑战。首先,它需要理解词语的语境,以准确理解用户的意图。例如,当用户说“今天好热啊”,ChatGPT 需要理解“热”指的是温度高,而不是受到的夸奖。其次,模型必须处理复杂的语法结构,正确区分主语、谓语和宾语。例如,当用户询问“谁是莎士比亚作品中最著名的角色?”时,ChatGPT 需要识别并回答问题。此外,模型还需要处理歧义和模糊性,根据上下文推断含义。长距离依赖建模是另一个挑战,ChatGPT 需要捕捉句子中远距离词语之间的关系。最后,训练一个强大的语言模型需要大量数据和计算资源,同时需要避免过拟合。通过克服这些难点,ChatGPT 能够生成准确、流畅的文本,满足用户的需求。

模型实现逻辑推理

在传统软件的设计中数据处理是明确的,比如:让计算器处理 5+6,关于2,加号,3的含义都不存在歧义问题。但是,自然语言中的歧义远不止于同义词和多义词。比如:今天好热,我吃了一个热狗。
里面的热到底是很热情还是天气好热,热狗到底是个名词还是一个动词?在现实中人们可以根据上下文来解决歧义。但是,并没有一个简单或明确的规则。相反这就需要一个理解关于这个世界的实际情况,你要知道我们吃的东西是热狗,热狗也不会飞行。词向量为大语言模型提供了一个灵活的方式,用来在特定的上下文中表示不同的含义。
ChatGPT 3版本是由数十个神经网络层组成的,因为输入文本中的每一个词会对应一个向量。所以神经网络中的每一层都会接受一系列的向量作为输入并添加一些信息来帮助澄清这个词的含义(注:神经网络中的每一层都扮演着不同的角色,就像一个加工工厂中的不同部门一样。输入层接收原始材料,隐藏层负责加工和提取特征,输出层产出最终产品。举个例子,想象一家糖果工厂,输入层就像是原材料的接收站,将糖浆、糖粉等转换为机器可处理的格式。隐藏层就像是生产线上的各个工序,一层一层地处理原材料,提取出颜色、形状等特征。最后,输出层就像是包装部门,将加工好的糖果包装成最终的产品,准备出售。这样,每一层都在神经网络中承担着重要的角色,共同完成任务)。从而更好的来预测接下来可能出来的词。例如,基于前文,模型可能会预测下一个词是“苹果”,因为通常人们在谈论食物时会使用“吃”这个词。这样,通过多个神经网络层的处理,ChatGPT能够理解输入文本的语义并生成连贯的文本回复。
notion image

模型的计算方式

需要早期的机器学习算法都需要人工标记示例来实现监督学习,比如:训练数据需要带动物的照片来训练。这使得训练强大的模型这件事变得困难而且贵,目前的创新之处在于不需要显示的标记数据了,他们尝试通过预测文本段落中的下一个单词来学习几乎任何的书面材料都可以用来训练这些模型从网站内容,代码等等(注:ChatGPT 3学习了很多的文本来并且调整了文本关系的权重值,使得预测更加的准确)。例如:我要洗澡,第一次使用这个热水器哪我就需要不停的调整阀门并用水来感知温度是不是刚刚好;但是在生成模型中,首先你想象一下有50万个水龙头。每个水龙头对应着一个不同的单词,我的目标是只让与序列中的下一个单词相对应的水龙头里出水。其次水龙头后面有一大堆互连的管道。并且这一堆的管道中还有一堆的阀门,如果水从错误的水龙头流出来了;你不能只调整出水的这个水龙头,而是要派一个机器人去追踪沿途的管道并对错误的阀门进行调整。这样就变得很复杂了,需要仔细思考如何确定要拧紧还是松开哪些阀门。这些如果人类来理解就变的复杂,但是计算机可以并且确实在以这种规模在运行。
notion image
notion image
notion image

向量数据库

向量数据库介绍:
向量数据库中的向量指的是具有多个数值组成的数学对象。这些数值可以代表任何东西,例如文本、图像、声音等。向量数据库将这些向量存储在一起,并使用它们之间的相似度来进行搜索和分析。
举个生活中的例子来理解向量数据库,假设你有一个音乐收藏的向量数据库。每首歌曲都可以表示为一个向量,其中每个维度代表着歌曲的特征,比如歌曲的流行程度、节奏、旋律等。当你想要找到与某首歌曲相似的其他歌曲时,向量数据库会通过计算这些向量之间的相似度来帮助你找到最相似的歌曲。这就像是在一个多维空间中寻找相似的点,而这些点就是我们的音乐向量

实例讲解:
以下《图片一》有很多狗,我们如何来找到他们对应的名称?在我们现实生活中如果要快速区分出狗的名称,肯定就需要更多维度的特征来进行区别,例如体型大小但是拉布拉多和金毛的体型比较接近《图片二》,哪我们就需要其他的特性来区分比如毛发每个狗都对应了一个二维图坐标点《图片三》这样就很容易的区分出了拉布拉多和金毛。但是,还是不能区分出德国牧羊犬和罗威纳犬。依据上面的经验哪我们需要一个思维坐标点鼻子,来根据其他的类型区分《图片四》;虽然作为三维生物我们没法在四维上做图,但是在坐标点上就很容易实现我们向后追加比如毛发,腿的粗壮度等等《图片五》;不仅是狗世界上所有的事物都可以用这种坐标点来表达,不同的事物在不同的特征都有不同的表现和特征,以及不同的数值所以最终都会在一个高纬的特征空间中用一个坐标点来表示也就是在更大的特点内我们就需要一个更高的维度对事物进行区分《图片六》;可能几百几千甚至上万,但由于我们无法作出超出三维的图,所以后续我们用二维图形来描述。
图片一:
notion image
图片二:
notion image
图片三:
notion image
图片四:
notion image
图片五:
notion image
图片六:
notion image
 

如图片七所示, 警察减去小偷的向量与猫和老鼠向减的值非常接近;那样我们以图搜图或以视频搜索视频就很容易实现;如果对文字做向量化,哪我们就可以通过输入问题找到相近答案;今年来我们对词汇进行向量化,也就是ChatGPT的应用场景;我们根据输入问答问题又ChatGPT找出我们最想的得到的答案《图片八》;
图片七:
notion image
图片八:
notion image

总结归纳

ChatGPT是一个基于数十亿词汇神经网络的大语言模型,其开发方式与传统软件截然不同。模型需要理解词语的语境,处理复杂的语法结构,处理歧义和模糊性,捕捉句子中远距离词语之间的关系,并需要大量数据和计算资源。其实现逻辑推理的主要方式是通过词向量在特定的上下文中表示不同的含义。模型的计算方式是通过预测文本段落中的下一个单词来学习,几乎所有的书面材料都可以用来训练模型。虽然人类难以理解其复杂的计算过程,但计算机可以并且确实在大规模运行。

📎 参考文章