最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

深入淺出ChatGPT(一)關(guān)于非監(jiān)督預(yù)訓(xùn)練的一切

2023-03-23 14:07 作者:南玻斯瑞的生活號(hào)  | 我要投稿

ChatGPT之犀利毋庸置喙。

我了解到的,現(xiàn)在很多的進(jìn)行算法研發(fā)工作的團(tuán)隊(duì),實(shí)際上是做的事情是看到學(xué)術(shù)界研究出來一把可以很好地砸釘子的錘子,然后就拿這把錘子來尋找有沒有看起來像釘子的任務(wù),哪怕那個(gè)任務(wù)實(shí)際上是顆螺絲釘,也要用錘子硬砸進(jìn)去。

而我自己團(tuán)隊(duì)現(xiàn)在正在進(jìn)行的研究,則是認(rèn)真的分析了我們所面對(duì)的任務(wù)場(chǎng)景,確認(rèn)它是一顆螺絲釘,雖然它和釘子有很多相似之處,但同樣有著很多不同之處,所以我們要定制一把螺絲刀,而不是拿起現(xiàn)成的錘子就硬上。

當(dāng)然ChatGPT更在另一個(gè)級(jí)別,它做出來了一把手電鉆。

只是可惜這把手電鉆只能處理NLP問題,不能直接應(yīng)用在我們所做的ECS故障預(yù)測(cè)場(chǎng)景中。但是這把手電鉆的研發(fā)過程,同樣是有非常大的參考價(jià)值的,所以我寫了這篇文章,梳理總結(jié)了一些我對(duì)ChatGPT的理解。

此外,在閱讀這篇文章之前,建議大家先去看我之前(用ChatGPT)翻譯的那篇Wolfram大佬的https://www.yuque.com/wangyunongnanbo/zdr6c2/gmit2k0f7yuyxqbn?#《ChatGPT做了什么,以及它為何有效》,那篇文章里從模型的脈絡(luò)講述了ChatGPT的基礎(chǔ)工作原理,解釋了ChatGPT是如何根據(jù)我們的輸入來輸出一段合理的回答。而我今天想從另一條脈絡(luò)——特征,來講一講在我的理解當(dāng)中,OpenAI怎么做出了這么犀利的ChatGPT。

ChatGPT的核心思想

根據(jù)OpenAI發(fā)布的資料,ChatGPT的核心思想可以總結(jié)為一句話、四個(gè)方面:

非監(jiān)督預(yù)訓(xùn)練 + 多任務(wù)調(diào)優(yōu) + 人工反饋的強(qiáng)化學(xué)習(xí) + 大參數(shù)Transformer模型。

在解釋這句話之前,讓我們先從一些基礎(chǔ)的概念開始。

什么是好特征,什么是壞特征?

特征,簡而化之的理解,就是編碼,就是指一個(gè)輸入數(shù)據(jù),在計(jì)算機(jī)中、在算法模型中用一串什么樣的數(shù)字來代表它。

模型,簡而化之的理解,就是特征+分類器,分類器將輸入數(shù)據(jù)轉(zhuǎn)換成某種預(yù)期輸出,特征則是幫助分類器來更好完成任務(wù)。

比方說輸入文本,在電腦中是以ansic/unicode之類的編碼表示的,事實(shí)上這種編碼,也可以直接拿來作為特征輸入到分類器中,但是效果通常會(huì)不好,因?yàn)閍nsic編碼并不是一種好的特征。

好的特征,表達(dá)能力強(qiáng),會(huì)極大的幫助到模型的訓(xùn)練,反之,差的模型表達(dá)就會(huì)阻礙模型的訓(xùn)練。

那什么叫好的特征,什么叫表達(dá)能力強(qiáng)呢?

我們舉個(gè)例子。

假設(shè)我們現(xiàn)在還不知道要處理的任務(wù)是什么,但是我們已經(jīng)知道輸入的數(shù)據(jù)集如下:

A. cat B. car

C. dog D. truck

現(xiàn)在我們需要對(duì)輸入的單詞進(jìn)行編碼,將其轉(zhuǎn)換成算法模型可以理解(用專業(yè)一點(diǎn)的話說:可以將問題轉(zhuǎn)換成矩陣計(jì)算,訓(xùn)練工作可以轉(zhuǎn)換成對(duì)某個(gè)目標(biāo)函數(shù)的最大化/最小化優(yōu)化問題)的數(shù)據(jù)。

方案一:對(duì)輸入單詞做字典排序后按順序編碼,那我們會(huì)得到一個(gè)這樣的樣本空間:

方案二:出于我的常識(shí),我覺得cat和dog應(yīng)該在樣本空間中離得更近,car和truck也應(yīng)該離得更近,所以我設(shè)計(jì)了這樣一套特征方案:

現(xiàn)在來看我們要處理的任務(wù)A:

____ is animal. ____ is vehicle.

那顯然在這個(gè)任務(wù)下,cat和dog應(yīng)該是一類,car和truck應(yīng)該是一類。

那么在特征方案一中,為了在這個(gè)樣本空間中正確的完成任務(wù)分類,我們需要一個(gè)類似這樣的分類曲面:

在特征方案二中,我們需要一個(gè)類似這樣的分類曲面:

顯然方案二的分類曲面要更簡單,2個(gè)參數(shù)就可以表達(dá),方案一的分類曲面至少需要3個(gè)參數(shù),模型參數(shù)更多,訓(xùn)練難度也會(huì)更大。

這個(gè)例子還可以進(jìn)一步拓展,我們?cè)跀?shù)據(jù)集中再加入兩個(gè)單詞:camel,和wolf。

