上一篇:《“嵌入”在大語言模型中是解決把句子轉換成向量表示的技術》
序言:我們常常會說某某人只會“讀死書”,題目稍微變一點就不會做了。這其實是我們人類學習中很常見的現象。可是你知道嗎?人工智慧其實更容易“讀死書”。不過在人工智慧領域,我們有個聽起來高大上的說法,叫“過擬合”。說白了,“過擬合”就是人工智慧的“讀死書”現象。在這個小節我們就來聊聊怎麼讓人工智慧少“讀死書”。注意,我說的是“少”,因為這個問題沒辦法完全消除,只能儘量降低。
減少語言模型中的過擬合
過擬合發生在網路對訓練資料變得過於專注時,其中一個表現是它在訓練集中“噪聲”資料中的模式匹配上變得非常出色,而這些噪聲在其他地方並不存在。由於這種特定的噪聲在驗證集中並不存在,網路越擅長匹配這些噪聲,驗證集上的損失就會越差。這就會導致你在圖 6-3 中看到的驗證損失不斷上升的情況。在本節中,我們將探討幾種通用化模型並減少過擬合的方法。
調整學習率
導致過擬合的最大因素之一可能是最佳化器的學習率過高。這意味著網路學習得太快了。以下是用於編譯模型的程式碼示例:
model.compile(loss='binary_crossentropy',
optimizer='adam', metrics=['accuracy'])
這裡的最佳化器簡單地宣告為 adam,這會呼叫帶有預設引數的 Adam 最佳化器。然而,這個最佳化器支援多個引數,包括學習率。可以將程式碼更改為以下內容:
adam = tf.keras.optimizers.Adam(learning_rate=0.0001,
beta_1=0.9, beta_2=0.999, amsgrad=False)
model.compile(loss='binary_crossentropy',
optimizer=adam, metrics=['accuracy'])
在這裡,預設學習率值(通常為 0.001)被降低了 90%,變為 0.0001。beta_1 和 beta_2 的值保持預設值,amsgrad 也保持預設值。
• beta_1 和 beta_2 必須在 0 和 1 之間,通常兩者都接近 1。
• Amsgrad 是 Adam 最佳化器的一種替代實現,首次在 Sashank Reddi、Satyen Kale 和 Sanjiv Kumar 的論文《On the Convergence of Adam and Beyond》中提出。
這個更低的學習率對網路產生了深遠的影響。圖 6-4 顯示了網路在 100 個訓練週期中的準確率。可以看到,在前 10 個週期左右,較低的學習率使得網路看起來像是“沒有在學習”,但隨後它“突破”了,並開始快速學習。
圖 6-4:使用較低學習率時的準確率
透過觀察損失(如圖 6-5 所示),我們可以看到,即使在前幾個訓練週期內準確率沒有上升,損失卻在下降。所以如果你逐週期觀察訓練過程,可以有信心相信網路最終會開始學習。
圖 6-5:使用較低學習率時的損失
雖然損失開始呈現出與圖 6-3 中類似的過擬合曲線,但請注意,這種現象發生得更晚,且程度也低得多。在第 30 個訓練週期時,損失大約為 0.45,而在圖 6-3 中使用較高學習率時,這一數值超過了兩倍。儘管網路需要更長時間才能達到較高的準確率,但在損失更小的情況下完成,因此你可以對結果更有信心。
使用這些超引數時,驗證集上的損失在大約第 60 個訓練週期開始增加,此時訓練集的準確率達到約 90%,而驗證集的準確率約為 81%,這表明我們的網路是相當有效的。
當然,僅僅調整最佳化器引數然後宣稱成功是比較簡單的,但其實還有許多其他方法可以用來改進你的模型,這些方法會在接下來的幾節中介紹。在這些部分中,我會恢復使用預設的 Adam 最佳化器來進行說明。因此,調整學習率的效果不會掩蓋其他技術所帶來的好處。
總結:本節我們介紹瞭如何透過調整學習速率來緩解語言模型“讀死書”的現象。接下來的幾節內容將更深入地帶大家探索和分析訓練資料集的特性,以及模型的架構設計、預設維度等因素是如何影響模型“讀死書”問題的。