Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Chainer⼊門と最近の機能 @Chainer Meetup #1
Search
Yuya Unno
December 19, 2015
Technology
0
7
Chainer⼊門と最近の機能 @Chainer Meetup #1
Yuya Unno
December 19, 2015
Tweet
Share
More Decks by Yuya Unno
See All by Yuya Unno
深層学習で切り拓くパーソナルロボットの未来 @東京大学 先端技術セミナー 工学最前線
unnonouno
0
15
深層学習時代の自然言語処理ビジネス @DLLAB 言語・音声ナイト
unnonouno
0
37
ベンチャー企業で言葉を扱うロボットの研究開発をする @東京大学 電子情報学特論I
unnonouno
0
27
PFNにおけるセミナー活動 @NLP2018 言語処理研究者・技術者の育成と未来への連携WS
unnonouno
0
7
進化するChainer @JSAI2017
unnonouno
0
16
予測型戦略を知るための機械学習チュートリアル @BigData Conference 2017 Spring
unnonouno
0
6
深層学習フレームワーク Chainerとその進化
unnonouno
0
15
深層学習による機械とのコミュニケーション @DeNA TechCon 2017
unnonouno
0
22
最先端NLP勉強会 “Learning Language Games through Interaction” @第8回最先端NLP勉強会
unnonouno
0
10
Other Decks in Technology
See All in Technology
Exadata Database Service on Cloud@Customer セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
2
1.6k
サバイバルモード下でのエンジニアリングマネジメント
konifar
15
3.9k
MIMEと文字コードの闇
hirachan
2
1.4k
LINE NEWSにおけるバックエンド開発
lycorptech_jp
PRO
0
330
Potential EM 制度を始めた理由、そして2年後にやめた理由 - EMConf JP 2025
hoyo
2
2.9k
Cracking the Coding Interview 6th Edition
gdplabs
14
28k
入門 PEAK Threat Hunting @SECCON
odorusatoshi
0
170
データベースの負荷を紐解く/untangle-the-database-load
emiki
2
540
遷移の高速化 ヤフートップの試行錯誤
narirou
6
1.9k
クラウド関連のインシデントケースを収集して見えてきたもの
lhazy
9
1.8k
【詳説】コンテンツ配信 システムの複数機能 基盤への拡張
hatena
0
280
Aurora PostgreSQLがCloudWatch Logsに 出力するログの課金を削減してみる #jawsdays2025
non97
1
230
Featured
See All Featured
Optimizing for Happiness
mojombo
377
70k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
Adopting Sorbet at Scale
ufuk
75
9.2k
RailsConf 2023
tenderlove
29
1k
Become a Pro
speakerdeck
PRO
26
5.2k
Music & Morning Musume
bryan
46
6.4k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Transcript
Chainer⼊入⾨門と最近の機能 2015/12/19 Chainer Meetup #01 (株)Preferred Infrastructure 海野 裕也 v1.5向け
⾃自⼰己紹介 海野 裕也 l -2008 東⼤大情報理理⼯工修⼠士 l ⾃自然⾔言語処理理 l 2008-2011
⽇日本アイ・ビー・エム(株)東京基礎研 l テキストマイニング、⾃自然⾔言語処理理の研究開発 l 2011- (株)プリファードインフラストラクチャー l ⾃自然⾔言語処理理、情報検索索、機械学習、テキストマイニングなど の研究開発 l 研究開発系案件、コンサルティング l JubatusやChainerの開発 l 最近は対話処理理 NLP若若⼿手の会共同委員⻑⾧長(2014-) 「オンライン機械学習」(2015, 講談社) 2
今⽇日のおはなし l Deep Learningのおさらい l Chainer の使い⽅方の紹介 l 最後にv1.5での変更更点などを 3
ニューラルネットの基礎
ニューラルネット l 値が伝播していく有向グラフ l エッジで重みをかけて、ノードに⼊入るところで⾜足し 込み、ノードの中で⾮非線形変換する l 全体としては巨⼤大で複雑な関数を表す 5
ニューラルネット=合成関数 l ベクトルに対して線形・⾮非線形な関数をたくさん適 ⽤用する合成関数と捉えるとよい l 各ノードはベクトルを保持する変数 6
⼀一般のニューラルネットは DAG = 計算グラフ ⼀一般にはグラフが分岐したり合流流したりする l 分岐:同じ変数を複数の場所でつかう l 合流流:⼆二つ以上の変数を受け取る関数を適⽤用する 7
計算グラフの例例 z = x ** 2 + 2 * x
* y + y 8 x y _ ** 2 2 * _ _ * _ _ + _ z _ + _
誤差逆伝播は、計算グラフを逆向きにたどる 計算グラフと順伝播時の各変数の値があれば計算可能 9
ニューラルネットの学習⽅方法 1. ⽬目的関数の設計 l 計算グラフを⾃自分で設計する 2. 勾配の計算 l 誤差逆伝播で機械的に計算できる 3.
最⼩小化のための反復復計算 l 勾配を使って反復復更更新する 10 1さえ設計すれば残りは ほぼ⾃自動化されている
Recurrent Net l ループがあるニューラルネット l 時刻の概念念があり、t=T の状態は t=T-1 の状態と t=T
の⼊入 ⼒力力を使って求める 11 T T-1 T
Recurrent Net は時間展開して考える l 時間展開すれば、DAG の計算グラフになる l DAG の計算グラフは誤差逆伝播できる(Backprop Through
Time) 12 t=1 t=2 t=3 t=4
Chainer の使い⽅方
Chainer はニューラルネットのフレームワーク l 機能 l ニューラルネットを記述する l ニューラルネットの順伝播・逆伝播を実⾏行行する l 勾配法を実⾏行行してパラメータを最適化する
l Chainer の特徴 l 順伝播は単純に Python のスクリプトとして書ける l そのスクリプトの実⾏行行結果は計算⼿手順を記憶してい て、逆伝播を⼿手で書く必要はない 14
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
順伝播 l 今まで「変数」と呼んでいたものは、Chainer では Variable オブジェクト l Variable を Function
に⼊入れると、順伝搬後の Variable が返ってくる l Variable が計算グラフを保持している l Function は、四則演算以外に chainer.functions に⽤用意されている 16
順伝搬とコード例例 17 x y _**2 2*_ _*_ _+_ z _+_
x = Variable(...) y = Variable(...) z = x ** 2 + 2 * x * y + y
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
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
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~
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~
ロス関数、勾配計算 l ロス関数もFunctionの⼀一種 l ロス関数の出⼒力力に、Variable.backward() を呼ぶと 勾配が計算できる loss = F.softmax_cross_entropy(y,
t) loss.backward() 22
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
Optimizer による最適化 l まず勾配をゼロ初期化:zerograds() l 順伝播・逆伝播を実⾏行行 l 最適化ルーチンを実⾏行行:update() l 以上を何回も繰り返す
model.zerograds() loss = ... loss.backward() optimizer.update() 24
Chainer を使う場合の全体の流流れ 1. Linkを使ってChainを定義する 2. Optimizer に、Chain を設定する 3. forward
関数を定義する 4. データセットを読み込み、訓練⽤用と評価⽤用にわける 5. 訓練ループを回す a. 勾配をゼロ初期化 b. 順伝搬して、得られたロス値の backward メソッドを呼ぶ c. Optimizerを、update 6. 適当な頻度度で評価ループを回す a. テストデータで順伝搬関数を呼んで結果を記録 25
Chainerの最近の変更更
v1.5の主な変更更点 l Link、Chainのサポート l CuPyのCython化 l Save/Loadサポート 27
LinkとChainのサポート l 今までパラメタ(最適化の対象)がきちんと管 理理されていなかった l Link:パラメタ付きの関数 l Chain:複数のLinkで構成される関数 l これが最適化の対象
l 同時にシリアライズの対象(後述) l Chainの単位でモジュール化できるので、再利利 ⽤用しやすい 28
CuPyのCython化 l v1.3からGPUバックエンドがCuPyになったが、 パフォーマンスが低下した l Cythonを利利⽤用することで速度度向上 l cppファイルを添付したのでインストール時に Cythonは不不要(ただし、h5pyが使う) l
CUDAなどの共有ライブラリをctypesではなく てCythonから使う l ctypesが遅かった l インストール時にビルドが必要になった 29
Save/Loadのサポート l Link/Chainで保存の対象が明確になった l Chainが⼊入れ⼦子になるので⼊入れ⼦子になったパラ メータも⾃自然と保存できる l hdf5形式をサポート l h5pyのインストールが失敗しやすい・・・
30
まとめ l ニューラルネットを(おもに実装⾯面から)簡単におさら いしました l Chainer の使い⽅方をざっくりお伝えしました l v1.5でインストールが難しくなったと⾔言われていますが、 v1.6でだいたい元の戻る予定
31