方案一:

方案二:

這個(gè)時(shí)候,我們會(huì)發(fā)現(xiàn),為了解之前提出的animal/vehicle分類問題,方案一原本的模型已經(jīng)失效了,不能將樣本正確分類,需要重新訓(xùn)練成一個(gè)更復(fù)雜的分類器:

但是方案二原本的模型依然是有效的,可以將樣本正確分類。

這種情況,我們就稱為采用方案二的模型的泛化能力比方案一強(qiáng),能在原來沒有處理過的數(shù)據(jù)上也取得良好的效果。


這個(gè)例子我們可以進(jìn)一步拓展。

現(xiàn)在對(duì)于這個(gè)數(shù)據(jù)集,我們又有了一個(gè)新的任務(wù)B:

____ starts with C, ____ doen't start with C.

那為了解這個(gè)問題,我們需要的分類曲面又變成了這樣:

方案一:

方案二:

這時(shí)候,我們發(fā)現(xiàn)原來兩種方案下的模型都失效了,并且在這個(gè)問題下,方案一的特征表達(dá)反而比方案二更好。

這種情況,我們稱之為解決特定任務(wù)的模型遷移到其他任務(wù)上失效了。

那為了能夠在兩個(gè)問題下都有好的特征表達(dá),我又重新設(shè)計(jì)了方案三,可以看到方案三對(duì)于前面兩個(gè)任務(wù)都有著很好的表達(dá),對(duì)任務(wù)A有效的分類器如實(shí)線所示,對(duì)任務(wù)B有效的分類器如虛線所示。方案三在兩個(gè)任務(wù)下對(duì)分類器訓(xùn)練的壓力都很小。顯然,這是一個(gè)比方案一和方案二都要好的特征表達(dá)設(shè)計(jì)方案。

通過這個(gè)簡單的例子,我想說明特征的評(píng)價(jià)是不能脫離任務(wù)的,好的特征指的是在某個(gè)任務(wù)下對(duì)分類器壓力小,更容易達(dá)到較好的分類效果的特征,而在某個(gè)任務(wù)下效果好的特征,在另外一個(gè)任務(wù)下效果未必會(huì)好。


如何進(jìn)行特征設(shè)計(jì)

現(xiàn)在我們知道了特征好壞很重要,那接下來讓我們看看該如何進(jìn)行特征設(shè)計(jì)。

特征設(shè)計(jì)可以大致分為兩個(gè)大的流派:前神經(jīng)網(wǎng)絡(luò)時(shí)代,和神經(jīng)網(wǎng)絡(luò)時(shí)代。

兩者最主要的區(qū)別在于,特征與模型是否可訓(xùn)練。


前神經(jīng)網(wǎng)絡(luò)時(shí)代

前神經(jīng)網(wǎng)絡(luò)時(shí)代的諸多算法,LR、SVM、決策樹(以及后續(xù)的隨機(jī)森林、GBDT、XGBoost、LightGBM、CatBoost等等)、K-means、KNN等等,其共同的特點(diǎn)是,模型本身的算法是固定的,也許在某個(gè)環(huán)節(jié)你可以選擇不一樣的參數(shù)、不一樣的架構(gòu)(LOSS選擇0-1 loss、絕對(duì)值loss、hinge loss、mse等等),但總體來說,當(dāng)你確定了使用哪種模型、確定模型中的一些參數(shù)之后,這個(gè)模型就固定下來了。

在使用這些固定的模型時(shí),由于模型本身沒有太多可以優(yōu)化調(diào)整的空間,特征通常就是算法研究者下功夫的重點(diǎn)了。通常,算法研究者會(huì)觀察分析數(shù)據(jù)的特性(例如前面舉例的方案二),再配合需要解決的問題以及問所使用的模型(例如前面的方案一配合任務(wù)B),來設(shè)計(jì)特征算子。

這種特征設(shè)計(jì)的典型例子有,在時(shí)序數(shù)據(jù)上使用的各種滑窗統(tǒng)計(jì)特征(min、max、std、峰度、偏度、熵等等),在圖像數(shù)據(jù)上使用的檢測(cè)邊緣的Laplace算子、針對(duì)圖像尺度不變性、旋轉(zhuǎn)不變性設(shè)計(jì)的大名鼎鼎的SIFT算子(前CNN時(shí)代圖像特征的神,后來就被CNN屠了)等等。

這個(gè)時(shí)代的特征和模型的共有特點(diǎn)就是:手工制定,且算法模型的調(diào)整空間不大,很多的工作都是圍繞著特征設(shè)計(jì)展開(那個(gè)年代的灌水文通常是這樣的:在xxx工作中使用的特征算子的計(jì)算公式為 x+1,我們經(jīng)過探索,發(fā)現(xiàn)將這個(gè)特征算子改成 x+0.5 會(huì)在我們的數(shù)據(jù)集上效果更好。。。)

這種做法的好處,是經(jīng)??梢杂幸恍?shù)學(xué)上看起來非常美、非常清晰的設(shè)計(jì)(比方說SVM,從數(shù)學(xué)上來說非常美,Vapnik的《統(tǒng)計(jì)學(xué)習(xí)理論》一書中圍繞著SVM、核方法做出了非常優(yōu)美的數(shù)學(xué)證明),此外在算力不強(qiáng)大、數(shù)據(jù)集不豐富的年代,很適合解決一些小規(guī)模問題。

