输入是一个由 n 个标记组成的向量(如上一节所述,由 1 到 50,000 的整数表示)。这些标记中的每一个都被(通过单层神经网络)转换成一个嵌入向量(GPT-2 的长度为 768,ChatGPT 的 GPT-3 为 12,288)。同时,还有一个 “二级路径”,它将标记的(整数)位置序列,并从这些整数中创建另一个嵌入向量。最后,来自令牌值和令牌位置的嵌入向量被加在一起 —— 产生嵌入模块的最终嵌入向量序列。
为什么只是把令牌值和令牌位置的嵌入向量加在一起?我不认为这有什么特别的科学依据。只是各种不同的东西都被尝试过,而这是一个似乎有效的方法。这也是神经网络传说的一部分,从某种意义上说,只要你的设置是 “大致正确的”,通常就可以通过做充分的训练来确定细节,而不需要真正 “在工程层面上理解” 神经网络最终是如何配置它的。
下面是嵌入模块所做的工作,对字符串 “hello hello hello hello hello bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye bye 2”:
每个标记的嵌入向量的元素都显示在页面下方,在整个页面上,我们首先看到的是 “hello” 的嵌入,然后是 “bye” 的嵌入。上面的第二个数组是位置嵌入 —— 其看起来有点随机的结构只是 “碰巧学到的”(在这种情况下是 GPT-2)。
好了,在嵌入模块之后,是转化器的 “主要事件”:一连串所谓的 “注意块”(GPT-2 为 12 个,ChatGPT 的 GPT-3 为 96 个)。这一切都很复杂 —— 让人想起典型的难以理解的大型工程系统,或者,生物系统。但无论如何,这里是一个单一的 “注意块” 的示意图(对于 GPT-2):
在每个这样的注意力块中,有一系列的 “注意力头”(GPT-2 有 12 个,ChatGPT 的 GPT-3 有 96 个) —— 每一个都是独立操作嵌入向量中的不同数值块的。(是的,我们不知道为什么分割嵌入向量是个好主意,或者它的不同部分有什么 “意义”;这只是 “被发现可行” 的事情之一)。
好吧,那么注意头是做什么的?基本上,它们是一种在标记序列中 “回顾” 的方式(即在迄今为止产生的文本中),并将过去的内容 “打包” 成有助于寻找下一个标记的形式。
服务热线
1391-024-6332