Solvers

nnabla.solvers.Solver クラスは、計算グラフのパラメータを最適化するための確率的勾配降下法ベースのオプティマイザーを表します。NNabla は、以下にリストされた様々な solver を提供します。

Solver

class nnabla.solvers.Solver

Solver インターフェイスクラス。

このクラスに提供される同じ API を使用して、様々な種類の solver を実装できます。

例:

# Network building comes above
import nnabla.solvers as S
solver = S.Sgd(lr=1e-3)
solver.set_parameters(nn.get_parameters())

for itr in range(num_itr):
    x.d = ... # set data
    t.d = ... # set label
    loss.forward()
    solver.zero_grad()  # All gradient buffer being 0
    loss.backward()
    solver.weight_decay(decay_rate)  # Apply weight decay
    solver.clip_grad_by_norm(clip_norm)  # Apply clip grad by norm
    solver.update()  # updating parameters

注釈

NNable で提供される全ての solver は、 Solver の継承クラスに属します。solver は、このクラス自体からインスタンス化されることはありません。

check_inf_grad(self, pre_hook=None, post_hook=None)

設定された勾配に inf があるかを確認します。

check_inf_or_nan_grad(self, pre_hook=None, post_hook=None)

設定された勾配に inf または nan があるかを確認します。

check_nan_grad(self, pre_hook=None, post_hook=None)

設定された勾配に nan があるかを確認します。

clear_parameters(self)

登録されているすべてのパラメータと状態をクリアします。

clip_grad_by_norm(self, float clip_norm, pre_hook=None, post_hook=None)

ノルムにより勾配をクリッピングします。この関数が呼び出されると、指定されたノルムで勾配をクリッピングします。

パラメータ:

clip_norm (float) -- クリッピングノルムの値。

get_parameters(self)

登録されている全てのパラメータを取得します。

get_states(self)

全ての状態を取得します。

info

オブジェクト

:

info

learning_rate(self)

学習率を取得します。

load_states(self, path)

solver の状態を読み込みます。

パラメータ:

path -- 読み込む state ファイルへのパス。

name

solver の名前を取得します。

remove_parameters(self, vector[string] keys)

keys の vector で指定された、登録済みのパラメータを削除します。

save_states(self, path)

solver の状態を保存します。

パラメータ:

path -- パスまたはファイルオブジェクト。

scale_grad(self, scale, pre_hook=None, post_hook=None)

勾配のスケールを定数倍にします。

set_learning_rate(self, learning_rate)

学習率を設定します。

set_parameters(self, param_dict, bool reset=True, bool retain_state=False)

辞書で指定されたキーとパラメータ Variable でパラメータを設定します。

パラメータ:
  • param_dict (dict) -- キー: 文字列, 値: Variable。

  • reset (bool) -- true の場合、パラメータを設定する前に、全てのパラメータをクリアします。false の場合、パラメータは上書きされるか、(新しい場合は) 追加されます 。

  • retain_state (bool) -- この値は、reset が false の場合のみ考慮されます。 この値が true 、かつキーが既に存在する場合 ( 上書き ) 、キーに関連付けられた状態 ( モメンタムなど ) は、パラメータの形状と新しいパラメータの形状が一致する場合に保持されます。

set_states(self, states)

状態を設定します。 set_parameters を呼び出し、最初に solver の状態を初期化してください。それを行わずにこのメソッドを呼び出すと、値エラーが発生します。

set_states_from_protobuf(self, optimizer_proto)

protobuf ファイルから solver に状態を設定します。

内部的に使用される helper メソッド。

set_states_to_protobuf(self, optimizer)

Optimizer から protobuf ファイルに状態を保存します。

内部的に使用される helper メソッド。

setup(self, params)

非推奨です。 param_dictset_parameters を呼び出してください。

update(self, update_pre_hook=None, update_post_hook=None)

