通俗直觀介紹ChatGPT背後的大語言模型理論知識

“AI 的 iPhone 時刻到來了”。非算法崗位的研發同學'被迫'學習 AI,產品崗位的同學希望瞭解 AI。但是,很多自媒體文章要麼太嚴謹、科學,讓非科班出身的同學讀不懂;要麼,寫成了科幻文章,很多結論都沒有充分的邏輯支撐,是‘滑坡推理’的產物。這篇文章從底層講起,卻不引入太多概念,特別是數學概念,讓所有人都能對大模型的核心概念、核心問題建立認知。文章末尾也爲需要嚴肅全面地學習深度學習的人給出了建議。

關於以 ChatGPT 爲代表的大語言模型(LLM),相關介紹文章、視頻已經很多。算法部分,約定俗成地,還是先來一段貫口。當前我們說的 LLM,一般代指以 ChatGPT 爲代表的基於 Generative Pre-trained Transformer 架構的自然語言處理神經網絡模型。顧名思義,它是個以預訓練技術爲核心的模型,是個生成模型。同時它是Transformer這個編碼-解碼模型的解碼部分。

圖片

不管你能不能看懂,它就是這張圖的右邊部分。到了這裏,非基礎研究、應用研究的同學就開始在聽天書了。讀這篇文章的這一部分,大家是爲了’學到‘知識,而不是爲了’被懂算法的同學咬文嚼字扣細節給自己聽,被秀一臉,留下自己一臉茫然‘。大家的目標是‘學習’爲首,‘準確’爲輔。那我就用不嗑細節的‘人話’跟大家講一講,什麼是自然語言處理大模型。雖然,這些內容就僅僅是’畢業生面試應用研究崗位必須完全答對‘的檔次,但是,‘知之爲知之,不知爲不知,是知也’,大家如果不懂,是應該看一看的。

 

1 編解碼與表示學習

什麼是自編碼器(autoencoder,encoder-decoder model)?通俗地說,用拍攝設備,錄製視頻,錄製成了 mp4 文件,就是採集並且 encode;你的手機視頻播放器播放這個視頻,就是 decode 視頻並且播放。做 encode-decode 的模型,就是編碼-解碼模型。很明顯,編碼模型和解碼模型是兩個模型,但是,他們是配對使用的。你不能編碼出一個.avi 文件,然後用只支持.mp4 的解碼器去解碼。

在深度學習領域裏,下面這個就是最簡單的編碼-解碼模型示意圖。f 函數是編碼器,把輸入 x 變成某個叫做 h 的東西,g 是解碼函數,把編碼出來的東西,解碼成輸出 r。

圖片

那麼,最簡單的編碼器,就是什麼都不幹:f(x)=x,h=x,r=g(f(x))=h。輸入‘Tom chase Jerry’,輸出就是‘Tom chase Jerry’。顯然,這樣的字編碼器不需要訓練,並且,也沒有任何用處。

如果,輸入‘Tom chase Jerry’,輸出是‘湯姆追逐傑瑞’,那麼這個自編碼器就完成了機器翻譯的任務。我們人類可以做翻譯,實際流程上,也跟這個差不多。那麼,我們人類是怎麼做到的呢?我們並不是以‘做翻譯’爲唯一的目標去學習語言的,我們會學習‘單詞’、‘語法’、‘語言所表達的常識’這些語言之下最基礎的‘特徵’的‘表示’。當我們學會了被表達的事物和它在不同語言中的表示之後,我們就能做翻譯這件事情了。我們仔細審視一下這個過程,我們至少做了兩件事情:

1 ) 學會被各種語言所表示的‘東西’,這裏我們稱之爲世界知識 (world knowledge),它包括事實性知識 (factual knowledge) 和常識 (commonsense)。其中包括,學會至少兩門語言裏表達世界知識的單詞和語法。

2)學會按別人的要求去執行翻譯這個任務。

那麼,這兩件事情的第一件,就是 GPT 的第二個單詞,Pre-train(預訓練)。我們就是要去學到‘Tom chase Jerry’這句話和其他無數句話在被拆解成世界性知識之後的‘表示’。

