從0構(gòu)建大模型知識體系(1):啥是模型?
對于許多初學(xué)者來說,大模型的概念仍然晦澀難懂。本文將從最基礎(chǔ)的概念出發(fā),以通俗易懂的方式逐步構(gòu)建起大模型的知識體系。
按照慣例,結(jié)論先行
這篇文章要討論啥?
以大模型為代表的AI技術(shù)在近兩年盛況空前。我們認(rèn)為在這樣的時代背景下有必要從最基礎(chǔ)的概念開始學(xué)習(xí),逐步建立一個相對完善的知識體系以便理解后續(xù)的新概念、新技術(shù)、新產(chǎn)品。因此寫這樣一篇文章來討論大模型知識體系中最基礎(chǔ)的幾個概念,為此系列后續(xù)的文章做鋪墊。
咋討論這個問題?
對于構(gòu)建大模型知識體系這件事,我覺得需要先搞明白這幾個問題:
①不管大模型還是小模型,能不能先說清楚什么是模型?
②模型具體是怎么用數(shù)據(jù)來訓(xùn)練的,以至于完成訓(xùn)練后的模型可以用來解決實(shí)際問題?
我會以一個預(yù)測奶茶銷量的實(shí)際問題作為切入口,設(shè)計并手動訓(xùn)練一個最簡單的模型,并在這過程中逐步討論上述兩個核心問題。
這幾個問題,核心結(jié)論是什么?
所謂模型,本質(zhì)就是一個數(shù)學(xué)公式,或者更準(zhǔn)確的說是一個函數(shù)。訓(xùn)練模型就是用數(shù)據(jù)不斷地通過反向傳播算法更新模型參數(shù)以擬合已有數(shù)據(jù)的過程。而訓(xùn)練出的模型也正因?yàn)閿M合了已有的數(shù)據(jù),所以我們認(rèn)為它掌握了已有數(shù)據(jù)的統(tǒng)計規(guī)律,進(jìn)而才可以用此模型(此規(guī)律)對未知的情況做預(yù)測。
“和 AI 談戀愛就像約會 100 次:它把你說過的每句話都記成小抄,最后變成懂你的戀愛腦”
——題記
手搓一個奶茶銷量預(yù)測算法
假設(shè)你在一家奶茶店上班,近期在售的6款奶茶的售價和銷量如下所示
有一天,老板問你,此時如果新推出一款奶茶,在不考慮其他因素的情況下若定價為35,它的銷量應(yīng)該為多少?換句話說,如果售價定為35,你預(yù)測銷量為多少?
靠,35的售價完全不在已有數(shù)據(jù)的范疇之內(nèi)啊,這可咋整?
我們當(dāng)然不想憑空預(yù)測,而是要根據(jù)現(xiàn)有的數(shù)據(jù)做出最符合當(dāng)前數(shù)據(jù)規(guī)律的預(yù)測,不然老板多問一個why咱就啞火了。先用數(shù)據(jù)畫個圖看看,不難發(fā)現(xiàn),售價越高,銷量一般越低。
試想,如果有一個數(shù)學(xué)公式可以直接告訴我們不同的售價對應(yīng)的具體銷量為多少,那預(yù)測售價為35時的銷量還不是探囊取物,手到擒來,手拿把掐?
可這個數(shù)學(xué)公式要怎么找呢?仔細(xì)觀察上圖,把售價視作自變量,銷量視作因變量,因變量隨自變量的增加而降低,這完全可以用我們初中二年級就學(xué)過的一次函數(shù)
來描述,其中自變量
為售價,因變量
為銷量,
和
是這個公式中兩個尚未確定具體數(shù)值的參數(shù)。一旦我們能確定
和
的具體數(shù)值,再把
代入到這個公式中就能得到售價為35時的預(yù)測銷量。
到此,預(yù)測銷量的問題被我們轉(zhuǎn)化為了確定
和
具體數(shù)值的數(shù)學(xué)問題,換句話說,我們?yōu)轭A(yù)測奶茶銷量的問題建立了一個數(shù)學(xué)模型:
。
等下……模型?參數(shù)?預(yù)測?莫非平時聽到的什么大模型,幾億參數(shù)就是指的這個?
沒錯!大模型本質(zhì)上就是一個形式極其復(fù)雜,參數(shù)極其多的一個數(shù)學(xué)公式。而所謂的預(yù)測,正如我們給定售價后預(yù)測銷量一樣,也只不過是給定一個具體的輸入后根據(jù)公式進(jìn)行了一通計算而已。
這,就是訓(xùn)練
回到現(xiàn)在的問題:怎么確定
和
具體的值呢?
回顧一下,一次函數(shù)的圖像是一條直線,
和
分別調(diào)整直線的傾斜程度和距離坐標(biāo)系原點(diǎn)的距離
所以我們要調(diào)整
和
的值,最好讓整條直線能不偏不倚的貫穿這堆數(shù)據(jù)所圍成的區(qū)域。換句話說,我們期望這條直線能最好的擬合當(dāng)前的數(shù)據(jù)。
但我們從哪個值開始嘗試和調(diào)整呢?此外,調(diào)整之后我們怎么知道這算不算“最好的擬合”呢?
從哪個值開始嘗試這個問題,實(shí)在不行就先猜一個唄。沒錯,就是猜!先上線再迭代!即便是第一個做出大模型的人在一開始確定參數(shù)的時候也是靠猜,只不過是有技巧的猜。
比如在我們這個例子當(dāng)中考慮到銷量隨售價的增加而降低,即二者是負(fù)相關(guān),所以
肯定得猜成負(fù)數(shù)才合理。且從奶茶1售價30銷量600,奶茶2售價25銷量650來看,售價每增加1,銷量就減少10,所以我們先盲猜成-10(當(dāng)然,這里選其他奶茶來猜也可以)。
的值看上圖中直線與
軸的交點(diǎn)先盲猜成1000吧,于是我們得到了模型v1.0:
,同樣,畫出來先看看效果。
這效果怎么說呢……大方向是對的,但肯定擬合得不算好。
至于怎么樣算“最好的擬合”,我們可以這樣定義:對于已知售價和銷量的6款奶茶,我們先輸入每款的售價,再通過模型得到每款的預(yù)測銷量,然后計算預(yù)測銷量與實(shí)際銷量之間差值平方的一半作為模型對一款奶茶銷量的擬合誤差(之所以要用差值平方的一半而不用差值本身是因?yàn)檫@樣做有有良好的數(shù)學(xué)特性)。若用
來表示擬合誤差的話,
的表達(dá)式即為
,其中
即為我們通過模型得到的預(yù)測銷量,
為奶茶的真實(shí)銷量。然后我們把所有奶茶的擬合誤差平均值作為模型對整個數(shù)據(jù)集的總擬合誤差,只要我們不斷調(diào)整
和
的具體數(shù)值能使得這個總擬合誤差最小,此時便可認(rèn)為是“最好的擬合”。
舉例來說,現(xiàn)在我們的模型為
,第一款奶茶售價30,因此我們輸入
得到輸出的預(yù)測銷量為700,與實(shí)際銷量600差值平方的一半為
,也就是5000,第二款售價25,輸入公式后得到輸出的預(yù)測銷量750,與實(shí)際650的銷量差值平方的一半也為5000……以此類推可以得到第三至第六款奶茶的擬合誤差分別為1250,11250,0,11250。最后對6個誤差值求平均得到模型v1.0的總擬合誤差為5625。
那我們應(yīng)該怎樣調(diào)整
和
使得總擬合誤差最小的呢?這就不得不提到大名鼎鼎的“反向傳播”算法了。既然有反向傳播,那自然也有正向傳播(實(shí)際上叫前向傳播),我們先介紹前向傳播。
所謂前向傳播其實(shí)就是給定輸入數(shù)據(jù)后通過模型得到輸出結(jié)果的過程。例如對于我們當(dāng)前的模型
,給定第一款奶茶的售價30,我們通過模型計算得到它的預(yù)測銷量為
,這就完成了一次前向傳播。
而反向傳播則是根據(jù)擬合誤差反向計算出模型中每個參數(shù)對這個誤差“貢獻(xiàn)度”的過程,其中涉及通過誤差公式對模型參數(shù)求偏導(dǎo)數(shù)的數(shù)學(xué)運(yùn)算,我們這里簡單介紹一下。
(此部分無法理解不影響后續(xù)的閱讀,總之就是我們有數(shù)學(xué)方法求得模型中每個參數(shù)對誤差的貢獻(xiàn)度)
之前提到,每款奶茶的擬合誤差計算公式為
,而其中
,因此誤差
對模型參數(shù)
的偏導(dǎo)即等于
對
的偏導(dǎo)乘以
對
的偏導(dǎo)。
對模型參數(shù)
的偏導(dǎo)即等于
對
的偏導(dǎo)乘以
對
的偏導(dǎo)。也就是:
比如還是第一款奶茶,模型對它銷量的擬合誤差為5000,這個誤差對
和
求偏導(dǎo)后的結(jié)果分別為3000和100,這兩個數(shù)可以粗暴解讀為
這件事為擬合誤差貢獻(xiàn)了3000份力,而
貢獻(xiàn)了100份力,二者一共貢獻(xiàn)了3100份力導(dǎo)致了5000的誤差。所以我們讓
和
減去各自貢獻(xiàn)的這份力就可以一定程度上減小擬合誤差。只不過在減的時候我們希望“步子慢一點(diǎn)”,畢竟這只是第一款奶茶,咱之后還有5款奶茶要考慮,所以只減去3000和100的萬分之一,也就是0.3和0.01即可,由此得到了更新后的參數(shù)
,
,此時我們得到了模型v1.1:
同樣,我們用第二款奶茶的數(shù)據(jù)重復(fù)以上過程:
① 輸入第二款奶茶的售價
并利用模型v1.1
做前向傳播得到預(yù)測銷量742.49② 計算模型對第二款奶茶的擬合誤差為4277.20,用其對
和
求偏導(dǎo),得到二者為此誤差的貢獻(xiàn)度分別為2312.25和92.49③ 用當(dāng)前的
和
減去其各自貢獻(xiàn)值的萬分之一,得到
,
進(jìn)而得到模型v1.2:
我們繼續(xù)重復(fù)此過程直到6個數(shù)據(jù)點(diǎn)都已被用于反向傳播調(diào)整參數(shù),于是得到了模型v2.0:
,該模型對6個數(shù)據(jù)的總擬合誤差為4847,比模型v1.0的5625低了很多。
把模型v1.0和2.0一起畫出來對比下看看
嗯~~不錯,模型v2.0確實(shí)比1.0好一些,但是距離理想的擬合效果還是有一定差距。
到此,我們通過已有的數(shù)據(jù)來對模型的參數(shù)進(jìn)行了一輪調(diào)整,這個過程就叫做訓(xùn)練,也可以叫做學(xué)習(xí)。總之就是調(diào)整模型的參數(shù)讓它和已有的數(shù)據(jù)越來越擬合。
菜,就多練
但現(xiàn)在一輪訓(xùn)練下來模型的擬合效果還不夠好,咋辦呢?還能咋辦,菜就多練唄。繼續(xù)用已有的數(shù)據(jù)進(jìn)行第二輪,第三輪訓(xùn)練……直到再怎么訓(xùn)練也不能顯著降低模型誤差時就可以結(jié)束了。
模型在訓(xùn)練前,以及1輪、5輪、15輪、20輪訓(xùn)練后的圖像和誤差如下圖所示(其中模型v15.0與模型v20.0幾乎重合):
顯然,同樣是5輪訓(xùn)練,從模型v10.0到v15.0誤差降低了17,但從v15.0到20.0就只降低了2。這說明從模型v20.0開始,再多的訓(xùn)練也不怎么能降低模型誤差了,所以我們停止訓(xùn)練,直接取模型v20.0的參數(shù)
作為最終訓(xùn)練結(jié)果。
回到一開始的問題,老板問奶茶售價定為35,它預(yù)計的銷量為多少呢?有了模型不難算出
,四舍五入一下得到我們的預(yù)測銷量536。
復(fù)盤一下,我們學(xué)到了什么?
所謂數(shù)學(xué)建模就是將實(shí)際問題轉(zhuǎn)化為數(shù)學(xué)問題,然后用數(shù)學(xué)工具去解決它。我們將預(yù)測奶茶銷量的實(shí)際問題轉(zhuǎn)化為了確定一次函數(shù)兩個參數(shù)值的數(shù)學(xué)問題,并通過求偏導(dǎo)這一數(shù)學(xué)工具不斷的優(yōu)化參數(shù)值以求最好的擬合已有數(shù)據(jù),最終確定參數(shù)值后輸入售價得到了預(yù)測銷量。
所謂模型,本質(zhì)就是一套數(shù)學(xué)公式。無論大模型還是小模型,其本質(zhì)都是一套數(shù)學(xué)公式,或者說函數(shù)。在預(yù)測奶茶銷量這件事中,我們選取了只含兩個參數(shù)的一次函數(shù)作為模型來完成預(yù)測工作。而大模型的的公式極復(fù)雜,參數(shù)量極多,以至于它可以先將我們輸入的人話轉(zhuǎn)化為可運(yùn)算的數(shù)字,進(jìn)行計算后輸出另一句人話,從而完成與人對話這種神奇的事情。
所謂訓(xùn)練(或者學(xué)習(xí)),就是用數(shù)據(jù)通過反向傳播算法不斷調(diào)整模型中的參數(shù)。我們根據(jù)已有數(shù)據(jù)的分布特點(diǎn)猜了兩個數(shù)作為模型參數(shù)的初始值,然后把已有數(shù)據(jù)一個又一個,一輪又一輪的送入模型中做前向傳播和反向傳播來調(diào)整參數(shù),讓模型更好的擬合已有數(shù)據(jù)。直到我們發(fā)現(xiàn)進(jìn)行更多的訓(xùn)練也不能顯著降低模型的誤差后便停止訓(xùn)練。對于我們這樣只有兩個參數(shù)的模型都進(jìn)行了20輪訓(xùn)練,可想而知擁有幾十上百億參數(shù)的大模型要進(jìn)行多少訓(xùn)練,消耗多少算力。
歡迎來到1986
以反向傳播算法為核心的模型訓(xùn)練機(jī)制出自1986年的文章《Learning Representations by Back – Propagating Errors》。到此,恭喜你對大模型知識的理解來到了1986年。此時距離DeepSeek-R1發(fā)布還有39年。
AI Heroes
模型之所以能被訓(xùn)練是因?yàn)榉聪騻鞑ニ惴ㄗ屍淠芨鶕?jù)已有數(shù)據(jù)不斷調(diào)整參數(shù)以進(jìn)行更好的擬合。反向傳播算法的代表作是David E. Rumelhart、Geoffrey E. Hinton和Ronald J. Williams于 1986 年發(fā)表在《Nature》上的論文《Learning Representations by Back – Propagating Errors》。盡管在這之前也有類似的方法被提出,但此文將反向傳播算法應(yīng)用于多層神經(jīng)網(wǎng)絡(luò),并證明了其在機(jī)器學(xué)習(xí)中的有效性,對現(xiàn)代神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)領(lǐng)域產(chǎn)生了深遠(yuǎn)的影響。
其中,Rumelhart于2011年逝世,享年70歲。 Williams于2024年逝世,享年79歲。Hinton于2024年獲得諾貝爾物理學(xué)獎以表彰其為機(jī)器學(xué)習(xí)領(lǐng)域作出的基礎(chǔ)性發(fā)現(xiàn)和發(fā)明。
高中時的 Hinton 就對人腦機(jī)制產(chǎn)生了濃厚興趣,在大學(xué)期間,他雖然不斷更換專業(yè),但一直圍繞著探索人腦神經(jīng)元如何連接并工作的奧秘,這一興趣促使他在讀博期間選擇了神經(jīng)網(wǎng)絡(luò)作為研究方向?,F(xiàn)在如火如荼的神經(jīng)網(wǎng)絡(luò)在當(dāng)時并不是一個被看好的方向,甚至在1978年Hinton博士畢業(yè)的時候,其博士生導(dǎo)師也建議他之后能更換研究方向,但他依舊遵循自己對人腦工作機(jī)制的探索欲望而在這個方向行走著,一路成果頗豐,桃李滿天。
2012年,他與學(xué)生Alex Krizhevsky, Ilya Sutskever所合作的AlexNet在當(dāng)年的ImageNet大規(guī)模視覺識別挑戰(zhàn)賽(ILSVRC)上以顯著優(yōu)勢取得了冠軍,開啟了深度學(xué)習(xí)的新時代。其中 Ilya Sutskever 于2015 年加入了一家創(chuàng)業(yè)公司,作為CTO和聯(lián)合創(chuàng)始人領(lǐng)導(dǎo)了大模型相關(guān)的研究工作,并于2023年底發(fā)布chatGPT開啟了大模型時代。這家大名鼎鼎的創(chuàng)業(yè)公司名叫——OpenAI。
行文至此,謹(jǐn)以諾獎評辭致敬這位把神經(jīng)網(wǎng)絡(luò)從墳?zāi)估锿诔鰜淼墓掠抡摺?/p>
“For foundational discoveries and inventions that enable machine learning with artificial neural networks”
Geoffrey E. Hinton, 2024 年于斯德哥爾摩舉行的諾貝爾獎演講上發(fā)表講話
“他用物理的語言賦予機(jī)器自學(xué)的能力,讓神經(jīng)網(wǎng)絡(luò)從理論玩具成長為重塑世界的智能引擎?!?/strong>
——后記
以下是文中為易于理解而表述不嚴(yán)謹(jǐn)之處,不讀不影響理解后續(xù)文章
比如還是第一款奶茶,模型對它銷量的擬合誤差為5000,這個誤差對
和
求偏導(dǎo)后的結(jié)果分別為3000和100,這兩個數(shù)可以粗暴解讀為
這件事為擬合誤差貢獻(xiàn)了3000份力,而
貢獻(xiàn)了100份力,二者一共貢獻(xiàn)了3100份力導(dǎo)致了5000的誤差。
這里將誤差函數(shù)對k和b的偏導(dǎo)數(shù)相加得到3100實(shí)際上是沒有意義的,類似于將一個蘋果和一頭豬相加一樣沒有意義。
本文由 @夜雨思晗 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)
- 目前還沒評論,等你發(fā)揮!