大模型到底是什么?小白也能看懂的科普貼
大模型發(fā)展到現(xiàn)在已經(jīng)有一段時(shí)間了,不少人都有自己親身體驗(yàn)過(guò),昨晚上OpenAI還發(fā)布了最新的草莓模型。但依然有不少人不明白大模型是什么。這篇文章,作者結(jié)合書(shū)籍的知識(shí)和自己的認(rèn)知,給大家科普一下相關(guān)知識(shí)。
從去年到今年,大模型、chatGPT等概念和技術(shù)越來(lái)越火,但是像筆者一樣的技術(shù)小白一直對(duì)大模型是一種似懂非懂的狀態(tài)。
鑒于最近在做基于大模型和Agent的上層AI應(yīng)用,如若不了解底層概念,始終還是會(huì)限制產(chǎn)品層的能力,因此,最近2周零散時(shí)間讀完了這本由復(fù)旦團(tuán)隊(duì)出版的《大規(guī)模語(yǔ)言模型:從理論到實(shí)踐》,基本涉及到了大模型入門(mén)所需的核心框架內(nèi)容,適合掃盲看。
因此,基于這本書(shū)的核心框架,來(lái)結(jié)合自己的理解聊一聊大模型到底是什么?
01 大模型到底是什么?和以前的AI有何區(qū)別?
當(dāng)我第一次聽(tīng)到大模型(LLM,Large Language Model)這個(gè)詞的時(shí)候,我的關(guān)注點(diǎn)就落在了「大」上面:難道是因?yàn)樽罱@個(gè)AI模型所用到的各類數(shù)據(jù)量很大,所以起名叫大模型?
看完書(shū)后,確實(shí)沒(méi)太大毛病?!复蟆沟拇_是大模型幾大特性之一,這是因?yàn)榈讓有酒?、算力、分布式等領(lǐng)域的飛躍,導(dǎo)致了模型擁有百億、千億級(jí)參數(shù)量以及訓(xùn)練更大數(shù)量級(jí)的的數(shù)據(jù)量有了可能性。以O(shè)PENAI公司的chatGPT3為例,其擁有1750億模型參數(shù)量,而盤(pán)古甚至有10850億。大家可能對(duì)這個(gè)數(shù)量級(jí)沒(méi)太大概念,可以簡(jiǎn)單理解為以前很難做到這樣的量級(jí),既昂貴又看不到效果,而現(xiàn)在的大模型不僅能做到,甚至還能夠因?yàn)閰?shù)量、訓(xùn)練量越多,其效果呈現(xiàn)更好的正相關(guān)性。
我們來(lái)看看其官方定義:大規(guī)模語(yǔ)言模型,是一種由包含數(shù)百億以上參數(shù)的深度神經(jīng)網(wǎng)絡(luò)構(gòu)建的語(yǔ)言模型,通常使用自監(jiān)督學(xué)習(xí)方法、通過(guò)大量無(wú)標(biāo)注文本進(jìn)行訓(xùn)練。
那它和以前的AI有什么區(qū)別呢?除了前面提到的「參數(shù)量海量」之外,個(gè)人總結(jié)還有以下幾點(diǎn):
1、更像人一樣的自然語(yǔ)言對(duì)話
以前我們和AI對(duì)話,它的「AI感」很重、不太類人,而現(xiàn)在的大模型則能夠做到在對(duì)話過(guò)程中基本像真實(shí)的自然語(yǔ)言。這其實(shí)和大模型是生成式輸出內(nèi)容的原因有關(guān),這里我用一個(gè)不太準(zhǔn)確的例子形象化去說(shuō)明一下(后面我們會(huì)用嚴(yán)謹(jǐn)?shù)姆绞絹?lái)準(zhǔn)確描述):
這個(gè)大模型很厲害,它先是將世界上的所有知識(shí)(無(wú)論是書(shū)籍、論文、網(wǎng)站、微博等,還是各類語(yǔ)法結(jié)構(gòu)、邏輯推理知識(shí)等)統(tǒng)統(tǒng)咽進(jìn)肚子里進(jìn)行消化。那么,它是怎么消化的呢?它將每一個(gè)知識(shí)拆成小塊后都打上標(biāo)簽后存儲(chǔ)起來(lái)。
當(dāng)你向他問(wèn)「今天成都天氣咋樣?」,他會(huì)先將你問(wèn)的問(wèn)題和問(wèn)題背景等信息匯集在一起后,拆成小塊并打上標(biāo)簽。打完標(biāo)簽后,它會(huì)命令10000個(gè)小人拿著這些標(biāo)簽同時(shí)去肚子里找出能夠回答對(duì)應(yīng)問(wèn)題所對(duì)應(yīng)的已有知識(shí)標(biāo)簽,挑出其中最匹配、概率最高的一個(gè),假設(shè)是「成」,這時(shí)候,它就會(huì)在對(duì)話框里展示出第一個(gè)「成」字;緊接著,它再將你問(wèn)的問(wèn)題和問(wèn)題背景等信息、再結(jié)合「成」這個(gè)回答,再次找10000個(gè)小人同時(shí)去找「成」之后可能性最高的那個(gè)字,假設(shè)是「都」,然后,它再在對(duì)話框里展示出第二個(gè)字「都」……最終,經(jīng)過(guò)6次讓這10000個(gè)小人無(wú)腦循環(huán)工作后,它會(huì)一個(gè)字一個(gè)字的告訴你「成 都 今 天 晴 天」。
在生成式形態(tài)之下,它的每一個(gè)字都是通過(guò)已有自然語(yǔ)言表達(dá)中拎出來(lái)的單詞、詞組結(jié)合而成的、每一句話也會(huì)遵循相對(duì)嚴(yán)謹(jǐn)?shù)恼Z(yǔ)法結(jié)構(gòu)等,所以,大部分情況下,很難讓人覺(jué)得它的AI感那么重。但是,也同時(shí)偶爾在出現(xiàn)大模型幻覺(jué)的時(shí)候,說(shuō)一些看似語(yǔ)法結(jié)構(gòu)各方面都正確但內(nèi)容其實(shí)胡說(shuō)八道的話,類似于「今天成都晴天,你要記得帶雨傘」。
2、多任務(wù)可集成在一個(gè)對(duì)話框里
以前想讓AI幫忙翻譯、推理等,都需要各自找特定的產(chǎn)品,而現(xiàn)在,一個(gè)集成的對(duì)話框就可以同時(shí)做各類任務(wù):文本摘要、翻譯、文本創(chuàng)作、知識(shí)問(wèn)答、邏輯推理等,而無(wú)需自行拆分場(chǎng)景。能力的擴(kuò)展固然是好事,但也帶來(lái)了2個(gè)弊端:
1是用戶不知道其能力邊界在哪里,則會(huì)隨意的去進(jìn)行對(duì)話嘗試,最開(kāi)始固然是有新鮮感,但碰壁幾次后可能就想放棄了,這時(shí)也許還不如使用一些指令和路徑明確的功能型產(chǎn)品去完成任務(wù);
2是這種更像人在對(duì)話的交互形式,會(huì)讓人不禁對(duì)AI產(chǎn)生更多無(wú)盡的想象、拉高了期望預(yù)知,以為其是真的擁有了智力;然而我們通過(guò)前面對(duì)其工作方式的理解來(lái)看,它并不是擁有了真正的智力,只是擁有了更高效和貼近答案的一種旁門(mén)側(cè)路。
因?yàn)楣P者更多關(guān)注文本領(lǐng)域,所以AI在其他在文生圖、圖生文等上面的多模態(tài)(多種媒體形態(tài),如圖片、視頻等)上的新增能力點(diǎn)就不再展開(kāi)了。
02 大模型是怎么被訓(xùn)練出來(lái)的?
其實(shí)大模型的構(gòu)建原理并不難,這個(gè)過(guò)程和我們教會(huì)一個(gè)小孩學(xué)習(xí)的思路很類似。其包含了5個(gè)階段:預(yù)訓(xùn)練階段、有監(jiān)督微調(diào)、獎(jiǎng)勵(lì)建模、強(qiáng)化學(xué)習(xí)、語(yǔ)言模型訓(xùn)練。
預(yù)訓(xùn)練指通過(guò)海量的訓(xùn)練數(shù)據(jù)(包含互聯(lián)網(wǎng)網(wǎng)頁(yè)、維基百科、書(shū)籍論文、問(wèn)答網(wǎng)站等)預(yù)先喂給模型海量的數(shù)據(jù),來(lái)構(gòu)建基礎(chǔ)語(yǔ)言模型,從而使得模型具有語(yǔ)言生成的能力。這其實(shí)是先讓這個(gè)能夠沒(méi)日沒(méi)夜學(xué)習(xí)的超級(jí)小孩先自己惡狠狠的吃一大堆多啦A夢(mèng)那樣的記憶面包,先把最基礎(chǔ)的能力打好。
但這時(shí)候,超級(jí)小孩回答的內(nèi)容還不一定是效果最好的,可能你問(wèn)「我想出門(mén)玩,今天天氣咋樣」,他會(huì)告訴你「今天天氣還行」,但其實(shí)你背后隱含想了解的可能是:今天會(huì)不會(huì)下雨,需不需要帶傘;或者是今天太陽(yáng)大不大,需不需要防曬等。
這時(shí)候,就需要通過(guò)「有監(jiān)督微調(diào)」來(lái)幫助模型給出更貼合用戶想問(wèn)問(wèn)題的答案。通過(guò)少量高質(zhì)量數(shù)據(jù)集合(包含用戶輸入問(wèn)題及對(duì)應(yīng)理想的輸出結(jié)果),再進(jìn)一步讓這個(gè)小孩能夠照貓畫(huà)虎,回答出更好的答案。
前幾百次超級(jí)小孩的回答我可以人工來(lái)逐個(gè)去反饋好壞,但針對(duì)這么龐大的訓(xùn)練量,不可能全部都去人工進(jìn)行。因此,就引入到了獎(jiǎng)勵(lì)模型和強(qiáng)化學(xué)習(xí)部分,模擬人類評(píng)估的過(guò)程。那具體是怎么來(lái)提升超級(jí)小孩的回答表現(xiàn)呢?
系統(tǒng)先構(gòu)建好對(duì)應(yīng)的獎(jiǎng)勵(lì)模型,在對(duì)問(wèn)題進(jìn)行每一次回答后,超級(jí)小孩都能及時(shí)收到來(lái)自環(huán)境給予他對(duì)應(yīng)的「打分」反饋,為了獲取最高分,他就需要多次嘗試、改善得分策略從而最終有最好的表現(xiàn)。
當(dāng)我們基本構(gòu)建好這些方面后,就可以將這樣的一套模型進(jìn)行訓(xùn)練和不斷優(yōu)化,最終就構(gòu)建好了一個(gè)可用的大模型。
03 大模型為什么是一個(gè)字一個(gè)字蹦出來(lái)答案的?
語(yǔ)言模型目標(biāo)就是建模自然語(yǔ)言的概率分布,因此,生成式模型通常基于概率分布進(jìn)行生成。其本質(zhì)上是根據(jù)已生成的部分來(lái)預(yù)測(cè)下一個(gè)最有可能的元素,就像在玩接龍游戲中根據(jù)前面的詞語(yǔ)來(lái)猜測(cè)下一個(gè)詞語(yǔ)一樣,每個(gè)新的元素都會(huì)影響后續(xù)元素的概率分布。
當(dāng)基于提問(wèn)「今天成都天氣咋樣」,答案第一個(gè)字生成「成」之后,模型會(huì)根據(jù)上下文和「成」重新更新概率分布,選擇下一個(gè)詞「都」……以此類推,逐步展示模型是如何逐步構(gòu)建答案的。
那么,這個(gè)答案具體是如何通過(guò)概率計(jì)算得來(lái)的呢?
首先會(huì)通過(guò)分詞器(Tokenizer)將文本分割成較小單元——即詞元(Token),這些tokens可以是單詞、子詞、字符等,例如一個(gè)wonderful可以單獨(dú)是一個(gè)token,也可以拆分為won der ful這3個(gè)token;然后再將文本轉(zhuǎn)換為適合模型輸入的tokens序列,從而進(jìn)一步編碼成向量表示,然后輸入到模型中進(jìn)行訓(xùn)練或者推理。
(以下例子從字節(jié)的AI聊天機(jī)器人平臺(tái)——豆包扒來(lái)的)假設(shè)我們有一個(gè)簡(jiǎn)單的句子:“I love natural language processing.”,會(huì)按照以下方式進(jìn)行token化:
(圖源網(wǎng)絡(luò))
(1)分割文本并轉(zhuǎn)換為 token 序列?
使用預(yù)訓(xùn)練的 Tokenizer對(duì)這個(gè)句子進(jìn)行處理。首先,它會(huì)將句子分割成 tokens,可能會(huì)在開(kāi)頭加上特殊標(biāo)記[CLS],在結(jié)尾加上特殊標(biāo)記[SEP]。經(jīng)過(guò)處理后,這個(gè)句子可能變成:[CLS] I love natural language processing. [SEP]。然后進(jìn)一步將其轉(zhuǎn)換為具體的 token 序列,假設(shè)每個(gè)單詞對(duì)應(yīng)一個(gè) token,就變成:[‘[CLS]’, ‘I’, ‘love’, ‘natural’, ‘language’, ‘processing’, ‘.’, ‘[SEP]’]。
(2)編碼成向量??
Tokenizer 通常會(huì)與一個(gè)模型(如 BERT)一起使用。模型會(huì)為每個(gè) token 分配一個(gè)向量表示。這個(gè)過(guò)程通常是通過(guò)查找預(yù)先訓(xùn)練好的詞向量表或者通過(guò)模型的內(nèi)部計(jì)算來(lái)實(shí)現(xiàn)的。例如,對(duì)于上面的 token 序列,模型可能會(huì)輸出一個(gè)形狀為(序列長(zhǎng)度,向量維度)的張量。假設(shè)向量維度為 768,那么這個(gè)張量可能是一個(gè) 8×768 的矩陣,其中每一行代表一個(gè) token 的向量表示。
這樣,原始的文本句子就被轉(zhuǎn)換為了一個(gè)由向量組成的序列,然后再輸入到語(yǔ)言模型中。然后,語(yǔ)言模型再根據(jù)已有的向量信息預(yù)測(cè)下一個(gè)可能的向量(包含多頭自注意力機(jī)制、前饋神經(jīng)網(wǎng)絡(luò)、殘差連接和層歸一化…),然后再將這個(gè)向量轉(zhuǎn)換回文本形式,逐步生成新的文本內(nèi)容。
當(dāng)然,我們看起來(lái)一個(gè)字一個(gè)字蹦出來(lái),其實(shí)不一定是嚴(yán)格一個(gè)字一個(gè)字算的,這得看詞元(Token,即對(duì)詞的拆分)是按照什么方式去拆的。至于為什么要做成一個(gè)字一個(gè)字蹦出來(lái)的樣式,除了其生成方式本身就是逐步式的之外,其余也包含了以下2點(diǎn)出發(fā)點(diǎn):一是快速響應(yīng)用戶,不至于全部加載完再一并展示回來(lái),從而讓用戶先基于已經(jīng)生產(chǎn)出來(lái)的內(nèi)容快速判斷該內(nèi)容是否是想要的;二是基于不滿意的內(nèi)容,用戶能夠快速進(jìn)行反饋,假設(shè)覺(jué)得不滿意,即可停止生產(chǎn)or重新發(fā)起問(wèn)題,從而不浪費(fèi)過(guò)多計(jì)算資源。
以上就是從大致邏輯上跟大家梳理了大模型底層運(yùn)作的大致框架,其很多思路和細(xì)節(jié)還有待進(jìn)一步深入學(xué)習(xí)??赐陼?shū)后,有些內(nèi)容當(dāng)時(shí)感覺(jué)自己懂了,但是真要寫(xiě)出來(lái)說(shuō)明白,還是又查了很多資料。
目前先整理一些理論性內(nèi)容,后續(xù)也希望結(jié)合自己工作上對(duì)于AI聊天產(chǎn)品設(shè)計(jì)、prompt調(diào)優(yōu)上逐步積累的小經(jīng)驗(yàn)和大家做一分享(本文內(nèi)容如有不妥之外,還望大佬們及時(shí)幫忙指正,感謝。)
專欄作家
冰冰醬;公眾號(hào):產(chǎn)品冰冰醬,人人都是產(chǎn)品經(jīng)理專欄作家。5年產(chǎn)品經(jīng)驗(yàn),創(chuàng)過(guò)業(yè)、帶過(guò)人、踩過(guò)坑;獨(dú)立負(fù)責(zé)從0-1搭建業(yè)務(wù)中臺(tái),持續(xù)深耕B端及SaaS領(lǐng)域。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,不得轉(zhuǎn)載。
題圖來(lái)自 Unsplash,基于CC0協(xié)議。
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
- 目前還沒(méi)評(píng)論,等你發(fā)揮!