chatGPT的结构:Encoder-Decoder
Encoder-Decoder 编码器-解码器架构
encoder-decoder 这一套模型架构最早是用于解决机器翻译问题的
机器翻译模型接收一条英文语句,然后经过模型的一番操作,最后输出一条对应的中文翻译结果。这种建模最早被称为 seq2seq,其含义为 sequence to sequence,即序列到序列,输入一条文字序列,输出一条文字序列。
此后,在 NLP 领域,seq2seq 可以被应用于各种各样的文字序列任务上,也就成了 NLP 领域的一种标准建模方式。
在 encoder-decoder 这种建模方式中,encoder 像极了一个人接收文字信息思考的过程,decoder 则像极了一个人将大脑中的信息转换成语言表达出来的过程。可以说,encoder-decoder 就是一种机器模拟人脑思考的方式。
另外,encoder-decoder 并非指一种具体的模型结构,它是一种宽泛的模型设计架构。
-
这种编解码结构不仅仅局限于 NLP 领域,它也可以应用于图像处理、音频处理等领域,例如图像领域的对抗生成模型 GAN 等。
-
我们知道,GPT 采用了 decoder 架构,丢弃了其中的 encoder 部分,其中的具体结构是 Transformer。但是,编解码架构的内部设计还可以采用循环神经网络( RNN )这种模型结构。当然,如果未来有更好的设计,也可以替换为别的具体模型结构。
GPT 中的编解码架构
一般来讲,这个向量的维度可能达到几万维到几十万维不等,它的长度和词表中有多少 token 是相等的。
解码得到输出 Token
贪婪搜索 Greedy Search
这种根据向量最大值寻找对应索引的操作叫做 argmax。按照最大概率值选择模型输出的 token,这种方法叫做贪婪搜索(Greedy Search) 。
按照贪婪搜索的方式,实际上是取消了根据 token 概率分布做采样的操作。我们知道,有 0.3410 的概率输出得到平字,这个结果没错;但也有 0.2179 的概率模型会输出得到网字,这个值也很高,若模型输出 网字,语言读起来完全能说得通,并不能算作错。
束搜索 Beam Search
这种先选择最高概率的若干选项,再在其中随机抽取的方式叫做束搜索(Beam Search) ,所谓 Beam 就是指一束光中,光线不止一条,而是有多条,对应在解码中,就是指有多个选择,它可以克服贪婪搜索选择范围仅仅只有 1 个 token 的缺点。
要选择多少个备选 token 进行采样,需要预先人为设定一个数量 k。可以看出,若此值越小,生成的结果越固定,反之结果越灵活多变。
核搜索 Nucleus Search
top_p 搜索,也叫核搜索(Nucleus Search) ,是 Beam Search 的一种变体。
当预先设定的 top_p 值变大时,可用于选择的 token 数就变多,模型生成的结果就更加多变,不可靠;当 top_p 变小时,可选择的 token 数就变少,模型生成的结果就更加固定;当 top_p 为 0 时,核搜索退化为 Greedy Search。
温控搜索 Temperature Search
所谓温控搜索(Temperature Search) ,就是对上述公式做一个调整,加入一个参数 T ∈ (0,1),得到:
ChatGPT 的解码方法,就是温控搜索和核搜索的一种结合体。一方面,从全局 token 中选择一个范围(核搜索),另一方面,条件这个范围内的温控参数(温控参数),使得采样不同 token 的值出现变化。如果读者尝试过调用 openai 的接口,就会看到这个参数选项值。
GPT 是一个解码器
最原始的编解码模型架构,其中,左半边为编码器,右半边为解码器。而前述的 GPT 模型架构,其实就是原始结构的右半边。因此,我们也常说,GPT 系列模型仅仅使用了 decoder 部分。
Mask 掩码层
假设模型可以接收的最大 token 数量为 20 个,而用户输入的数据只有 掘金社区是一个便捷的技术交流这 14 个 token 时,模型会对这部分数据做一定处理,如下图所示。
当用户的输入低于 20 个 token 时,模型会自动为用户的输入补齐,添加一个特殊的<pad> token(图中以/p表示,它和<eos>token 性质是相同的,并不是表示具体的某个字符,而是仅仅起到一种功能上的作用),它本身不具有实际意义,仅代表占位符;当用户的输入超过 20 个 token 时,模型又会将超出的部分截断,仅保留前 20 个 token,形成一个不完整的输入。
模型在进行后续的 Transformer 操作时,需要考虑<pad> token 本身不代表任何含义,这些字符不应该参与上下文的相关性自注意力计算。为了解决这个问题,Mask 掩码层被提出。
在上图中,mask 层为每一个 token 位置设置了一个 1,0 取值,若设为 1,则对应位置 token 正常进行计算,而设为 0 时,对应位置不参与注意力计算。最终的 softmax 概率值为 0。
总结
- ChatGPT 模型基于 encoder-decoder 模型架构进行建模。
- ChatGPT 模型采用核搜索、温控搜索结合的方式生成输出结果,并基于 temperature 调节生成结果的随机性,值越大,随机性越强,值越小,生成的内容越固定。
- ChatGPT 主要采用 Mask 掩码的方式,屏蔽掉不参与注意力计算的 token 位置。