????????
????????Transformer 是 ChatGPT 的核心部分,如果將 AI 看做一輛高速運(yùn)轉(zhuǎn)的汽車,那么 Transformer 就是最重要的引擎。它是谷歌于 2017 年發(fā)表的《Attention is All You Need》中提出的 Sequence-to-sequence 的模型,誕生之后便一統(tǒng)江湖,在 NLP, CV, Audio, Video 多個(gè)模態(tài)領(lǐng)域成為了遙遙領(lǐng)先。
-
如果你之前不了解 Transformer, 或者只知道大概的知識(shí),那么這篇文章可以讓你通過自己動(dòng)手寫代碼深刻地理解 Transformer 的結(jié)構(gòu)、訓(xùn)練方法以及實(shí)際用例等;
-
如果你了解 Transformer,這篇文章可以讓你溫習(xí) Transformer 的知識(shí),所謂溫故而知新;
????????由于內(nèi)容很多,因此拆分為幾篇文章的內(nèi)容。
模型結(jié)構(gòu)
總體流程:
? ? ? ? 分為 輸入(Input), 模型(Model), 輸出(Output) 三部分。接下來詳細(xì)說明每一個(gè)部分。
輸入
????????輸入:"我有一只貓"
????????分詞:用某種分詞方法輸出 ["我",“有”,“一只”, “貓”],常用的中文分詞方法有 jieba 分詞,THULAC分詞等(想要詳細(xì)了解這些分詞方法可以問 悟空 AI 助手,支持 GPT 3.5, GPT 4),這里每個(gè)詞也叫做 token(token 的概念很重要,后面反復(fù)用到)
????????轉(zhuǎn) Embedding: 將 ["我“,“有”,“一只”, “貓”] 的每一個(gè)詞轉(zhuǎn)為一個(gè)實(shí)數(shù)向量,常見的是 512 維的向量,因?yàn)橛?4 個(gè)詞,每個(gè)詞變成 512 維向量,所以得到 4*512 維的矩陣,一般用 tensor 存儲(chǔ),簡單的就記作 x。具體的轉(zhuǎn)換方法可以問悟空AI,但是本文后面會(huì)詳細(xì)講到的。
????????添加位置 Embedding: 位置 embedding 是對(duì) token 順序的一種表示,因?yàn)?token 順序很重要。例如:
["我",“愛”,“你”] 跟 ["你",“愛”,“我”],token 順序變一下含義就完全不同!那么最簡單的順序表示方法就是 1,2,3,...N,用數(shù)組索引表示位置,但是 Transformer 沒有這么干而是用正弦/余弦函數(shù)來表示:
????????其中,PE 就是位置編碼(Positional Embedding),pos 表示單詞在句子中的位置,d 表示 PE的維度 (與詞 Embedding 一樣),2i 表示偶數(shù)的維度,2i+1 表示奇數(shù)維度 (即 2i≤d, 2i+1≤d)。畫圖看一下就是這樣:
????????腦經(jīng)急轉(zhuǎn)彎:為什么位置 embedding 不用 [1,2,3,...N] 來表示順序?
????????請認(rèn)真思考 5 分鐘后再看下面的答案。
????????有兩個(gè)原因:
-
保證模型訓(xùn)練穩(wěn)定性和快速收斂性:類似于 data normalization, 原始數(shù)據(jù)的取值可以是負(fù)無窮到正無窮,但是一旦輸入到模型就要強(qiáng)制歸一化到一個(gè)固定區(qū)間,常見的是 [-1, 1] 區(qū)間,這樣做可以大幅加速模型收斂并減少訓(xùn)練誤差,但是 1,2,3,...,N 是沒有界限的,如果簡單的除以 N 來歸一化,那么 N 取多少比較合適呢?實(shí)際上很難選擇 N 的值,所以一個(gè)比較合適的選擇就是周期性函數(shù),最經(jīng)典好用的就是正弦/余弦,為啥嘞?因?yàn)樗鼈兒艹R姸仪髮?dǎo)巨簡單,忘了它們導(dǎo)數(shù)的去問問 悟空 AI 助手
-
要遵循文本結(jié)構(gòu)的周期性:任何一個(gè)句子,任何一個(gè)段落都是具有周期性的。為啥呢,因?yàn)樗械木渥佣加泄潭ǖ慕Y(jié)構(gòu),最常見的是:主語 + 謂語 + 賓語,所以一段話的結(jié)構(gòu)其實(shí)類似于這樣子的:
?主語 + 謂語 + 賓語 + 標(biāo)點(diǎn)符號(hào) + 主語 + 謂語 + 賓語 + 標(biāo)點(diǎn)符號(hào), ......
????????很自然地,就想到了用周期性函數(shù)來表示位置了。
????????網(wǎng)上有人說其中一個(gè)原因是可以讓模型容易地計(jì)算出相對(duì)位置,對(duì)于固定長度的間距 k,PE(pos+k) 可以用 PE(pos) 計(jì)算得到。因?yàn)?Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)。這個(gè)我個(gè)人表示不認(rèn)同,因?yàn)?1,2,3,...N 也符合這個(gè)性質(zhì),不信你算一下。
????????然后,將文本的 embedding 和位置的 embedding 加起來就是模型的輸入了,如下:
? ??文章來源:http://www.zghlxwxcb.cn/news/detail-849006.html
????????到這里 Transformer 的輸入就講完了,下一篇將介紹模型的結(jié)構(gòu)。文章來源地址http://www.zghlxwxcb.cn/news/detail-849006.html
到了這里,關(guān)于探究 ChatGPT 的心臟--Transformer(基礎(chǔ)知識(shí)第一篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!