---
title: "最佳化器狀態（Optimizer State）"
slug: optimizer-state
language: zh-TW
source: https://aiterms.tw/learning/what-is-optimizer-state
updated_at: 2026-07-04
tags: [模型訓練, 最佳化, 深度學習, 大型語言模型, source:ipas]
ipas_term: true
type: deep-dive
---

# 最佳化器狀態 是什麼？

> 指機器學習訓練過程中，最佳化演算法為更新模型權重所儲存的動量、變異數等歷史計算數值。

## 核心概念
在深度學習與機器學習的領域中，模型訓練的核心目標是透過反覆的迭代運算，找出能夠讓損失函數降到最低的一組權重參數。這個尋找最佳解答的過程，就是交由最佳化演算法來執行。在早期的簡單演算法如標準的隨機梯度下降法中，模型權重的更新僅僅依賴於當下計算出來的梯度以及一個固定的學習率。在這種情況下，除了模型本身的參數之外，系統不需要額外記住其他的歷史資訊。然而，隨著神經網路架構變得越來越複雜，訓練資料量越來越龐大，傳統的方法往往面臨收斂速度緩慢、容易陷入局部最佳解、或者在梯度變化劇烈的區域產生嚴重震盪等挑戰。為了解決這些問題，研究人員提出了許多進階的最佳化演算法，例如目前最廣泛使用的 Adam 演算法。這些進階演算法的共同特色，就是它們在計算每次權重更新的步伐時，不再只看眼前的梯度，而是會參考過去一段時間內的歷史梯度資訊。這些被記錄下來的歷史資訊，就統稱為最佳化器狀態。最佳化器狀態通常包含了一階動量與二階動量。一階動量可以看作是過去梯度的指數移動平均，它能夠幫助更新方向保持慣性，穿越平坦的區域；二階動量則是過去梯度平方的指數移動平均，主要用來針對每個不同的參數自適應地調整學習率，讓更新過程更加平滑與穩定。這些狀態變數的維度通常與模型本身的參數完全一致。因此，如果一個模型有十億個參數，其對應的狀態也會有數十億個數值需要被儲存在記憶體當中。

## 運作原理
最佳化器狀態的運作機制緊密跟隨模型訓練的前向傳播與反向傳播過程。在訓練的每一個步驟中，系統首先會將一批次的訓練資料輸入神經網路，透過前向傳播計算出預測結果，並將其與真實標籤比較以得出損失值。接著，透過反向傳播演算法，系統會計算出損失函數對於每一個模型參數的偏導數，也就是所謂的梯度。在獲得了這組全新的梯度之後，最佳化器並不會立刻直接去修改模型參數，而是先去更新它的最佳化器狀態。以 Adam 為例，最佳化器會先拿著當前最新計算出來的梯度，去更新一階動量緩衝區的數值。這個更新過程會結合先前的動量值與現在的梯度，透過一個衰減係數來決定歷史資訊與新資訊的權重比例。隨後，最佳化器會進行類似的操作，更新記錄梯度平方的二階動量緩衝區。在完成狀態的更新之後，最佳化器才會利用這些剛剛更新好的一階與二階動量，計算出實際要套用在模型參數上的更新量。最後一步，才是將這個計算出來的更新量加到原有的模型參數上，完成這一次的迭代。在整個過程中，最佳化器狀態扮演了類似記憶體的角色，它在不同的訓練步驟之間傳遞著梯度的歷史軌跡，讓演算法能夠做出更宏觀、更明智的更新決策。在每次反覆運算結束後，這些狀態數值必須被妥善地保存在硬體記憶體中，等待下一次的迭代使用。這也意味著，除了模型權重和啟動值之外，這些狀態會佔用極其可觀的硬體資源。

## 實際應用
最佳化器狀態的保存與管理在現代人工智慧開發中扮演著舉足輕重的角色，特別是在訓練大型語言模型或其他巨型神經網路時。首先，最基本且最常見的應用場景是中斷點接續訓練。在進行長達數天甚至數週的模型訓練時，硬體故障、軟體崩潰或是資源排程等問題隨時可能發生。為了避免從頭開始訓練造成龐大的時間與算力浪費，開發者會定期將模型的權重連同最佳化器狀態一併儲存到硬碟中，形成一個檢查點。當需要恢復訓練時，不僅要載入模型權重，更必須精準地載入最佳化器狀態，如此才能確保訓練曲線平滑接續，避免因為遺失動量資訊而導致損失值突然飆高或收斂停滯。另一個極為重要的應用是在分散式訓練系統中的記憶體最佳化。由於最佳化器狀態的體積往往龐大於模型參數，單一張顯示卡根本無法容納現今動輒數百億參數的龐大模型與其狀態。因此，微軟等機構提出了零冗餘最佳化器等記憶體節省技術。這類技術的核心思想是將龐大的最佳化器狀態切分成許多小塊，分散儲存在運算叢集中的不同計算節點上。當某個節點需要進行參數更新時，系統才會透過高速網路從其他節點索取對應的狀態資訊。透過這種方式，原本無法在單機上運行的超大型訓練任務，得以透過跨節點的狀態切割與動態通訊來實現，這也是目前訓練千億參數級別語言模型的基礎架構。

