TensorFlow 中的 Adam 最佳化器
TensorFlow 中的 Adam 最佳化器是一種用於深度學習模型的演算法。最佳化演算法用於深度學習模型中以最小化損失函式並提高效能。Adam 代表自適應矩估計,是一種隨機梯度下降演算法。它結合了 RMSprop 和 AdaGrad 演算法的優點,以獲得更好的最佳化結果。在本文中,我們將瞭解 TensorFlow 中的 Adam 最佳化器及其工作原理。
Adam 最佳化器的工作原理
Adam 最佳化器是一種迭代最佳化演算法。它使用梯度的二階矩自適應地調整每個引數的學習率。該演算法考慮了梯度的兩個移動平均值——過去梯度的指數衰減平均值和另一個梯度是梯度的矩。
引數更新演算法
計算損失函式相對於引數的梯度。
計算梯度的一階矩(均值)和二階矩(無偏方差)。
使用梯度的一階矩和二階矩以及學習率更新引數。
引數的更新方程如下所示:
w(t+1) = w(t) - α * m_t / (sqrt(v_t) + ε)
這裡 w(t) 是第 t 次迭代時的引數,α 是學習率,m_t 是梯度的一階矩(均值),v_t 是梯度的二階矩,ε 是一個小的常數,以防止除以零。
為了計算一階矩,使用以下表達式:
m_t = β1 * m_(t-1) + (1- β1) * g_t
這裡,m_(t-1) 是前一次迭代時梯度的一階矩,β1 是第一階矩的衰減率,g_t 是當前迭代時的梯度。
為了計算二階矩,使用以下表達式:
v_t = β2 * v_(t-1) + (1- β2) * g_t^2
這裡,v_(t-1) 是前一次迭代時梯度的二階矩,β2 是第二階矩的衰減率,g_t^2 是當前迭代時的梯度平方。
示例
在下面的示例中,我們使用 TensorFlow 中的 Adam 最佳化器來訓練 MNIST 資料集上的神經網路。首先,我們匯入必要的庫並載入 MNIST 資料集。接下來,我們定義神經網路模型。然後,我們編譯模型並指定 Adam 最佳化器。最後,我們使用 fit() 方法訓練模型。
在訓練過程中,Adam 最佳化器自適應地調整每個引數的學習率,這有助於模型更快地收斂並在驗證集上獲得更好的效能。history 變數包含每個 epoch 的訓練和驗證指標,例如損失和準確率。
import tensorflow as tf from tensorflow.keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10) ]) model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) history = model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))
輸出
上述程式碼的輸出將是每個訓練 epoch 的訓練和驗證指標,例如損失和準確率。
此輸出表明模型在每個 epoch 中都在改進,因為訓練和驗證損失正在減少,訓練和驗證準確率正在增加。在第五個 epoch 結束時,模型實現了 97.65% 的驗證準確率,這表明它能夠準確地對 MNIST 資料集中手寫數字進行分類。
Epoch 1/5 1875/1875 [==============================] - 21s 9ms/step - loss: 0.2933 - accuracy: 0.9156 - val_loss: 0.1332 - val_accuracy: 0.9612 Epoch 2/5 1875/1875 [==============================] - 10s 5ms/step - loss: 0.1422 - accuracy: 0.9571 - val_loss: 0.0985 - val_accuracy: 0.9693 Epoch 3/5 1875/1875 [==============================] - 9s 5ms/step - loss: 0.1071 - accuracy: 0.9672 - val_loss: 0.0850 - val_accuracy: 0.9725 Epoch 4/5 1875/1875 [==============================] - 9s 5ms/step - loss: 0.0884 - accuracy: 0.9725 - val_loss: 0.0819 - val_accuracy: 0.9750 Epoch 5/5 1875/1875 [==============================] - 10s 5ms/step - loss: 0.0767 - accuracy: 0.9765 - val_loss: 0.0836 - val_accuracy: 0.975
Adam 最佳化器的優勢
自適應學習率 - Adam 最佳化器自適應地調整每個引數的學習率,這使得它適用於具有稀疏梯度或噪聲梯度的問題。
快速收斂 - Adam 最佳化器使用動量和梯度的二階矩來加快最佳化過程的收斂速度。
高效的記憶體使用 - Adam 最佳化器僅維護梯度的兩個移動平均值,這使得它與其他需要儲存大量過去梯度的最佳化演算法相比,記憶體效率更高。
Adam 最佳化器的缺點
過擬合 - Adam 最佳化器容易過擬合,尤其是在資料集較小的情況下。這是因為該演算法可以收斂得太快,並且可能過度擬合訓練資料。
對學習率敏感 - Adam 最佳化器對學習率超引數敏感。將學習率設定得太高會導致最佳化過程發散,而將其設定得太低會降低收斂速度。
Adam 最佳化器的應用
Adam 最佳化器的一些用途包括:
計算機視覺 - Adam 最佳化器已用於各種計算機視覺任務,例如影像分類、目標檢測和影像分割。例如,流行的 YOLO(You Only Look Once)目標檢測演算法使用 Adam 最佳化器來訓練其神經網路。
自然語言處理 - Adam 最佳化器已用於自然語言處理任務,例如情感分析、語言翻譯和文字生成。例如,GPT(生成式預訓練變換器)語言模型使用 Adam 最佳化器來訓練其神經網路。
語音識別 - Adam 最佳化器已用於語音識別任務,例如自動語音識別和說話人識別。例如,DeepSpeech 語音識別系統使用 Adam 最佳化器來訓練其神經網路。
強化學習 - Adam 最佳化器也已用於強化學習任務,例如玩遊戲和控制機器人。例如,OpenAI Gym 工具包使用 Adam 最佳化器來訓練其深度強化學習代理。
醫學影像 - Adam 最佳化器已用於醫學影像任務,例如診斷疾病和分析醫學影像。例如,DeepLesion 病灶檢測系統使用 Adam 最佳化器來訓練其神經網路。
結論
在本文中,我們討論了 Adam 最佳化器以及它如何在深度學習模型中使用,因為它具有自適應學習率。我們還討論了演算法中用於計算引數更新值、梯度的一階矩和二階矩的表示式。Adam 最佳化器也具有其自身的優缺點,如本文所述。
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP