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