怎么設計一個自己的大模型?設計一個大模型需要哪些能力? 原創
?“ 自己設計并實現一個大模型,才能對大模型技術有更加深刻的體會”
對學習大模型技術的人來說,大家都想體驗自己訓練和微調一個模型,但受限于自身條件,可能很多人無法達成這個目的;但不知道有人是否思考過,能否自己設計一個模型,根據自己的想法去落地一個大模型。
當然,這個大模型也不一定非要體積特別大,也可以是一個參數規模較小的模型。那么應該怎么實現它呢?
設計一個大模型的思路
怎么設計一個大模型,不知道大家有沒有思考過這個問題,就是自己從零開始,一步一步地設計并完善一個模型。
那具體應該怎么做呢?
對有過產品開發經驗的人來說,設計與開發一個產品,一般會有一個完善的流程;因此,設計一個大模型也不例外。
設計一個大模型首先要做的就是需求采集,簡單來說就是你想要一個什么樣的大模型? 也可以說你想讓這個大模型實現什么樣的功能?
比如讓這個模型實現一個分類任務,又或者讓它能夠回答問題,總結會議等;不要一上來就想做那么大,那么復雜;先從一個小功能開始,去了解一個模型的實現過程。
有了需求之后,還要做什么?做需求評審,也就是說這里面哪些需求是合適的,哪些是不合適的;比如功能上是否有沖突,技術上是否能實現等等。
當然,更多關于產品開發流程的內容這里就不多說了;我們今天主要討論的是技術問題。
有了需求之后,我們需要找到一個合適的機器學習模型;比如決策樹,支持向量機,神經網絡模型等。
我們就以神經網絡模型來說,是選擇一個現有的模型架構,比如Transformer,BERT,RNN等;還是自己設計一個新的架構模式,當然根據大部分人的水平來看,還是選擇現有的架構比較靠譜一點。
所以,這一步我們需要根據自己的需求選擇一個能夠實現需求的神經網絡架構模型。
ok ,現在需求確定了,神經網絡模型有了;那么怎么把這個神經網絡架構與自己的需求結合起來?
比如說,要想實現你的需求,需要設計一個多少層的神經網絡?每個網絡層的作用是什么? 應該實現哪些功能,用哪些算法去實現?可能存在哪些問題?
比如說卷積神經網絡架構,那幾層需要對圖片進行卷積,卷積參數有哪些?卷積到什么程度等等。
再有,輸入層怎么設計,輸出層怎么設計?
神經網絡模型的第一層就是輸入層,它需要接收和處理來自外部的訓練數據和用戶數據;因此第一層主要的任務就是數據處理。
神經網絡模型的最后一層就是輸出層,輸出層的作用是什么?
輸出層的作用是把神經網絡處理之后的數據轉換為需要的格式,比如文字,圖片,視頻等多種格式的數據;而在神經網絡設計完成之后,與用戶交互的只有輸入層與輸出層,中間的多層網絡就是一個黑盒模型,對用戶來說是完全不可見的。
好,現在神經網絡架構有了,神經網絡也有了,輸入輸出層也有了;那么,怎么設計損失函數?因為損失函數是模型訓練的重要環節之一;有了損失函數,模型在訓練過程中才知道不同的參數應該訓練到什么程度。
有了損失函數之后,還需要有激活函數,激活函數又應該怎么設計?
所謂的激活函數,就是神經網絡中神經元是否會向下一個神經元傳遞“突觸”;其實說白了,激活函數就是正向傳播的一種實現手段,正向傳播的過程中,激活函數發揮著不可替代的作用。
ok,經過以上的努力,一個神經網絡模型的雛形已經基本具備了;但其中還少了一個環節,那就是反向傳播。
反向傳播算法可以說是神經網絡模型中非常重要的一個節點,沒有反向傳播,大模型就無法做到參數調整,那么預訓練就成了一個徹頭徹尾的笑話。所以,反向傳播也是一個模型必不可少的一個環節。
當然,上面說的這些都是純理論方面的東西,也就是設計一個神經網絡的基本步驟;讀者也可以根據以上步驟,自己思考實現一個神經網絡模型。
但理論畢竟只是理論,任何天上飛的理念都要有落地的實現;即使選擇了合適的模型架構,也設計好了神經網絡模型,輸入層,輸出層,激活函數,損失函數等;但具體怎么實現,用哪種算法實現,是否還能進行優化?
這時用戶就需要根據自己的需求與存在的問題進行架構和技術上的調整或優化。
總之,設計和實現一個模型是一家大模型服務公司的核心技術,也是其立足的根本;當然,理論是一回事,現實是另一回事,即使使用同樣的模型架構,可能在不同的企業會得到不完全相同的結果。
比如,全世界有很多家做模型服務的企業都在搞Transformer模型,但能做到像openAI那么強的卻沒幾個。
而且,真正從事大模型設計與實現的人,大部分都具備較強的數學功底;原因就在于大模型就是通過數學對人腦進行的抽象。
?
本文轉載自公眾號AI探索時代 作者:DFires
