本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學
目前,大型語言模型(LLM)被認為是人工智慧突破的方向。人們正在嘗試用它們做各種複雜的事情,例如問答、創作、數學推理以及編寫程式碼等。近段時間 ChatGPT 持續的爆火是最好的例證。
然而,對於機器學習從業者來說,大模型的門檻很高:因為體積太大難以訓練,很長時間裡這個方向一直被大公司壟斷。不過最近,簡化 GPT 模型的方法越來越多了。 1 月中旬,前特斯拉AI 高級總監Andrej Karpathy(現已回歸OpenAI)就發布了#從零開始構建GPT 模型的完整教程
##。不過訓練出的 GPT 和 OpenAI 的 GPT-3 比較,兩者規模差距達 1 萬 - 100 萬倍。
近日,加拿大麥克馬斯特大學的一位軟體工程本科生Jay Mody 在導入NumPy 庫下,僅用60 行程式碼就從頭實現了一個GPT 模型,並將其命名為PicoGPT。不僅如此,他還將經過訓練的 GPT-2 模型權重載入到自己的實作中,並產生了一些文字。下面為 60 行程式碼展示。
#不過要做到這些,你需要熟悉Python 和NumPy,還要有一些訓練神經網路的基本經驗。作者表示,這篇部落格旨在對 GPT 進行簡單易懂的完整介紹。因此,作者只使用已經訓練的模型權重來實現前向傳遞程式碼。
#程式碼位址:
https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L58
值得一提的是,這篇教學不是完全零門檻的。為了讓讀者明白,作者首先介紹了什麼是 GPT、它的輸入、輸出如何等其他內容,介紹得都非常詳細。
###################至於GPT 到底能幹什麼,作者給了幾個範例,它能寫電子郵件、總結一本書、給你instagram 標題的想法、向5 歲的孩子解釋黑洞、用SQL 寫程式碼等。 ############透過仔細閱讀這部分內容後,你能大致了解 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 並重新建立一個空檔案:
然後將下列程式碼複製到gpt2.py 中:
##上述程式碼包含4 個主要部分:
- gpt2 函數是本次實作GPT 的實際程式碼;
- generate 函數實作自迴歸解碼演算法;
- main 函數;
main 函數包含有encode、hparams、params 參數,執行下列程式碼:
接著必要的模型以及tokenizer 檔案將被下載到models/124M 檔案。
設定完成之後,作者開始介紹編碼器、超參數、參數的一些細節內容。就拿編碼器來說,本文的編碼器和 GPT-2 所使用的 BPE tokenizer 一樣。以下是該編碼器編碼和解碼的一些文字範例:
實際的token 長這個樣子:
###要注意,有時token 是單字(例如Not),有時它們是單字但前面有一個空格(例如Ġall,Ġ代表一個空格),有時是單字的一部分(例如capes 被拆分為Ġcap 和es),有時它們是標點符號(例如.)。 ############BPE 的一個好處是它可以對任意字串進行編碼,如果遇到詞彙表中不存在的內容,它會將其分解為它能理解的子字串:#####################更細節的內容不再贅述。接下來介紹基礎神經網絡,這一部分就更加基礎了,主要包括 GELU、Softmax 函數以及 Layer Normalization 和 Linear。 ######
每一小部分都有程式碼範例,例如在Linear 部分,作者展示了標準矩陣乘法偏移:
#線性圖層從一個向量空間投影到另一個向量空間的程式碼如下:
#GPT 架構
這部分介紹GPT 自身架構。
#Transformer 架構如下:
##Transformer 僅使用解碼器堆疊(圖的右側部分):
在高層次上,GPT 體系架構有以下三個部分:
##文字位置嵌入;
- Transformer 解碼器堆疊;
- 投影到詞彙表。
- 程式碼就像下面這樣:
接下來更詳細地分解以上三個部分中的每一個部分,這裡也不再贅述。
以上就是作者對 GPT 的實現,接下來就是將它們組合在一起並運行程式碼,得到 gpt2.py。它的全部內容只有 120 行程式碼(如果刪除註解和空格,則為 60 行)。
作者透過以下方式測試結果:
##輸出結果如下:
#如作者所說的:這次實驗成功了。
本文只是跟著作者的思路大概介紹了整體流程,想要了解更多內容的小夥伴,可以參考原文連結。
原文連結:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers
以上是本科生60行程式碼教你手搓GPT大模型,技術介紹堪比教學的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

想像一下,一個人工智慧模型,不僅擁有超越傳統運算的能力,還能以更低的成本實現更有效率的效能。這不是科幻,DeepSeek-V2[1],全球最強開源MoE模型來了。 DeepSeek-V2是一個強大的專家混合(MoE)語言模型,具有訓練經濟、推理高效的特點。它由236B個參數組成,其中21B個參數用於啟動每個標記。與DeepSeek67B相比,DeepSeek-V2效能更強,同時節省了42.5%的訓練成本,減少了93.3%的KV緩存,最大生成吞吐量提高到5.76倍。 DeepSeek是一家探索通用人工智

