class chainer.Optimizer[source]

全ての数値オプティマイザの基底クラス。(*訳注:オプティマイズ=最適化)

 

このクラスは全ての最適化メソッドのための基本的な機能を提供します。このクラスはターゲットリンクのパラメータを最適化します。このターゲットリンクはsetup() メソッドを通して登録され、update() メソッドが、与えられた損失関数に基いてパラメータを更新します。 

各オプティマイザの実装は Optimizerの子クラスとして定義されなければなりません。また、update() メソッドをオーバライドしなければなりません。

 

オプティマイザが1つの勾配計算(多くの1次法のような)に基いている場合、 GradientMethodを継承すべきです。これはUpdateRuleのサポートを含め、1次法に特化した機能を加えます。

 

Optimizer インスタンスはフック関数もサポートしています。フック関数は add_hook() メソッドによって登録されます。各フック関数は実際のパラメータの更新の前に登録順に呼び出されます。フック関数が属性の call_for_each_param を持つ場合、その値は Trueで、 フック関数は全ての更新ルールのフック関数として用いられます。 (つまり、全てのパラメータが、対応する更新ルールとパラメータを通過することによって、呼び出されます。).

 

Variables:
  • target – ターゲットリンクオブジェクト。 setup() メソッドによって設定される。
  • t – 更新ステップ数。 update() メソッドによってインクリメントされる。
  • epoch – カレントエポック。 new_epoch() メソッドによってインクリメントされる。

 

 

Methods

add_hook(hook, name=None)[source]

フック関数を登録します。

 

フック関数は一般的には勾配計算の直後に呼び出されますが、このタイミングはoptimizationメソッドにより決定できます。

Parameters:
  • hook (function) – フック関数。 hook.call_for_each_param がTrueのとき、このフック関数は更新ルールとパラメータを通過することで各パラメータを呼び出します。このフック関数は繰り返し処理ごとにoptimizerを通過すると呼び出されます。 
  • name (str) –登録名。省略されている場合、 hook.name がデフォルトで設定される。

 

call_hooks()[source]

登録順にフック関数が呼び出される。

 

new_epoch()[source]

新しいエポックを開始する。

 

このメソッドは epoch 数を増やします。オプティマイザはエポック数に依存しているので、ユーザは各エポックのはじめに、適切にこのメソッドを呼び出さなければいけないことに注意してください。

 

remove_hook(name)[source]

フック関数を削除する。

 

Parameters: name (str) – 削除するフック関数の登録名

 

serialize(serializer)[source]

Optimizerをシリアライズもしくはデシリアライズする。

 

下記を保存、もしくはロードする場合:

  • Optimizer state
  • Global states(t と epoch)

ターゲットリンクのパラメータを保存したり、ロードすることはありません。ターゲットリンクは個別に保存、もしくはロードされなければなりません。

Parameters: serializer (AbstractSerializer) – シリアライザ、もしくはデシリアライザオブジェクト。 

 

setup(link)[source]

ターゲットリンクを設定し、Optimiser statesを初期化する。

 

与えられたリンクを target 属性に設定する。階層における全てのパラメータに対応するOptimizer state 辞書も準備する。既存のstatesは、破棄されます。

Parameters: link (Link) – Target link object.

 

update(lossfun=None, *args, **kwds)[source]

パラメータをアップデートする。

 

このメソッドはターゲットリンクのパラメータを更新します。このメソッドの動作は lossfun が与えられたとき、与えられていないときとも異なります。

lossfun  が与えられている場合、このメソッドは一般的に勾配をクリアし、損失関数を与えられた追加の引数とともに呼び出します、そして勾配を計算した出力の backward() メソッド を呼び出します。この実装は  lossfun を一度とは言わず(何度も)呼び出すかもしれません。

 lossfun が与えられていない場合、このメソッドは全てのパラメータの勾配が既に計算されていることを確認します。複数の勾配計算を要求するような実装では、この場合、エラーを起こす可能性があります。

両方のケースで、このメソッドは全てのパラメータの更新処理を呼び出します。

 

Parameters:
  • lossfun (function) – 損失関数。任意の引数を受け入れ、損失値(もしくはオブジェクト)を表すVariable オブジェクトをひとつ返します。この引数は、単一の勾配法のでは省略可能です。この場合、このメソッドは勾配配列が計算されていることを確認します。
  • kwds (args,) – 損失関数のための引数