小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

用人話詳解語言大模型

 SNSJXQ 2023-05-16 發(fā)布于江蘇

作者:cheaterlin,CSIG后臺開發(fā)工程師| 導(dǎo)語“AI的iphone時刻到來了”。非算法崗位的研發(fā)同學(xué)迫學(xué)習(xí)AI,產(chǎn)品崗位的同學(xué)希望了解AI。但是,很多自媒體文章要么太嚴謹、科學(xué),讓非科班出身的同學(xué)讀不懂;要么,寫成了科幻文章,很多結(jié)論都沒有充分的邏輯支撐,是'滑坡推理’的產(chǎn)物。這篇文章從底層講起,卻不引入太多概念,特別是數(shù)學(xué)概念,讓所有人都能對大模型的核心概念、核心問題建立認知。文章末尾也為需要嚴肅全面地學(xué)習(xí)深度學(xué)習(xí)的人給出了建議。 本來為了另一件事情,我被約了個稿。目標稿件有很多刪改。這里干脆就把完整版放出來。

關(guān)于以chatGPT為代表的LLM,介紹它的B站視頻、文章,已經(jīng)很多。算法部分,約定俗成地,還是先來一段慣口。大家雖然看不懂,這里還是寫一下:當(dāng)前我們說的LLM,一般代指以chatGPT為代表的基于Generative Pre-trained Transformer架構(gòu)的自然語言處理神經(jīng)網(wǎng)絡(luò)模型。顧名思義,它是個以預(yù)訓(xùn)練技術(shù)為核心的模型,是個生成模型。同時它是Transformer這個編碼-解碼模型的解碼部分。

內(nèi)容圖片

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

1 編解碼與表示學(xué)習(xí)

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

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

內(nèi)容圖片

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

如果,輸入'Tom chase Jerry’,輸出是'湯姆追逐杰瑞’,那么這個自編碼器就完成了機器翻譯的任務(wù)。我們?nèi)祟惪梢宰龇g,實際流程上,也跟這個差不多。那么,我們?nèi)祟愂窃趺醋龅降哪??我們并不是?做翻譯’為唯一的目標去學(xué)習(xí)語言的,我們會學(xué)習(xí)'單詞’、'語法’、'語言所表達的常識’這些語言之下最基礎(chǔ)的'特征’的'表示’。當(dāng)我們學(xué)會了被表達的事物和它在不同語言中的表示之后,我們就能做翻譯這件事情了。我們仔細審視一下這個過程,我們至少做了兩件事情:

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

2)學(xué)會按別人的要求去執(zhí)行翻譯這個任務(wù)。

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

Transformer就是一個專門用于自然語言處理的編碼-解碼器架構(gòu)。編碼器-解碼器可以有很多不同的架構(gòu)細節(jié),就能得到不同的自編碼架構(gòu),Transformer是此刻看起來效果最好的,能很好地學(xué)到自然語言背后的特征,并且有足夠大的模型容量。所謂模型容量,是指,有一些模型參數(shù)過多,就反而學(xué)不到特征,或者無法訓(xùn)練了,無法用于表示特別復(fù)雜的東西。

2 GPT

GPT全稱Generative Pre-trained Transformer,前面講了編解碼,算是講了一點點Transformer,也講了預(yù)訓(xùn)練、Pre-trained。那么,Generative從何講起?

我接著說人話。前面講到了,編碼器-解碼器是兩個不同的模型,就像你看視頻,你的手機上并不需要視頻錄制、編輯軟件,只需要一個解碼-播放器一樣。訓(xùn)練兩個模型太麻煩,我們希望就圍繞一個模型做研究,做訓(xùn)練。我們能不能不做編碼,就圍繞解碼模型來達到一些目的呢?答案當(dāng)然是可以的。打個不嚴謹?shù)谋确?。我現(xiàn)在想找人幫我畫一幅肖像畫。其實我并不懂怎么畫畫。于是,我請人給我畫。我并不能從畫工技藝、藝術(shù)審美方面去評判他畫得好不好。但是,我是有能力去判斷我請的人畫出來的畫是不是令我滿意的。此時,我就是一個decode-only的模型。

你會說,“你這個decode-only的模型必須要有一個懂encode的畫師才能工作啊“。是的,我不懂畫畫。確實需要一個畫師。但是,你記得嗎,OpenAI訓(xùn)練GPT3的模型,就是給它海量的數(shù)據(jù),讓它去訓(xùn)練。那么,畫師不教導(dǎo)我繪畫技巧,只是不停的給我畫肖像,并且,給我看肖像是否滿意,我指出哪些地方不滿意,他做出修改。這個事情干了一千萬次,我是不是至少能學(xué)到'當(dāng)給我一副沒畫好的我的肖像畫,我知道應(yīng)該怎么接著畫下一筆'?我不是從拆解好的理論體系里去學(xué)習(xí)的,我并不能叫出各種會畫技法的名字,但是,我就是會做上面這件事情了。

