Open main menu
IT人
用最直觀的動畫,講解LLM如何儲存事實,3Blue1Brown的這個影片又火了
机器之心
發表於
2024-09-02
動畫
本文根據影片整理而來,有聽錯或理解不當之處歡迎在評論區指出。
向大模型輸入「Michael Jordan plays the sport of _____(邁克爾・喬丹從事的體育運動是……)」,然後讓其預測接下來的文字,那麼大模型多半能正確預測接下來是「basketball(籃球)」。
這說明在其數以億計的
引數
中潛藏了有關這個特定個人的相關知識。使用者甚至會感覺這些模型記憶了大量事實。
但事實究竟如何呢?
近日,3Blue1Brown 的《
深度學習
》課程第 7 課更新了,其中透過生動詳實的動畫展示了 LLM 儲存事實的方式。影片瀏覽量高達 18 萬次。
去年 12 月,谷歌
DeepMind
的一些研究者釋出了一篇相關論文,其中的具體案例便是匹配運動員以及他們各自的運動專案。
雖然這篇論文並未完全解答有關 LLM 事實儲存的問題,但也得到了一些頗為有趣的結果,其中的一個重點是:事實儲存在網路中的一個特定部分,這個部分也就是我們熟知的多層感知器(MLP)。
在 3Blue1Brown 剛剛更新的這期影片中,他們用 23 分的影片演示了大型
語言模型
如何儲存和處理資訊,主要包括以下部分:
LLM 中隱藏的事實是什麼
快速回顧 Transformers
示例
多層感知器
計算
引數
影片地址:https://www.youtube.com/watch?v=9-Jl0dxWQs8
在演示影片中,3b1b 的作者口齒清晰、語言標準,配合著高畫質畫面,讓讀者很好地理解了 LLM 是如何儲存知識的。
很多使用者在看完影片後,都驚訝於 3Blue1Brown 教學質量:
還有網友表示,坐等更新這期影片已經很久了:
接下來我們就深入 MLP 的細節吧。在這篇文章中,
機器之心
簡要介紹了核心內容,感興趣的讀者可以透過原影片檢視完整內容。
MLP 在大模型中的佔比不小,但其實結構相比於
注意力機制
這些要簡單許多。儘管如此,理解它也還是有些難度。
為了簡單,下面繼續透過「喬丹打籃球」這個具體示例進行說明吧。
首先,我們先簡單瞭解一下 Transformer 的工作流程。Transformer 的訓練目標是基於已有 token 預測下一個 token(通常表示詞或片語),而每個 token 都關聯了一個高維向量。
這些向量會反覆透過兩類運算:注意力(允許向量之間彼此傳遞資訊)與多層感知器(MLP)。當然,它們之間還存在一個特定的歸一化步驟。
在向量經過多次如此迭代之後,我們希望每個向量都已經吸收了足夠多的資訊。這些資訊有的來自訓練模型時植入模型
權重
的一般性知識,也有的來自上下文。這些知識就是模型預測下一 token 的依據。
需要注意的是,這些向量編碼的並不僅僅是單個詞彙,而是會在資訊在網路中流動時根據周圍的環境和模型的知識吸收更加豐富的含義。
總之,每一個向量編碼的資訊都遠遠超過了單個詞彙的含義,如此模型才能預測接下是什麼。而儲存這些資訊就是 MLP(注意力的作用是將上下文結合在一起),也因此大模型的大多數
引數
都在 MLP 中(約三分之二)。
繼續「喬丹打籃球」這個示例。MLP 是如何儲存這一事實的。
首先我們做一些假設:在高維空間中有這樣三個不同的向量,它們分別定義了喬丹的姓 Jordan 和名 Michael 以及籃球 Basketball。
現在,如果該空間中有一個向量與 Michael 向量的乘積為 1,則我們認為該向量編碼了 Michael 這一概念;而如果這個乘積為 0 甚至負數,則認為該向量與 Michael 沒有關聯。
同樣,我們可以計算該向量與 Jordan 或 Basketball 的乘積,以瞭解其與這兩個概念的關聯程度。
而透過訓練,可讓該向量與 Michael 和 Jordan 的乘積均為 1,此時就可以認為該向量編碼了 Michael Jordan 這個整體概念。
MLP 的內部細節
當這個編碼了上述文字的向量序列穿過一個 MLP 模組時,該序列中的每個向量都會經歷一系列運算:
之後,會得到一個與輸入向量同維度的向量。然後再將所得向量與輸入向量相加,得到輸出向量。
序列中的每個向量都會經歷這樣的操作,此時這些操作都是並行執行的,彼此之間互不影響。
對於「喬丹打籃球」,我們希望對於輸入的「Michael Jordan」,經過一系列運算之後,能得到「Basketball」的向量。
首先來看這個過程的第一步。這個線性投射過程就相當於讓輸入向量乘以一個大型矩陣。這個矩陣裡面的資料就是所謂的模型
引數
(model parameter)。你可以將其視為一個佈滿控制旋鈕的儀表盤 —— 透過調整這些
引數
,我們就能控制模型的行為。
對於矩陣乘法,影片中分享了一個視角。我們可以將矩陣乘法看作是將矩陣的每一行都視為一個向量,然後將這些行與被處理的向量(這裡用 E 表示,意為 embeding,即嵌入)進行一系列點乘。
如果我們假設該矩陣的第一行剛好編碼了「First Name Michael」且被處理向量也編碼了它,那麼所得的點積就約為 1。
而如果它們同時編碼了姓和名,那麼所得的結果應該約等於 2。
你可以認為該矩陣的其它行正在並行地處理其它問題。
另外,通常來說,這一步還會向輸出新增另一個向量,也就是所謂的偏置向量,其中的
引數
是從資料中學習得到的。
在這個例子中,我們可以看到這個偏置向量的第一個元素為 -1。也就是說在最終的輸出向量中,之前得到的相關點積減去了 1。為什麼要這樣操作?這是因為這樣一來,當且僅當向量編碼了全名「Michael Jordan」時,所得向量的第一項為正數,否則就為 0 或負數。
在實踐中,模型矩陣的規模非常大,比如 GPT-3 的矩陣有 49152 行和 12288 列(這個列數就是嵌入空間維度)。
事實上,這個行數恰好是嵌入空間維數的四倍。其實這只是一種設計選擇,你可以讓它更多,也可以讓它更少。
接下來我們用更簡潔的方式表示這個矩陣和向量,如下動圖所示:
經過上述線性過程之後,需要對輸出向量進行整理。這裡通常會用到一個非常簡單的函式:整流線性單元(ReLU)。
深度學習
社群傳統上喜歡使用過於花哨的名字,這個非常簡單的函式通常被稱為整流線性單元(ReLU)。
繼續我們的例子,中間向量的第一個元素在當且僅當全名是 Michael Jordan 時才為 1,否則為零或負數,在將其透過 ReLU 後,會得到一個非常乾淨的值,其中所有零和負值都被截斷為零。因此對於全名 Michael Jordan,該輸出為 1,否則為 0。這個行為和「與門」非常相似。另外 ReLU 還有一個相對平滑的版本 GeLU。
接下來又是一個線性投射步驟,這一步與第一步非常相似:乘以一個大型矩陣,加上偏置,得到輸出向量。
但這一次,對於這個大型矩陣,我們不再以行的思路來思考它,而是以列的思路來看。這些列的維度與向量空間一樣。
如果第一列表示的是「Basketball」且 n_0 為 1(表示該
神經元
已啟用),則該結果就會被新增到最終結果中;否則就不會影響最終結果。當然,這些列也可以表示任何概念。
類似地,我們將這個大矩陣簡化表示為 W ↓,將偏置表示為 B↓,並將其放回到圖中。
舉例來說,如果輸入向量中同時編碼了名字 Michael 和姓氏 Jordan,那麼觸發操作序列後,便會得到指向 Baskerball 方向的輸出向量。
這個過程會並行地針對所有向量執行
這就是 MLP 的運算過程:兩個矩陣乘積,每個都新增了偏置。此前這種網路曾被用來識別手寫數字,效果還算不錯。
GPT-3 中有 1750 億
引數
是如何計算的?
在接下來的章節中,作者介紹瞭如何計算 GPT-3 中的
引數
,並瞭解它們的位置。
對於 GPT-3 來說,嵌入空間的大小是 12288,將它們相乘,僅該矩陣就有六億多個
引數
,而向下投影(第二個矩陣)具有相同數量的
引數
,只是形狀進行了轉置,所以它們加起來大約有十二億
引數
。
此外,作者表示還需要考慮另外幾個
引數
,但這隻佔總數的很小一部分,可忽略不計。嵌入向量序列流經的不是一個 MLP,而是 96 個不同的 MLP,因此用於所有這些塊的
引數
高達 1000 多億,這約佔網路中總
引數
的三分之二。
最後,將注意力塊、嵌入和 unembedding 等元件的所有
引數
加起來,總計可以得到 1750 億
引數
。
另外值得一提的是,還有另一組與歸一化步驟相關的
引數
,不過影片示例中跳過了這些
引數
,它們只佔總數的很小一部分。
影片最後介紹了疊加(Superposition)這一概念。證據表明,單個
神經元
很少像邁克爾・喬丹那樣代表某個單一特徵,實際上可能有一個很好的理由,這與目前在可解釋性研究人員中流傳的一個想法有關,稱為 Superposition,這是一個假設,可能有助於解釋為什麼這些模型特別難以解釋,以及為什麼它們的擴充套件性出奇地好。
感興趣的讀者可以參考原影片,瞭解更多內容。
3blue1brown 介紹
3blue1brown 是一個專門製作視覺化講解影片的頻道,其內容覆蓋數學、
人工智慧
等領域,每門課都配有直觀生動的動畫演示,幫助觀眾加深對概念定理的理解。
除了 YouTube 上 640 萬訂閱者之外,3b1b 在 B 站上還有官方賬號,粉絲數量超過 215 萬,每個影片都是 10 萬以上播放量,甚至有老師在課堂上播放該頻道的影片。對於一個硬核教學 UP 主來說,這樣的成績幾乎是無人可及了。
作為一直以來都十分受歡迎的理解數學概念的網站,3blue1brown 的視覺化一直都做得非常好。在本期影片中,我們可以直觀感受到了。
3b1b 的創立者 Grant Sanderson,畢業於史丹佛大學數學系,他的大部分影片和動畫引擎是獨立完成的,這是他此前在史丹佛學習時的業餘專案。
在史丹佛,Grant「走了點電腦科學的彎路」,隨後畢業加入了 Khan Academy 並擔任了兩年的數學講師,在 2016 年之後,他開始全身心投入 3b1b 的工作中。
如果你對自己的學習能力信心不足,或許看看 3b1b 的內容會是一個好主意,全程動畫演示,讓你對知識點明白的徹徹底底。
參考連結:https://www.youtube.com/watch?v=9-Jl0dxWQs8
相關文章
工作列“居中”顯示!這個美觀又實用的小技巧
2024-04-23
Docker映象的目錄儲存講解
2018-10-04
Docker
LLM可解釋性的未來希望?稀疏自編碼器是如何工作的,這裡有一份直觀說明
2024-08-05
用最基礎的方法講解 Redux 實現原理
2019-03-01
Redux
如何自動儲存複製B站、皮皮搞笑別人的影片?
2020-10-16
影片直播場景下物件儲存的應用
2023-11-06
物件
文字渲染的那些事(一)字型是如何儲存的?
2018-12-22
冰河,能不能講講如何實現MySQL資料儲存的無限擴容?
2020-12-19
MySql
手機裡面儲存好的影片怎麼裁剪畫面尺寸?
2021-05-20
Javascrip—前端本地儲存講解(16)
2018-09-28
Java
前端
這個好玩又實用的jupyter外掛我真的愛了
2022-03-19
如何運用TRIZ解決實際問題?這篇文章講的很清楚
2022-06-24
講了個好故事又做了個更刺激的模式,《戰爭機器5》這次真是又香又飽
2019-09-05
模式
Synology群暉NAS儲存遠端觀看在家中的影片檔案教程
2020-08-03
怎麼把影片壓縮?實用又簡單的壓縮影片方法
2021-04-19
以動畫的方式,快速直觀地檢視 Git 檔案變動歷史
2019-02-11
動畫
Git
如何選擇合適的物件儲存?這5個方面你值得思考!
2021-07-22
物件
如何靠地圖示註賺錢?這個思路簡單又實用
2022-08-15
地圖
動畫:用動畫給女朋友講解 TCP 四次分手過程
2019-10-21
動畫
TCP
Github又悄悄升級了,這次的變化是大檔案的儲存方式
2022-03-18
Github
Python為啥又火了?
2018-03-24
Python
Linux儲存效能觀測——iostat命令詳解
2020-11-03
Linux
iOS
超實用!7 個優秀的 UI 互動動畫技巧
2018-09-28
UI
動畫
百度貼吧怎麼儲存看過的影片?百度貼吧儲存影片的方法
2020-12-30
面對海量的監控影片資料應該如何儲存?
2023-02-27
Flutter動畫:用Flutter來實現一個拍手動畫
2019-09-30
Flutter
動畫
監控影片儲存壓縮解決方案
2023-02-23
如何使用HBase?大資料儲存的兩個實戰場景
2018-09-04
大資料
CSS實現文字打字動畫(+1白話講解)
2018-03-14
CSS
動畫
如何實現百萬TPS?詳解JMQ4的儲存設計
2019-01-19
MQ
這種方式解決EMC儲存崩潰RAID離線問題,簡單又高效
2019-11-13
AI
天美動畫師例項講解:如何才能畫好一團火焰?
2020-09-28
動畫
外星人遊戲本怎麼樣?講講客觀事實
2021-08-26
遊戲
用最簡單的例子講解js中解決非同步的方法
2020-11-22
JS
非同步
又雙叒叕是一個 canvas 動畫
2019-01-21
Canvas
動畫
超實用又簡單的畫素圖轉向量圖方法
2024-05-16
看得見的高斯過程:這是一份直觀的入門解讀
2019-02-12
我畫了13張圖,用最通俗易懂的話講HTTPS,拿下!
2021-12-21
HTTP