# Adadelta :::info Adagrad 其中一個主要問題是,隨著訓練的進行,累積的梯度平方會不斷增加,導致學習率隨時間迅速減小,最終變得過小,幾乎無法再繼續更新參數,進而影響模型的收斂。 而Adadelta是基於adagrad改進的一種自適應學習率的優化器,Adadelta 演算法的設計是**不需要手動設定學習率**。 ::: ## 優化過程 ![adagrad-to-adadelta](https://hackmd.io/_uploads/B1gRhV_CA.gif) :::info adadelta 比 adagrad 多了一個 $\Delta x$ 此gif與以下公式符號略有不同 ::: ### AdaGrad 公式 $$G_t={\sum_{i=0}^{t}g_i^2}$$ $$ w_{t+1} \gets w_t - \frac{\eta}{\sqrt{G_t}} \cdot g_t $$ ### Adadelta 公式 $$ G_t = \rho G_{t-1} + (1 - \rho) g_t^2 $$ $$ \Delta w_t = -\frac{\sqrt{D_{t-1} + \epsilon}}{\sqrt{G_t+ \epsilon} } g_t $$ $$ D_t = \rho D_{t-1} + (1 - \rho) \Delta w_t^2 $$ $$ w_{t+1} = w_t + \Delta w_t $$ * $t$:時間步數或迭代次數 * $G_t$:有點類似 AdaGrad 裡面的 $G_t$,AdaDelta 的不是直接把 $g^2_t$ 直接累加上去,而是藉由衰減係數 $\rho$,可讓較早期時間點累加的 $g^2_t$ 衰減至 0 ,因此,不會使得 Learning Rate 只隨著時間一直遞減下去。 * $\rho$ (rho): 移動平均的衰減率,通常設定為接近 1 的值,如 0.95 * $g_t$ : 在時間步t的梯度 * $\epsilon$ (epsilon): 用於數值穩定性,防止除以零 * $w_t$:時間步t的參數值 * $\Delta w_t$:時間步t的參數更新量 * $D_t$:累積參數更新的平方 :::success **此公式沒有出現$\eta$(學習率)** :sunglasses: ::: ## Tensorflow 可調參數 [`tf.keras.optimizers.Adadelta`](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Adadelta) ### `learning_rate` (aka $\eta$) 用途: 控制梯度更新的步伐。學習率越高,更新步驟越大;學習率越低,更新步驟越小。 默認值: 1.0 解釋: Adadelta 最初的設計是無需設置學習率,但在 TensorFlow 中還是保留了這個參數。如果需要修改,可以手動設置,默認值已經適合大部分情況。 ### `rho` (aka $\rho$) 用途: 動量的衰減係數,用於計算梯度的加權平均。 默認值: 0.95 解釋: 該參數決定了過去的梯度信息對當前更新的影響。rho 值越接近 1,過去梯度的影響越大,越接近 0,表示只考慮最新的梯度信息。 ### `epsilon` (aka $\epsilon$) 用途: 用於數值穩定的小常數,避免除零錯誤。 默認值: 1e-7 解釋: 在計算平方梯度的加權平均時,可能會出現梯度值非常小的情況,這時 epsilon 用來防止數字上的不穩定。 ### `name` 用途: 優化器的名稱。 默認值: "Adadelta" 解釋: 設置優化器的名稱,通常用於區分不同優化器或方便模型檢查和記錄。 ### clipnorm 和 clipvalue 梯度裁剪,用於防止梯度爆炸或過大梯度更新。 #### clipnorm 用途: 對梯度向量進行 L2 範數裁剪,梯度向量的 L2 範數不能超過這個值。 #### clipvalue 用途: 對梯度的絕對值進行裁剪,限制每個梯度值的絕對大小。 ## 總結 Adadelta 的優勢在於自適應調整學習率,適合不需要預先調參的場景。 ![pic_00164](https://hackmd.io/_uploads/HJh1kHdR0.gif) ## References - [Adadelta優化過程及實作](https://ckmarkoh.github.io/blog/2016/02/08/optimization-method-adadelta/) - [Tensorflow官方文件 - `Adadelta`](https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Adadelta) {%youtube 5KyxlN3M7HQ %}