小學二年級數學水平,跟著這篇博客也能理解LLM運行原理

機器之心報導

機器之心編輯部

大家好,這是我們翻譯的西瓜書平替。

「小白學 AI 該從哪裡下手?」

去互聯網上搜索一圈,最高讚的回覆往往是高數起手,概率論也要學一學吧,再推薦一本大名鼎鼎的「西瓜書」。

但入門的門檻足以勸退一大波人了。翻開《西瓜書》前幾頁,看看基本術語解釋,一些基本數學概念還是要瞭解的。

西瓜書《機器學習》第 3 頁。

但為了避免「從入門到放棄」,有沒有一種可能,不需要學更多數學,就能搞懂大模型的運行原理?

最近,Meta Gen AI 部門的數據科學總監 Rohit Patel 聽到了你的心聲。他用加法和乘法 —— 小學二年級的數學知識,深入淺出地解析了大模型的基礎原理。

原文鏈接:https://towardsdatascience.com/understanding-llms-from-scratch-using-middle-school-math-e602d27ec876

如果你想更進一步,按照博客中的指導,親手構建一個像 Llama 系列的 LLM 也完全可行。

讀過的網民留下了好評:「博客相當長,雖然我才看了一半,但可以向你保證,這值得花時間一讀。」

「所有的知識點都包圓了,學這 1 篇頂 40 億篇其他資料!」

內容概覽

為了使內容更簡潔,Rohit 儘量避免了機器學習領域的複雜術語,將所有概念簡化為了數字。

整個博客首先回答了四個問題:

  • 一個簡單的神經網絡怎樣構成?

  • 這些模型是如何訓練的?

  • 這一切是如何生成語言的?

  • 是什麼讓 LLM 的性能如此出色?

在基礎的原理摸清之後,Rohit 要從細節入手,從嵌入、分詞器、自注意力等概念講起,由淺入深,逐步過渡到對 GPT 和 Transformer 架構的全面理解。

這個博客對新手有多友好呢?先來試讀一段:

神經網絡只能接受數字輸入,並且只能輸出數字,沒有例外。關鍵在於如何將各種形式的輸入轉換為數字,以及如何將輸出的數字解讀為所需的結果。從本質上講,構建 LLM 的核心問題就是設計一個能夠執行這些轉換的神經網絡。

那麼一個可以根據圖片輸入,分出花朵和葉子的神經網絡大概是這樣的:

其中,RGB 值表示圖像的顏色信息,Vol 則表示圖像中物體的尺寸

其中,RGB 值表示圖像的顏色信息,Vol 則表示圖像中物體的尺寸

神經網絡無法直接根據這些數字分類,為此,我們可以考慮以下兩種方案:

單輸出:讓網絡輸出一個數值,若數值為正,則判斷為「葉子」;若數值為負,則判斷為「花朵」。

雙輸出:讓網絡輸出兩個數值,第一個數值代表葉子,第二個數值代表花朵,取數值較大的那個作為分類結果。

由於「雙輸出」的方法在後續的步驟中更通用,一般都會選擇這種方案。

以下是基於「雙輸出」的神經網絡分類結構,讓我們逐步分析其工作原理。

圖中圓圈內的數值代表:神經元 / 節點。連接線上的有色數字代表權重。每一列代表一層:神經元的集合稱為一層。可以將該網絡理解為具有三層:輸入層(4 個神經元)、中間層(3 個神經元)和輸出層(2 個神經元)。

那麼中間層的第一個節點的計算如下:

(32 * 0.10) + (107 * -0.29) + (56 * -0.07) + (11.2 * 0.46) = -26.6

要計算該網絡的輸出(即前向傳播過程),需要從左側的輸入層開始。我們將已有的數據輸入到輸入層的神經元中。接著,將圓圈內的數字乘以對應的權重,並將結果相加,依次傳遞到下一層。

運行整個網絡後,可以看到輸出層中第一個節點的數值較大,表示分類結果為「葉子」。一個訓練良好的網絡可以接受不同的 (RGB, Vol) 輸入,並準確地對物體進行分類。

模型本身並不理解「葉子」或「花朵」是什麼,也不瞭解 RGB 的含義。它的任務僅僅是接收 4 個數字並輸出 2 個數字。我們負責提供輸入數值,並決定如何解讀輸出,例如當第一個數值較大時,將其判斷為「葉子」。

此外,我們還需要選擇合適的權重,以確保模型在接收輸入後給出的兩個數值符合需求。

我們可以使用相同的網絡,將 (RGB, Vol) 替換為其他數值,如雲量和濕度,並將輸出的兩個數值解讀為「1 小時後晴」或「1 小時後雨」。只要權重調整得當,這個網絡可以同時完成分類葉子 / 花朵和預測天氣兩項任務。網絡始終輸出兩個數字,而如何解讀這些數字 —— 無論是用於分類、預測,還是其他用途 —— 完全取決於我們的選擇。

為了儘可能簡單,剛剛的「神經網絡」中省略了以下內容:

激活層:在神經網絡中,激活層的主要作用是引入非線性因素,使網絡能夠處理更複雜的問題。如果沒有激活層,神經網絡的每一層只是對輸入進行簡單的加法和乘法運算,整體上仍然是線性的。即使增加多層,這樣的網絡也無法解決複雜的非線性問題。

激活層將在每個節點上應用一個非線性函數,常用的激活函數之一是 ReLU,其規則是:如果輸入是正數,輸出保持不變;如果輸入是負數,輸出為零。

如果沒有激活層,上一個例子中的綠色節點的值為 (0.10 * -0.17 + 0.12 * 0.39–0.36 * 0.1) * R + (-0.29 * -0.17–0.05 * 0.39–0.21 * 0.1) * G,所有中間層就像攤大餅一樣鋪在一起,計算也將越來越繁複。

偏置:在神經網絡中,每個節點(也稱為神經元)除了接收輸入數據並進行加權求和外,還會加上一個額外的數值,稱為偏置。偏置的作用類似於函數中的截距。在模型中我們又稱它為參數。

例如,如果頂部藍色節點的偏置為 0.25,則節點的值為:(32 * 0.10) + (107 * -0.29) + (56 * -0.07) + (11.2 * 0.46) + 0.25 = -26.35。

通過引入偏置,神經網絡能夠更好地擬合數據,提高模型的表現。

Softmax:Softmax 函數用於將模型的輸出轉換為概率。它可以將任何數轉換為一個範圍在 0 到 1 之間的數,且所有元素之和為 1。這使得每個輸出值都可以轉化為對應類別的概率。

更多研究細節,請參看博客原文。

作者介紹

這篇博客的作者 Rohit Patel 在數據科學領域深耕了 15 年,現在是 Meta GenAI 數據科學總監,參與了 Llama 系列模型的研發。

Rohit 擁有跨越多個領域的豐富職業經歷。他的職業生涯始於 2002 年,在 Brainsmiths Education 擔任物理助教。隨後,他在金融領域從業十年。

2018 年,他加入了 Meta,擔任 Facebook Monetization 的數據科學總監。2020 年,他創立了 CoFoundUp,擔任創始人兼首席執行官。2021 年,他又創辦了 QuickAI,QuickAI 是一款專注於簡化數據科學流程的可視化工具,用戶無需安裝任何應用程序、插件或擴展,即可在瀏覽器中完成數據科學任務。

參考鏈接:

https://x.com/rohanpaul_ai/status/1854226721530073162

https://towardsdatascience.com/understanding-llms-from-scratch-using-middle-school-math-e602d27ec876