Transformer 就是一個專門用於自然語言處理的編碼-解碼器架構。編碼器-解碼器可以有很多不同的架構細節,就能得到不同的自編碼架構,Transformer 是此刻看起來效果最好的,能很好地學到自然語言背後的特徵,並且有足夠大的模型容量。所謂模型容量,是指,有一些模型參數過多,就反而學不到特徵,或者無法訓練了,無法用於表示特別複雜的東西。

 

2 GPT

GPT 全稱 Generative Pre-trained Transformer,前面講了編解碼,算是講了一點點 Transformer,也講了預訓練、Pre-trained。那麼,Generative 從何講起?

我接着說人話。前面講到了,編碼器-解碼器是兩個不同的模型,就像你看視頻,你的手機上並不需要視頻錄製、編輯軟件,只需要一個解碼-播放器一樣。訓練兩個模型太麻煩,我們希望就圍繞一個模型做研究,做訓練。我們能不能不做編碼,就圍繞解碼模型來達到一些目的呢?答案當然是可以的。

打個不嚴謹的比方。我現在想找人幫我畫一幅肖像畫。其實我並不懂怎麼畫畫。於是,我請人給我畫。我並不能從畫工技藝、藝術審美方面去評判他畫得好不好。但是,我是有能力去判斷我請的人畫出來的畫是不是令我滿意的。此時,我就是一個 decode-only 的模型。你會說,“你這個 decode-only 的模型必須要有一個懂 encode 的畫師才能工作啊“。是的,我不懂畫畫。確實需要一個畫師。

但是,你記得嗎,OpenAI 訓練 GPT3 的模型,就是給它海量的數據,讓它去訓練。那麼,畫師不教導我繪畫技巧,只是不停的給我畫肖像,並且,給我看肖像是否滿意,我指出哪些地方不滿意,他做出修改。這個事情幹了一千萬次,我是不是至少能學到‘當給我一幅沒畫好的我的肖像畫,我知道應該怎麼接着畫下一筆‘?我不是從拆解好的理論體系裏去學習的,我並不能叫出各種會畫技法的名字,但是,我就是會做上面這件事情了。

相當於,我聽到“GPT 是一個預訓練模”,我就知道下一個字一定是“型”字一樣。而因爲我只擅長接着前面做好的事情完成接下來的事情,所以,我會‘生成’這個工作方式,同時,我也只會‘生成’這個工作方式。這就是 Generative 的意思。

總結一下,Generative 是被訓練出來的模型的工作的方式,Transformer 是這個模型的架構,Pre-trained 是形容 Transformer 的,就是說訓練這個模型,預訓練是不可或缺的核心步驟。

 

3 巨量參數

有一個很重要的點,被訓練完成的我,是如何知道沒畫完的肖像畫的下一筆是應該怎麼畫的?就相當於你聽到“今天天氣很”之後,你是怎麼知道下一個詞是什麼的?顯然,你是靠猜測的。什麼東西來支撐你的猜測?是你被訓練了一百萬次的經驗。這些經驗構成了什麼?這些經驗被你潛意識地總結成了一些規律。有一些規律確定性很高,有一些規律確定性很低。“今天天氣很”後面接的字,確定性很低,“GPT 是一個預訓練模”後面接的字確定性很高。

那麼,你實際上就是學到了一個概率模型,這個概率模型其實是無數個場景的概率分佈組合而成的概率模型。預測“今天天氣很”的下一個詞,是一個概率分佈。“GPT 是一個預訓練模”的下一個詞是另一個概率分佈。所以,從頭學習機器學習、深度學習,就會知道,所有機器學習、深度學習模型都是概率模型,統計學是核心工具。

GPT3 的 paper講,OpenAI 做的 GPT3 有 1750 億參數。不管 paper 怎麼說,實際上是如何做到的。你只是自己想象一下,想要記住足夠全面的‘世界知識’,是不是至少要有足夠大的'模型體積(模型容量)',即足夠多的參數?更深入的研究還在繼續進行,此刻,按照 GPT3 的 paper 來說,當參數量達到 1750 億的時候,模型就能記住這個世界的‘世界知識’所需要的所有‘特徵’的‘表示’了。每個參數用 16 位的浮點數保存,體積是 320GBytes。這個世界的‘世界知識’,被這 320G 的數據表示了。

