Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Chainer⼊門と最近の機能 @Chainer Meetup #1
Search
Yuya Unno
December 19, 2015
Technology
17
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
31
深層学習時代の自然言語処理ビジネス @DLLAB 言語・音声ナイト
unnonouno
0
57
ベンチャー企業で言葉を扱うロボットの研究開発をする @東京大学 電子情報学特論I
unnonouno
0
53
PFNにおけるセミナー活動 @NLP2018 言語処理研究者・技術者の育成と未来への連携WS
unnonouno
0
22
進化するChainer @JSAI2017
unnonouno
0
33
予測型戦略を知るための機械学習チュートリアル @BigData Conference 2017 Spring
unnonouno
0
32
深層学習フレームワーク Chainerとその進化
unnonouno
0
39
深層学習による機械とのコミュニケーション @DeNA TechCon 2017
unnonouno
0
45
最先端NLP勉強会 “Learning Language Games through Interaction” @第8回最先端NLP勉強会
unnonouno
0
29
Other Decks in Technology
See All in Technology
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
370
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
450
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
4
1.1k
パッチ更新でterraform initが落ちた日
grimoh
1
140
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
260
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
430
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
130
スキマバイトという雇用形態は存在しないので、雇用期間1日のアルバイト契約を事業者とワーカーが結ぶ手続きを支えるのがタイミーなんです
akitoshiga
0
200
大型犬好きによるPugの紹介
yamanoku
1
160
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
860
hackers_champloo_2026_tidb
makocchi
0
160
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
529
40k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.4k
My Coaching Mixtape
mlcsv
0
350
Leo the Paperboy
mayatellez
10
2.4k
Mind Mapping
helmedeiros
1
400
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Prompt Engineering for Job Search
mfonobong
0
510
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
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