偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

你知道什么是微調(diào)嗎?大模型為什么要微調(diào)?以及大模型微調(diào)的原理是什么? 原創(chuàng)

發(fā)布于 2024-7-12 07:50
瀏覽
0收藏

“ 預(yù)訓(xùn)練(pre+train)+微調(diào)(fine+tuning),是目前主流的范式”

在學(xué)習(xí)大模型的過(guò)程中,怎么設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)和怎么訓(xùn)練模型是一個(gè)重要又基礎(chǔ)的操作。

但與之對(duì)應(yīng)的微調(diào)也是一個(gè)非常重要的手段,這里就著重講一下為什么要微調(diào),其優(yōu)點(diǎn)是什么以及微調(diào)的本質(zhì)。

你知道什么是微調(diào)嗎?大模型為什么要微調(diào)?以及大模型微調(diào)的原理是什么?-AI.x社區(qū)

01、什么是微調(diào)?

學(xué)習(xí)一門技術(shù)不但要知其然,也要知其所以然。

想了解為什么要微調(diào),首先要知道什么是微調(diào)?

我們常說(shuō)的大模型,指的是具有大量參數(shù)的神經(jīng)網(wǎng)絡(luò)模型,具體的可以看之前的文章??大模型的參數(shù)是什么??。然后經(jīng)過(guò)大量的訓(xùn)練數(shù)據(jù)訓(xùn)練出來(lái)的模型叫做大模型,也叫做預(yù)訓(xùn)練模型。

微調(diào)指的是微調(diào)大模型,是在預(yù)訓(xùn)練模型(已經(jīng)訓(xùn)練好的大模型)基礎(chǔ)之上,使用少量數(shù)據(jù)對(duì)大模型的全部或部分參數(shù)進(jìn)行調(diào)整,以達(dá)到在某個(gè)領(lǐng)域更好的效果。

舉例來(lái)說(shuō),剛設(shè)計(jì)好的一個(gè)神經(jīng)網(wǎng)絡(luò),就類似于一個(gè)從來(lái)沒(méi)上過(guò)學(xué)的學(xué)生,他什么玩意都不懂,只會(huì)根據(jù)自己的本能去處理問(wèn)題;

而訓(xùn)練大模型就相當(dāng)于讓這個(gè)學(xué)生完成了九年制義務(wù)教育或者上了大學(xué),也就是說(shuō)它接受過(guò)系統(tǒng)的教育,天文地理,物理化學(xué)等等均有涉獵,這樣的模型就叫做預(yù)訓(xùn)練模型。

而微調(diào)就是在這個(gè)基礎(chǔ)上完成某個(gè)方向的強(qiáng)化,比如想讓這個(gè)學(xué)生去參加奧數(shù)比賽,就要讓他對(duì)數(shù)學(xué)進(jìn)行強(qiáng)化學(xué)習(xí)。

這個(gè)就是微調(diào)。

微調(diào)來(lái)源于遷移學(xué)習(xí),所謂的遷移學(xué)習(xí)就是在已經(jīng)訓(xùn)練好的模型基礎(chǔ)上進(jìn)行適當(dāng)?shù)膬?yōu)化或者說(shuō)強(qiáng)化,這樣可以更加合理的利用各種資源。

02、為什么要微調(diào)?

前面說(shuō)了什么是微調(diào),這里講一下為什么要微調(diào)?

之所以需要進(jìn)行微調(diào),主要有以下兩方面原因:

  • 訓(xùn)練成本問(wèn)題
  • 訓(xùn)練數(shù)據(jù)問(wèn)題

之所以要進(jìn)行微調(diào),其實(shí)最主要的原因就是成本問(wèn)題。openAI公司訓(xùn)練GPT模型,一次的成本大概在幾百萬(wàn)到上千萬(wàn)美元;換算成人民幣就是上千萬(wàn)到上億的成本。

雖然很多公司使用的大模型不需要有GPT模型那么強(qiáng)大,也不需要上億的訓(xùn)練成本,但從零開始訓(xùn)練一個(gè)大模型,少說(shuō)也要幾百萬(wàn)人民幣,這對(duì)個(gè)人和絕大部分公司來(lái)說(shuō)都是不可接受的。

還一個(gè)原因就是,訓(xùn)練數(shù)據(jù)的收集同樣需要巨大的成本,而拋開成本來(lái)說(shuō),很多公司根本無(wú)法收集到足夠的訓(xùn)練數(shù)據(jù),而沒(méi)有足夠的訓(xùn)練數(shù)據(jù),那么就很難訓(xùn)練出一個(gè)很好的模型。

這時(shí),微調(diào)的作用就體現(xiàn)出來(lái)了。微調(diào)只需要在別人已經(jīng)訓(xùn)練好的模型之上,使用少量的數(shù)據(jù)對(duì)模型部分或全部參數(shù)進(jìn)行調(diào)整即可。