但是同樣有壞處:數(shù)學(xué)上有優(yōu)美解的前提往往是一些強(qiáng)約束條件,而這些強(qiáng)約束條件在很多實(shí)際場(chǎng)景的數(shù)據(jù)集中并不能得到滿足;手工設(shè)計(jì)特征或者算法通常只適用非常特定的數(shù)據(jù)集;手工設(shè)計(jì)特征需要消耗的精力、對(duì)設(shè)計(jì)者經(jīng)驗(yàn)的要求都很高,越來越不適合數(shù)據(jù)規(guī)模越來越大的現(xiàn)在。


神經(jīng)網(wǎng)絡(luò)時(shí)代

而神經(jīng)網(wǎng)絡(luò)提出了一種完全不同的做法,最早、最原始的神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)思想是:輸入數(shù)據(jù)可以表達(dá)為一個(gè)向量X,預(yù)期輸出數(shù)據(jù)可以表達(dá)為一個(gè)向量Y1,以一個(gè)權(quán)重矩陣W去乘以X,可以得到一個(gè)實(shí)際輸出向量Y,那么實(shí)際輸出和預(yù)期輸出之間的差距作為LOSS函數(shù)L,那么當(dāng)數(shù)據(jù)集固定(也就是X和Y1固定時(shí)),L就變成了一個(gè)對(duì)W的函數(shù):L= f(Y1-Y) = f(W·X-Y),然后我們就可以用梯度下降法去求解一個(gè)使得L最小化的W。

在這個(gè)結(jié)構(gòu)當(dāng)中,特征的提取和分類器的計(jì)算不再被視為截然的兩個(gè)過程,兩個(gè)計(jì)算步驟被直接融合為一個(gè)計(jì)算步驟。同時(shí)也引入了最重要的一個(gè)概念:模型訓(xùn)練。

神經(jīng)網(wǎng)絡(luò)只提供一個(gè)基礎(chǔ)的計(jì)算結(jié)構(gòu)、計(jì)算框架,然后你需要向其輸入訓(xùn)練樣本,根據(jù)訓(xùn)練樣本的反饋,神經(jīng)網(wǎng)絡(luò)會(huì)去調(diào)整其中的具體參數(shù),以求得到一個(gè)最優(yōu)的解。


但是這個(gè)方法很快就被發(fā)現(xiàn)有著重大缺陷,它無法解決像異或問題這樣的非線性可分問題(即,找不到一個(gè)W,使得輸入X=(0,0),(0,1),(1,0),(1,1)時(shí),其輸出為Y=(0),(1),(1),(0).)。

然后神經(jīng)網(wǎng)絡(luò)有了第一次演化,從單層的神經(jīng)網(wǎng)絡(luò)演變成多層的神經(jīng)網(wǎng)絡(luò),即Y= W1·W2·....·WN·X。對(duì)于這種結(jié)構(gòu)的網(wǎng)絡(luò),直接求L對(duì)每個(gè)權(quán)重矩陣W的梯度是很復(fù)雜的,但借助求導(dǎo)公式的鏈?zhǔn)椒▌t,我們可以很巧妙的把這個(gè)梯度計(jì)算問題轉(zhuǎn)換成一個(gè)逐層計(jì)算偏導(dǎo)值的問題,這就是大名鼎鼎的后向傳播算法(Back-propagation)。

至此,神經(jīng)網(wǎng)絡(luò)發(fā)展壯大所需要的基礎(chǔ)就已經(jīng)齊備了,它的基礎(chǔ)思想是:假設(shè)1:在輸入樣本的空間當(dāng)中,一定存在一個(gè)分類曲面(無論這個(gè)曲面有多復(fù)雜),可以將樣本點(diǎn)合理的分到需要的類中去,假設(shè)2:通過足夠復(fù)雜的神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),一定可以得到一個(gè)對(duì)這個(gè)分類曲面的足夠接近的逼近曲面(理論上來說,分段線性函數(shù)可以做到對(duì)任意連續(xù)曲面的逼近),假設(shè)3:通過梯度下降的方法,我們總可以找到這個(gè)能夠逼近分類曲面的權(quán)重矩陣簇。目前這些假設(shè)尚未得到數(shù)學(xué)上的證明,但工程實(shí)踐支持這些假設(shè)的成立。


在神經(jīng)網(wǎng)絡(luò)之前,特征算子、模型結(jié)構(gòu)都需要人工設(shè)計(jì),在神經(jīng)網(wǎng)絡(luò)之后,大家的主要精力只需要集中在模型結(jié)構(gòu)的設(shè)計(jì),然后通過輸入數(shù)據(jù)、訓(xùn)練迭代讓模型自動(dòng)調(diào)優(yōu)到一個(gè)最合適的參數(shù)。在神經(jīng)網(wǎng)絡(luò)之前,算法本身可調(diào)節(jié)的空間并不大,而神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)則有著非常大的可調(diào)整空間,對(duì)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的探索也成了算法研究者最主要的工作內(nèi)容。

神經(jīng)網(wǎng)絡(luò)并不嚴(yán)格將特征和分類器的計(jì)算分開,但是通常神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)中,無論前面的結(jié)構(gòu)是如何設(shè)計(jì)的,最后都會(huì)接入一個(gè)全連接層將其轉(zhuǎn)換成所需大小的向量,再接上一層softmax作為最終輸出。所以通常,我們可以將這個(gè)最后一層全連接視為分類器,將神經(jīng)網(wǎng)絡(luò)前面的各層結(jié)構(gòu)視為在進(jìn)行特征提取。當(dāng)然,我們也可以在任意中間層將神經(jīng)網(wǎng)絡(luò)一分為二,將前面的部分視為特征提取,將后面的部分視為分類器,這樣中間這一層輸出的向量就是我們從輸入數(shù)據(jù)中提取到的特征。

