Weitere ähnliche Inhalte
Ähnlich wie Chainer入門と最近の機能 (20)
Chainer入門と最近の機能
- 2. ⾃自⼰己紹介
海野 裕也
l -2008 東⼤大情報理理⼯工修⼠士
l ⾃自然⾔言語処理理
l 2008-2011 ⽇日本アイ・ビー・エム(株)東京基礎研
l テキストマイニング、⾃自然⾔言語処理理の研究開発
l 2011- (株)プリファードインフラストラクチャー
l ⾃自然⾔言語処理理、情報検索索、機械学習、テキストマイニングなど
の研究開発
l 研究開発系案件、コンサルティング
l JubatusやChainerの開発
l 最近は対話処理理
NLP若若⼿手の会共同委員⻑⾧長(2014-)
「オンライン機械学習」(2015, 講談社)2
- 7. ⼀一般のニューラルネットは DAG = 計算グラフ
⼀一般にはグラフが分岐したり合流流したりする
l 分岐:同じ変数を複数の場所でつかう
l 合流流:⼆二つ以上の変数を受け取る関数を適⽤用する
7
- 8. 計算グラフの例例
z = x ** 2 + 2 * x * y + y
8
x
y
_ **
2
2 * _ _ * _ _ + _ z
_ + _
- 14. Chainer はニューラルネットのフレームワーク
l 機能
l ニューラルネットを記述する
l ニューラルネットの順伝播・逆伝播を実⾏行行する
l 勾配法を実⾏行行してパラメータを最適化する
l Chainer の特徴
l 順伝播は単純に Python のスクリプトとして書ける
l そのスクリプトの実⾏行行結果は計算⼿手順を記憶してい
て、逆伝播を⼿手で書く必要はない
14
- 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
- 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. 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. 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~
- 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
- 25. Chainer を使う場合の全体の流流れ
1. Linkを使ってChainを定義する
2. Optimizer に、Chain を設定する
3. forward 関数を定義する
4. データセットを読み込み、訓練⽤用と評価⽤用にわける
5. 訓練ループを回す
a. 勾配をゼロ初期化
b. 順伝搬して、得られたロス値の backward メソッドを呼ぶ
c. Optimizerを、update
6. 適当な頻度度で評価ループを回す
a. テストデータで順伝搬関数を呼んで結果を記録
25