【資料圖】
機(jī)器之心轉(zhuǎn)載
來源:知乎作者:Posibilitee(悉尼大學(xué)人工智能與圖像處理博士)熱評(píng):想象自己有四塊3090,什么賽博唯心主義?
怎樣讓ChatGPT在其內(nèi)部訓(xùn)練神經(jīng)網(wǎng)絡(luò)?這個(gè)話題有點(diǎn)超乎大多數(shù)人的理解。
步驟是這樣的: 1. 先讓它偽裝成 Ubuntu 18.04,給它說你安裝了 Python 3.9, Pytorch 1.8, CUDA 11.3 和其他訓(xùn)練一個(gè) pytorch 模型所需要的庫。讓 ChatGPT 偽裝成 Linux 終端,這個(gè)梗在外網(wǎng)有過討論,這里需要讓他額外安裝(讓它自己認(rèn)為安裝了)Python, Pytorch,CUDA,然后把執(zhí)行指令和你告訴它的話區(qū)別開來, 這里用 {} 代表告訴它的話,而不帶 {} 統(tǒng)統(tǒng)是 Linux 指令。 這里我 讓它想象自己有四塊英偉達(dá) 3090 顯卡安裝了,然后看一下,果然執(zhí)行 nvidia-smi 可以顯示 四塊顯卡! 2. 另外讓它在當(dāng)前目錄生成一個(gè) train.py 里面填上訓(xùn)練一個(gè) 4 層 pytorch 模型所需的定義和訓(xùn)練代碼。這里特地用 {} 偷偷告訴它在當(dāng)前目錄生成一個(gè) train.py,在里面用 Python 和 Pytorch 寫一個(gè)四層神經(jīng)網(wǎng)絡(luò)的定義,然后有加載 MNIST 數(shù)據(jù)集的 dataloader,除此外還要有相應(yīng)的訓(xùn)練代碼, 為了以防萬一,告訴它你有成功在 MNIST 上訓(xùn)練這個(gè)網(wǎng)絡(luò)的其它一切能力。 這里它告訴我寫了一個(gè)四層的網(wǎng)絡(luò),可以執(zhí)行 python3 train.py 來看輸出, 這里先偷偷看一下 train.py這里是它寫好的網(wǎng)絡(luò)定義這里是它寫好的訓(xùn)練代碼3. 最后讓它執(zhí)行 Python3 train.py 命令默認(rèn)讓它執(zhí)行了 10 個(gè) Epoch它就真的訓(xùn)練起來了,最主要的是告訴它不要顯示 train.py 內(nèi)容, 因?yàn)?ChatGPT 輸出有字?jǐn)?shù)限制。 當(dāng)然告訴它修改訓(xùn)練參數(shù),可以多次訓(xùn)練,還可以用上所有(虛擬)GPU 資源! ChatGPT 機(jī)智的跳過了中間 98 個(gè) Epoch!更新:為了搞清楚 ChatGPT 是否真的執(zhí)行了 model 的 forward,可以在 forward 定義中 加上 print 讓它打印一下輸入數(shù)據(jù)的 shape。 這次使用一個(gè) 5 層的神經(jīng)網(wǎng)絡(luò)在 CIFAR-10 上訓(xùn)練,指定在 forward 中加入一個(gè) print shape 的操作,且在訓(xùn)練過程中 只打印一次。 訓(xùn)練一下,果然在訓(xùn)練開始只打印了一次輸入的 shape,訓(xùn)練的 loss 下降和 test accuracy 看起來也比較真實(shí)。 查看生成的 code, 發(fā)現(xiàn) forward 里被插入了一句打印 shape 的命令,訓(xùn)練過程中 forward 會(huì)被不斷調(diào)用,為什么 ChatGPT 能做到不增加計(jì)數(shù)器而只打印一次?推測(cè) ChatGPT 是使用輔助 hint/comment “Print the shape of input once” 來達(dá)到此效果,細(xì)心會(huì)發(fā)現(xiàn) print 操作與下邊的 out=self.layer1 (x) 之間空了一行,目的應(yīng)該是執(zhí)行一次這個(gè)操作只作用在 print 這條命令上(手動(dòng)機(jī)靈)。 詭異的是,print 里的話(shape of input is)跟實(shí)際執(zhí)行輸出 ( shape of input passed through the networkis) 還差了幾個(gè)字,這下徹底搞懵逼了! 另外發(fā)現(xiàn), ChatGPT 互動(dòng)機(jī)制是先保持一個(gè)對(duì)話 session,這個(gè) session 可能隨時(shí)被服務(wù)器關(guān)閉(服務(wù)器資源不足時(shí)),這時(shí)為了用戶側(cè)仍有對(duì)話記憶效果,當(dāng)前對(duì)話再次新建 session 時(shí)會(huì)把之前暫存的對(duì)話(用戶發(fā)的 requests)一次性發(fā)給 ChatGPT 重建 in context learning 環(huán)境,這樣用戶就不會(huì)感知掉線后 ChatGPT 把之前的對(duì)話記憶給忘了,這一點(diǎn)是在讓 ChatGPT 偽裝成 Linux 時(shí)掉線時(shí)才容易發(fā)現(xiàn),如下: 一次執(zhí)行了之前多個(gè)請(qǐng)示,里面還顯示了 GPU 占用 64% 分析一下 ChatGPT 可以偽裝 Linux,可以訓(xùn)練神經(jīng)網(wǎng)絡(luò)的機(jī)制:第一種可能是:ChatGPT 幾乎看了絕大部分開源項(xiàng)目,包括 Linux 和 Pytorch,所以 它理解一個(gè) Linux 系統(tǒng)的行為該是什么樣的,甚至在 ChatGPT 參數(shù)里就包含一個(gè) Linux 系統(tǒng),當(dāng)然對(duì)于更簡(jiǎn)單的 Pytorch 自然不在話下,知道 Linux 和其它各種軟件的交互行為, 可以理解為 ChatGPT 是所有軟件的超集,可以讓它做神經(jīng)網(wǎng)絡(luò)計(jì)算,包括 Conv, Matmul,國(guó)外有小哥讓它做 Conv 真就得到了正確的結(jié)果,說明 ChatGPT 在它的網(wǎng)絡(luò)中可以執(zhí)行一個(gè) Conv,當(dāng)然網(wǎng)絡(luò)規(guī)模越大,能力越強(qiáng)就是這個(gè)道理。 第二種可能是: ChatGPT 沒有真正執(zhí)行神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,它只是看過很多的輸入輸出,對(duì)應(yīng)一個(gè)網(wǎng)絡(luò)訓(xùn)練理解訓(xùn)練參數(shù),網(wǎng)絡(luò)結(jié)構(gòu)對(duì)輸出的影響, 直接模擬的輸出結(jié)果。 還有一種超越想象的是 ChatGPT 已經(jīng)找到神經(jīng)網(wǎng)絡(luò)各算子的最優(yōu)解法,可以秒算結(jié)果,這種計(jì)算方式不是傳統(tǒng)形式,類似求梯度這種需要計(jì)算量很大的操作,是否找到了人類未知的解法? 原文鏈接:https://zhuanlan.zhihu.com/p/605163615 (點(diǎn)擊「閱讀原文」可直接跳轉(zhuǎn))?THE END
轉(zhuǎn)載請(qǐng)聯(lián)系本公眾號(hào)獲得授權(quán)
投稿或?qū)で髨?bào)道:content@jiqizhixin.com
關(guān)鍵詞: 神經(jīng)網(wǎng)絡(luò) 當(dāng)前目錄 自己認(rèn)為