我們在對話聊天的時候,如果說了一些自己覺得是常識,對方卻不懂的時候,是不是對話就較難進行下去了?所以,爲什麼我們的模型需要這麼多參數?因爲它需要‘什麼都懂’。如果我說我用 32M 規模的數據就記住了這個世界的常識,你是不是會覺得‘這顯然不可能’?

 

4 GPT3 不等於 ChatGPT

前面已經講了 Generative、Pre-trained、Transformer 這些概念。我們接着講 ChatGPT。首先,GPT3 不等於 ChatGPT,GPT3 這個預訓練模型,是 ChatGPT 的基礎。回顧我們最開始講的‘人如何學會翻譯’至少需要兩個步驟,第一步就是訓練一個 GPT3 的預訓練模型。有了這個模型之後,我們還要接着做一些訓練,才能完成 ChatGPT。

我們首先來回顧一下 GPT1、GPT2。

GPT1 的 paper名字叫做,Improving Language Understanding by Generative Pre-Training,通過生成式預訓練提升模型對語言的理解能力,這就是我們前面講過的東西。但是,它還沒達到很好的效果。我們想在 decoder-only 的模型裏學到‘用語言呈現的世界知識’的'深層表示',初步證明這個方向有前途。

GPT2 的 paper名字叫做,Language Models are Unsupervised Multitask Learners。在這篇文章裏,找到了讓 GPT1 這個‘思想方法’達到很好的效果的技術手段,通過自監督學習。怎麼個自監督法呢?就是我們手裏有很多書籍、文章,我們通過給模型書籍的前 n 個字兒,讓它猜測第 n+1 個字兒是什麼,我們手裏有正確的第 n+1 個字兒,讓模型去不斷糾正自己。模型爲了達到更準確猜中第 n+1 個字兒的目標,就被迫‘學到’了潛在的‘世界知識’的表示。就像我們學到了語言的語法,記住了單詞,掌握了世界的常識。實際上,我們交給模型的任務,都是‘猜下一個詞’。但是計算‘56+21=’也是猜下一個詞。

所以,又可以把猜下一個詞分解爲很多種猜詞任務,數學計算就是其中一種。最後,證明了 GPT2 效果還不錯。多說一句,上面這麼搞,怎麼就是自監督了呢?是否是‘有監督’學習,本身這個概念比較模糊,並不是一個科學的定義,只是大家習慣這麼叫而已。我們約定俗成,把‘訓練數據是經過精巧地設計,並且準備過程對人力成本較高’的訓練,叫做有監督訓練,否則就是無監督。我們只是把前人努力寫的書做了一個調整給到模型,按照這個約定,應該屬於無監督學習。但是,好像,我們又其實是在用人類努力的成果在訓練它。所以,有人就開始稱這種情況爲‘自監督學習’。

接着,你就會想,深度學習是一門科學啊,怎麼能對概念的定義搞得這麼模糊不嚴謹?對,你說得沒錯,深度學習,在玩數學的人眼裏,就是充滿了不嚴謹,處在鄙視鏈的底端。但是,你擋不住深度學習應用的效果好呀。深度學習就是這麼一系列‘不嚴謹’,充滿了‘我不知道爲什麼,但是這麼做效果就好’的方法。科學家們在努力地解釋它爲什麼效果好,但是,這些研究遠遠追不上,找到‘效果更好,但是並不理解爲什麼效果好’的方法的步伐。對你自己的認知亦是如此,你有自我認知,那麼,你的自我認知是怎麼來的?“我是誰,我從哪裏來,我要到哪裏去?”

GPT3 的 paper名字叫做,Language Models are Few-Shot Learners。意思就是,在 GPT2 的思路的指導下,我們通過把參數增加到 1750 億,真地學到了‘世界知識’!學到了這些潛在的‘表示/特徵’之後,我們只需要再讓模型學一個任務的少量幾個 case,模型就能學進一步學到我們給的幾個 case 裏的潛在的'特徵',即這幾個 case 所表達的規律和邏輯。

