Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Chainer⼊門と最近の機能 @Chainer Meetup #1

Yuya Unno
December 19, 2015

Chainer⼊門と最近の機能 @Chainer Meetup #1

Yuya Unno

December 19, 2015
Tweet

More Decks by Yuya Unno

Other Decks in Technology

Transcript

  1. ⾃自⼰己紹介 海野 裕也 l  -2008 東⼤大情報理理⼯工修⼠士 l  ⾃自然⾔言語処理理 l  2008-2011

    ⽇日本アイ・ビー・エム(株)東京基礎研 l  テキストマイニング、⾃自然⾔言語処理理の研究開発 l  2011- (株)プリファードインフラストラクチャー l  ⾃自然⾔言語処理理、情報検索索、機械学習、テキストマイニングなど の研究開発 l  研究開発系案件、コンサルティング l  JubatusやChainerの開発 l  最近は対話処理理 NLP若若⼿手の会共同委員⻑⾧長(2014-) 「オンライン機械学習」(2015, 講談社) 2
  2. 計算グラフの例例 z = x ** 2 + 2 * x

    * y + y 8 x y _ ** 2 2 * _ _ * _ _ + _ z _ + _
  3. ニューラルネットの学習⽅方法 1.  ⽬目的関数の設計 l  計算グラフを⾃自分で設計する 2.  勾配の計算 l  誤差逆伝播で機械的に計算できる 3. 

    最⼩小化のための反復復計算 l  勾配を使って反復復更更新する 10 1さえ設計すれば残りは ほぼ⾃自動化されている
  4. Chainer はニューラルネットのフレームワーク l  機能 l  ニューラルネットを記述する l  ニューラルネットの順伝播・逆伝播を実⾏行行する l  勾配法を実⾏行行してパラメータを最適化する

    l  Chainer の特徴 l  順伝播は単純に Python のスクリプトとして書ける l  そのスクリプトの実⾏行行結果は計算⼿手順を記憶してい て、逆伝播を⼿手で書く必要はない 14
  5. Chainer のインストール l  環境は Linux(特に Ubuntu)がおすすめ l  インストール⽅方法 l  新しめの

    Python 環境を⽤用意(CPython 2.7+, 3.4+, 3.5+) l  pip も⽤用意 l  コマンドを実⾏行行: pip install chainer l  chainer パッケージが import できれば完了了です l  Python スタックの環境構築は、Anaconda がお すすめ l  Python のバージョン管理理は pyenv がおすすめ l  pyenv からコマンド⼀一つで Anaconda もインストールできます 15
  6. 順伝播 l  今まで「変数」と呼んでいたものは、Chainer では Variable オブジェクト l  Variable を Function

    に⼊入れると、順伝搬後の Variable が返ってくる l  Variable が計算グラフを保持している l  Function は、四則演算以外に chainer.functions に⽤用意されている 16
  7. 順伝搬とコード例例 17 x y _**2 2*_ _*_ _+_ z _+_

    x = Variable(...) y = Variable(...) z = x ** 2 + 2 * x * y + y
  8. Variable オブジェクト l  計算グラフの(データ)ノード l  NumPy または CuPy(後述)の配列列を保持する l  多くの

    Function は配列列の最初の軸をミニバッチとして 使うので注意 l  下の x は、20 次元ベクトルが 10 個⼊入ったミニバッチとみなす l  現状、Chainer は多くの場所で float32 配列列を要求する ので注意 18 x = Variable(np.zeros((10, 20), dtype=np.float32)) x.data
  9. Function オブジェクト l  計算グラフの「演算」ノード l  chainer.functions (以降降 F) にいろいろ定義され ている

    l  F.relu, F.max_pooling_2d, F.lstm, ... l  Functionの呼び出し結果が、再びVariableになる l  v1.5からパラメータはLinkとして分離離された(後述) 19 x = Variable(...) y = F.relu(x) # yもVariable
  10. Link オブジェクト l  パラメータ付きの関数 l  最適化の対象となる l  save/loadができる(v1.5からsave/loadをサポート) l  chainer.links(以降降L)に⾊色々⽤用意されている

    l  L.Linear, L.Convolution2D, L.EmbedID, ... l  Linkの呼び出し結果が、再びVariableになる l  v1.5からFunctionとパラメータは分離離され、パラメータ 付きの関数はLinkオブジェクトになった 20 v1.5~
  11. Optimizer の設定 l  勾配が計算できたら、あとは勾配法をまわす l  勾配法のアルゴリズムは Optimizer クラスの⼦子クラス l  chainer.optimizers

    に定義されている l  実装されている最適化⼿手法:SGD, MomentumSGD, AdaGrad, RMSprop, RMSpropGraves, AdaDelta, Adam l  最適化対象をsetup メソッドに渡す l  正則化はhook関数として登録する optimizer = optimizers.SGD() optimizer.setup(model) optimizer.add_hook(optimizer.WeightDecay()) 23
  12. Chainer を使う場合の全体の流流れ 1.  Linkを使ってChainを定義する 2.  Optimizer に、Chain を設定する 3.  forward

    関数を定義する 4.  データセットを読み込み、訓練⽤用と評価⽤用にわける 5.  訓練ループを回す a.  勾配をゼロ初期化 b.  順伝搬して、得られたロス値の backward メソッドを呼ぶ c.  Optimizerを、update 6.  適当な頻度度で評価ループを回す a.  テストデータで順伝搬関数を呼んで結果を記録 25