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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuya Unno
December 19, 2015
Technology
15
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Chainer⼊門と最近の機能 @Chainer Meetup #1
Yuya Unno
December 19, 2015
More Decks by Yuya Unno
See All by Yuya Unno
深層学習で切り拓くパーソナルロボットの未来 @東京大学 先端技術セミナー 工学最前線
unnonouno
0
29
深層学習時代の自然言語処理ビジネス @DLLAB 言語・音声ナイト
unnonouno
0
53
ベンチャー企業で言葉を扱うロボットの研究開発をする @東京大学 電子情報学特論I
unnonouno
0
50
PFNにおけるセミナー活動 @NLP2018 言語処理研究者・技術者の育成と未来への連携WS
unnonouno
0
20
進化するChainer @JSAI2017
unnonouno
0
30
予測型戦略を知るための機械学習チュートリアル @BigData Conference 2017 Spring
unnonouno
0
30
深層学習フレームワーク Chainerとその進化
unnonouno
0
31
深層学習による機械とのコミュニケーション @DeNA TechCon 2017
unnonouno
0
43
最先端NLP勉強会 “Learning Language Games through Interaction” @第8回最先端NLP勉強会
unnonouno
0
25
Other Decks in Technology
See All in Technology
OPENLOGI Company Profile for engineer
hr01
1
74k
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
3
4.2k
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
220
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
790
SRE Next 2026 何でも屋からの脱却
bto
0
950
Network Firewallやっていき!
news_it_enj
0
170
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
240
実践!既存 Project への AI-Driven Development 適用〜 一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
0
230
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
480
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
130
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
3
1.1k
AIが実装を自走する時代の認知負債との戦い
lycorptech_jp
PRO
1
280
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
310
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
730
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
Navigating Weather and Climate Data
rabernat
0
370
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Between Models and Reality
mayunak
4
370
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