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
9
Chainer⼊門と最近の機能 @Chainer Meetup #1
Yuya Unno
December 19, 2015
Tweet
Share
More Decks by Yuya Unno
See All by Yuya Unno
深層学習で切り拓くパーソナルロボットの未来 @東京大学 先端技術セミナー 工学最前線
unnonouno
0
21
深層学習時代の自然言語処理ビジネス @DLLAB 言語・音声ナイト
unnonouno
0
41
ベンチャー企業で言葉を扱うロボットの研究開発をする @東京大学 電子情報学特論I
unnonouno
0
41
PFNにおけるセミナー活動 @NLP2018 言語処理研究者・技術者の育成と未来への連携WS
unnonouno
0
11
進化するChainer @JSAI2017
unnonouno
0
19
予測型戦略を知るための機械学習チュートリアル @BigData Conference 2017 Spring
unnonouno
0
18
深層学習フレームワーク Chainerとその進化
unnonouno
0
19
深層学習による機械とのコミュニケーション @DeNA TechCon 2017
unnonouno
0
28
最先端NLP勉強会 “Learning Language Games through Interaction” @第8回最先端NLP勉強会
unnonouno
0
13
Other Decks in Technology
See All in Technology
RALGO : AIを組織に組み込む方法 -アルゴリズム中心組織設計- #RSGT2026 / RALGO: How to Integrate AI into an Organization – Algorithm-Centric Organizational Design
kyonmm
PRO
3
850
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
580
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
3
270
Claude Codeを使った情報整理術
knishioka
20
12k
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
140
Next.js 16の新機能 Cache Components について
sutetotanuki
0
210
AWS re:Invent2025最新動向まとめ(NRIグループre:Cap 2025)
gamogamo
0
150
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
AWS re:Inventre:cap ~AmazonNova 2 Omniのワークショップを体験してきた~
nrinetcom
PRO
0
130
Data Hubグループ 紹介資料
sansan33
PRO
0
2.5k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
60k
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
320
Featured
See All Featured
It's Worth the Effort
3n
187
29k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
110
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
300
The Language of Interfaces
destraynor
162
26k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
410
Un-Boring Meetings
codingconduct
0
170
Git: the NoSQL Database
bkeepers
PRO
432
66k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.3k
Designing for Performance
lara
610
70k
Leo the Paperboy
mayatellez
1
1.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
How to Talk to Developers About Accessibility
jct
1
94
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