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 でパラメータを設定します。
-
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_dict
でset_parameters
を呼び出してください。
-
update
(self, update_pre_hook=None, update_post_hook=None)¶ この関数を呼び出すと、パラメータ値は、パラメータ
Variable
のgrad
に保存されている 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)¶ 勾配に、weight decay を適用します。これが呼ばれると、現在のパラメータ値の一定割合の分だけ勾配が減衰します。
- パラメータ
decay_rate (float) -- weight decay の係数。
-
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
-
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}\]- パラメータ
- 戻り値
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 &\leftarrow \eta \frac{\| w_t \|}{\| \Delta w_t + \beta w_t \|} \\ v_{t+1} &\leftarrow m v_t + \gamma \lambda (\Delta w_t + \beta w_t) \\ w_{t+1} &\leftarrow w_t - v_{t+1}\end{split}\]- パラメータ
- 戻り値
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}\]- パラメータ
- 戻り値
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}\]- パラメータ
- 戻り値
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}\]- パラメータ
- 戻り値
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) -- Weight decay rate. This option only takes effect when weight_decouple option is enabled.
amsgrad (bool) -- Perform AMSGrad variant of AdaBelief.
weight_decouple (bool) -- 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}\]- パラメータ
- 戻り値
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.
- パラメータ
- 戻り値
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\) とする。
- パラメータ
- 戻り値
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
) がスケーリングされます。- パラメータ
- 戻り値
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\) の指数関数的に重み付けされた無限大ノルムになります。
- パラメータ
- 戻り値
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\) とする。
- パラメータ
- 戻り値
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\\ w_{t+1} &\leftarrow w_t - \alpha \frac{\sqrt{1 - \beta_2^t}}{1 - \beta_1^t} \frac{m_t}{\sqrt{v_t} + \epsilon} - \eta_t\lambda w_t\end{split}\]ここでは、 \(g_t\) は勾配を示し、 \(\lambda\) は減結合 weight decay 率、 \(m_0 \leftarrow 0\) および \(v_0 \leftarrow 0\) です。
- パラメータ
- 戻り値
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)¶ 減結合 weight decay を使ったStochastic gradient descent (SGD) オプティマイザー。
\[\begin{split}v_t \leftarrow \gamma v_{t-1} + \eta g_t - (\eta / \eta_0)\lambda v_{t-1}\\ w_{t+1} \leftarrow w_t - v_t\end{split}\]ここでは、 \(\lambda\) は減結合 weight decay 率です。
- パラメータ
- 戻り値
Solver クラスのインスタンス。 詳しくは Solver API ガイドを参照してください。
- 戻り値の型
Solver
注釈
コンテキスト を指定して、指定されたタイプの Solver の優先ターゲット実装(CUDA など)をインスタンス化できます。 コンテキスト は
nnabla.set_default_context(ctx)
またはnnabla.context_scope(ctx)
で設定できます。API ドキュメントを参照してください。参照