小學二年級數學水平,跟著這篇部落格也能理解LLM執行原理

机器之心發表於2024-11-25

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

「小白學 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 則表示影像中物體的尺寸

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

  1. 單輸出:讓網路輸出一個數值,若數值為正,則判斷為「葉子」;若數值為負,則判斷為「花朵」。
  2. 雙輸出:讓網路輸出兩個數值,第一個數值代表葉子,第二個數值代表花朵,取數值較大的那個作為分類結果。

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

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

圖片

圖中圓圈內的數值代表:神經元 / 節點。連線線上的有色數字代表權重。每一列代表一層:神經元的集合稱為一層。可以將該網路理解為具有三層:輸入層(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

相關文章