通常在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程中,特征提取的部分和分類器的部分是同時(shí)得到訓(xùn)練的,但我們也可以將其中部分權(quán)重(通常是特征提取部分)固定不參與訓(xùn)練,而只訓(xùn)練分類器的部分。

神經(jīng)網(wǎng)絡(luò)最強(qiáng)大的地方在于,它并沒有制定某一種特征,而是提供了一個(gè)基礎(chǔ)計(jì)算結(jié)構(gòu),通過數(shù)據(jù)的輸入、反饋、迭代——簡而言之就是訓(xùn)練——的過程,可以得到一個(gè)最優(yōu)化的特征表達(dá)方案。但是,這個(gè)基礎(chǔ)計(jì)算結(jié)構(gòu)設(shè)計(jì)的好壞,會(huì)影響這個(gè)訓(xùn)練過程的難度,會(huì)決定你最終能優(yōu)化到什么程度。


在神經(jīng)網(wǎng)絡(luò)時(shí)代,網(wǎng)絡(luò)結(jié)構(gòu)非常重要,因?yàn)榫W(wǎng)絡(luò)結(jié)構(gòu)決定了你最終提取出的特征,其特征空間有多復(fù)雜、你需要去逼近的那個(gè)分類曲面有多扭曲、你的模型訓(xùn)練難度有多高。

最原始最基礎(chǔ)的神經(jīng)網(wǎng)絡(luò)計(jì)算單元就是全連接,也就是我們上面提到的,Y=W·X。

全連接的優(yōu)點(diǎn)是萬能,理論上來說你可以只用全連接擬合出任意你想要的函數(shù),但是為了充分訓(xùn)練全連接模型直到它真的逼近而不是在過擬合、無法收斂之類的問題上越跑越偏,訓(xùn)練需要的數(shù)據(jù)量可能是個(gè)無法想象的數(shù)字,不夸張的說,也許能超過這個(gè)宇宙的粒子數(shù)總和。

所以算法研究者們又設(shè)計(jì)了一些特定結(jié)構(gòu)的基礎(chǔ)單元。

其中最經(jīng)典的就是CNN中的卷積連接層和Transformer中的多頭注意力機(jī)制。

卷積連接

卷積連接層主要是針對(duì)輸入數(shù)據(jù)為圖像的情況下設(shè)計(jì)的。圖像的基礎(chǔ)特點(diǎn)是:1. 在二維空間上具有連續(xù)結(jié)構(gòu)和語義信息,每個(gè)像素和相鄰位置的像素之間具有相關(guān)性。2. 圖像中的局部信息具有平移不變性、旋轉(zhuǎn)不變性、縮放不變性等特點(diǎn)。

針對(duì)這樣的特點(diǎn),LeCun設(shè)計(jì)了最早的CNN網(wǎng)絡(luò)LeNet-5(因?yàn)樗?層)。卷積連接是以一個(gè)一定大?。▽I(yè)術(shù)語感知野)的卷積核掃描過輸入圖像,這個(gè)卷積核代表著一種特定的特征模式,當(dāng)它和掃描位置的圖像卷積結(jié)果大時(shí),表明圖像該位置的局部特征和這個(gè)卷積核代表的特征相似度越高,掃描完整張圖像,就得到了這個(gè)卷積核代表的特征在整張圖像不同位置上的強(qiáng)度。通常會(huì)同時(shí)使用多個(gè)不同的卷積核,每個(gè)卷積核代表一種特征。

例如下面這張圖(引用自我的博士論文),上圖是輸入圖像,下圖是經(jīng)過10個(gè)不同的卷積核掃描后得到的結(jié)果??梢悦黠@看出,不同的卷積核檢測(cè)出了不同的特征,橫向/豎向/斜向的邊緣、黑色/黃色的區(qū)域、白色背景等都有得到檢測(cè)。

卷積連接可以視為對(duì)全連接的一種特化:將全連接大部分權(quán)重置零,只保留特定位置的權(quán)重,且多行間的權(quán)重采用共享權(quán)值,就得到了卷積連接。事實(shí)上,13年我在微軟亞研院實(shí)習(xí)時(shí),秦濤老師的組就嘗試過從全連接中直接訓(xùn)練出類似卷積連接的結(jié)構(gòu)出來,但當(dāng)初的效果不是很好,我的個(gè)人猜想是當(dāng)初的數(shù)據(jù)集還不夠大,訓(xùn)練得不夠充分。

Transformer

與CNN不同,Transformer最初設(shè)計(jì)來主要是處理在一維上具有連續(xù)結(jié)構(gòu)和語義信息的序列數(shù)據(jù)(比如說人類語言)。

在Transformer之前,針對(duì)序列數(shù)據(jù)的主要設(shè)計(jì)思想是RNN,每次只計(jì)算相鄰兩個(gè)數(shù)據(jù)之間的相關(guān)性,將更之前的數(shù)據(jù)中含有的信息濃縮成一份先驗(yàn)輸入。這種做法顯然會(huì)導(dǎo)致更之前的數(shù)據(jù)會(huì)被遺忘,即使針對(duì)性的改進(jìn)成LSTM也無法徹底解決這個(gè)問題。

而Transformer則采用了將整個(gè)序列鋪平展開,計(jì)算每個(gè)位置的數(shù)據(jù)和每個(gè)其他位置的數(shù)據(jù)之間的相關(guān)性,得到一個(gè)更全局的語義信息的總結(jié)。

