什么是超參數(shù)?大模型的超參數(shù)是做什么用的?超參數(shù)和大模型參數(shù)有什么關(guān)系? 原創(chuàng)
“ 超參數(shù)是指由開發(fā)者設(shè)置的參數(shù),而不是由模型訓練得到的參數(shù)”
對了解過機器學習模型的人來說,應該都知道模型訓練的過程就是不斷調(diào)整模型參數(shù)的過程。調(diào)整方式就是通過正反向傳播以及損失差的計算和優(yōu)化器對參數(shù)進行調(diào)整,不懂得可以看一下文章大模型的參數(shù)什么。
而超參數(shù)又是什么呢?今天就來介紹一下超參數(shù)。
01、什么是超參數(shù)?
用一句話來說,超參數(shù)就是模型開發(fā)者設(shè)置的參數(shù),而不是由模型通過訓練學習到的參數(shù)。
怎么理解這句話呢?
先來說一下模型的參數(shù),現(xiàn)在說大模型都是有多少多少參數(shù),比如chatGLM-6B就是具有六十多億參數(shù)的模型,而chatGPT4傳說有一百多萬億個參數(shù)。
而我們平常說的大模型的大就是指參數(shù)量大,從實驗結(jié)果來看參數(shù)量越大效果越好。因此,現(xiàn)在很多大企業(yè)開發(fā)大模型都在追求大參數(shù)量模型。比如,openAI,谷歌,meta和國內(nèi)的阿里,百度等企業(yè)。
而模型參數(shù)指的是神經(jīng)網(wǎng)絡的參數(shù),是可以通過訓練數(shù)據(jù)訓練調(diào)整的參數(shù),最典型的兩個就是權(quán)重(W)和偏置(B),這些參數(shù)值剛開始是隨機初始化,然后通過訓練數(shù)據(jù)不斷的調(diào)整,最后獲得一個最優(yōu)解。
那超參數(shù)又是什么?
現(xiàn)在再來看開頭那句話應該就明白了,模型參數(shù)是可以訓練得到的;但有些參數(shù)是需要開發(fā)者設(shè)定的,然后又不能通過訓練獲得,這部分參數(shù)就是超參數(shù),超也可以理解為人為設(shè)置的意思。
超參數(shù)有哪些?
超參數(shù)其實也有很多,根據(jù)不同的模型架構(gòu)設(shè)計,超參數(shù)也會有所不同;但常見的超參數(shù)有訓練次數(shù)(epochs),批次大小(batch_size),學習率(lr),隱藏層數(shù)量和大小(隱藏層數(shù)量是指神經(jīng)網(wǎng)絡的層數(shù),大小是指每層神經(jīng)網(wǎng)絡的神經(jīng)元數(shù)量,具體可以看神經(jīng)網(wǎng)絡內(nèi)部原理解析),損失函數(shù),優(yōu)化器,以及正則化參數(shù),丟棄率等都屬于超參數(shù)。
02、超參數(shù)的作用是什么?
前面介紹了超參數(shù)以及常見的超參數(shù),這里就來介紹一下超參數(shù)的作用。
簡單來說,超參數(shù)的作用就是怎么訓練模型,以及怎么把模型訓練的更好,具體來說就是模型的性能和泛化能力。
就拿訓練次數(shù)——epochs來說,這個參數(shù)的作用是模型在當前數(shù)據(jù)集上訓練多少次。
舉例來說,我們上學時一章新內(nèi)容或題目,老師基本上都會講好幾遍,這個好幾遍就是epochs。epochs具體的值根據(jù)不同的網(wǎng)絡模型,以及訓練數(shù)據(jù)會有所不同,大部分都是在10到幾百之間。
而批次大小參數(shù)——batch_size的作用就是,訓練時每次加載多少數(shù)據(jù),一般是8的倍數(shù)。batch_size值越大,訓練的批次數(shù)越少,梯度下降越快,但對硬件要求會更高,誤差也可能會更大。
模型訓練代碼,超參數(shù)設(shè)置簡略代碼
# 設(shè)置訓練網(wǎng)絡的參數(shù)
# 記錄訓練次數(shù)
total_train_step = 0
# 記錄測試次數(shù)
total_test_step = 0
# 訓練的輪數(shù)
epoch = 10
for i in range(epoch):
print("第{}輪訓練開始".format(i+1))
for data in train_dataloader:
# 獲取訓練數(shù)據(jù)和標簽
imgs, targets = data
# 神經(jīng)網(wǎng)絡對數(shù)據(jù)進行處理
outputs = myNn(imgs)
# 計算損失值 監(jiān)督學習 使用神經(jīng)網(wǎng)絡處理結(jié)果與標簽做對比,計算損失差
loss = loss_fn(outputs, targets)
optimizer.zero_grad()
# 反向傳播
loss.backward()
# 優(yōu)化器優(yōu)化
optimizer.step()
total_train_step = total_train_step + 1
print("訓練次數(shù): {}, Loss: {}".format(total_train_step, loss))
學習率——lr是更新權(quán)重時的步長,它影響著目標函數(shù)是否能收斂到局部最小;學習率大可能會導致?lián)p失震蕩,甚至是無法擬合。
而學習率太小又可能會導致過擬合,收斂速度過慢的問題。所謂的震蕩就是損失函數(shù)的值可能不是慢慢減小,而是一會大一會小。
假如你在訓練的時候發(fā)現(xiàn)損失值出現(xiàn)這種現(xiàn)象,那么就是學習率設(shè)置有問題。
一般情況下,學習率都是設(shè)置一個動態(tài)值,比如訓練開始時學習率比較大,隨著訓練慢慢減小。
而隱藏層的數(shù)量和大小,代表著神經(jīng)網(wǎng)絡的抽象能力,越多的層數(shù)和神經(jīng)元就能表征更復雜的場景,但過多的隱藏層也會導致神經(jīng)元過于復雜以及過擬合的問題。
損失函數(shù)和優(yōu)化器又會影響到模型訓練的結(jié)果以及優(yōu)化效果。
因此,超參數(shù)也需要根據(jù)不同的模型架構(gòu)設(shè)計一個合理的參數(shù)值,并且在合適的時機進行適當?shù)恼{(diào)整。
本文轉(zhuǎn)載自公眾號AI探索時代 作者:DFires
原文鏈接:??https://mp.weixin.qq.com/s/EqmK4cxR76dkVm3xGPOg_g??
