久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    用人話詳解語言大模型

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

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

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

    內(nèi)容圖片

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

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

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

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

    內(nèi)容圖片

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

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

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

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

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

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

    2 GPT

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

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

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

    相當(dāng)于,我聽到“GPT是一個(gè)預(yù)訓(xùn)練模”,我就知道下一個(gè)字一定是“型”字一樣。而因?yàn)槲抑簧瞄L(zhǎng)接著前面做好的事情完成接下來的事情,所以,我會(huì)'生成’這個(gè)工作方式,同時(shí),我也只會(huì)'生成’這個(gè)工作方式。這就是Generative的意思。

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

    3 巨量參數(shù)

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

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

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

    4 GPT3不等于chatGPT

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

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

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

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

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

    接著,你就會(huì)想,深度學(xué)習(xí)是一門科學(xué)啊,怎么能對(duì)概念的定義搞得這么模糊不嚴(yán)謹(jǐn)?對(duì),你說得沒錯(cuò),深度學(xué)習(xí),在玩數(shù)學(xué)的人眼里,就是充滿了不嚴(yán)謹(jǐn),處在鄙視鏈的底端。但是,你擋不住深度學(xué)習(xí)應(yīng)用的效果好呀。深度學(xué)習(xí)就是這么一系列'不嚴(yán)謹(jǐn)’,充滿了'我不知道為什么,但是這么做效果就好’的方法。科學(xué)家們?cè)谂Φ亟忉屗鼮槭裁葱Ч茫牵@些研究遠(yuǎn)遠(yuǎn)追不上,找到'效果更好,但是并不理解為什么效果好’的方法的步伐。對(duì)你自己的認(rèn)知亦是如此,你有自我認(rèn)知,那么,你的自我認(rèn)知是怎么來的?“我是誰,我從哪里來,我要到哪里去?”

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

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

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

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

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

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

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

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

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

    內(nèi)容圖片

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

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

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

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

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

    6 LoRA與instruction fine-tuning

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

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

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

    我們有一個(gè)3x4的矩陣如下:

    [1,2,3,4]

    [2,4,6,8]

    [3,6,8,12]

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

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

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

    內(nèi)容圖片

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

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

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

    內(nèi)容圖片

    這個(gè)增量可以通過低秩分解,分解為:

    內(nèi)容圖片

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

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

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

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

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

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

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

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

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

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

    內(nèi)容圖片

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

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

    7 常見的開源類GPT3模型

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

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

    chatglm-6b是清華大學(xué)清華認(rèn)知工程實(shí)驗(yàn)室基于自己設(shè)計(jì)的預(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的中英文語料。沒說具體用了多少語料進(jìn)行指令微調(diào)。中文聊天的效果,是開源模型里最好的。但是GLM模型架構(gòu)天花板有沒有GPT3那么高,需要有人去研究,清華大學(xué)沒有對(duì)外公開。glm預(yù)訓(xùn)練模型有一個(gè)130億的版本,沒有對(duì)外開源。

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

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

    8 建議入門路徑

    計(jì)算機(jī)大二課程:

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

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

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

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

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

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

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

    內(nèi)容圖片

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

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

    內(nèi)容圖片

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

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

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

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

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

    “損失函數(shù)”是如何設(shè)計(jì)出來的?直觀理解“最小二乘法”和“極大似然估計(jì)法” 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.

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

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶 評(píng)論公約

      類似文章 更多

      主站蜘蛛池模板: 国产精品福利在线观看无码卡一| 日韩AV高清在线看片| 欧美孕妇乳喷奶水在线观看| 国产高潮抽搐喷水高清| 国产丰满美女A级毛片| 国产在线午夜不卡精品影院 | 国产成人午夜福利在线播放| 精品中文人妻中文字幕| 国产精品福利在线观看无码卡一| 久久久无码精品亚洲日韩按摩| 国产网友愉拍精品视频手机 | 国产欧美日韩另类精彩视频| 在线国产精品中文字幕| 青青草原国产AV福利网站| 国产精品国产三级国产AV中文| 亚洲综合精品成人| 成人免费乱码大片a毛片| 日日摸夜夜添夜夜添无| 亚洲小说乱欧美另类| AV极品无码专区亚洲AV| 亚洲av无码之国产精品网址蜜芽| 国内永久福利在线视频图片| 日本理伦片午夜理伦片| 亚洲成AV人片在线观高清| 麻豆国产va免费精品高清在线| 国内精品无码一区二区三区| 精品偷拍一区二区三区| 日韩内射美女人妻一区二区三区| 亚洲 制服 丝袜 无码| 亚洲精品亚洲人成在线观看| 久久精品国产国产精品四凭| 国产一区二区高清不卡| 99久久久精品免费观看国产| AV最新高清无码专区| 日本深夜福利在线观看| 97无码免费人妻超级碰碰夜夜| 国产精品午夜福利91| 精品亚洲国产成人av| 亚洲毛片不卡AV在线播放一区 | 国产精品中文av专线| 国模吧无码一区二区三区|