この関数を呼び出すと、パラメータ値は、パラメータ Variablegrad に保存されている backpropagation で蓄積された勾配を使用して更新されます。更新ルールは、Solver の派生クラスにおいて C++ コアで実装されています。更新されたパラメータ値は、パラメータ Variable の data フィールドに保存されます。

パラメータ:
  • update_pre_hook (callable) -- This callable object is called immediately before each update of parameters. The default is None.

  • update_post_hook (callable) -- This callable object is called immediately after each update of parameters. The default is None.

weight_decay(self, float decay_rate, pre_hook=None, post_hook=None)

Apply weight decay to gradients.

When called, the gradient weight will be decayed by a rate of the current parameter value.

パラメータ:

decay_rate (float) -- weight decay の係数。

注釈

In solvers which weight_decay_is_fused() returns true, the weight decay is not immediately performed when called. Instead, the specified decay_rate is stored in the solver instance, and lazily evaluated when update() method is called. The stored decay rate will expire after update() and revert to 0 or a default value specified at initialization of Solver class (if exists, ex. SgdW). The definition of weight decay operation depends on each of solver classes. Please refer to the documentation of each solver class.

weight_decay_is_fused(self)

Returns a boolean which represents whether weight decay is fused into update(), hence lazily evaluated.

See weight_decay() for more details.

zero_grad(self)

登録されている全てのパラメータの勾配をゼロで初期化します。

Solver のリスト

nnabla.solvers.Sgd(lr=0.001)

確率的勾配降下法(SGD)オプティマイザー。

\[w_{t+1} \leftarrow w_t - \eta \Delta w_t\]
パラメータ:

lr (float) -- 学習率 (\(\eta\))。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

nnabla.solvers.Momentum(lr=0.001, momentum=0.9)

モメンタムを使った SGD。

\[\begin{split}v_t &\leftarrow \gamma v_{t-1} + \eta \Delta w_t\\ w_{t+1} &\leftarrow w_t - v_t\end{split}\]
パラメータ:
  • lr (float) -- Initial learning rate (\(\eta_0\)).

  • momentum (float) -- モメンタムの減衰率。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.Lars(lr=0.001, momentum=0.9, coefficient=0.001, eps=1e-06)

モメンタムを使った LARS。

\[\begin{split}\lambda &= \eta \frac{\| w_t \|}{\| g_t \| + \| \beta w_t \|} \\ v_{t+1} &\leftarrow m v_t + \gamma_t \lambda (g_t + \beta w_t) \\ w_{t+1} &\leftarrow w_t - v_{t+1}\end{split}\]

where \(g_t\) denotes a gradient, \(\beta\) is the decoupled weight decay rate set by weight_decay() method (lazy evaluation), \(v_0 \leftarrow 0\), and the rest is described in the argument documentation.

パラメータ:
  • lr (float) -- Learning rate (\(\gamma_t\)).

  • momentum (float) -- Decay rate of momentum (\(m\)).

  • coefficient (float) -- Trust coefficient (\(\eta\)).

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.Nesterov(lr=0.001, momentum=0.9)

Nesterov 加速勾配オプティマイザー。

\[\begin{split}v_t &\leftarrow \gamma v_{t-1} - \eta \Delta w_t\\ w_{t+1} &\leftarrow w_t - \gamma v_{t-1} + \left(1 + \gamma \right) v_t\end{split}\]
パラメータ:
  • lr (float) -- 学習率 (\(\eta\))。

  • momentum (float) -- モメンタムの減衰率。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

  • Yurii Nesterov. A method for unconstrained convex minimization problem with the rate of convergence \(o(1/k2)\).

nnabla.solvers.Adadelta(lr=1.0, decay=0.95, eps=1e-06)

AdaDelta オプティマイザー。