相當(dāng)于,我聽到“GPT是一個預(yù)訓(xùn)練模”,我就知道下一個字一定是“型”字一樣。而因為我只擅長接著前面做好的事情完成接下來的事情,所以,我會'生成’這個工作方式,同時,我也只會'生成’這個工作方式。這就是Generative的意思。

總結(jié)一下,Generative是被訓(xùn)練出來的模型的工作的方式,Transformer是這個模型的架構(gòu),Pre-trained是形容Transformer的,就是說訓(xùn)練這個模型,預(yù)訓(xùn)練是不可或缺的核心步驟。

3 巨量參數(shù)

有一個很重要的點,被訓(xùn)練完成的我,是如何知道沒畫完的肖像畫的下一筆是應(yīng)該怎么畫的?就相當(dāng)于你聽到“今天天氣很”之后,你是怎么知道下一個詞是什么的?顯然,你是靠猜測的。什么東西來支撐你的猜測?是你被訓(xùn)練了一百萬次的經(jīng)驗。這些經(jīng)驗構(gòu)成了什么?這些經(jīng)驗被你潛意識地總結(jié)成了一些規(guī)律。有一些規(guī)律確定性很高,有一些規(guī)律確定性很低?!敖裉焯鞖夂堋焙竺娼拥淖?,確定性很低,“GPT是一個預(yù)訓(xùn)練?!焙竺娼拥淖执_定性很高。那么,你實際上就是學(xué)到了一個概率模型,這個概率模型其實是無數(shù)個場景的概率分布組合而成的概率模型。預(yù)測“今天天氣很”的下一個詞,是一個概率分布?!癎PT是一個預(yù)訓(xùn)練模”的下一個詞是另一個概率分布。所以,從頭學(xué)習(xí)機器學(xué)習(xí)、深度學(xué)習(xí),就會知道,所有機器學(xué)習(xí)、深度學(xué)習(xí)模型都是概率模型,統(tǒng)計學(xué)是核心工具。

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

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

4 GPT3不等于chatGPT

前面已經(jīng)講了Generative、Pre-trained、Transformer這些概念。我們接著講chatGPT。首先,GPT3不等于chatGPT,GPT3這個預(yù)訓(xùn)練模型,是chatGPT的基礎(chǔ)?;仡櫸覀冏铋_始講的'人如何學(xué)會翻譯’至少需要兩個步驟,第一步就是訓(xùn)練一個GPT3的預(yù)訓(xùn)練模型。有了這個模型之后,我們還要接著做一些訓(xùn)練,才能完成chatGPT。

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

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

GPT2的paper名字叫做,Language Models are Unsupervised Multitask Learners。在這篇文章里,找到了讓GPT1這個'思想方法’達到很好的效果的技術(shù)手段,通過自監(jiān)督學(xué)習(xí)。怎么個自監(jiān)督法呢?就是我們手里有很多書籍、文章,我們通過給模型書籍的前n個字兒,讓它猜測第n+1個字兒是什么,我們手里有正確的第n+1個字兒,讓模型去不斷糾正自己。模型為了達到更準確猜中第n+1個字兒的目標,就被迫'學(xué)到’了潛在的'世界知識’的表示。就像我們學(xué)到了語言的語法,記住了單詞,掌握了世界的常識。

實際上,我們交給模型的任務(wù),都是'猜下一個詞’。但是計算'56+21=’也是猜下一個詞。所以,又可以把猜下一個詞分解為很多種猜詞任務(wù),數(shù)學(xué)計算就是其中一種。最后,證明了GPT2效果還不錯。多說一句,上面這么搞,怎么就是自監(jiān)督了呢?是否是'有監(jiān)督’學(xué)習(xí),本身這個概念比較模糊,并不是一個科學(xué)的定義,只是大家習(xí)慣這么叫而已。我們約定俗成,把'訓(xùn)練數(shù)據(jù)是經(jīng)過精巧地設(shè)計,并且準備過程對人力成本較高’的訓(xùn)練,叫做有監(jiān)督訓(xùn)練,否則就是無監(jiān)督。我們只是把前人努力寫的書做了一個調(diào)整給到模型,按照這個約定,應(yīng)該屬于無監(jiān)督學(xué)習(xí)。但是,好像,我們又其實是在用人類努力的成果在訓(xùn)練它。所以,有人就開始稱這種情況為'自監(jiān)督學(xué)習(xí)’。

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

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

