ai.onnx.preview.training - Adagrad

Adagrad - 1 (ai.onnx.preview.training)

版本

  • 名稱: Adagrad (GitHub)

  • 網域: ai.onnx.preview.training

  • since_version: 1

  • 函式: False

  • 支援層級: SupportType.COMMON

  • 形狀推斷: True

此運算子版本自網域 ai.onnx.preview.training 的版本 1 起提供。

摘要

計算 ADAGRAD 的一次迭代,這是一種基於隨機梯度下降的優化演算法。此運算子可以執行多個張量變數的優化。

讓我們定義此運算子的行為。您可以想像,ADAGRAD 需要一些參數

  • 初始學習率「R」。

  • 更新計數「T」。也就是執行的訓練迭代次數。

  • L2 範數正規化係數「norm_coefficient」。

  • 學習率衰減因子「decay_factor」。

  • 一個小的常數「epsilon」,以避免除以零。

在每次 ADAGRAD 迭代中,最佳化張量會沿著根據其估計梯度和累計平方梯度計算的方向移動。假設只有一個張量「X」由此運算子更新。我們需要「X」的值、其梯度「G」及其累計平方梯度「H」。因此,此運算子輸入列表中的變數依序為「R」、「T」、「X」、「G」和「H」。其他參數作為屬性給定,因為它們通常是常數。此外,相應的輸出張量是「X」的新值(稱為「X_new」),然後是新的累計平方梯度(稱為「H_new」)。這些輸出是從以下偽程式碼給定的輸入計算得出的。

讓「+」、「-」、「*」和「/」都是具有 numpy 式廣播支援的元素式算術運算。計算這些輸出的偽程式碼為

// 計算純量學習率因子。在 X 的第一次更新時,T 通常為 // 0 (以 0 為基礎的更新索引) 或 1 (以 1 為基礎的更新索引)。r = R / (1 + T * decay_factor);

// 新增 0.5 * norm_coefficient * ||X||_2^2 的梯度,其中 ||X||_2 是 2-範數。G_regularized = norm_coefficient * X + G;

// 計算新的累計平方梯度。H_new = H + G_regularized * G_regularized;

// 計算每個座標學習率的自適應部分。請注意,Sqrt(…) // 計算元素式平方根。H_adaptive = Sqrt(H_new) + epsilon

// 計算「X」的新值。X_new = X - r * G_regularized / H_adaptive;

如果指定此運算子最佳化多個輸入,例如,「X_1」和「X_2」,則可以擴充相同的偽程式碼以同時處理所有張量。更具體來說,我們可以將「X」視為「X_1」和「X_2」的串聯(當然,它們的梯度和累計梯度也應該串聯),然後只需重複使用整個偽程式碼。

請注意,ADAGRAD 最初是在 http://jmlr.org/papers/volume12/duchi11a/duchi11a.pdf 中提出的。在該參考論文中,此運算子是圖 1 複合鏡面下降更新的特例。

屬性

  • decay_factor - FLOAT (預設為 '0.0')

    一次更新後學習率的衰減因子。有效學習率的計算方式為 r = R / (1 + T * decay_factor)。預設為 0,因此增加更新次數不會降低學習率。

  • epsilon - FLOAT (預設為 '0.0')

    避免除以零的小純量。

  • norm_coefficient - FLOAT (預設為 '0.0')

    0.5 * norm_coefficient * ||X||_2^2 中的正規化係數。預設為 0,表示不進行正規化。

輸入

介於 3 個到 2147483647 個輸入之間。

  • R (異質) - T1

    初始學習率。

  • T (異質) - T2

    「X」的更新計數。它應該是一個純量。

  • inputs (變長) - T3

    最佳化張量的目前值,後接其各自的梯度,後接其各自的累計平方梯度。例如,如果最佳化兩個張量「X_1」和「X_2」,則輸入列表會是 [「X_1」、「X_2」、「X_1」的梯度、「X_2」的梯度、「X_1」的累計平方梯度、「X_2」的累計平方梯度]。

輸出

介於 1 個到 2147483647 個輸出之間。

  • outputs (變長) - T3

    最佳化張量的更新值,後接其累計平方梯度的更新值。例如,如果最佳化兩個張量「X_1」和「X_2」,則輸出列表會是 [「X_1」的新值、「X_2」的新值、「X_1」的新累計平方梯度、「X_2」的新累計平方梯度]。

類型限制

  • T1 屬於 ( tensor(double), tensor(float) )

    將輸入類型限制為浮點數純量。

  • T2 屬於 ( tensor(int64) )

    將輸入類型限制為 64 位元整數純量。

  • T3 屬於 ( tensor(double), tensor(float) )

    將輸入和輸出類型限制為浮點數張量。