\[\begin{split}g_t &\leftarrow \Delta w_t\\ v_t &\leftarrow - \frac{RMS \left[ v_t \right]_{t-1}} {RMS \left[ g \right]_t}g_t\\ w_{t+1} &\leftarrow w_t + \eta v_t\end{split}\]
パラメータ:
  • lr (float) -- 学習率 (\(\eta\))。

  • decay (float) -- 減衰率 (\(\gamma\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.Adagrad(lr=0.01, eps=1e-08)

ADAGrad オプティマイザー。

\[\begin{split}g_t &\leftarrow \Delta w_t\\ G_t &\leftarrow G_{t-1} + g_t^2\\ w_{t+1} &\leftarrow w_t - \frac{\eta}{\sqrt{G_t} + \epsilon} g_t\end{split}\]
パラメータ:
  • lr (float) -- 学習率 (\(\eta\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.AdaBelief(alpha=0.001, beta1=0.9, beta2=0.999, eps=1e-08, wd=0.0, amsgrad=False, weight_decouple=False, fixed_decay=False, rectify=False)

AdaBelief optimizer.

\[\begin{split}m_t &\leftarrow \beta_1 m_{t-1} + (1 - \beta_1) g_t\\ s_t &\leftarrow \beta_2 s_{t-1} + (1 - \beta_2) (g_t - m_t)^2\\ w_{t+1} &\leftarrow w_t - \alpha \frac{\sqrt{1 - \beta_2^t}}{1 - \beta_1^t} \frac{m_t}{\sqrt{s_t + \epsilon} + \epsilon}\end{split}\]
パラメータ:
  • alpha (float) -- ステップサイズ (\(\alpha\))。

  • beta1 (float) -- 一次モメンタムの減衰率 (\(\beta_1\))。

  • beta2 (float) -- 二次モメンタムの減衰率 (\(\beta_2\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

  • wd (float) -- The default weight decay rate enabled only when weight_decouple is true. If enabled, the weight decay operation is decoupled and fused into the update operation. It uses this default decay rate unless you overwrite a decay rate via weight_decay() for the next call of update().

  • amsgrad (bool) -- Perform AMSGrad variant of AdaBelief.

  • weight_decouple (bool) -- Whether to perform decoupled weight decay as in AdamW.

  • fixed_decay (bool) -- If True, the weight decay ratio will be kept fixed. Note that this option only takes effect when weight_decouple option is enabled.

  • rectify (bool) -- Perform RAdam variant of AdaBelief.

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.RMSprop(lr=0.001, decay=0.9, eps=1e-08)

RMSprop オプティマイザー (Geoffery Hinton) 。

\[\begin{split}g_t &\leftarrow \Delta w_t\\ v_t &\leftarrow \gamma v_{t-1} + \left(1 - \gamma \right) g_t^2\\ w_{t+1} &\leftarrow w_t - \eta \frac{g_t}{\sqrt{v_t} + \epsilon}\end{split}\]
パラメータ:
  • lr (float) -- 学習率 (\(\eta\))。

  • decay (float) -- 減衰率 (\(\gamma\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.RMSpropGraves(lr=0.0001, decay=0.95, momentum=0.9, eps=0.0001)

RMSpropGraves optimizer (Alex Graves).

\[\begin{split}n_t &\leftarrow \rho n_{t-1} + \left(1 - \rho \right) {e_t}^2\\ g_t &\leftarrow \rho g_{t-1} + \left(1 - \rho \right) e_t\\ d_t &\leftarrow \beta d_{t-1} - \eta \frac{e_t}{\sqrt{n_t - {g_t}^2 + \epsilon}}\\ w_{t+1} &\leftarrow w_t + d_t\end{split}\]

where \(e_t\) denotes the gradient.

パラメータ:
  • lr (float) -- 学習率 (\(\eta\))。

  • decay (float) -- Decay rate (\(\rho\)).

  • momentum (float) -- Momentum (\(\beta\))

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.Adam(alpha=0.001, beta1=0.9, beta2=0.999, eps=1e-08)

ADAM オプティマイザー。

\[\begin{split}m_t &\leftarrow \beta_1 m_{t-1} + (1 - \beta_1) g_t\\ v_t &\leftarrow \beta_2 v_{t-1} + (1 - \beta_2) g_t^2\\ w_{t+1} &\leftarrow w_t - \alpha \frac{\sqrt{1 - \beta_2^t}}{1 - \beta_1^t} \frac{m_t}{\sqrt{v_t} + \epsilon}\end{split}\]

\(g_t\) は勾配を示し、 \(m_0 \leftarrow 0\) および \(v_0 \leftarrow 0\) とする。

パラメータ:
  • alpha (float) -- ステップサイズ (\(\alpha\))。

  • beta1 (float) -- 一次モメンタムの減衰率 (\(\beta_1\))。

  • beta2 (float) -- 二次モメンタムの減衰率 (\(\beta_2\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.AdaBound(alpha=0.001, beta1=0.9, beta2=0.999, eps=1e-08, final_lr=0.1, gamma=0.001)

AdaBound オプティマイザーは、Adam に学習率の上限と下限を動的を適用します。

\[\begin{split}w_{t+1} &\leftarrow w_t - \eta_t*m_t\\ \eta_t &= clip( \alpha\frac{\sqrt{1 - \beta_2^t}}{(1 - \beta_1^t)(\sqrt{v_t} + \epsilon)}, \eta_l(t), \eta_u(t))\\ \eta_l(t) &= (1 - (1/((1-\gamma)t+1)))\alpha^*\\ \eta_u(t) &= (1 + (1/((1-\gamma)t)))\alpha^*\end{split}\]

学習率のスケジューリングが \(\alpha\) と \(\alpha^*\) の両方に適切に適用されるように、 \(\alpha\) の現在の値 ( set_learning_rate(lr) により設定) を \(\alpha\) の初期値で割った値を用いて \(\alpha^*\) (final_lr) がスケーリングされます。

パラメータ:
  • alpha (float) -- ステップサイズ (\(\alpha\))。

  • beta1 (float) -- 一次モメンタムの減衰率 (\(\beta_1\))。

  • beta2 (float) -- 二次モメンタムの減衰率 (\(\beta_2\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

  • final_lr (float) -- 最終的な (SGD) 学習率。

  • gamma (float) -- bound 関数の収束速度。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.Adamax(alpha=0.002, beta1=0.9, beta2=0.999, eps=1e-08)

ADAMAX オプティマイザー。

\[\begin{split}m_t &\leftarrow \beta_1 m_{t-1} + (1 - \beta_1) g_t\\ v_t &\leftarrow \max\left(\beta_2 v_{t-1}, |g_t|\right)\\ w_{t+1} &\leftarrow w_t - \alpha \frac{\sqrt{1 - \beta_2^t}}{1 - \beta_1^t} \frac{m_t}{v_t + \epsilon}\end{split}\]

\(g_t\) が勾配を示し、 \(m_0 \leftarrow 0\) および \(v_0 \leftarrow 0\) とすると、 \(v_t\) は一連の勾配 \(t=0,...,t\) の指数関数的に重み付けされた無限大ノルムになります。

パラメータ:
  • alpha (float) -- ステップサイズ (\(\alpha\))。

  • beta1 (float) -- 一次モメンタムの減衰率 (\(\beta_1\))。

  • beta2 (float) -- 二次モメンタムの減衰率 (\(\beta_2\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.AMSGRAD(alpha=0.001, beta1=0.9, beta2=0.999, eps=1e-08, bias_correction=False)

AMSGRAD オプティマイザー。

\[\begin{split}m_t &\leftarrow \beta_1 m_{t-1} + (1 - \beta_1) g_t\\ v_t &\leftarrow \beta_2 v_{t-1} + (1 - \beta_2) g_t^2\\ \hat{v_t} &= \max(\hat{v_{t-1}}, v_t)\\ w_{t+1} &\leftarrow w_t - \alpha \frac{m_t}{\sqrt{\hat{v_t}} + \epsilon}\end{split}\]

\(g_t\) は勾配を示し、 \(m_0 \leftarrow 0\) および \(v_0 \leftarrow 0\) とする。

パラメータ:
  • alpha (float) -- ステップサイズ (\(\alpha\))。

  • beta1 (float) -- 一次モメンタムの減衰率 (\(\beta_1\))。

  • beta2 (float) -- 二次モメンタムの減衰率 (\(\beta_2\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\)) 。 注意 こちらは論文には記載されていません。

  • bias_correction (bool) -- ADAM で定義された移動平均にバイアス補正を適用します。注意 こちらは論文には記載されていません。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.AMSBound(alpha=0.001, beta1=0.9, beta2=0.999, eps=1e-08, final_lr=0.1, gamma=0.001, bias_correction=False)

AMSBound オプティマイザーは AMSGrad に対して学習率の上限と下限を動的に適用します。

\[\begin{split}w_{t+1} &\leftarrow w_t - \eta_t*m_t\\ \eta_t &= clip( \alpha\frac{\sqrt{1 - \beta_2^t}}{(1 - \beta_1^t)(\sqrt{\hat{v_t}} + \epsilon)}, \eta_l(t), \eta_u(t))\\ \hat{v_t} &= \max(\hat{v_{t-1}}, v_t)\\ \eta_l(t) &= (1 - (1/((1-\gamma)t+1)))\alpha^*\\ \eta_u(t) &= (1 + (1/((1-\gamma)t)))\alpha^*\end{split}\]

学習率のスケジューリングが \(\alpha\) と \(\alpha^*\) の両方に適切に適用されるように、 \(\alpha\) の現在の値 ( set_learning_rate(lr) により設定) を \(\alpha\) の初期値で割った値を用いて \(\alpha^*\) (final_lr) がスケーリングされます。

パラメータ:
  • alpha (float) -- ステップサイズ (\(\alpha\))。

  • beta1 (float) -- 一次モメンタムの減衰率 (\(\beta_1\))。

  • beta2 (float) -- 二次モメンタムの減衰率 (\(\beta_2\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\)) 。 注意 こちらは論文には記載されていません。

  • final_lr (float) -- 最終的な (SGD) 学習率。

  • gamma (float) -- bound 関数の収束速度。

  • bias_correction (bool) -- ADAM で定義された移動平均にバイアス補正を適用します。注意 こちらは論文には記載されていません。

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.AdamW(alpha=0.001, beta1=0.9, beta2=0.999, eps=1e-08, wd=0.0001)

減結合 weight decay を使ったADAM オプティマイザー。

\[\begin{split}m_t &\leftarrow \beta_1 m_{t-1} + (1 - \beta_1) g_t\\ v_t &\leftarrow \beta_2 v_{t-1} + (1 - \beta_2) g_t^2\\ \hat{m} &= m_t / (1-\beta_1^t)\\ \hat{v} &= v_t / (1-\beta_2^t)\\ w_{t} &\leftarrow w_{t-1} - \eta_t \left( \alpha \frac{\hat{m}}{\left(\sqrt{\hat{v}} + \epsilon \right)} + \lambda w_{t-1} \right)\end{split}\]

where \(g_t\) denotes a gradient, \(m_t\) and \(v_t\) are 1st and 2nd order momentum of the gradient initialized with 0 at \(t=0\), \(\eta _t\) is the scheduled learning rate, \(\lambda\) is the decoupled weight decay rate set by weight_decay() method (lazy evaluation), and the rest is described in the argument documentation.

パラメータ:
  • alpha (float) -- Initial learning rate (\(\alpha\)). Note that you have to manage the scheduled learning rate \(\eta_t\) yourelf. By denoting learning rate updated at the set_learning_rate() by \(\alpha_t\), we define \(\eta_t = \frac{\alpha_t}{\alpha}\).

  • beta1 (float) -- 一次モメンタムの減衰率 (\(\beta_1\))。

  • beta2 (float) -- 二次モメンタムの減衰率 (\(\beta_2\))。

  • eps (float) -- ゼロ除算を回避するための小さな値 (\(\epsilon\))。

  • wd (float) -- The default weight decay rate (\(\lambda\)). The weight decay operation is fused into the update operation in this solver. It uses this default decay rate unless you overwrite a decay rate via weight_decay() for the next call of update().

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.SgdW(lr=0.001, momentum=0.9, wd=0.0001)

Momentum stochastic gradient descent (SGD) optimizer with decoupled weight decay.

\[\begin{split}m_{t} &\leftarrow \gamma m_{t-1} + \eta_t \alpha g_t\\ w_{t} &\leftarrow w_{t-1} - m_{t} - \eta_t \lambda w_{t-1}\end{split}\]

where \(g_t\) denotes a gradient, \(m_t\) is momentum of the gradient initialized with 0 at \(t=0\), \(\eta _t\) is the scheduled learning rate, \(\lambda\) is the decoupled weight decay rate set by weight_decay() method (lazy evaluation), and the rest is described in the argument documentation.

パラメータ:
  • lr (float) -- Initial learning rate (\(\alpha\)). Note that you have to manage the scheduled learning rate \(\eta_t\) yourelf. By denoting learning rate updated at the set_learning_rate() by \(\alpha_t\), we define \(\eta_t = \frac{\alpha_t}{\alpha}\).

  • momentum (float) -- Decay rate of momentum (\(\gamma\)).

  • wd (float) -- The default weight decay rate (\(\lambda\)). The weight decay operation is fused into the update operation in SgdW. It uses this default decay rate unless you overwrite a decay rate via weight_decay() for the next call of update().

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照

nnabla.solvers.Lamb(eta=0.001, beta1=0.9, beta2=0.999, gamma_l=0.0, gamma_u=10.0, eps=1e-06, bias_correction=False)

LAMB optimizer.

\[\begin{split}m_t &\leftarrow \beta_1 m_{t-1} + (1 - \beta_1) g_t\\ v_t &\leftarrow \beta_2 v_{t-1} + (1 - \beta_2) g_t^2\\ \hat{m} &= m_t / (1-\beta_1^t)\\ \hat{v} &= v_t / (1-\beta_2^t)\\ r &= \frac{\hat{m}}{\sqrt{\hat{v}}+\epsilon}\\ w_t &\leftarrow w_{t-1} - \eta_t \frac{\phi (\|w_{t-1}\|)}{\|r + \lambda w_{t-1} \|} \left(r + \lambda w_{t-1} \right)\end{split}\]

where \(g_t\) denotes a gradient, \(m_t\) and \(v_t\) are 1st and 2nd order momentum of the gradient initialized with 0 at \(t=0\), \(\lambda\) is the decoupled weight decay rate set by weight_decay() method (lazy evaluation), \(\phi\) is a scaling function defined as \(\phi(z)=\min\{\max\{z, \gamma_l\}, \gamma_u\}\), and the rest is described in the arguments.

パラメータ:
  • eta (float) -- Learning rate (\(\eta_t\)).

  • beta1 (float) -- 一次モメンタムの減衰率 (\(\beta_1\))。

  • beta2 (float) -- 二次モメンタムの減衰率 (\(\beta_2\))。

  • gamma_l (float) -- Lower bound of the clamp scaling function \(\phi\) (\(\gamma_l\)).

  • gamma_u (float) -- Upper bound the clamp scaling function \(\phi\) (\(\gamma_u\)).

  • eps (float) -- Small value for avoiding zero division (\(\epsilon\)).

  • bias_correction (bool) -- Whether to apply bias correction in momentum computation \(\hat{m}\) and \(\hat{v}\).

戻り値:

Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。

戻り値の型:

Solver

注釈

コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は nnabla.set_default_context(ctx) または nnabla.context_scope(ctx) で設定できます。API ドキュメントを参照してください。

参照