卷積連接中,計(jì)算局部信息所用的操作就是一個(gè)非常直白簡單的卷積操作,其物理含義是非常易于理解的。Transformer中則設(shè)計(jì)了一個(gè)結(jié)構(gòu)比較抽象的自注意力模塊來提取兩個(gè)位置的數(shù)據(jù)之間的相關(guān)性:三種代表不同信息的嵌入向量之和通過一個(gè)QKV矩陣的復(fù)雜計(jì)算,最后過一個(gè)softmax。卷積神經(jīng)網(wǎng)絡(luò)中,卷積連接通常后接池化連接以擴(kuò)大感知野,最后接入一個(gè)全連接層。而Transformer中,自注意力模塊后通常再接一個(gè)全連接層以進(jìn)行全域信息總結(jié)。


CNN vs. Transformer

如果說從全連接到卷積連接是一種特化,那么從RNN到Transformer則可以看做一種泛化:RNN是特化的、只計(jì)算相鄰位置的相關(guān)性(同時(shí)簡化了相關(guān)性計(jì)算方式)的Transformer。

那為什么從全連接到卷積連接是特化后效果更好,從RNN到Transformer則是泛化后效果更好呢?

如果我們對(duì)比一下這四組結(jié)構(gòu),可以發(fā)現(xiàn):

全練接是根據(jù)輸入樣本的全部數(shù)據(jù)集合計(jì)算得到一個(gè)值,而卷積連接是每次只根據(jù)樣本中的一個(gè)數(shù)據(jù)局部子集計(jì)算得到一個(gè)值,然后將這個(gè)計(jì)算在多組數(shù)據(jù)局部子集上重復(fù),最終得到多個(gè)值。

Transformer則是每次只根據(jù)樣本中的一個(gè)數(shù)據(jù)局部子集計(jì)算得到一個(gè)值,然后將這個(gè)計(jì)算在多組數(shù)據(jù)局部子集上重復(fù),最終得到多個(gè)值。

RNN是只根據(jù)樣本中的一個(gè)數(shù)據(jù)局部子集計(jì)算得到一個(gè)值,即使重復(fù)多次這樣的計(jì)算最后仍然是得到一個(gè)值。

可以看到,其實(shí)全練接和RNN在結(jié)構(gòu)上是更走向兩個(gè)極端的,全練接感知樣本數(shù)據(jù)的全集,而RNN約等于最終只看了一個(gè)數(shù)據(jù)子集(其他數(shù)據(jù)子集的信息被濃縮了,而濃縮的另一個(gè)名字就是信息丟失),而CNN和Transformer其實(shí)是更類似的結(jié)構(gòu):對(duì)整體輸入做掃描,每次掃描時(shí)只關(guān)注局部信息,最終將每次掃描的結(jié)果組合起來,得到一個(gè)全局的描述。

但CNN和Transformer相比,CNN對(duì)信息的損失會(huì)更大一些,因?yàn)镃NN重復(fù)的數(shù)據(jù)局部子集是有丟失的,處于不相鄰位置上的數(shù)據(jù)組成的子集是不會(huì)被納入計(jì)算的。而Trasnformer則是對(duì)全部子集都進(jìn)行計(jì)算(不過CNN通過池化層的方法逐漸增大了感知野,最終還是將全集信息進(jìn)行了整合,但這個(gè)過程中同樣存在信息的濃縮與丟失問題)。

在這個(gè)全集-全部子集的集合-部分子集的集合-子集的鏈條上,越靠左的,感知的信息越全域,參數(shù)量越大,訓(xùn)練難度越大,充分訓(xùn)練需要的數(shù)據(jù)量越大,而越靠右,感知的信息越局部,參數(shù)量越小,整體表達(dá)能力越弱,越容易過擬合。

總結(jié)來看,Transformer中的嵌入編碼加上自注意力模塊的設(shè)計(jì),使得它能夠很好的作為一種用于訓(xùn)練從序列數(shù)據(jù)中提取特征的網(wǎng)絡(luò)結(jié)構(gòu)。那么從這個(gè)邏輯來看,Transformer應(yīng)該天然也可以應(yīng)用在圖像上,因?yàn)閳D像也可以認(rèn)為是一個(gè)序列數(shù)據(jù),只不過有著特殊的跳接機(jī)制,而事實(shí)上ViT模型的效果恰恰證明了這一點(diǎn)。


預(yù)訓(xùn)練+調(diào)優(yōu)

現(xiàn)在我們了解到,當(dāng)前神經(jīng)網(wǎng)絡(luò)時(shí)代的常用做法是,設(shè)計(jì)好網(wǎng)絡(luò)的結(jié)構(gòu),然后輸入足夠的數(shù)據(jù)去進(jìn)行充分的訓(xùn)練。前面我們大概討論了網(wǎng)絡(luò)結(jié)構(gòu)對(duì)訓(xùn)練能優(yōu)化到什么程度有著很重要的作用,而使用什么樣的數(shù)據(jù)集去進(jìn)行訓(xùn)練,對(duì)于最終優(yōu)化程度的作用是同等(甚至更加)重要的。

在我們一開始舉的例子當(dāng)中,在初始只有四個(gè)單詞的數(shù)據(jù)集上,我們顯然只能優(yōu)化到方案二的程度,只有在擴(kuò)充后六個(gè)單詞的數(shù)據(jù)集上,我們才能優(yōu)化到方案三的程度。

這是因?yàn)椋W(wǎng)絡(luò)的結(jié)構(gòu),只是決定了模型學(xué)習(xí)數(shù)據(jù)分布的能力,但是用來訓(xùn)練的數(shù)據(jù)集,才真正決定了最終有哪些數(shù)據(jù)分布被學(xué)習(xí)到。所以通常來說,用來訓(xùn)練的數(shù)據(jù)集越大,模型最終的訓(xùn)練效果越好。

但是在某個(gè)特定任務(wù)的數(shù)據(jù)集中,其數(shù)據(jù)量往往是有限的,模型未必能得到充分的訓(xùn)練,這時(shí)候一個(gè)常被采用的策略就是預(yù)訓(xùn)練+調(diào)優(yōu)。

先將模型在另一個(gè)(通常是數(shù)據(jù)量更大的)數(shù)據(jù)集上進(jìn)行訓(xùn)練,然后再在我們需要解決的任務(wù)上進(jìn)行訓(xùn)練。這里又通常有四種做法,一種是整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)都不變,特征提取和分類器的參數(shù)全部調(diào)優(yōu),第二種是網(wǎng)絡(luò)結(jié)構(gòu)不變,特征提取部分權(quán)重不變,只對(duì)分類器部分參數(shù)做調(diào)優(yōu),第三種是網(wǎng)絡(luò)結(jié)構(gòu)也發(fā)生變化,特征提取部分結(jié)構(gòu)不變,分類器部分結(jié)構(gòu)變化,整體調(diào)優(yōu),第四種是特征提取部分結(jié)構(gòu)不變且權(quán)重固定,分類器結(jié)構(gòu)變化且權(quán)重調(diào)優(yōu)。

這里基本上可以理解為,通過預(yù)訓(xùn)練獲得一個(gè)較好的特征表達(dá),然后再在這個(gè)特征表達(dá)的基礎(chǔ)上對(duì)模型進(jìn)行進(jìn)一步的優(yōu)化,以最終獲得較好的效果。


而由于數(shù)據(jù)標(biāo)注通常要消耗很多人力,所以為了能夠獲得一個(gè)用于預(yù)訓(xùn)練的、數(shù)據(jù)量足夠大的數(shù)據(jù)集,更常用的方法是采用非監(jiān)督預(yù)訓(xùn)練的方法。用于非監(jiān)督學(xué)習(xí)的數(shù)據(jù)集,通常相當(dāng)于只需要進(jìn)行數(shù)據(jù)的收集,而不需要進(jìn)行數(shù)據(jù)的標(biāo)注,所以可以做到比標(biāo)注好的有監(jiān)督數(shù)據(jù)集的數(shù)據(jù)量大很多。

但是進(jìn)行非監(jiān)督預(yù)訓(xùn)練時(shí),(結(jié)合我在之前舉得例子來說,就是只告訴你現(xiàn)在有一個(gè)6個(gè)單詞的數(shù)據(jù)集,但沒有提供任何任務(wù)標(biāo)注信息),由于沒有特定的預(yù)期輸出,就需要我們?cè)O(shè)計(jì)一個(gè)專門針對(duì)非監(jiān)督預(yù)訓(xùn)練的任務(wù),并且期望這個(gè)非監(jiān)督學(xué)習(xí)任務(wù)優(yōu)化出來的特征表達(dá),在后續(xù)我們想要進(jìn)行的具體任務(wù)上也有好的效果。

在我前面舉的例子中就已經(jīng)提到過,一種特征,在某個(gè)任務(wù)下好,并不一定在另一個(gè)任務(wù)下也好。所以這里的預(yù)訓(xùn)練任務(wù)不是能隨意設(shè)計(jì)的。

如何設(shè)計(jì)預(yù)訓(xùn)練任務(wù),尤其是非監(jiān)督預(yù)訓(xùn)練任務(wù)?

這一塊目前沒有太多理論上的證明,但是有一些工程實(shí)踐上的經(jīng)驗(yàn)性結(jié)論。這里我可以嘗試做出一些討論。

在沒有預(yù)訓(xùn)練的情況下,相當(dāng)于知道輸入輸出,求對(duì)輸入輸出條件概率分布P(output|input)的最大似然估計(jì)。而在有預(yù)訓(xùn)練的情況下,相當(dāng)于增加了一個(gè)隱變量feature,先做對(duì)輸入和特征的條件概率分布P(feature|input)的最大似然估計(jì),再做對(duì)特征和輸出的條件概率分布P(output|feature)的最大似然估計(jì)。所以一個(gè)簡單的預(yù)訓(xùn)練任務(wù)的設(shè)計(jì)理念就是:希望特征和輸入之間的分布保持一致,相同/相似/相關(guān)的輸入具有更接近的特征,不相同/不相似/不相關(guān)的輸入之間具有更遠(yuǎn)的特征。

常見的非監(jiān)督預(yù)訓(xùn)練的基礎(chǔ)思想,是希望特征之間能以更簡潔的結(jié)構(gòu)(通常是更低的維度)來保持和輸入數(shù)據(jù)之間相似的分布。為了做到這一點(diǎn),一種常用的做法是希望能從特征中重建出輸入,這樣顯然特征保持了和輸入數(shù)據(jù)一致的分布。

之前我們提到過,特征就是將輸入數(shù)據(jù)用一串?dāng)?shù)據(jù)來表達(dá),那么該如何理解這一串?dāng)?shù)據(jù)呢。

一種基礎(chǔ)的理解,是認(rèn)為存在一個(gè)特征空間,這個(gè)空間中有N個(gè)特征向量R,而將輸入數(shù)據(jù)X表達(dá)為一個(gè)N維的特征V后,實(shí)際上可以將這個(gè)特征理解為一組權(quán)重系數(shù),對(duì)特征空間中的每個(gè)向量以這組權(quán)重系數(shù)做加權(quán)和之后,就可以得到對(duì)這個(gè)輸入數(shù)據(jù)的重建。通常認(rèn)為,這個(gè)特征空間中的特征向量之間如果是正交的,那么得到的特征表達(dá)會(huì)更好——相似的輸入數(shù)據(jù)的特征也會(huì)相似,不相似的輸入數(shù)據(jù)的特征也同樣不相似。

然而,想要這種特性成立,通常對(duì)矩陣特性有一些要求(非負(fù)、非奇異等等),更像是一種理論上的理想化推導(dǎo)(真空球形雞),而在很多現(xiàn)實(shí)世界的實(shí)際數(shù)據(jù)集當(dāng)中,并不能得到一個(gè)數(shù)學(xué)上優(yōu)美的解,只能退而求其次的尋找盡可能最優(yōu)的解。


在繼續(xù)講下去之前,先插入一段關(guān)于信息熵的基礎(chǔ)概念:

根據(jù)香農(nóng)的無失真信源編碼定理,想要表達(dá)一定量的信息,其編碼長度是有下限的,以01編碼來編碼的話,最短編碼長度即為log2(H),H為信源的信息熵。信息熵的計(jì)算公式為信源每個(gè)可能的符號(hào)的出現(xiàn)概率乘以該符號(hào)信息量之和。單個(gè)符號(hào)的信息量,可以簡單理解為該符號(hào)所消除掉的不確定性,計(jì)算公式為log2(1/p),p為該符號(hào)出現(xiàn)的概率。

舉個(gè)例子來說,投一個(gè)骰子,出現(xiàn)1的概率為1/6,當(dāng)我投出一顆骰子得到1后,獲得的信息量即為log2(6),而投骰子這個(gè)信源整體的信息熵即為6*1/6*log2(6)=log2(6),而想要用01編碼對(duì)骰子出現(xiàn)的每一個(gè)結(jié)果做一個(gè)編碼,則需要用到的最短編碼長度為log2(6)=2.58,即用2位定長01編碼不太夠(只能編碼到4),用3位定長01編碼又有剩余(能編碼到8)。


結(jié)合信源編碼定理來看特征編碼,會(huì)發(fā)現(xiàn)特征編碼有兩種可能的情況。

一種是特征的維度小于輸入數(shù)據(jù)的維度,此時(shí)特征編碼可表達(dá)的信息量是小于輸入數(shù)據(jù)的,這種情況我們稱為特征稠密化。這種情況下,是無法從特征無損重建出輸入數(shù)據(jù)的,一定會(huì)有信息損失掉。通常在實(shí)踐上認(rèn)為,在有信息損失的情況下,要求從特征重建出的輸入能夠盡量保持對(duì)輸入的接近,或者能夠保持重建后數(shù)據(jù)之間的區(qū)分度,可以強(qiáng)迫模型學(xué)習(xí)到輸入數(shù)據(jù)的分布中更關(guān)鍵的部分,而拋棄掉噪音分布、不重要的部分。

這種做法就是目前非監(jiān)督預(yù)訓(xùn)練的主流做法。而通常判定此時(shí)特征好壞的方法通常有兩種方法:一種是生成式,直接對(duì)比重建后的結(jié)果和輸入數(shù)據(jù)之間的相似度,希望相似度最大化。一種是對(duì)比式:每次輸入兩個(gè)樣本,對(duì)比這兩個(gè)樣本重建后的相似度,對(duì)比式又有兩種做法,一種正樣本法是這兩個(gè)樣本之間視為相關(guān),即使這兩個(gè)樣本本身相差很大,也希望他們的特征相似度最大化,另一種負(fù)樣本法是這兩個(gè)樣本之間視為不相關(guān),希望他們的特征相似度最小化。輸入的這兩個(gè)樣本又有兩種常用處理方法:一種是輸入人工或規(guī)則組織過的樣本對(duì)(ChatGPT就是這么做),另一種是輸入一個(gè)樣本,和在這個(gè)樣本上做隨機(jī)擾動(dòng)后的數(shù)據(jù)增強(qiáng)樣本(何凱明這邊SimSiam的做法)。

但還有一種情況是特征的維度大于輸入數(shù)據(jù)的維度,此時(shí)特征編碼可表達(dá)的信息量是大于輸入數(shù)據(jù)的。此時(shí)特征編碼的信息密度相對(duì)于輸入數(shù)據(jù)來說變稀疏了,這種做法我們一般就稱之為稀疏化。

稀疏化的做法在早年機(jī)器學(xué)習(xí)的研究中還有見到,但近年越來越少了。核心還是在于數(shù)據(jù)集越來越大,本身輸入數(shù)據(jù)信息量就在不斷膨脹,若還要在特征維度上進(jìn)一步稀疏膨脹,特征維度、模型參數(shù)空間會(huì)過于龐大,即使其表達(dá)能力上限更高,也缺少足夠的數(shù)據(jù)訓(xùn)練抵達(dá)這個(gè)上限。所以相比于稀疏化,現(xiàn)在的主流做法還是稠密化。

但是稀疏化并非就沒有可取之處。根據(jù)我的經(jīng)驗(yàn)來看,當(dāng)輸入數(shù)據(jù)中存在多個(gè)分布混雜,而非一個(gè)統(tǒng)一分布時(shí),采用稀疏化的做法有助于分離出多個(gè)分布的信息并加以學(xué)習(xí),在一些特定場(chǎng)景下稀疏化的效果也許會(huì)優(yōu)于稠密化。


預(yù)訓(xùn)練+調(diào)優(yōu)的策略還涉及到另外一個(gè)問題,也就是遷移學(xué)習(xí)所研究的,當(dāng)用于預(yù)訓(xùn)練的數(shù)據(jù)集,和后續(xù)調(diào)優(yōu)的數(shù)據(jù)集在分布上差異較大時(shí),預(yù)訓(xùn)練再調(diào)優(yōu)的方法能否以及如何做到比直接訓(xùn)練的效果更好。

