将词向量转化为词预测
ChatGPT原始版本背后的GPT-3模型 , 由数十个神经网络层组成 。每一层接受一系列向量作为输入——输入文本中的每个词对应一个向量——并添加信息以帮助澄清该词的含义 , 并且更好地预测接下来可能出现的词 。
让我们从一个简单的事例说起 。

文章插图
LLM的每个层都是一个Transformer , 2017年 , Google在一篇里程碑的论文中首次介绍了这一神经网络结构 。
在图表底部 , 模型的输入文本是“John wants his bank to cash the(约翰想让他的银行兑现)” , 这些单词被表示为word2vec风格的向量 , 并传送至第一个Transformer 。这个Transformer确定了wants和cash都是动词(这两个词也可以是名词) 。我们用小括号中的红色文本表示这一附加的上下文 , 但实际上模型会通过修改词向量的方式来存储这一信息 , 这种方式对人类来说很难解释 。这些新的向量被称为隐藏状态(hidden state) , 并传递给下一个Transformer 。
第二个Transformer添加了另外两个上下文信息:它澄清了bank是指金融机构(financial institution)而不是河岸 , 并且his是指John的代词 。第二个Transformer产生了另一组隐藏状态向量 , 这一向量反映的是该模型之前所学习的所有信息 。
上述图表描绘的是一个纯假设的LLM , 所以不要对细节过于较真 。真实的LLM往往有更多层 。例如 , 最强大的GPT-3版本有96层 。
研究表明(https://arxiv.org/abs/1905.05950) , 前几层专注于理解句子的语法并解决上面所示的歧义 。后面的层(为保持图表大小的可控性上述图标没有显示)则致力于对整个段落的高层次理解 。
例如 , 当LLM“阅读”一篇短篇小说时 , 它似乎会记住关于故事角色的各种信息:性别和年龄、与其他角色的关系、过去和当前的位置、个性和目标等等 。
研究人员并不完全了解LLM是如何跟踪这些信息的 , 但从逻辑上讲 , 模型在各层之间传递时信息时必须通过修改隐藏状态向量来实现 。现代LLM中的向量维度极为庞大 , 这有利于表达更丰富的语义信息 。
例如 , GPT-3最强大的版本使用有12288个维度的词向量 , 也就是说 , 每个词由一个包含12288个的数字列表表示 。这比Google在2013年提出的word2vec方案要大20倍 。你可以把所有这些额外的维度看作是GPT-3可以用来记录每个词的上下文的一种“暂存空间(scratch space)” 。较早层所做的信息笔记可以被后来的层读取和修改 , 使模型逐渐加深对整篇文章的理解 。
因此 , 假设我们将上面的图表改为 , 描述一个96层的语言模型来解读一个1000字的故事 。第60层可能包括一个用于约翰(John)的向量 , 带有一个表示为“(主角 , 男性 , 嫁给谢丽尔 , 唐纳德的表弟 , 来自明尼苏达州 , 目前在博伊西 , 试图找到他丢失的钱包)”的括号注释 。同样 , 所有这些事实(可能还有更多)都会以一个包含12288个数字列表的形式编码 , 这些数字对应于词John 。或者 , 该故事中的某些信息可能会编码在12288维的向量中 , 用于谢丽尔、唐纳德、博伊西、钱包或其他词 。
这样做的目标是 , 让网络的第96层和最后一层输出一个包含所有必要信息的隐藏状态 , 以预测下一个单词 。
注意力机制
现在让我们谈谈每个Transformer内部发生的情况 。Transformer在更新输入段落的每个单词的隐藏状态时有两个处理过程:
1. 在注意力步骤中 , 词汇会“观察周围”以查找具有相关背景并彼此共享信息的其他词 。
2. 在前馈步骤中 , 每个词会“思考”之前注意力步骤中收集到的信息 , 并尝试预测下一个单词 。
当然 , 执行这些步骤的是网络 , 而不是个别的单词 。但我们用这种方式表述是为了强调Transformer是以单词作为这一分析的基本单元 , 而不是整个句子或段落 。这种方法使得LLM能够充分利用现代GPU芯片的大规模并行处理能力 。它还帮助LLM扩展到包含成千上万个词的长段落 。而这两个方面都是早期语言模型面临的挑战 。
推荐阅读
- 非语言沟通的技巧有哪些 非语言沟通的技巧有哪些
- 网络语言黑胶指什么 黑胶是干什么用的
- 岚语是哪国语言 岚语是什么语言
- 刀郎新歌被业内人士猛批:通俗简陋、阴阳怪气,格局太小了!
- 刚需的通俗说法 刚需和必需的区别
- 阿根廷说什么语言 阿根廷说什么语言为主
- 回族有自己的语言吗 中国回族有自己的语言吗
- 网络流行语沙发是什么意思 网络语言中沙发是什么意思
- 牡丹花语言是什么 牡丹花的语言
- a在c语言中是什么意思 c!=a在c语言中是什么意思
