大模型到底是什么?小白也能看懂的科普貼

0 評論 14203 瀏覽 7 收藏 15 分鐘

大模型發(fā)展到現(xiàn)在已經(jīng)有一段時間了,不少人都有自己親身體驗過,昨晚上OpenAI還發(fā)布了最新的草莓模型。但依然有不少人不明白大模型是什么。這篇文章,作者結(jié)合書籍的知識和自己的認知,給大家科普一下相關(guān)知識。

從去年到今年,大模型、chatGPT等概念和技術(shù)越來越火,但是像筆者一樣的技術(shù)小白一直對大模型是一種似懂非懂的狀態(tài)。

鑒于最近在做基于大模型和Agent的上層AI應(yīng)用,如若不了解底層概念,始終還是會限制產(chǎn)品層的能力,因此,最近2周零散時間讀完了這本由復(fù)旦團隊出版的《大規(guī)模語言模型:從理論到實踐》,基本涉及到了大模型入門所需的核心框架內(nèi)容,適合掃盲看。

因此,基于這本書的核心框架,來結(jié)合自己的理解聊一聊大模型到底是什么?

01 大模型到底是什么?和以前的AI有何區(qū)別?

當我第一次聽到大模型(LLM,Large Language Model)這個詞的時候,我的關(guān)注點就落在了「大」上面:難道是因為最近這個AI模型所用到的各類數(shù)據(jù)量很大,所以起名叫大模型?

看完書后,確實沒太大毛病?!复蟆沟拇_是大模型幾大特性之一,這是因為底層芯片、算力、分布式等領(lǐng)域的飛躍,導(dǎo)致了模型擁有百億、千億級參數(shù)量以及訓(xùn)練更大數(shù)量級的的數(shù)據(jù)量有了可能性。以O(shè)PENAI公司的chatGPT3為例,其擁有1750億模型參數(shù)量,而盤古甚至有10850億。大家可能對這個數(shù)量級沒太大概念,可以簡單理解為以前很難做到這樣的量級,既昂貴又看不到效果,而現(xiàn)在的大模型不僅能做到,甚至還能夠因為參數(shù)量、訓(xùn)練量越多,其效果呈現(xiàn)更好的正相關(guān)性。

我們來看看其官方定義:大規(guī)模語言模型,是一種由包含數(shù)百億以上參數(shù)的深度神經(jīng)網(wǎng)絡(luò)構(gòu)建的語言模型,通常使用自監(jiān)督學(xué)習(xí)方法、通過大量無標注文本進行訓(xùn)練。

那它和以前的AI有什么區(qū)別呢?除了前面提到的「參數(shù)量海量」之外,個人總結(jié)還有以下幾點:

1、更像人一樣的自然語言對話

以前我們和AI對話,它的「AI感」很重、不太類人,而現(xiàn)在的大模型則能夠做到在對話過程中基本像真實的自然語言。這其實和大模型是生成式輸出內(nèi)容的原因有關(guān),這里我用一個不太準確的例子形象化去說明一下(后面我們會用嚴謹?shù)姆绞絹頊蚀_描述):

這個大模型很厲害,它先是將世界上的所有知識(無論是書籍、論文、網(wǎng)站、微博等,還是各類語法結(jié)構(gòu)、邏輯推理知識等)統(tǒng)統(tǒng)咽進肚子里進行消化。那么,它是怎么消化的呢?它將每一個知識拆成小塊后都打上標簽后存儲起來。

當你向他問「今天成都天氣咋樣?」,他會先將你問的問題和問題背景等信息匯集在一起后,拆成小塊并打上標簽。打完標簽后,它會命令10000個小人拿著這些標簽同時去肚子里找出能夠回答對應(yīng)問題所對應(yīng)的已有知識標簽,挑出其中最匹配、概率最高的一個,假設(shè)是「成」,這時候,它就會在對話框里展示出第一個「成」字;緊接著,它再將你問的問題和問題背景等信息、再結(jié)合「成」這個回答,再次找10000個小人同時去找「成」之后可能性最高的那個字,假設(shè)是「都」,然后,它再在對話框里展示出第二個字「都」……最終,經(jīng)過6次讓這10000個小人無腦循環(huán)工作后,它會一個字一個字的告訴你「成 都 今 天 晴 天」。