AI,的確正在改變數學。最近,一直十分關注這個議題的陶哲軒,轉發了最近一期的《美國數學學會通報》(BulletinoftheAmericanMathematicalSociety)。圍繞著「機器會改變數學嗎?」這個話題,許多數學家發表了自己的觀點,全程火花四射,內容硬核,精彩紛呈。作者陣容強大,包括菲爾茲獎得主AkshayVenkatesh、華裔數學家鄭樂雋、紐大電腦科學家ErnestDavis等多位業界知名學者。 AI的世界已經發生了天翻地覆的變化,要知道,其中許多文章是在一年前提交的,而在這一

谷歌力推的JAX在最近的基準測試中表現已經超過Pytorch和TensorFlow,7項指標排名第一。而且測試並不是JAX性能表現最好的TPU上完成的。雖然現在在開發者中,Pytorch依然比Tensorflow更受歡迎。但未來,也許有更多的大型模型會基於JAX平台進行訓練和運行。模型最近,Keras團隊為三個後端(TensorFlow、JAX、PyTorch)與原生PyTorch實作以及搭配TensorFlow的Keras2進行了基準測試。首先,他們為生成式和非生成式人工智慧任務選擇了一組主流

本月初,來自MIT等機構的研究者提出了一種非常有潛力的MLP替代方法—KAN。 KAN在準確性和可解釋性方面表現優於MLP。而且它能以非常少的參數量勝過以更大參數量運行的MLP。例如,作者表示,他們用KAN以更小的網路和更高的自動化程度重現了DeepMind的結果。具體來說,DeepMind的MLP有大約300,000個參數,而KAN只有約200個參數。 KAN與MLP一樣具有強大的數學基礎,MLP基於通用逼近定理,而KAN基於Kolmogorov-Arnold表示定理。如下圖所示,KAN在邊上具

波士頓動力Atlas,正式進入電動機器人時代!昨天,液壓Atlas剛「含淚」退出歷史舞台,今天波士頓動力就宣布:電動Atlas上崗。看來,在商用人形機器人領域,波士頓動力是下定決心要跟特斯拉硬剛一把了。新影片放出後,短短十幾小時內,就已經有一百多萬觀看。舊人離去,新角色登場,這是歷史的必然。毫無疑問,今年是人形機器人的爆發年。網友銳評:機器人的進步,讓今年看起來像人類的開幕式動作、自由度遠超人類,但這真不是恐怖片?影片一開始,Atlas平靜地躺在地上,看起來應該是仰面朝天。接下來,讓人驚掉下巴

特斯拉機器人Optimus最新影片出爐,已經可以在工廠裡打工了。正常速度下,它分揀電池(特斯拉的4680電池)是這樣的:官方還放出了20倍速下的樣子——在小小的「工位」上,揀啊揀啊揀:這次放出的影片亮點之一在於Optimus在廠子裡完成這項工作,是完全自主的,全程沒有人為的干預。而且在Optimus的視角之下,它還可以把放歪了的電池重新撿起來放置,主打一個自動糾錯:對於Optimus的手,英偉達科學家JimFan給出了高度的評價:Optimus的手是全球五指機器人裡最靈巧的之一。它的手不僅有觸覺

這篇論文探討了在自動駕駛中,從不同視角(如透視圖和鳥瞰圖)準確檢測物體的問題,特別是如何有效地從透視圖(PV)到鳥瞰圖(BEV)空間轉換特徵,這一轉換是透過視覺轉換(VT)模組實施的。現有的方法大致分為兩種策略:2D到3D和3D到2D轉換。 2D到3D的方法透過預測深度機率來提升密集的2D特徵,但深度預測的固有不確定性,尤其是在遠處區域,可能會引入不準確性。而3D到2D的方法通常使用3D查詢來採樣2D特徵,並透過Transformer學習3D和2D特徵之間對應關係的注意力權重,這增加了計算和部署的

寫在前面項目連結:https://nianticlabs.github.io/mickey/給定兩張圖片,可以透過建立圖片之間的對應關係來估計它們之間的相機姿態。通常,這些對應關係是二維到二維的,而我們估計的姿態在尺度上是不確定的。一些應用,例如隨時隨地實現即時增強現實,需要尺度度量的姿態估計,因此它們依賴外部的深度估計器來恢復尺度。本文提出了MicKey,這是一個關鍵點匹配流程,能夠夠預測三維相機空間中的度量對應關係。透過學習跨影像的三維座標匹配,我們能夠在沒有深度測試的情況下推斷度量相對
