网站数据库迁移,软件开发项目方案,手机版网站开发教学,seo优化排名技术百度教程Transformer 是 ChatGPT 的核心部分#xff0c;如果将 AI 看做一辆高速运转的汽车#xff0c;那么 Transformer 就是最重要的引擎。它是谷歌于 2017 年发表的《Attention is All You Need》中提出的 Sequence-to-sequence 的模型#xff0c;诞生之后便一统江湖#xff0c;在… Transformer 是 ChatGPT 的核心部分如果将 AI 看做一辆高速运转的汽车那么 Transformer 就是最重要的引擎。它是谷歌于 2017 年发表的《Attention is All You Need》中提出的 Sequence-to-sequence 的模型诞生之后便一统江湖在 NLP, CV, Audio, Video 多个模态领域成为了遥遥领先。 如果你之前不了解 Transformer, 或者只知道大概的知识那么这篇文章可以让你通过自己动手写代码深刻地理解 Transformer 的结构、训练方法以及实际用例等 如果你了解 Transformer这篇文章可以让你温习 Transformer 的知识所谓温故而知新 由于内容很多因此拆分为几篇文章的内容。
模型结构
总体流程 分为 输入Input, 模型Model, 输出(Output) 三部分。接下来详细说明每一个部分。
输入 输入我有一只猫 分词用某种分词方法输出 [我“有”“一只”, “猫”]常用的中文分词方法有 jieba 分词THULAC分词等想要详细了解这些分词方法可以问 悟空 AI 助手支持 GPT 3.5, GPT 4这里每个词也叫做 token(token 的概念很重要后面反复用到) 转 Embedding: 将 [我““有”“一只”, “猫”] 的每一个词转为一个实数向量常见的是 512 维的向量因为有 4 个词每个词变成 512 维向量所以得到 4*512 维的矩阵一般用 tensor 存储简单的就记作 x。具体的转换方法可以问悟空AI但是本文后面会详细讲到的。 添加位置 Embedding: 位置 embedding 是对 token 顺序的一种表示因为 token 顺序很重要。例如
[我“爱”“你”] 跟 [你“爱”“我”]token 顺序变一下含义就完全不同那么最简单的顺序表示方法就是 1,2,3,...N用数组索引表示位置但是 Transformer 没有这么干而是用正弦/余弦函数来表示 其中PE 就是位置编码Positional Embeddingpos 表示单词在句子中的位置d 表示 PE的维度 (与词 Embedding 一样)2i 表示偶数的维度2i1 表示奇数维度 (即 2i≤d, 2i1≤d)。画图看一下就是这样 脑经急转弯为什么位置 embedding 不用 [1,2,3,...N] 来表示顺序 请认真思考 5 分钟后再看下面的答案。 有两个原因 保证模型训练稳定性和快速收敛性类似于 data normalization, 原始数据的取值可以是负无穷到正无穷但是一旦输入到模型就要强制归一化到一个固定区间常见的是 [-1, 1] 区间这样做可以大幅加速模型收敛并减少训练误差但是 1,2,3,...,N 是没有界限的如果简单的除以 N 来归一化那么 N 取多少比较合适呢实际上很难选择 N 的值所以一个比较合适的选择就是周期性函数最经典好用的就是正弦/余弦为啥嘞因为它们很常见而且求导巨简单忘了它们导数的去问问 悟空 AI 助手 要遵循文本结构的周期性任何一个句子任何一个段落都是具有周期性的。为啥呢因为所有的句子都有固定的结构最常见的是主语 谓语 宾语所以一段话的结构其实类似于这样子的 主语 谓语 宾语 标点符号 主语 谓语 宾语 标点符号, ...... 很自然地就想到了用周期性函数来表示位置了。 网上有人说其中一个原因是可以让模型容易地计算出相对位置对于固定长度的间距 kPE(posk) 可以用 PE(pos) 计算得到。因为 Sin(AB) Sin(A)Cos(B) Cos(A)Sin(B), Cos(AB) Cos(A)Cos(B) - Sin(A)Sin(B)。这个我个人表示不认同因为 1,2,3,...N 也符合这个性质不信你算一下。 然后将文本的 embedding 和位置的 embedding 加起来就是模型的输入了如下 到这里 Transformer 的输入就讲完了下一篇将介绍模型的结构。