但是,GPT3掌握了知識,但是,它還不會干活呀。比如,你給它輸入“給我寫一段簡介”,模型理解你確實說了“給我寫一段簡介”,但是,它此刻可以生成很多東西。比如生成一個“要簡介限制在120個字以內(nèi)”。它是個生成模型,把你說的話續(xù)寫下去,也是一種生成??!所以,我們還得教一個理解了我們的話模型,按照我們想要的方式去生成結(jié)果。就像,我們在進行一場對話。所以,就是chatGPT,chat+GPT。我們要進行聊天,本質(zhì)上,就是讓模型'要能聽懂我們的指令’。

所以,OpenAI接著又有一篇重磅論文Training language models to follow instructions with human feedback,它在OpenAI的官網(wǎng)上,是另一個名字Aligning language models to follow instructions。顧名思義,就是要通過一些'問題-回答’對的訓(xùn)練數(shù)據(jù),讓模型能在收到“給我寫一段簡介”這樣的指令性的輸入的時候,真地去按照指令的要求去生成接下來的東西。OpenAI的標題里出現(xiàn)了一個詞'Alignling(對齊)',你可以不管它。但是,理解了這個詞,你才理解了'制定對齊/指令微調(diào)’的核心技術(shù)。有興趣,你可以接著看這個自然段,也可以不看,直接跳到下下一個自然段。

'指令對齊’,就讓掌握了知識的模型能按照我們想要的方式去生成更多的詞了。達到這個效果的方法,講起來,很硬核。為了說人話,我就打個比方?,F(xiàn)在,我們有一個房間,里面有幾百本書就像垃圾一樣堆砌在一起。這就是預(yù)訓(xùn)練已經(jīng)把隱藏特征學(xué)到了。我們應(yīng)該怎么去整理這些書籍呢?這個問題,取決于,我們后續(xù)要如何使用這些書籍。我們可以按門類,去排列書籍,每一類書籍一個書架。

也可以按照書名去排列書籍,所有書籍分別根據(jù)書名被放在按A-Z排列的的書架里。所以,對齊,就是根據(jù)我們的目的,去整理模型學(xué)到了的知識。那么,為什么我們不用整理、重構(gòu)之類的詞,而用對齊呢?因為,我們知道模型學(xué)到了知識,但是,我們能看到這些表示,就是1750億個參數(shù),但是,人類看不懂它。就像,人類能看到自己的腦袋,但是腦袋里的神經(jīng)元是如何聯(lián)合在一起工作的,看不懂。

更具體的,'1+1=2’這個知識,你知道它存儲在你大腦里的具體哪個神經(jīng)元上么?你當(dāng)然不能。所以,我們沒有細粒度的手段去整理書籍。有一個比較粗力度的手段,就是:按照我的需求,大概地把一些數(shù)據(jù)強行抓住首尾兩本書,把它們壓齊。你整理書籍,可以一本一本放。但是你沒法去拿其中一本的時候,你當(dāng)然可以從一對兒書的兩端,用力壓,被按照我們想要的方式擠壓之后,書自己就變得更整齊了,對齊到了我們想要的結(jié)構(gòu)。我再打個比方,社會共識、常識,本身也是'對齊’得來的。

'婚姻應(yīng)該是自由戀愛的結(jié)果’,這個常識,不是從來如此的。是理性主義崛起之后,緊接著浪漫主義在1900年左右崛起,在20世紀才出現(xiàn)的。浪漫主義借由'羅密歐與朱麗葉’之類的文藝作品廣泛傳播、得到認可,進而才把我們的常識'對齊’成了這么一個結(jié)果。說得更遠一點,習(xí)慣了中國文化的人在美國必然會被'文化沖突’所困擾,也是因為,中國和美國其實都通過媒體把自己的常識對齊成了不同的'形狀’。'對齊’無時無刻不在這個世界里發(fā)生。

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