在生成式形態(tài)之下,它的每一個字都是通過已有自然語言表達中拎出來的單詞、詞組結(jié)合而成的、每一句話也會遵循相對嚴謹?shù)恼Z法結(jié)構(gòu)等,所以,大部分情況下,很難讓人覺得它的AI感那么重。但是,也同時偶爾在出現(xiàn)大模型幻覺的時候,說一些看似語法結(jié)構(gòu)各方面都正確但內(nèi)容其實胡說八道的話,類似于「今天成都晴天,你要記得帶雨傘」。

2、多任務(wù)可集成在一個對話框里

以前想讓AI幫忙翻譯、推理等,都需要各自找特定的產(chǎn)品,而現(xiàn)在,一個集成的對話框就可以同時做各類任務(wù):文本摘要、翻譯、文本創(chuàng)作、知識問答、邏輯推理等,而無需自行拆分場景。能力的擴展固然是好事,但也帶來了2個弊端:

1是用戶不知道其能力邊界在哪里,則會隨意的去進行對話嘗試,最開始固然是有新鮮感,但碰壁幾次后可能就想放棄了,這時也許還不如使用一些指令和路徑明確的功能型產(chǎn)品去完成任務(wù);

2是這種更像人在對話的交互形式,會讓人不禁對AI產(chǎn)生更多無盡的想象、拉高了期望預(yù)知,以為其是真的擁有了智力;然而我們通過前面對其工作方式的理解來看,它并不是擁有了真正的智力,只是擁有了更高效和貼近答案的一種旁門側(cè)路。

因為筆者更多關(guān)注文本領(lǐng)域,所以AI在其他在文生圖、圖生文等上面的多模態(tài)(多種媒體形態(tài),如圖片、視頻等)上的新增能力點就不再展開了。

02 大模型是怎么被訓(xùn)練出來的?

其實大模型的構(gòu)建原理并不難,這個過程和我們教會一個小孩學(xué)習(xí)的思路很類似。其包含了5個階段:預(yù)訓(xùn)練階段、有監(jiān)督微調(diào)、獎勵建模、強化學(xué)習(xí)、語言模型訓(xùn)練。

預(yù)訓(xùn)練指通過海量的訓(xùn)練數(shù)據(jù)(包含互聯(lián)網(wǎng)網(wǎng)頁、維基百科、書籍論文、問答網(wǎng)站等)預(yù)先喂給模型海量的數(shù)據(jù),來構(gòu)建基礎(chǔ)語言模型,從而使得模型具有語言生成的能力。這其實是先讓這個能夠沒日沒夜學(xué)習(xí)的超級小孩先自己惡狠狠的吃一大堆多啦A夢那樣的記憶面包,先把最基礎(chǔ)的能力打好。

但這時候,超級小孩回答的內(nèi)容還不一定是效果最好的,可能你問「我想出門玩,今天天氣咋樣」,他會告訴你「今天天氣還行」,但其實你背后隱含想了解的可能是:今天會不會下雨,需不需要帶傘;或者是今天太陽大不大,需不需要防曬等。

這時候,就需要通過「有監(jiān)督微調(diào)」來幫助模型給出更貼合用戶想問問題的答案。通過少量高質(zhì)量數(shù)據(jù)集合(包含用戶輸入問題及對應(yīng)理想的輸出結(jié)果),再進一步讓這個小孩能夠照貓畫虎,回答出更好的答案。

前幾百次超級小孩的回答我可以人工來逐個去反饋好壞,但針對這么龐大的訓(xùn)練量,不可能全部都去人工進行。因此,就引入到了獎勵模型和強化學(xué)習(xí)部分,模擬人類評估的過程。那具體是怎么來提升超級小孩的回答表現(xiàn)呢?

系統(tǒng)先構(gòu)建好對應(yīng)的獎勵模型,在對問題進行每一次回答后,超級小孩都能及時收到來自環(huán)境給予他對應(yīng)的「打分」反饋,為了獲取最高分,他就需要多次嘗試、改善得分策略從而最終有最好的表現(xiàn)。

當我們基本構(gòu)建好這些方面后,就可以將這樣的一套模型進行訓(xùn)練和不斷優(yōu)化,最終就構(gòu)建好了一個可用的大模型。

03 大模型為什么是一個字一個字蹦出來答案的?

語言模型目標就是建模自然語言的概率分布,因此,生成式模型通常基于概率分布進行生成。其本質(zhì)上是根據(jù)已生成的部分來預(yù)測下一個最有可能的元素,就像在玩接龍游戲中根據(jù)前面的詞語來猜測下一個詞語一樣,每個新的元素都會影響后續(xù)元素的概率分布。

