define by run と define and run

ハイパーパラメータを自動で最適化するoptunaが公開されたnewsを見てすごいなと感動していた。oputunaがdefine by runに準拠しているというのを見てそういえばdefine by run と define and runの詳しい違いは何だったかわからなかったので調べてみた。

 

  • define and run :ネットワークを構築して固定してから学習を開始する
  • define by run :ネットワークは順伝搬のあとに確定されて学習

 

 define and run のネットワークは固定というのはそのままの意味で、学習を行う前にネットワークの構造を決定する。以後その形はデータの内容や結果がどうであれ変更されることはない。

柔軟性があまりないという欠点があるが、そのかわり最適化が容易であるという利点がある。

 

 一方define by runは途中でネットワークの構造を変更させることができる。

例えばchainerではミニバッチごと、1データごとにネットワークの構造を変化させることが可能である。順伝搬の結果ごとに分岐条件をつけて変化させるなどである。define by runはデータが通った計算のルートのみを覚えているのでその部分のみが更新される。(通らなかったルートはそもそも構築されない)

 この柔軟な点は自然言語処理のRNNで有効である。例えば自然言語処理のデータセットでは文字長が異なる場合、揃えるためにパディングを行なってミニバッチ処理を行うが、define by runではデータごとにネットワーク構造を変えることができる。

 

 

参考

www.hellocybernetics.tech

qiita.com