但是,GPT3 掌握了知識,但是,它還不會幹活呀。比如,你給它輸入“給我寫一段簡介”,模型理解你確實說了“給我寫一段簡介”,但是,它此刻可以生成很多東西。比如生成一個“要簡介限制在 120 個字以內”。它是個生成模型,把你說的話續寫下去,也是一種生成啊!所以,我們還得教一個理解了我們的話模型,按照我們想要的方式去生成結果。就像,我們在進行一場對話。所以,就是 ChatGPT,chat+GPT。我們要進行聊天,本質上,就是讓模型‘要能聽懂我們的指令’。所以,OpenAI 接着又有一篇重磅論文Training language models to follow instructions with human feedback,它在 OpenAI 的官網上,是另一個名字Aligning language models to follow instructions

顧名思義,就是要通過一些‘問題-回答’對的訓練數據,讓模型能在收到“給我寫一段簡介”這樣的指令性的輸入的時候,真地去按照指令的要求去生成接下來的東西。OpenAI 的標題裏出現了一個詞'Alignling(對齊)',你可以不管它。但是,理解了這個詞,你才理解了‘制定對齊/指令微調’的核心技術。有興趣,你可以接着看這個自然段,也可以不看,直接跳到下下一個自然段。

‘指令對齊’,就讓掌握了知識的模型能按照我們想要的方式去生成更多的詞了。達到這個效果的方法,講起來,很硬核。爲了說人話,我就打個比方。現在,我們有一個房間,裏面有幾百本書就像垃圾一樣堆砌在一起。這就是預訓練已經把隱藏特徵學到了。我們應該怎麼去整理這些書籍呢?這個問題,取決於,我們後續要如何使用這些書籍。我們可以按門類,去排列書籍,每一類書籍一個書架。也可以按照書名去排列書籍,所有書籍分別根據書名被放在按 A-Z 排列的的書架裏。


所以,對齊,就是根據我們的目的,去整理模型學到了的知識。那麼,爲什麼我們不用整理、重構之類的詞,而用對齊呢?因爲,我們知道模型學到了知識,但是,我們能看到這些表示,就是 1750 億個參數,但是,人類看不懂它。就像,人類能看到自己的腦袋,但是腦袋裏的神經元是如何聯合在一起工作的,看不懂。

更具體的,‘1+1=2’這個知識,你知道它存儲在你大腦裏的具體哪個神經元上麼?你當然不能。所以,我們沒有細粒度的手段去整理書籍。有一個比較粗力度的手段,就是:按照我的需求,大概地把一些數據強行抓住首尾兩本書,把它們壓齊。你整理書籍,可以一本一本放。但是你沒法去拿其中一本的時候,你當然可以從一對兒書的兩端,用力壓,被按照我們想要的方式擠壓之後,書自己就變得更整齊了,對齊到了我們想要的結構。

我再打個比方,社會共識、常識,本身也是‘對齊’得來的。‘婚姻應該是自由戀愛的結果’,這個常識,不是從來如此的。是理性主義崛起之後,緊接着浪漫主義在 1900 年左右崛起,在 20 世紀纔出現的。浪漫主義藉由‘羅密歐與朱麗葉’之類的文藝作品廣泛傳播、得到認可,進而才把我們的常識‘對齊’成了這麼一個結果。說得更遠一點,習慣了中國文化的人在美國必然會被‘文化衝突’所困擾,也是因爲,中國和美國其實都通過媒體把自己的常識對齊成了不同的‘形狀’。‘對齊’無時無刻不在這個世界裏發生。

實際上,模型每次只能生成一個詞兒,那麼,把問題和回答都當成字符串連接起來,結構是:輸入[問題裏所有的詞][回答的前n個詞兒],生成回答的第 N+1 個詞兒。如果進行第二輪對話。輸入就變成了:輸入[第一個問題裏所有的詞][第一個回答的所有詞][第二個問題的所有詞][第二個問題的回答的前n個詞],輸出[第二個回答的第 N+1 個詞]。至於模型如何知道哪一段是問題,哪一段是問題,這裏不展開描述。

實際上,ChatGPT 的訓練過程,可以看下面這張圖,我不做解釋,能不能看懂,隨緣(進一步閱讀另一篇比較說人話的文章,看這裏):

