Optimizer.md

在機器學習與深度學習中,Optimizer(最佳化器)是用來調整模型參數以最小化損失函數(loss function)的演算法。透過反向傳播(backpropagation)計算梯度後,optimizer 根據這些梯度來更新模型的權重與偏差。


為什麼需要 Optimizer?

神經網路透過訓練資料來學習模式,其目標是讓模型的預測盡可能接近真實標籤。這個目標是透過損失函數來衡量的,optimizer 則用來最小化這個損失。


常見 Optimizer 演算法

1. Gradient Descent(梯度下降法)

  • 原理:沿著損失函數的梯度方向更新參數。

  • 缺點:對學習率(learning rate)非常敏感;可能陷入局部極小值。

2. Stochastic Gradient Descent(SGD,隨機梯度下降)

  • 原理:每次使用一筆樣本(或一小批 mini-batch)進行梯度更新。

  • 優點:速度快,可跳出局部極小值。

  • 缺點:更新不穩定、震盪大。

3. Momentum(動量法)

  • 改進點:引入過去梯度的指向,減少震盪。

  • 公式

    v_t = γ * v_{t-1} + η * ∇L(θ)
    θ = θ - v_t

4. RMSProp(Root Mean Square Propagation)

  • 改進點:對每個參數維度自適應調整學習率。

  • 適合:非平穩目標問題,如 RNN。

5. Adam(Adaptive Moment Estimation)

  • 綜合 Momentum + RMSProp:同時考慮一階與二階矩估計。

  • 優點:收斂快、調參容易,是目前最常用的 optimizer。

  • 公式概要

    m_t = β₁ * m_{t-1} + (1 - β₁) * ∇L(θ)
    v_t = β₂ * v_{t-1} + (1 - β₂) * (∇L(θ))²
    θ = θ - η * m_t / (√v_t + ε)

重要參數

  • Learning Rate(學習率):控制每次參數更新的幅度。

  • β₁, β₂(動量與 RMS 的衰減因子):影響更新的平滑程度(Adam/RMSProp)。

  • ε(防止除以 0 的小常數)


實作範例(TensorFlow)

import tensorflow as tf

model = tf.keras.Sequential([
    tf.keras.layers.Dense(1, input_shape=(10,))
])

model.compile(
    optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
    loss='mean_squared_error'
)

# 假設 x_train, y_train 為訓練資料
model.fit(x_train, y_train, epochs=10, batch_size=32)

Optimizer 是訓練模型時不可或缺的元件,選擇合適的 optimizer 與調整其參數會大幅影響模型的訓練效率與最終表現。

Last updated