Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

Chainer入門と最近の機能

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 31 Anuncio

Más Contenido Relacionado

Presentaciones para usted (20)

A los espectadores también les gustó (20)

Anuncio

Similares a Chainer入門と最近の機能 (20)

Más de Yuya Unno (20)

Anuncio

Más reciente (20)

Chainer入門と最近の機能

  1. 1. Chainer⼊入⾨門と最近の機能 2015/12/19  Chainer  Meetup  #01 (株)Preferred  Infrastructure 海野  裕也 v1.5向け
  2. 2. ⾃自⼰己紹介 海野  裕也 l  -2008 東⼤大情報理理⼯工修⼠士 l  ⾃自然⾔言語処理理 l  2008-2011 ⽇日本アイ・ビー・エム(株)東京基礎研 l  テキストマイニング、⾃自然⾔言語処理理の研究開発 l  2011- (株)プリファードインフラストラクチャー l  ⾃自然⾔言語処理理、情報検索索、機械学習、テキストマイニングなど の研究開発 l  研究開発系案件、コンサルティング l  JubatusやChainerの開発 l  最近は対話処理理 NLP若若⼿手の会共同委員⻑⾧長(2014-) 「オンライン機械学習」(2015, 講談社)2
  3. 3. 今⽇日のおはなし l  Deep Learningのおさらい l  Chainer の使い⽅方の紹介 l  最後にv1.5での変更更点などを 3
  4. 4. ニューラルネットの基礎
  5. 5. ニューラルネット l  値が伝播していく有向グラフ l  エッジで重みをかけて、ノードに⼊入るところで⾜足し 込み、ノードの中で⾮非線形変換する l  全体としては巨⼤大で複雑な関数を表す 5
  6. 6. ニューラルネット=合成関数 l  ベクトルに対して線形・⾮非線形な関数をたくさん適 ⽤用する合成関数と捉えるとよい l  各ノードはベクトルを保持する変数 6
  7. 7. ⼀一般のニューラルネットは  DAG = 計算グラフ ⼀一般にはグラフが分岐したり合流流したりする l  分岐:同じ変数を複数の場所でつかう l  合流流:⼆二つ以上の変数を受け取る関数を適⽤用する 7
  8. 8. 計算グラフの例例 z = x ** 2 + 2 * x * y + y 8 x y _ ** 2 2 * _ _ * _ _ + _ z _ + _
  9. 9. 誤差逆伝播は、計算グラフを逆向きにたどる 計算グラフと順伝播時の各変数の値があれば計算可能 9
  10. 10. ニューラルネットの学習⽅方法 1.  ⽬目的関数の設計 l  計算グラフを⾃自分で設計する 2.  勾配の計算 l  誤差逆伝播で機械的に計算できる 3.  最⼩小化のための反復復計算 l  勾配を使って反復復更更新する 10 1さえ設計すれば残りは ほぼ⾃自動化されている
  11. 11. Recurrent Net l  ループがあるニューラルネット l  時刻の概念念があり、t=T の状態は t=T-1 の状態と t=T の⼊入 ⼒力力を使って求める 11 T T-1 T
  12. 12. Recurrent Net は時間展開して考える l  時間展開すれば、DAG の計算グラフになる l  DAG の計算グラフは誤差逆伝播できる(Backprop Through Time) 12 t=1 t=2 t=3 t=4
  13. 13. Chainer の使い⽅方
  14. 14. Chainer はニューラルネットのフレームワーク l  機能 l  ニューラルネットを記述する l  ニューラルネットの順伝播・逆伝播を実⾏行行する l  勾配法を実⾏行行してパラメータを最適化する l  Chainer の特徴 l  順伝播は単純に Python のスクリプトとして書ける l  そのスクリプトの実⾏行行結果は計算⼿手順を記憶してい て、逆伝播を⼿手で書く必要はない 14
  15. 15. 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
  16. 16. 順伝播 l  今まで「変数」と呼んでいたものは、Chainer では  Variable オブジェクト l  Variable を  Function に⼊入れると、順伝搬後の Variable が返ってくる l  Variable が計算グラフを保持している l  Function は、四則演算以外に chainer.functions に⽤用意されている 16
  17. 17. 順伝搬とコード例例 17 x y _**2 2*_ _*_ _+_ z _+_ x = Variable(...) y = Variable(...) z = x ** 2 + 2 * x * y + y
  18. 18. 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
  19. 19. 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
  20. 20. 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~
  21. 21. ChainでLinkをまとめる l  ⼀一般的にパラメータ付きの関数(Link)は複数あるので、 Chainでまとめて管理理できる l  Chainを継承すると再利利⽤用しやすくなる model = Chain(embed=L.EmbedID(10000, 100), layer1=L.Linear(100, 100), layer2=L.Linear(100, 10000)) x = Variable(...) h = F.relu(model.layer1(model.embed(x))) y = model.layer2(h) 21 v1.5~
  22. 22. ロス関数、勾配計算 l  ロス関数もFunctionの⼀一種 l  ロス関数の出⼒力力に、Variable.backward()  を呼ぶと 勾配が計算できる loss = F.softmax_cross_entropy(y, t) loss.backward() 22
  23. 23. 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
  24. 24. Optimizer による最適化 l  まず勾配をゼロ初期化:zerograds() l  順伝播・逆伝播を実⾏行行 l  最適化ルーチンを実⾏行行:update() l  以上を何回も繰り返す model.zerograds() loss = ... loss.backward() optimizer.update() 24
  25. 25. Chainer を使う場合の全体の流流れ 1.  Linkを使ってChainを定義する 2.  Optimizer  に、Chain を設定する 3.  forward 関数を定義する 4.  データセットを読み込み、訓練⽤用と評価⽤用にわける 5.  訓練ループを回す a.  勾配をゼロ初期化 b.  順伝搬して、得られたロス値の backward メソッドを呼ぶ c.  Optimizerを、update 6.  適当な頻度度で評価ループを回す a.  テストデータで順伝搬関数を呼んで結果を記録 25
  26. 26. Chainerの最近の変更更
  27. 27. v1.5の主な変更更点 l  Link、Chainのサポート l  CuPyのCython化 l  Save/Loadサポート 27
  28. 28. LinkとChainのサポート l  今までパラメタ(最適化の対象)がきちんと管 理理されていなかった l  Link:パラメタ付きの関数 l  Chain:複数のLinkで構成される関数 l  これが最適化の対象 l  同時にシリアライズの対象(後述) l  Chainの単位でモジュール化できるので、再利利 ⽤用しやすい 28
  29. 29. CuPyのCython化 l  v1.3からGPUバックエンドがCuPyになったが、 パフォーマンスが低下した l  Cythonを利利⽤用することで速度度向上 l  cppファイルを添付したのでインストール時に Cythonは不不要(ただし、h5pyが使う) l  CUDAなどの共有ライブラリをctypesではなく てCythonから使う l  ctypesが遅かった l  インストール時にビルドが必要になった 29
  30. 30. Save/Loadのサポート l  Link/Chainで保存の対象が明確になった l  Chainが⼊入れ⼦子になるので⼊入れ⼦子になったパラ メータも⾃自然と保存できる l  hdf5形式をサポート l  h5pyのインストールが失敗しやすい・・・ 30
  31. 31. まとめ l  ニューラルネットを(おもに実装⾯面から)簡単におさら いしました l  Chainer の使い⽅方をざっくりお伝えしました l  v1.5でインストールが難しくなったと⾔言われていますが、 v1.6でだいたい元の戻る予定 31

×