之所以說(shuō)對(duì)預(yù)訓(xùn)練模型的全部或部分參數(shù)進(jìn)行調(diào)整是因?yàn)椋⒄{(diào)分為全量(參數(shù))微調(diào)(Full Fine Tuning)部分(參數(shù))微調(diào)——高效微調(diào)PEFT(Parameter-Efficient Fine Tuning),只不過(guò)很少有人會(huì)進(jìn)行全量微調(diào)。

全量微調(diào)就相當(dāng)于,你本來(lái)只是在一個(gè)普通的本科院校學(xué)習(xí);然后突然有一天有個(gè)機(jī)會(huì)讓你到一所985/211的學(xué)校去學(xué)習(xí),學(xué)習(xí)的內(nèi)容還是一樣,不過(guò)人家教的會(huì)更好。

部分參數(shù)微調(diào)就是相當(dāng)于,你進(jìn)了你們學(xué)校的實(shí)驗(yàn)班或突擊班,去強(qiáng)化學(xué)習(xí)部分課程。

所以什么情況下適合微調(diào)?

  • 無(wú)法接受訓(xùn)練的成本問(wèn)題
  • 訓(xùn)練數(shù)據(jù)不足
  • 想使用別人已經(jīng)訓(xùn)練好的開源模型(huggingface上有大量開源模型)
  • 數(shù)據(jù)安全問(wèn)題,不能接受把數(shù)據(jù)上傳到第三方大模型公司

這幾種情況比較適合微調(diào),如果不缺錢,又不缺數(shù)據(jù),技術(shù)又過(guò)關(guān);那么自己設(shè)計(jì)模型,自己訓(xùn)練是最好的方式。

當(dāng)然,微調(diào)也不是萬(wàn)能的,只有在相似的條件下才可以進(jìn)行微調(diào);比如,一個(gè)識(shí)別貓狗的預(yù)訓(xùn)練模型,你要用人臉數(shù)據(jù)進(jìn)行人臉識(shí)別微調(diào),這就行不通了。畢竟,貓狗的數(shù)據(jù)特征和人臉還是有很大差別的。

02、怎么微調(diào),微調(diào)的具體步驟?

前面說(shuō)了,微調(diào)的目的是調(diào)整模型的參數(shù),所以本質(zhì)上和步驟上微調(diào)和訓(xùn)練沒(méi)太大區(qū)別,都需要經(jīng)過(guò)數(shù)據(jù)收集處理,數(shù)據(jù)加載,正向傳播,反向傳播優(yōu)化的過(guò)程,然后給模型參數(shù)找到一個(gè)最優(yōu)解。

只不過(guò)微調(diào)大部分情況下都是調(diào)整部分參數(shù),而這種微調(diào)方式叫做——高效微調(diào)。也就是說(shuō)用少量的數(shù)據(jù),優(yōu)化部分參數(shù),以達(dá)到更好的效果。

既然是對(duì)模型參數(shù)的調(diào)整,那么具體是怎么操作的呢?

在神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程中,有數(shù)據(jù)處理,正向傳播,反向傳播和優(yōu)化器,如果不了解神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程的可以看??神經(jīng)網(wǎng)絡(luò)的通用訓(xùn)練流程??。

而微調(diào)就發(fā)生在優(yōu)化器上,訓(xùn)練的過(guò)程是優(yōu)化器根據(jù)損失差通過(guò)反向傳播的方式調(diào)整參數(shù);而微調(diào)也是通過(guò)優(yōu)化器去調(diào)整模型的參數(shù)。

基于pytorch框架的神經(jīng)網(wǎng)絡(luò),其微調(diào)部分參數(shù)的原理就是通過(guò)凍結(jié)參數(shù),把不需要調(diào)整的參數(shù)凍結(jié),這樣大模型在微調(diào)的過(guò)程中就只會(huì)優(yōu)化可以被調(diào)整的參數(shù)。

而全量微調(diào)就是不凍結(jié)參數(shù),所有參數(shù)都會(huì)被調(diào)整。

代碼如下所示:

"""
基于pytorch框架的神經(jīng)網(wǎng)絡(luò)
"""
# 加載模型
model = AutoModelForCausalLM.from_pretrained(
    model_id, torch_dtype="auto", device_map="auto"
)


# 獲取模型參數(shù)
for name, param in model.parameters():
    # 判斷哪些參數(shù)需要凍結(jié) 參數(shù)名中包含bias的參數(shù)被凍結(jié) 不會(huì)被修改
    if "bias" not in name:
        param.requires_grad = False


# 優(yōu)化器


optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

這樣,通過(guò)微調(diào)模型,就可以讓預(yù)訓(xùn)練模型達(dá)到自己想要的效果。


本文轉(zhuǎn)載自公眾號(hào)AI探索時(shí)代 作者:DFires

原文鏈接:????https://mp.weixin.qq.com/s/LLZKnJGDB-2iJU2Q1AiuUA??


?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
已于2024-7-12 08:00:19修改
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