Chainer v2.0の所感

はじめに

Chainer Meetup #04に行ってきてChainer v2.0の話を聞いてきたので感想を書きます.

開発者の方のスライドは以下.

www.slideshare.net

感想

  • v2.0だからといって超すごい&イケてる新機能というのはない
    • ver名はあくまでも後方互換を無くすぞ,という強い気持ちの現れ
    • 後方互換を無くすことで一部のAPIがちょっと便利になるかもな,というアップデート
  • Unified configuration は嬉しい.
    • enable_backprop とかかなり嬉しくて,今までは volatile flag を相当頑張って使う(各Variableのvolatilityを把握する)ことでネットワークを記述していたところをwith構文で美しく書けるようになるのだと解釈している.
    • trainもかなり嬉しい.アホな人間なのでtrainフラグの管理をまともにすることが困難であり,train=Trueな状態でvalidationとかして「性能が出ないよ〜〜〜」なんてやってしまうことが多々あったけど,そういうのが無くなるはず.
  • Optimizer with UpdateRuleも嬉しい.今まではWeightDecayやGradientClipping,学習率などをネットワークの各所で変えたい,という時など結構面倒で,Optimizerを別個に用意する必要があったりすることもあったけど,これからはそれも無くなるはず.うれしい.
  • snapshot, snapshot_objectからtriggerが削除される話. むしろなんで今まであったんだ…という気持ちでいっぱいになる.なんで今まであったの?

あと,地味に今回のアップデートで一番安心したのが,for-loopを使って自分で訓練ループを書き下す記法のサポートは続く,ということ.

自分はようやくTrainerを使いこなせるようになったところだが,for-loopで書いたほうが便利な状況は多々あるとやっぱり思う. 特に研究でDNNを書く場合,細かい調整,モデルの改変などをやろうとするとTrainerの上に乗っかるのが面倒になることもあるし. (Trainerに乗っかることでコードが破綻しにくい,というメリットもあると思っていて,ここらへんは一長一短な気もするが…)

(そもそも最近公開されたChainerRLはTrainerを使っていない.中の人もTrainerを使ってないんですよ.)

よかったよかった.