實際上,chatGPT的訓(xùn)練過程,可以看下面這張圖,我不做解釋,能不能看懂,隨緣(Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.[1]

內(nèi)容圖片

至此,你知道了GPT3是chatGPT這個'技驚四座’的模型的基礎(chǔ)。

5 RLHF-強化學(xué)習(xí)

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

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

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

6 LoRA與instruction fine-tuning

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

LoRA paper的標題是LoRA: Low-Rank Adaptation of Large Language Models。其實,這個方法,屬于'遷移學(xué)習(xí)’這個領(lǐng)域。LoRA達到的效果是:在有一個已經(jīng)訓(xùn)練好的大模型之后,再訓(xùn)練一個依賴于大模型的小模型,組合在一起工作,達到用較低的成本實現(xiàn)對大模型的微調(diào)。結(jié)果稍稍裂化于對大模型進行了微調(diào),但是微調(diào)成本更低。低在哪兒呢?接下來就得先講明白LoRA是如何工作的。

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

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

[1,2,3,4]

[2,4,6,8]

[3,6,8,12]

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

在我這個例子中,是無損失地進行了分解。數(shù)學(xué)上,有辦法進行精度有損的分解,W可以轉(zhuǎn)化為更少的數(shù)字構(gòu)成B和A。這就是說人話版本的矩陣的秩分解。

這里,我們補充介紹一下深度網(wǎng)絡(luò)里的參數(shù)是怎么組織的:

內(nèi)容圖片

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

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

假設(shè)我們的模型深度為l(layer的首字母),每一層的參數(shù)為矩陣W。并且,我們之前就已經(jīng)訓(xùn)練好了一個模型,這個模型的參數(shù)凍結(jié)住,永遠不改變了,記為W0。那么,我們訓(xùn)練模型就是在不斷改變下面這個公式的ΔW這個模型參數(shù)變更的增量。

內(nèi)容圖片

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

內(nèi)容圖片

訓(xùn)練主要過程依然和其他所有fine-tuning一樣,只是多了一個細節(jié):把訓(xùn)練后的參數(shù)變更保存到了BA中,而不是直接更新到W0里去。

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

那么,我們可以得到以下幾個結(jié)論:

1)模型訓(xùn)練好之后,做線上推理服務(wù),計算量,并沒有減少,反而可能有所微微增加。

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

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

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

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

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

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

內(nèi)容圖片

現(xiàn)在,你應(yīng)該能理解LoRA論文原文中的這種圖了。注意,這里,LoRA是對原深度神經(jīng)網(wǎng)絡(luò)的每一層都設(shè)計了對應(yīng)BA矩陣。

綜上,如果我們手里已經(jīng)有一個強大的模型,我們僅僅像微調(diào)它的表現(xiàn),而不是想要教會它很多新的東西,使用LoRA方法,成本是很低的。比如,文生圖的時候,我們不調(diào)整生成出來的圖片的框架、構(gòu)圖,我們只想調(diào)整圖片的風(fēng)格(真實系、漫畫風(fēng))?;蛘撸覀冏屢粋€強大的模型去做一些簡單的任務(wù),把簡單的任務(wù)做得特別好,也可以用LoRA。

7 常見的開源類GPT3模型

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

Vicuna-7b是用70k指令對LLaMA進行了指令微調(diào),它微調(diào)的70億參數(shù)的LLaMA版本。是當(dāng)前開源的做完了指令微調(diào)的模型里,效果最好的。

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

bloom-176b是參數(shù)最多的開源預(yù)訓(xùn)練模型,模型架構(gòu)和GPT3很相似,是學(xué)術(shù)界很多人一起竄起來的一個預(yù)訓(xùn)練模型。它只做了預(yù)訓(xùn)練,做QA任務(wù),效果較差。

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

8 建議入門路徑

計算機大二課程:

https://www.bilibili.com/video/BV1JE411w7Ub 吳恩達<斯坦福 CS229 機器學(xué)習(xí)>課程

https://www.bilibili.com/video/BV1SL411U7SF <斯坦福 CS224n 自然語言處理>課程

https://www.bilibili.com/video/BV12341167kL <伯克利 CS285 | 深度強化學(xué)習(xí)>課程

新手友好的入門路徑:李宏毅機器學(xué)習(xí)系列Hung-yi Lee。

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

大概學(xué)懂前面的內(nèi)容之后,看深度學(xué)習(xí)二號人物bengio寫的書,大家親切地叫它'花書’。

深度學(xué)習(xí) (豆瓣)

內(nèi)容圖片

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

動手學(xué)深度學(xué)習(xí)(PyTorch版) (豆瓣)

內(nèi)容圖片

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

十分鐘搞定最大似然估計 https://www.bilibili.com/video/BV1Hb4y1m7rE

【概率論】貝葉斯公式與后驗概率 https://www.bilibili.com/video/BV1mY411h7ps

極大似然估計/最大后驗估計—通過拋硬幣例子理解 https://www.bilibili.com/video/BV1GZ4y1m7gv

「一個模型」教你搞定貝葉斯和全概率公式 https://www.bilibili.com/video/BV1a4411B7B4

“損失函數(shù)”是如何設(shè)計出來的?直觀理解“最小二乘法”和“極大似然估計法” https://www.bilibili.com/video/BV1Y64y1Q7hi/

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

https://www.bilibili.com/video/BV15V411W7VB

重新理解線性回歸 - 2 - 廣義線性模型:sigmoid函數(shù)到底是怎么來的 https://www.bilibili.com/video/BV13X4y1R7im

參考文章:[1]Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多