首頁  >  文章  >  科技週邊  >  本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

PHPz
PHPz轉載
2023-04-11 23:49:011311瀏覽

目前,大型語言模型(LLM)被認為是人工智慧突破的方向。人們正在嘗試用它們做各種複雜的事情,例如問答、創作、數學推理以及編寫程式碼等。近段時間 ChatGPT 持續的爆火是最好的例證。

然而,對於機器學習從業者來說,大模型的門檻很高:因為體積太大難以訓練,很長時間裡這個方向一直被大公司壟斷。不過最近,簡化 GPT 模型的方法越來越多了。 1 月中旬,前特斯拉AI 高級總監Andrej Karpathy(現已回歸OpenAI)就發布了#從零開始構建GPT 模型的完整教程

##。不過訓練出的 GPT 和 OpenAI 的 GPT-3 比較,兩者規模差距達 1 萬 - 100 萬倍。

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學近日,加拿大麥克馬斯特大學的一位軟體工程本科生Jay Mody 在導入NumPy 庫下,僅用60 行程式碼就從頭實現了一個GPT 模型,並將其命名為PicoGPT。不僅如此,他還將經過訓練的 GPT-2 模型權重載入到自己的實作中,並產生了一些文字。下面為 60 行程式碼展示。

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學#不過要做到這些,你需要熟悉Python 和NumPy,還要有一些訓練神經網路的基本經驗。作者表示,這篇部落格旨在對 GPT 進行簡單易懂的完整介紹。因此,作者只使用已經訓練的模型權重來實現前向傳遞程式碼。

#程式碼位址:

https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L58

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

##對於此項目。研究,Andrej Karpathy 給了四個字:雖然遲但到。想當初,Karpathy 建構的 minGPT 和 nanoGPT 還要 300 行程式碼。

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學值得一提的是,這篇教學不是完全零門檻的。為了讓讀者明白,作者首先介紹了什麼是 GPT、它的輸入、輸出如何等其他內容,介紹得都非常詳細。

###################至於GPT 到底能幹什麼,作者給了幾個範例,它能寫電子郵件、總結一本書、給你instagram 標題的想法、向5 歲的孩子解釋黑洞、用SQL 寫程式碼等。 ############透過仔細閱讀這部分內容後,你能大致了解 GPT 的一些基礎知識。有了這些背景介紹,接下來就是如何設定了。 #########專案介紹############設定###############這一章主要介紹如何設定編碼器、超參數以及參數。 #################################你要做的,首先是複製程式碼庫:####### ###############然後安裝依賴項:######

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

注意,如果你使用的是 M1 Macbook,在執行 pip install 之前,你需要在 requirements.txt 中將 tensorflow 更改為 tensorflow-macos。在這個專案下,檔案包括encoder.py、utils.py、gpt2.py、gpt2_pico.py:

  • encoder.py:包含OpenAI BPE Tokenizer 的程式碼,直接取自gpt-2 repo;
  • utils.py:包含下載和載入GPT-2 模型權重、tokenizer 和超參數的程式碼;
  • gpt2.py:包含GPT 模型和生成程式碼,可以將其作為python 腳本運行;
  • gpt2_pico.py:與gpt2.py 相同,但是程式碼行數更少。

其中gpt2.py 需要從頭開始實現,因此你要做的是先刪除gpt2.py 並重新建立一個空檔案:

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

然後將下列程式碼複製到gpt2.py 中:

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

##上述程式碼包含4 個主要部分:

  • gpt2 函數是本次實作GPT 的實際程式碼;
  • generate 函數實作自迴歸解碼演算法;
  • main 函數;

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

# fire.Fire (main) 將檔案轉換為CLI 應用程序,以便最終可以運行程式碼:python gpt2.py "some prompt here"。

main 函數包含有encode、hparams、params 參數,執行下列程式碼:

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

接著必要的模型以及tokenizer 檔案將被下載到models/124M 檔案。

設定完成之後,作者開始介紹編碼器、超參數、參數的一些細節內容。就拿編碼器來說,本文的編碼器和 GPT-2 所使用的 BPE tokenizer 一樣。以下是該編碼器編碼和解碼的一些文字範例:本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

實際的token 長這個樣子:本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

###要注意,有時token 是單字(例如Not),有時它們是單字但前面有一個空格(例如Ġall,Ġ代表一個空格),有時是單字的一部分(例如capes 被拆分為Ġcap 和es),有時它們是標點符號(例如.)。 ############BPE 的一個好處是它可以對任意字串進行編碼,如果遇到詞彙表中不存在的內容,它會將其分解為它能理解的子字串:#####################更細節的內容不再贅述。接下來介紹基礎神經網絡,這一部分就更加基礎了,主要包括 GELU、Softmax 函數以及 Layer Normalization 和 Linear。 ######

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

每一小部分都有程式碼範例,例如在Linear 部分,作者展示了標準矩陣乘法偏移:

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

#線性圖層從一個向量空間投影到另一個向量空間的程式碼如下:

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

#GPT 架構

這部分介紹GPT 自身架構。

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

#Transformer 架構如下:

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

##Transformer 僅使用解碼器堆疊(圖的右側部分):

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

##需要注意,由於擺脫了編碼器,中間的交叉注意力層也被刪除了。

在高層次上,GPT 體系架構有以下三個部分:

##文字位置嵌入;
  • Transformer 解碼器堆疊;
  • 投影到詞彙表。
  • 程式碼就像下面這樣:

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

#程式碼部分截圖

接下來更詳細地分解以上三個部分中的每一個部分,這裡也不再贅述。

以上就是作者對 GPT 的實現,接下來就是將它們組合在一起並運行程式碼,得到 gpt2.py。它的全部內容只有 120 行程式碼(如果刪除註解和空格,則為 60 行)。

作者透過以下方式測試結果:

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

##輸出結果如下:

本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學

#如作者所說的:這次實驗成功了。

本文只是跟著作者的思路大概介紹了整體流程,想要了解更多內容的小夥伴,可以參考原文連結。

原文連結:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers

以上是本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除