圖片

至此,你知道了 GPT3 是 ChatGPT 這個‘技驚四座’的模型的基礎。

 

5 RLHF-強化學習

我們都知道,ChatGPT 至少經歷了預訓練、指令對齊、你可以理解爲,一個大學生上一門課,指令對齊就是老師在課堂上給我們上課。但是,我們學習不能總是耗着一個老師一直給我們講啊,成本太高了。就是說,積累大量指令對齊的 QA(問題-回答)訓練數據,成本很高。後續更大量的學習,還得學生自己在脫離老師的強幫助,自行學習。一則效果更好,二則成本更低。

所以,我們用完成了指令對齊的模型,針對大量問題作出回答。並且,每個問題都給出 10 個回答。由人類去標註,所有回答裏,哪些回答更好。用這個標註的 QA 對去接着‘對齊’模型,讓模型把知識對齊到更符合我們的要求。這個時候,人類需要做的,就僅僅是提問題+標註,之前是要給出問題且給出答案。成本降低了一些,速度也變快了一些。這裏,強化學習實際上是訓練一個獎勵模型(reward model)作爲新的老師,來對模型的回答進行‘批改’,讓模型愈發把知識‘對齊’到我們想要的樣子。

上面簡單的強化學習講解,其實有一個很嚴重的問題。如果對於同一個 Q,老師一會兒說 A1 好,一會兒說 A2 好,就變成了學生的腦子在來回拉扯。所以,強化學習,在細節上,還有更多不同的細節。爲了講人話,我這裏略過這些細節。

 

6 LoRA 與 instruction fine-tuning

大模型太大,訓練成本太高,人們總在尋找更低成本近似的方法。最近 LoRA 也是跟 CV(計算機圖像)領域的 Stable Diffusion 一起大火。這裏也用人話講一下 LoRA fine-tuning(不講 Stable Diffusion)。爲了講清楚,會有一點點不講人話的時候。

LoRA paper的標題是 LoRA: Low-Rank Adaptation of Large Language Models。其實,這個方法,屬於‘遷移學習’這個領域。LoRA 達到的效果是:在有一個已經訓練好的大模型之後,再訓練一個依賴於大模型的小模型,組合在一起工作,達到用較低的成本實現對大模型的微調。結果稍稍裂化於對大模型進行了微調,但是微調成本更低。低在哪兒呢?接下來就得先講明白 LoRA 是如何工作的。

什麼是 low rank?低排名?low rank 是個數學概念,rank 是指矩陣的秩,low rank Adaptation 就是說,用秩較低的矩陣替代之前秩較高的矩陣。我還是稍微說一下什麼是矩陣的秩,因爲會被多次用到。

我們有一個 3x4 的矩陣如下:

[1,2,3,4]

[2,4,6,8]

[3,6,8,12]

顯然,要存儲它,我們需要用到 12 個數字。但是,這個我特別構造的矩陣是有一個特點的,第二行可以由[1,2,3,4]乘以 2 得到,第三行可以由[1,2,3,4]乘以 3 得到。那麼,實際上,我就可以用[1,2,3,4]裏的 4 個數字,加上 1、2、3 這 3 個係數,總共 7 個數字就可以表示這個矩陣。我需要的數字數量從 12 個降低到了 7 個。原始矩陣叫做 W,分解之後變成了需要的數字更少的兩個矩陣 B 和 A,公式就是 W=B 乘以 A,記爲 W=BA。

在我這個例子中,是無損失地進行了分解。數學上,有辦法進行精度有損的分解,W 可以轉化爲更少的數字構成 B 和 A。這就是說人話版本的矩陣的秩分解。

這裏,我們補充介紹一下深度網絡裏的參數是怎麼組織的:

圖片

在這個圖中,我們看到了一個網狀結構。其中‘O 單向箭頭指向 P’的意思就是‘O 參與計算,得到 P’。我們就看到了 z1、z2、z3 很多層,z1 這一層是一個 W1 矩陣和 B1 這個偏置向量。z1、z2、z3,越往右,就越深,就是深度網絡。所謂參數,就是這些密密麻麻、層層疊疊的計算網絡裏的數字。這個圖只是一個示意,真實的網絡結構,各有各的不同。以及,必須在每個網絡節點上選擇合適的激活函數,後面不會用到,這裏不做展開。好了,我們接着講 LoRA。