這個(gè)問題并沒有一個(gè)統(tǒng)一的答案,OpenAI在GPT模型中采用了大規(guī)模無監(jiān)督數(shù)據(jù)集預(yù)訓(xùn)練+多任務(wù)調(diào)優(yōu)的策略并且證明了效果很好,但這并不代表這種策略就可以適用所有的場(chǎng)景。GPT這樣做有效是因?yàn)镹LP問題有其特性。

OpenAI眼中的NLP問題

在此前學(xué)界的傳統(tǒng)研究方案中,NLP問題是被拆分為一個(gè)個(gè)具體的問題的,如翻譯、縮寫、擴(kuò)寫、問答等?;趥鹘y(tǒng)的認(rèn)知,在不同任務(wù)下,最優(yōu)的特征表達(dá)方案應(yīng)該不一樣,就像前面我們舉的方案一和方案二在兩個(gè)問題下效果各不相同一樣。

但是OpenAI認(rèn)為,所有的NLP問題,其實(shí)都可以表達(dá)成一個(gè)對(duì)話任務(wù),即,輸入一段語言文本,輸出一段語言文本。這使得所有的NLP問題應(yīng)當(dāng)可以通用一套架構(gòu),共用一套特征表達(dá)方案。這個(gè)方案應(yīng)當(dāng)可以做到在多種任務(wù)下都可以有很好的效果,換句話說就是,OpenAI認(rèn)為在NLP問題中,存在一個(gè)方案三,可以兼容不同的任務(wù),并且這個(gè)方案三,是可以被找到的。

但是想要找到這個(gè)能對(duì)不同任務(wù)效果都好的方案三,需要非常大量的數(shù)據(jù)集來進(jìn)行訓(xùn)練。而有監(jiān)督數(shù)據(jù)集的工作量太大,同等人力下,構(gòu)建出非監(jiān)督數(shù)據(jù)集可以比有監(jiān)督數(shù)據(jù)集大很多個(gè)量級(jí)。在19年,OpenAI通過GPT-1的相關(guān)實(shí)驗(yàn),確認(rèn)了非監(jiān)督預(yù)訓(xùn)練+調(diào)優(yōu)的策略在NLP問題上是行之有效的,非監(jiān)督預(yù)訓(xùn)練確實(shí)可以提供額外的分布信息,從而確定了要往這個(gè)方向持續(xù)投入。

后來,OpenAI構(gòu)建了一個(gè)非常巨大的、分布足夠廣的非監(jiān)督數(shù)據(jù)集,根據(jù)OpenAI自己公布的資料,有數(shù)百萬人參與了這個(gè)數(shù)據(jù)集的構(gòu)建。隨后,他們優(yōu)化了對(duì)如何進(jìn)行非監(jiān)督預(yù)訓(xùn)練+調(diào)優(yōu)的具體細(xì)節(jié),例如在預(yù)訓(xùn)練環(huán)節(jié),生成式預(yù)訓(xùn)練之外,又進(jìn)行了對(duì)比式預(yù)訓(xùn)練,在預(yù)訓(xùn)練中,除了組織正樣本對(duì)之外,還采用了同批次其他數(shù)據(jù)視為負(fù)樣本的策略;在調(diào)優(yōu)環(huán)節(jié),設(shè)計(jì)了針對(duì)多任務(wù)的少樣本訓(xùn)練策略,設(shè)計(jì)了基于人類反饋的強(qiáng)化學(xué)習(xí)調(diào)優(yōu)策略,增加了模型輸出對(duì)結(jié)果置信度的評(píng)分函數(shù)等等。在工程方面,更是組建了超大計(jì)算集群,設(shè)計(jì)了多種大規(guī)模模型的并行化調(diào)度策略,從17年到22年,歷時(shí)五年,最終得到了現(xiàn)在這個(gè)強(qiáng)大的ChatGPT。

結(jié)語

在開篇我提到ChatGPT的核心思想是非監(jiān)督預(yù)訓(xùn)練 + 多任務(wù)調(diào)優(yōu) + 人工反饋的強(qiáng)化學(xué)習(xí) + 大參數(shù)Transformer模型。這篇文章里,我主要圍繞著非監(jiān)督預(yù)訓(xùn)練這一點(diǎn)展開了討論。另外三個(gè)方面也有很多值得討論的細(xì)節(jié),不過這篇文章的篇幅已經(jīng)夠長了,我會(huì)另起幾篇文章來討論,感謝大家的閱讀。

致謝

感謝為我提供openai賬號(hào)的親愛的老婆~

感謝總是過來騷擾我的可愛的小貓咪(附上奇怪貓條照片一張)~



深入淺出ChatGPT(一)關(guān)于非監(jiān)督預(yù)訓(xùn)練的一切的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
嘉义市| 新乡县| 孟州市| 商水县| 康平县| 东辽县| 长治市| 方山县| 天全县| 洪雅县| 万安县| 依安县| 汾阳市| 广州市| 外汇| 江陵县| 二连浩特市| 宜州市| 舟曲县| 乳山市| 祁阳县| 嵊泗县| 西城区| 吉木乃县| 咸丰县| 佳木斯市| 保德县| 安平县| 龙井市| 廊坊市| 西昌市| 留坝县| 江山市| 鹤壁市| 类乌齐县| 宾川县| 白河县| 宁津县| 瓦房店市| 盐亭县| 永德县|