## 常見誤區
在接觸模型訓練時，許多開發者對最佳化器狀態存在一些不精確的理解。最普遍的誤區之一是認為微調模型時只需要載入預訓練的模型權重，而不需要在意最佳化器狀態。事實上，如果是進行從頭訓練的接續，遺漏狀態會導致嚴重的訓練不穩定。不過，若是針對已經收斂的預訓練模型進行下游任務的微調，由於目標已經改變，拋棄原有的最佳化器狀態並重新初始化是常見且合理的做法，因為我們不需要保留前一個任務的梯度慣性。另一個常見的誤區是低估了最佳化器狀態所佔用的記憶體容量。很多人在計算顯示卡記憶體需求時，只單純計算了模型參數本身的資料大小。以混合精度訓練為例，雖然模型參數可能以半精度浮點數儲存，但為了保證更新的數值精度，主流做法是將最佳化器狀態以及一份用來更新的主權重保持在單精度浮點數格式。這使得狀態所佔用的記憶體往往遠高於模型本身參數體積。忽視這一點經常導致在啟動訓練時直接遭遇記憶體耗盡的錯誤。此外，有些人會誤以為所有的最佳化演算法都有龐大的狀態需要維護。雖然 Adam 或 LAMB 等現代演算法確實如此，但傳統的隨機梯度下降法如果不使用動量，是沒有任何狀態需要儲存的。因此，根據硬體資源的限制來挑選合適的最佳化演算法，或者採用如 Adafactor 等專門設計用來減少狀態記憶體佔用的變體演算法，是實務上非常重要的考量。

## 與相關技術的比較
為了解決最佳化器狀態帶來的記憶體挑戰，學界與業界發展出了許多相關的技術與變體，將其與標準的最佳化器狀態進行比較，有助於更深入地理解其設計權衡。首先是與純隨機梯度下降法的比較。傳統隨機梯度下降完全不保留歷史梯度，因此記憶體開銷最小，但代價是收斂速度慢且對超參數極度敏感。最佳化器狀態透過犧牲記憶體空間，換取了更快的收斂速度與更好的穩定性，這是一種典型的空間換取時間的策略。其次，為了在保留狀態優勢的同時減少記憶體消耗，研究者提出了 Adafactor 這種替代方案。標準 Adam 會為每個參數儲存完整的動量與變異數，而 Adafactor 則是透過對矩陣進行分解，僅儲存列與行的摘要資訊來近似原本的狀態，大幅度降低了記憶體需求。雖然這種近似可能會在某些任務上稍微影響收斂精度，但在資源受限的情況下是非常實用的折衷方案。另外一種常見的技術是使用低精度資料格式來儲存狀態，例如八位元最佳化器。這類技術透過量化演算法，將原本需要高精度儲存的狀態數值壓縮到八位元，從而大幅減少狀態的記憶體佔用。相較於完整狀態，八位元最佳化器需要在量化與反量化過程中消耗額外的計算資源，並且必須處理量化誤差帶來的潛在不穩定性。總結來說，完整的最佳化器狀態提供了最可靠的訓練路徑，但各種衍生技術與記憶體管理策略，都是在收斂速度、計算開銷與記憶體限制之間尋找最適合特定應用場景的平衡點。

## iPAS 考試出題分析

屬於未分類考範圍。

## 常見問題

### 為什麼大型語言模型訓練時經常出現記憶體不足的錯誤，這與最佳化器狀態有關嗎？

大型語言模型訓練時的記憶體不足錯誤，絕大多數情況下都與最佳化器狀態密切相關。在混合精度訓練中，為了維持數值穩定性，最佳化器會保留單精度的模型權重副本、一階動量與二階動量。這導致最佳化器狀態所佔用的記憶體量通常遠大於模型本身參數所佔空間。因此，當模型參數規模龐大時，光是儲存這些歷史狀態就能輕易耗盡顯示卡的全部記憶體資源。

### 如果在模型微調階段遺失了最佳化器狀態，訓練還能繼續進行嗎？

如果是接續先前的訓練任務以達到更好的收斂狀態，遺失最佳化器狀態會導致損失值瞬間飆高，模型必須重新累積動量資訊，這會浪費大量的計算資源與時間。然而，如果您是載入預訓練模型進行全新下游任務的微調，由於目標函數與資料分佈已經改變，原本的歷史梯度方向不再適用，此時不載入最佳化器狀態並重新初始化，反而是正確且常見的做法，訓練仍然可以順利進行並收斂。

### 業界有哪些常見的技術可以用來減少最佳化器狀態的記憶體佔用？

業界發展出多種記憶體最佳化技術。最知名的是微軟提出的 ZeRO 演算法，它將龐大的最佳化器狀態切分成小區塊，分散儲存在叢集內的不同運算節點上，打破了單機記憶體的限制。另一種常見方法是使用八位元最佳化器，透過量化技術將原本的狀態壓縮，大幅減少記憶體佔用。此外，採用 Adafactor 等記憶體效率較高的變體演算法，也能有效降低狀態緩衝區的需求。

---

深度解說頁：https://aiterms.tw/learning/what-is-optimizer-state
快查頁：https://aiterms.tw/terms/optimizer-state
最後更新：2026/07/04