理解了低秩分解,LoRA 的 paper 的意思就是:

假設我們的模型深度爲 l(layer 的首字母),每一層的參數爲矩陣 W。並且,我們之前就已經訓練好了一個模型,這個模型的參數凍結住,永遠不改變了,記爲 W0。那麼,我們訓練模型就是在不斷改變下面這個公式的 ΔW 這個模型參數變更的增量。

圖片

這個增量可以通過低秩分解,分解爲:

圖片

訓練主要過程依然和其他所有 fine-tuning 一樣,只是多了一個細節:把訓練後的參數變更保存到了 BA 中,而不是直接更新到 W0 裏去。

這裏,稍微講解一下訓練一個 Transformer 模型需要的顯存量。根據這篇文章的計算,訓練每 2 個字節大小個 16 位浮點數表示的參數,需要 20 個字節的顯存。那麼,常見的 70 億參數的模型,大小是 14GBytes,需要的顯存至少是 140GBytes,如果要提高並行度,就需要更多顯存。當前比較強的A100 顯卡,單卡有 40G 顯存和 80G 顯存兩個版本,單卡無法進行訓練,必須要多卡同時進行。因爲如果顯存不夠的話,是根本無法開始訓練的。顯存容量,決定了模型能不能開始訓練。GPU 算力,決定了要訓練多久。

那麼,我們可以得到以下幾個結論:

1)模型訓練好之後,做線上推理服務,計算量,並沒有減少,反而可能有所微微增加。

2)低秩矩陣的大小是可以調整的,可以是非常小。低秩矩陣越小,丟失的精度越多。

3)訓練過程,兩個核心成本是顯存使用和 GPU 運算量。LoRA 方法下,低秩矩陣 BA 是可訓練參數。顯存的使用,等於 1 倍模型參數的體積加上 10 倍可訓練參數的體積。GPU 計算量可以根據可訓練參數的數量決定,如果我們把 BA 設定得比較小,訓練量可以比全參數模型訓練降低成千上萬倍

4)微調後的模型和原始模型的參數不能相差過大,不然用一個低秩矩陣 BA 所替代的 ΔW 會丟失大量精度,推理效果特別差。

5)LoRA 是一種模型訓練的思想方法。它可以適配到很多類型的模型上。GPT 模型,或者 Stable Diffusion 的模型,都可以。訓練時節省的顯存量,要根據具體模型結構來計算。

這些特性,說一個更具體的 case。stable diffusion 是一個開源的結合了 Transformer 的文字生成圖片的 CV(計算機視覺)模型。它的參數量是 1.2 億多,大小 469M。假設,如果沒有 LoRA 的方法,可能就需要至少 4G 的顯存。家庭遊戲顯卡顯存一般在 8G 左右,因爲顯存不夠,訓練的並行度很低,即使是民用 GPU 也可能在閒等,在同一張顯卡上,都需要更長的訓練時間。LoRA 讓顯存需求降低到 1G 左右,並行度提高了 8 倍。訓練的總結算量還降低上百倍。訓練成本大大降低。。同時,訓練出來的 LoRA 小模型,體積就 32M 左右,社區裏就流行起了把自己 fine-tune 出來的 stable diffusion 下的 LoRA 模型互相傳播。

回顧一下 LoRA 與 GPT,我們可以說,LoRA 方式的 fine tuning 的對於 GPT 的價值,並不太大。只有在很小的場景,有 LoRA 的發揮空間。

圖片

現在,你應該能理解 LoRA 論文原文中的這種圖了。注意,這裏,LoRA 是對原深度神經網絡的每一層都設計了對應 BA 矩陣。

綜上,如果我們手裏已經有一個強大的模型,我們僅僅像微調它的表現,而不是想要教會它很多新的東西,使用 LoRA 方法,成本是很低的。比如,文生圖的時候,我們不調整生成出來的圖片的框架、構圖,我們只想調整圖片的風格(真實系、漫畫風)。或者,我們讓一個強大的模型去做一些簡單的任務,把簡單的任務做得特別好,也可以用 LoRA。

 