當基于提問「今天成都天氣咋樣」,答案第一個字生成「成」之后,模型會根據(jù)上下文和「成」重新更新概率分布,選擇下一個詞「都」……以此類推,逐步展示模型是如何逐步構(gòu)建答案的。

那么,這個答案具體是如何通過概率計算得來的呢?

首先會通過分詞器(Tokenizer)將文本分割成較小單元——即詞元(Token),這些tokens可以是單詞、子詞、字符等,例如一個wonderful可以單獨是一個token,也可以拆分為won der ful這3個token;然后再將文本轉(zhuǎn)換為適合模型輸入的tokens序列,從而進一步編碼成向量表示,然后輸入到模型中進行訓(xùn)練或者推理。

(以下例子從字節(jié)的AI聊天機器人平臺——豆包扒來的)假設(shè)我們有一個簡單的句子:“I love natural language processing.”,會按照以下方式進行token化:

大模型到底是什么?小白也能看懂的科普貼

(圖源網(wǎng)絡(luò))

(1)分割文本并轉(zhuǎn)換為 token 序列?

使用預(yù)訓(xùn)練的 Tokenizer對這個句子進行處理。首先,它會將句子分割成 tokens,可能會在開頭加上特殊標記[CLS],在結(jié)尾加上特殊標記[SEP]。經(jīng)過處理后,這個句子可能變成:[CLS] I love natural language processing. [SEP]。然后進一步將其轉(zhuǎn)換為具體的 token 序列,假設(shè)每個單詞對應(yīng)一個 token,就變成:[‘[CLS]’, ‘I’, ‘love’, ‘natural’, ‘language’, ‘processing’, ‘.’, ‘[SEP]’]。

(2)編碼成向量??

Tokenizer 通常會與一個模型(如 BERT)一起使用。模型會為每個 token 分配一個向量表示。這個過程通常是通過查找預(yù)先訓(xùn)練好的詞向量表或者通過模型的內(nèi)部計算來實現(xiàn)的。例如,對于上面的 token 序列,模型可能會輸出一個形狀為(序列長度,向量維度)的張量。假設(shè)向量維度為 768,那么這個張量可能是一個 8×768 的矩陣,其中每一行代表一個 token 的向量表示。

這樣,原始的文本句子就被轉(zhuǎn)換為了一個由向量組成的序列,然后再輸入到語言模型中。然后,語言模型再根據(jù)已有的向量信息預(yù)測下一個可能的向量(包含多頭自注意力機制、前饋神經(jīng)網(wǎng)絡(luò)、殘差連接和層歸一化…),然后再將這個向量轉(zhuǎn)換回文本形式,逐步生成新的文本內(nèi)容。

當然,我們看起來一個字一個字蹦出來,其實不一定是嚴格一個字一個字算的,這得看詞元(Token,即對詞的拆分)是按照什么方式去拆的。至于為什么要做成一個字一個字蹦出來的樣式,除了其生成方式本身就是逐步式的之外,其余也包含了以下2點出發(fā)點:一是快速響應(yīng)用戶,不至于全部加載完再一并展示回來,從而讓用戶先基于已經(jīng)生產(chǎn)出來的內(nèi)容快速判斷該內(nèi)容是否是想要的;二是基于不滿意的內(nèi)容,用戶能夠快速進行反饋,假設(shè)覺得不滿意,即可停止生產(chǎn)or重新發(fā)起問題,從而不浪費過多計算資源。

以上就是從大致邏輯上跟大家梳理了大模型底層運作的大致框架,其很多思路和細節(jié)還有待進一步深入學(xué)習(xí)??赐陼?,有些內(nèi)容當時感覺自己懂了,但是真要寫出來說明白,還是又查了很多資料。

目前先整理一些理論性內(nèi)容,后續(xù)也希望結(jié)合自己工作上對于AI聊天產(chǎn)品設(shè)計、prompt調(diào)優(yōu)上逐步積累的小經(jīng)驗和大家做一分享(本文內(nèi)容如有不妥之外,還望大佬們及時幫忙指正,感謝。)

專欄作家

冰冰醬;公眾號:冰冰醬啊,人人都是產(chǎn)品經(jīng)理專欄作家。5年產(chǎn)品經(jīng)驗,創(chuàng)過業(yè)、帶過人、踩過坑;獨立負責從0-1搭建業(yè)務(wù)中臺,持續(xù)深耕B端及SaaS領(lǐng)域。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,不得轉(zhuǎn)載。

題圖來自 Unsplash,基于CC0協(xié)議。

該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!