7 常見的開源類 GPT3 模型

Meta 開源的LLaMA是現在市面上預訓練做得最好的開源的架構類似 GPT3 的模型。它提供了 70 億、130 億、650 億 3 個參數規格的模型。特別說明一下,它只做了預訓練。它支持多種語言。英文效果最佳,中文和其他語言的效果一樣,比英語差一些。

Vicuna-7b 是用 70k 指令對 LLaMA 進行了指令微調,它微調的 70 億參數的 LLaMA 版本。是當前開源的做完了指令微調的模型裏,效果最好的。

chatglm-6b是清華大學清華認知工程實驗室基於自己設計的預訓練模型架構General Language Model微調而來的聊天模型。參數規模是 62 億。GLM 模型是基於 Transformer 架構,更像 Transformer 的 Encoder 部份-BERT。預訓練用了 1T token 的中英文語料。沒說具體用了多少語料進行指令微調。中文聊天的效果,是開源模型裏最好的。但是 GLM 模型架構天花板有沒有 GPT3 那麼高,需要有人去研究,清華大學沒有對外公開。glm 預訓練模型有一個 130 億的版本,沒有對外開源。

bloom-176b是參數最多的開源預訓練模型,模型架構和 GPT3 很相似,是學術界很多人一起竄起來的一個預訓練模型。它只做了預訓練,做 QA 任務,效果較差。

alpaca-lora-7b是依附在 LLaMA-7b 上的模型。這個模型效果一般,但是它開源了 52k 條挺有價值的指令微調訓練數據,它是用了一個用 ChatGPT 作爲老師來生成更多訓練數據的方法(paper 的名字是:SELF-INSTRUCT: Aligning Language Model with Self Generated Instructions)來訓練的模型。同時,alpaca 是一個 LoRA 方法下的模型。self-instruct 這個思路,非常有趣,其實大家都會自然而然有這種想法:既然有了 ChatGPT 這個效果特別好的模型,爲什麼我不直接只蒐集指令問題,然後用 ChatGPT 給我生成指令 QA 裏的 Answer,並且生成更多類似的 QA 對呢?這個想法是很好的,我們也在用。但是,文章裏也說了,會出現‘對某些垂直領域的問題過擬合,對其他領域的問題欠擬合’的問題,這裏不展開細節。

 

8 建議入門路徑

計算機大二課程:

吳恩達<斯坦福 CS229 機器學習>課程

<斯坦福 CS224n 自然語言處理>課程

<伯克利 CS285 | 深度強化學習>課程

新手友好的入門路徑:李宏毅機器學習系列Hung-yi Lee

對截止 2017 年的理論研究最全面、深入的總結:

大概學懂前面的內容之後,看深度學習二號人物 bengio 寫的書,大家親切地叫它‘花書’。

《深度學習 》(豆瓣)

PyTorch 的 API 極度友好,可以通過下面這本書來數學。如果從這本書上手,你會不知道自己寫的簡短的代碼在幹什麼。此書由亞馬遜前首席科學家李沐所著,寫得不錯。這本書有很多個版本,最新的版本是 2023 年出的,纔是以 PyTorch 爲例子。

動手學深度學習(PyTorch 版) (豆瓣)

如果過程中有很多概念理解半天都理解不了,特別是統計學的概念,在碰到的時候,就可以去 B 站找解釋得比較好的視頻,我隨便列舉一下:

十分鐘搞定最大似然估計

【概率論】貝葉斯公式與後驗概率

極大似然估計/最大後驗估計—通過拋硬幣例子理解

「一個模型」教你搞定貝葉斯和全概率公式

“損失函數”是如何設計出來的?直觀理解“最小二乘法”和“極大似然估計法”

“交叉熵”如何做損失函數?打包理解“信息量”、“比特”、“熵”、“KL 散度”、“交叉熵”

重新理解線性迴歸 - 2 - 廣義線性模型:sigmoid 函數到底是怎麼來的

 

作者:cheaterlin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章