SlideShare a Scribd company logo
ディープラーニング基礎講座
山下 隆義
目次
ディープラーニングについて
ニューラルネットワーク
畳み込みニューラルネットワーク
リカレントニューラルネットワーク
生成モデル(オートエンコーダ)
ディープラーニングのツール
2
ディープラーニングの現在(1)
画像認識のベンチマークでトップ
Convolution
Pooling
Softmax
Other
GoogLeNet(2014)
ImageNet Large Scale Visual Recognition Challenge (ILSVRC)
Team year Error	(top-5)
SuperVision 2012 15.3%
Clarifai 2013 11.2%
VGG – Oxford	(16 layers) 2014 7.32%
GoogLeNet	(19	layers) 2014 6.67%
Residual	Net. 2015 3.57%
human expert 5.1% Residual Net(2015)
3
ディープラーニングの現在(2)
2015年:更に深く,更に精度が向上
http://research.microsoft.com/en-us/um/people/kahe/ilsvrc15/ilsvrc2015_deep_residual_learning_kaiminghe.pdf
4
ディープラーニングの現在(3)
画像から文章を生成
http://googleresearch.blogspot.jp/2014/11/a-picture-is-worth-thousand-coherent.html
5
文章から画像へ
http://arxiv.org/pdf/1511.02793v2.pdf
6
ディープラーニングの現在(4)
Deep Q- Network
V. Mnih et al., "Playing atari with deep reinforcement learning”,2014
7
ディープラーニングの現在(5)
高速な一般物体検出
You Only Look Once: Unified, Real-Time Object Detection, 2016
8
ディープラーニングの現在(6)
Convolutional Pose Machine, 2016
高速な姿勢推定
9
ディープラーニングの現在(7)
Fukui, 2016
10
ディープラーニングの現在(8)
V. Badrinarayanan, et.al, , SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic
Pixel-Wise Labelling, 2015
11
ディープラーニングの現在(9)
加藤,Heterogeneous Learningと重み付き誤差関数の導入による顔画像解析, 2015
12
ロボットのばら積みピッキング
13
ロボットとディープラーニング
14
ロボット動作の分散学習
15
眼症の早期発見
「緑内障」「糖尿病網膜症」「加齢黄斑変性」の早期
発見(オプティム・佐賀大学)
Google Deep Mindも眼症の早期発見に取り組んでいる
http://www.optim.co.jp/news-detail/21059
16
がんの早期発見
ディープラーニングを活用したがんの早期予測
科学技術振興機構の戦略的創造研究推進事業(CREST)に採択された統合的ながん医療システムの開発プロジェクト
https://www.preferred-networks.jp/ja/news/ncc_crest
17
注目のきっかけ(1)
音声認識・画像認識のベンチマークでトップ
音声認識(2011)
F. Seide, G. Li and D. Yu, “Conversational Speech Transcription Using
Context-Dependent Deep Neural Networks.”, INTERSPEECH2011.
多層(7つ)結合.事前学習あり
一般物体認識(2012)
A. Krizhevsky, I. Sutskever and G. E. Hinton. "ImageNet Classification
with Deep Convolutional Neural Networks." NIPS. Vol. 1. No. 2. 2012.
多層のCNNで従来性能を大きく上回る
18
注目のきっかけ(2)
“Googleのネコ細胞”(2012)
http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en//archi
ve/unsupervised_icml2012.pdf
YouTubeの映像を学習データとして与えると,
人の顔に反応するニューロン
ネコの顔に反応するニューロン
などを自動的に獲得
1000万枚の学習データ
1000台のPCで3日間学習
19
Deep Learning界隈の動向
Deep Learningの
手法がトップ
Facebook
AI Research設立
LeCunが所長
Googleが
DeepMindを買収
(5億ドル)
PFIがPFN設立
トヨタ・ファナック・パ
ナソニックが出資
Toyotaが米国に研究
所を設立
10億ドル/5年
人の認識精度を上回る
AlphaGoが囲碁世界
チャンピオンに勝利
2012年 2016年
Baiduが1つのネットワーク
で2つの言語を認識
ロボットの動作を学習
2014年
様々な問題へ応用が進む
20
何がDeep Learning??
Deep Learningに関連するキーワード
Restricted
Boltzmann
Machines
Deep Belief
Networks
Deep
Boltzmann
Machines
Convolutional
Neural
Networks
Deep Neural
Networks
Back-
propagation
Contrastive
Divergence
Dropout
Maxout
Maxpooling
Dropconnect
21
何がDeep Learning??
Restricted
Boltzmann
Machines
Deep Belief
Networks
Deep
Boltzmann
Machines
Convolutional
Neural
Networks
Deep Neural
Networks
Back-
propagation
Contrastive
Divergence
Dropout
Maxout
Maxpooling
Dropconnect
ネットワークの構成 ネットワークの学習方法 汎化性向上の方法
22
何がDeep Learning??
Restricted
Boltzmann
Machines
Deep Belief
Networks
Deep
Boltzmann
Machines
Convolutional
Neural
Networks
Deep Neural
Networks
Perceptron
人工知能モデル
確率モデル
多層化
畳込み層を導入
多層化
多層化
Deep Learning
Dropout
Maxout
Max pooling
Dropconnect
23
PerceptronとRBM
Perceptron Restricted Boltzmann Machine(RBM)
xi
x1
p(xi =1|Y) =σ ( wij yj + ai
j=1
m
∑ )
p(yj =1| X) =σ ( wij xi + bj
i=1
n
∑ )
yi =σ ( wij xj + bj
j=1
m
∑ )
24
DNNとDBN
Deep Neural Networks(DNNs) Deep Belief Networks(DBN)
教師あり学習(Back propagation)
すべてのパラメータを同時に学習
教師なし学習(Contrastive Divergence)
階層ごとにパラメータを学習
+
教師あり学習(Back propagation)
すべてのパラメータを同時に学習パラメータ更新
パラメータ更新
パラメータ学習
入力層入力層
隠れ層
隠れ層
出力層
入力層
出力層
入力層
出力層
出力層
25
目次
ディープラーニングについて
ニューラルネットワーク
畳み込みニューラルネットワーク
リカレントニューラルネットワーク
生成モデル(オートエンコーダ)
ディープラーニングのツール
26
ニューラルネットワークの歴史(1)
1960 1980 2000 201019901970
マカロックとピッツが形式ニューロンを発表
(1943)
ローゼンブラットがパーセプトロンを発表
(1953)
ミンスキーとパパートが単純パーセプトロンは
線形分離不可能なパターンを識別できない事
を示す(1969)
27
ニューラルネットワークの歴史(2)
1960 1980 2000 201019901970
ホップフィールトがホップフィールドモデルを提案
(1986)
ラメルハートらが誤差逆伝播法を提案
(1986)
福島らがネオコグニトロンを提案
(1980)
ルカンらが畳み込みニューラルネットワークを
提案(1998)
28
ニューラルネットワークの歴史(3)
1960 1980 2000 201019901970
様々なベンチマークで圧勝
(2011)
Hinton, BengioらがDeep Neural Networkに
Pre TrainingとAuto Encoderを導入した手法を
提案(2006)
29
第1期のニューラルネットワーク(1)
マカロック−ピッツの素子モデル
最初のニューロンモデル
複数の入力に対して1つの出力を行う素子と見なす
入力:0か1のみ
出力:0か1のみ
wiは結合荷重
hはしきい値
y = f(
nX
i=1
wixi h)
u
y
h
x1
x2
xn
y
w1
w2
wn
30
第1期のニューラルネットワーク(2)
マカロック−ピッツの素子モデル
パラメータはどうやって決める?
⇒ 人があらかじめ決める
当時はまだ抵抗などの素子で構成
自動的にパラメータを決めるには?
⇒ データから学習して決定する
31
第1期のニューラルネットワーク(3)
パーセプトロン
x1とx2のパターンとその教師信号を与えて,
w1とw2およびhの値を学習する
教師あり学習
基本的な考え方
−出力yと教師信号が一致
⇒w1,w2,hの値は変えない
−出力yと教師信号が一致しない
⇒w1,w2,hの値を調整する
誤り訂正学習
x1
x2
y
w1
w2
y = f(
nX
i=1
wixi h)
32
第1期のニューラルネットワーク(4)
パーセプトロン
パラメータの調整方法
2つのケースに分けて考える
1)出力y=0,教師信号1の場合(活性化しなかった)
−hを小さくする
− xi=1である結合荷重wiは大きくする
− xi=0である結合荷重wiは変えない
2)出力y=1,教師信号0の場合(活性化しすぎた)
− hを大きくする
− xi=1である結合荷重wiは小さくする
− xi=0である結合荷重wiは変えない
x1
x2
y
w1
w2
y = f(
nX
i=1
wixi h)
33
第1期のニューラルネットワーク(5)
パーセプトロン
パラメータの調整方法
更新量はあらかじめ決めておく(=α)
rは教師信号
x1
x2
y
w1
w2
y = f(
nX
i=1
wixi h)
h h ↵(r y)
wi wi + ↵(r y)xi
f(u)
0 u
y
uはΣwixi-h
uが0より大きい場合:y =1
それ以外の場合:y=0
1
34
パーセプトロンのトイプロブレム(1)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
初期値をそれぞれ w1=1,w2=-1,h=0,α=0.5とする
(初期値は適当に決めている)
学習データを1つずつ与えていき,パラメータを調整する
式
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
35
パーセプトロンのトイプロブレム(2)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
初期値をそれぞれ w1=1,w2=-1,h=0,α=0.5とすると
式
入力x1 入力x2 出力y
0 0 1 ×
活性化しすぎている学習データから
パラメータを調整
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
Σwixi-h は0より多いのでy=1
36
パーセプトロンのトイプロブレム(3)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
初期値をそれぞれ w1=1,w2=-1,h=0,α=0.5とすると
式
入力x1 入力x2 出力y
0 0 1 ×
更新式より
w1 = 1 ⇒ 1
w2 = -1 ⇒ -1
h = 0 ⇒ 0.5
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
37
パーセプトロンのトイプロブレム(4)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=1,w2=-1,h=0.5,α=0.5より
式
入力x1 入力x2 出力y
1 0 1 ×
活性化しすぎている学習データから
再度パラメータを調整
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
38
パーセプトロンのトイプロブレム(5)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=1,w2=-1,h=0.5,α=0.5より
式
入力x1 入力x2 出力y
1 0 1 ×
更新式より
w1 = 1 ⇒ 0.5
w2 = -1 ⇒ -1
h = 0.5 ⇒ 1
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
39
パーセプトロンのトイプロブレム(6)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=0.5,w2=-1,h=1,α=0.5より
式
入力x1 入力x2 出力y
0 1 0 ○
正解なのでパラメータの調整なし
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
40
パーセプトロンのトイプロブレム(7)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=0.5,w2=-1,h=1,α=0.5より
式
入力x1 入力x2 出力y
1 1 0 ×
活性化していないので学習データから
再度パラメータを調整
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
41
パーセプトロンのトイプロブレム(8)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=0.5,w2=-1,h=1,α=0.5より
式
入力x1 入力x2 出力y
1 1 0 ×
更新式より
w1 = 0.5 ⇒ 1
w2 = -1 ⇒ -0.5
h = 1 ⇒ 0.5
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
42
パーセプトロンのトイプロブレム(9)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=1,w2=-0.5,h=0.5,α=0.5より
式
入力x1 入力x2 出力y
0 0 0 ○
再度最初の学習データを用いて調整する
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
正解なのでパラメータの調整なし
43
パーセプトロンのトイプロブレム(10)
パーセプトロン
学習データ
パラメータ w1=1,w2=-0.5,h=0.5,α=0.5より
式
×
2サイクル目
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
入力x1 入力x2 出力y
1 0 1
更新式より
w1 = 1 ⇒ 0.5
w2 = -0.5 ⇒ -0.5
h = 0.5 ⇒ 1
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
44
パーセプトロンのトイプロブレム(11)
パーセプトロン
学習データ
入力x1 入力x2 正解r
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=0.5,w2=-0.5,h=1,α=0.5より
式
入力x1 入力x2 出力y
0 1 0 ○
正解なのでパラメータの調整なし
2サイクル目
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
45
パーセプトロンのトイプロブレム(12)
パーセプトロン
学習データ
入力x1 入力x2 正解
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=0.5,w2=-0.5,h=1,α=0.5より
式
入力x1 入力x2 出力
1 1 0 ×
更新式より
w1 = 0.5 ⇒ 1
w2 = -0.5 ⇒ 0
h = 1 ⇒ 0.5
2サイクル目
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
46
パーセプトロンのトイプロブレム(13)
パーセプトロン
学習データ
入力x1 入力x2 正解
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=1,w2=0,h=0.5,α=0.5より
式
入力x1 入力x2 出力
0 0 0 ○
再度最初の学習データを用いる(3サイクル目)
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
正解なのでパラメータの調整なし
47
パーセプトロンのトイプロブレム(14)
パーセプトロン
学習データ
パラメータ w1=1,w2=0,h=0.5,α=0.5より
式
×
3サイクル目
入力x1 入力x2 正解
0 0 0
1 0 0
0 1 0
1 1 1
入力x1 入力x2 出力
1 0 1
更新式より
w1 = 1 ⇒ 0.5
w2 = 0 ⇒ 0
h = 0.5 ⇒ 1
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
48
パーセプトロンのトイプロブレム(15)
パーセプトロン
学習データ
入力x1 入力x2 正解
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=0.5,w2=0,h=1,α=0.5より
式
入力x1 入力x2 出力
0 1 0 ○
3サイクル目
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
正解なのでパラメータの調整なし
49
パーセプトロンのトイプロブレム(16)
パーセプトロン
学習データ
入力x1 入力x2 正解
0 0 0
1 0 0
0 1 0
1 1 1
更新されたパラメータ w1=0.5,w2=0,h=1,α=0.5より
式
入力x1 入力x2 出力
1 1 0 ×
更新式より
w1 = 0.5 ⇒ 1
w2 = 0 ⇒ 0.5
h = 1 ⇒ 0.5
3サイクル目
h h ↵(r y)
wi wi + ↵(r y)xi
y = f(
nX
i=1
wixi h)
50
パーセプトロンのトイプロブレム(17)
パーセプトロン
学習データ
入力x1 入力x2 正解
0 0 0
1 0 0
0 1 0
1 1 1
パラメータ w1=1,w2=0.5,h=0.5
入力x1 入力x2 出力
0 0 0 ○
4サイクル目
パラメータ w1=1,w2=0.5,h=0.5
入力x1 入力x2 出力
1 0 1 ×
パラメータ w1=0.5,w2=0.5,h=0.5
入力x1 入力x2 出力
0 1 0 ○
パラメータ w1=0.5,w2=0.5,h=0.5
入力x1 入力x2 出力
1 1 1 ○
51
パーセプトロンのトイプロブレム(18)
パーセプトロン
学習データ
入力x1 入力x2 正解
0 0 0
1 0 0
0 1 0
1 1 1
入力x1 入力x2 出力
0 0 0 ○
5サイクル目
入力x1 入力x2 出力
1 0 0 ○
パラメータ w1=0.5,w2=0.5,h=1
入力x1 入力x2 出力
0 1 0 ○
パラメータ w1=0.5,w2=0.5,h=1
入力x1 入力x2 出力
1 1 1 ○
パラメータ w1=0.5,w2=0.5,h=1
パラメータ w1=0.5,w2=0.5,h=1
52
パーセプトロンの限界(1)
線形分離可能な場合
トイプロブレムの例を図で表すと
1つの正例 (x1=1,x2=1の場合)と
それ以外のパターンを分ける問題
x1
x2
線形分離可能な問題であれば1つのパーセプトロンだけで解くことができる
53
パーセプトロンの限界(2)
線形分離不可能な場合
2つの正例と2つの負例を分けるパラメータは得ることができない
線形分離不可能な問題は解くことができない
x1
x2
解決策として・・・
複数のパーセプトロンを利用
(1つ1つが線形分離可能な問題を解く)
54
複数パーセプトロンの構成
階層的な構造により構成
x1
x2
各パーセプトロンが1つの線形分離可能な問題を解く
その結果を統合して最終的な結果を得る
⇒ どうやってパラメータを決定するか?
入力
出力
中間値
ニューラルネットワーク
55
初期のニューラルネットワーク(1)
パラメータの決定方法
入力ー中間層のパラメータは固定
中間層ー出力層のパラメータのみ調整する
x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
56
初期のニューラルネットワーク(2)
パラメータの決定方法
中間層ー出力層の各パーセプトロンは,
結合荷重:w2ki (中間層のi番目から出力層のk番目)
しきい値:h2k (出力層のk番目)
更新式は,
h2k h2k ↵(rk yk)x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
w2ki w2ki ↵(rk yk)zi
57
初期のニューラルネットワーク(3)
線形分離可能か?
出力y1は活性化し,それ以外の出力yは活性化しないような
入力Zを得ることが必要
入力xは中間値zに変換される
入力Xi≠Xjが中間値Zi=Zjとなることもある
−十分なパーセプトロンが中間層に必要
−入力層−中間層の変換も学習により決める必要あり
x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
58
初期のニューラルネットワーク(4)
線形分離可能か?
出力y1は活性化し,それ以外の出力yは活性化しないような
入力Zを得ることが必要
入力xは中間値zに変換される
入力Xi≠Xjが中間値Zi=Zjとなることもある
−十分なパーセプトロンが中間層に必要
−入力層−中間層の変換も学習により決める必要あり
線形分離不可能な場合の構成に行き詰まり,下火に・・・
x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
59
第2期のニューラルネットワーク(1)
どのようにパラメータを学習するか?
出力yと教師信号との誤差を伝搬できればパラメータの更新が可能
誤差逆伝播法
(バックプロパゲーション)
x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
60
第2期のニューラルネットワーク(2)
誤差を伝播させるためには?
出力yと教師信号との誤差を微分可能にする必要あり
マカロック・ピッツモデル
ステップ関数⇒微分不可能
シグモイド関数⇒微分可能
x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
61
誤差逆伝播法(1)
シグモイド関数によるパーセプトロン
シグモイド関数
パーセプトロンのもつ値
誤差の算出
f(u) =
1
1 + e u
x1
x2
xn
y
w1
w2
wn
u =
nX
i=1
wixi
E =
1
2
(r y)2
62
誤差逆伝播法(2)
勾配を求める
誤差をwiで微分する
誤差をwiで微分する
x1
x2
xn
y
w1
w2
wn
@E
@wi
@E
@wi
=
@E
@y
@y
@wi
@E
@wi
= (r y)
@y
@wi
= (r y)
@f(u)
@wi
@E
@wi
= (r y)
df(u)
du
@u
@wi
63
誤差逆伝播法(3)
勾配を求める
パーセプトロンの式を微分すると
上を下記式に代入すると
後はf(u)の微分のみ
x1
x2
xn
y
w1
w2
wn
@u
@wi
= xi
u =
nX
i=1
wixi
@E
@wi
= (r y)
df(u)
du
@u
@wi
@E
@wi
= (r y)xi
df(u)
du
64
誤差逆伝播法(4)
シグモイド関数の微分
シグモイド関数
微分すると
f(u) =
1
1 + e u
シグモイド関数の微分はシグモイド関数自身で表すことが出来る
df(u)
du
= f(u)(1 f(u))
x1
x2
xn
y
w1
w2
wn
65
誤差逆伝播法(5)
誤差の計算
誤差の微分
シグモイド関数の微分
df(u)
du
= f(u)(1 f(u))
代入すると
y = f(u) として,
x1
x2
xn
y
w1
w2
wn
@E
@wi
= (r y)xi
df(u)
du
@E
@wi
= (r y)xif(u)(1 f(u))
@E
@wi
= (r y)y(1 y)xi
66
誤差逆伝播法(6)
誤差の計算
誤差の微分からwiの変化量を求める
wiの変化分をΔwiとして
1つのパーセプトロンの結合荷重の更新量は
x1
x2
xn
y
w1
w2
wn
wi = ⌘
@E
@wi
@E
@wi
= (r y)y(1 y)xi
wi = ⌘(r y)y(1 y)xi
67
誤差逆伝播法(7)
複数のパーセプトロンへの対応
誤差の算出
E =
qX
j=1
(rj yj)2
Eの微分は
x1
x2
xn
n1
n2
nq
Z1
Z2
Zp
y1
y2
yq
@E
@wji
=
@E
@yj
@yj
@wji
@E
@wji
= (rj yj)
@yj
@wji
= (rj yj)
@yj
@uj
@uj
@wji
68
誤差逆伝播法(8)
複数のパーセプトロンへの対応
Eの微分の式について
下記の式を元に
@yj
@uj
= yj(1 yj)
@uj
@wji
= xi
@E
@wji
= (rj yj)
@yj
@uj
@uj
@wji
@E
@wji
= (rj yj)yj(1 yj)xi
x1
x2
xn
n1
n2
nq
Z1
Z2
Zp
y1
y2
yq
69
誤差逆伝播法(9)
複数のパーセプトロンへの対応
wiの更新量は
wji = ⌘
@E
@wji
@E
@wji
= (rj yj)yj(1 yj)xi
wji = ⌘(rj yj)yj(1 yj)xi
x1
x2
xn
n1
n2
nq
Z1
Z2
Zp
y1
y2
yq
70
誤差逆伝播法(10)
中間層をもつネットワークへの対応(1つの出力)
中間層−出力層間の結合荷重w2iの更新量は
@E
@w2j1
=
@E
@y
@y
@u21
@u21
@w2j1
x1
x2
xn
n1
1
n1
2
n1
p
n2
1
Z1
Z2
Zp
y1
@E
@w2j1
= (r y)y(1 y)zj
w2j1 = ⌘(r y)y(1 y)zj
71
誤差逆伝播法(11)
中間層をもつネットワークへの対応(1つの出力)
入力層−中間層間の結合荷重w1iの更新量は
結合荷重w1ijは中間層nijのzjにのみ影響を与える
@E
@w1ij
=
@E
@y
@y
@u21
@u21
@w1ij
@u21
@w1ij
=
@u21
@zj
@zj
@w1ij
x1
x2
xn
n1
1
n1
2
n1
p
n2
1
Z1
Z2
Zp
y1
@E
@w1ij
= (r y)y(1 y)
@u21
@w1ij
72
誤差逆伝播法(12)
中間層をもつネットワークへの対応(1つの出力)
中間層nijのzjに対する結合荷重w1ijによる微分は
入力層ー中間層間の微分
@zj
@u1j
= zj(1 zj)
結合荷重
@u21
@w1ij
=
@u21
@zj
@zj
@w1ij
w2j1
@zj
@w1ij
=
@zj
@u1j
@u1j
@w1ij
@zj
@w1ij
= zj(1 zj)xi
x1
x2
xn
n1
1
n1
2
n1
p
n2
1
Z1
Z2
Zp
y1
@u1j
@w1ij
= xi
73
誤差逆伝播法(13)
中間層をもつネットワークへの対応(1つの出力)
入力層ー中間層間の微分
更新量は
@u21
@w1ij
=
@u21
@zj
@zj
@w1ij
x1
x2
xn
n1
1
n1
2
n1
p
n2
1
Z1
Z2
Zp
y1
= w2j1zj(1 zj)xi
@E
@w1ij
= (r y)y(1 y)
@u21
@w1ij
= (r y)y(1 y)w2j1zj(1 zj)xi
w1ij = ⌘(r y)y(1 y)w2j1zj(1 zj)xi
74
誤差逆伝播法(14)
中間層をもつネットワークへの対応(1つの出力)
伝搬される更新量は
中間層−出力層間
入力層−中間層層間
この項は共通
出力層での計算結果の一部を伝播している
x1
x2
xn
n1
1
n1
2
n1
p
n2
1
Z1
Z2
Zp
y1
w2j1 = ⌘(r y)y(1 y)zj
w1ij = ⌘(r y)y(1 y)w2j1zj(1 zj)xi
75
誤差逆伝播法(15)
中間層をもつネットワークへの対応(複数の出力)
誤差Eは
E =
qX
k=1
(rk yk)2
入力層:n個 xi
中間層:p個 n1j
出力層:q個 n2k
結合荷重w2jkの更新量は
yk(1 yk) zj
@E
@w2jk
=
@E
@yk
@yk
@u2k
@u2k
@w2jk
x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
(rk yk)
@E
@w2jk
= (rk yk)yk(1 yk)zj
w2jk = ⌘(rk yk)yk(1 yk)zj
76
誤差逆伝播法(16)
中間層をもつネットワークへの対応(複数の出力)
入力層-中間層間の結合荷重w1ijの更新量は
入力層:n個 xi
中間層:p個 n1j
出力層:q個 n2k
結合荷重w1ijは中間層nijのzjにのみ影響を与える
結合荷重
= zj(1 zj)xi
@E
@w1ij
=
qX
k=1
[
@E
@yk
@yk
@u2k
@u2k
@w1ij
]
@u2k
@w1ij
=
@u2k
@zj
@zj
@w1ij
w2jk
@zj
@w1ij
=
@zj
@u1j
@u1j
@w1ij
x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
=
qX
k=1
[(rk yk)yk(1 yk)
@u2k
@w1ij
]
77
誤差逆伝播法(17)
中間層をもつネットワークへの対応(複数の出力)
入力層-中間層間の結合荷重w1ijの更新量は
入力層:n個 xi
中間層:p個 n1j
出力層:q個 n2k
@E
@w1ij
=
qX
k=1
[
@E
@yk
@yk
@u2k
@u2k
@w1ij
]
x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
=
qX
k=1
[(rk yk)yk(1 yk)
@u2k
@w1ij
]
@E
@w1ij
=
qX
k=1
[(rk yk)yk(1 yk)w2jk]zj(1 zj)xi
w1ij = ⌘
qX
k=1
[(rk yk)yk(1 yk)w2jk]zj(1 zj)xi
78
誤差逆伝播法(18)
中間層をもつネットワークへの対応(複数の出力)
更新式の関係
入力層:n個 xi
中間層:p個 n1j
出力層:q個 n2k
とすると
= 1jxi
w2jk = 2kzj
w1ij =
qX
k=1
[ 2kw2jk]zj(1 zj)xi
x1
x2
xn
n11
n12
n1p
n21
n22
n2q
Z1
Z2
Zp
y1
y2
yq
w2jk = ⌘(rk yk)yk(1 yk)zj
w1ij = ⌘
qX
k=1
[(rk yk)yk(1 yk)w2jk]zj(1 zj)xi
2k = ⌘(rk yk)yk(1 yk)
79
誤差逆伝播法(19)
更新式について
シグモイド関数による更新量
ステップ関数による更新量
wi = ↵(r y)xi
wi = ⌘(r y)y(1 y)xi
80
誤差逆伝播法(20)
更新式について
シグモイド関数による更新量
の項によりy(1 y)
yが0に近いと,Δwiが0に近づく
yが1に近くても,Δwiが0に近づく
uが0よりもかなり小さい場合
uが0よりもかなり大きい場合
Δwiが0に近くなる
勾配(=更新量)がサチる
wi = ⌘(r y)y(1 y)xi
81
@E
@w1ij
= (r y)y(1 y)w2j1zj(1 zj)xi
@E
@w2j1
= (r y)y(1 y)zj
誤差逆伝播法 ーまとめー
x1
x2
xn
y1
入力層 中間層 出力層
z1
z2
zm
w1ij
w2j1
@E
@w2j1
=
@E
@y
@y
@u21
@u21
@w2j1
誤差関数の微分
シグモイド関数の微分
中間層の値
@E
@w1ij
=
@E
@y
@y
@u21
@u21
@w1ij
@u21
@w1ij
=
@u21
@zj
@zj
@w1ij
@zj
@w1ij
=
@zj
@u1j
@u1j
@w1ij
誤差関数の微分
シグモイド関数の微分
重み付き和
中間ー出力層間
シグモイド関数の微分
入力値
入力ー中間層間
82
@E
@w2j1
= (rk yk)y(1 yk)zj
誤差逆伝播法 ーまとめー
x1
x2
xn
y1
入力層 中間層 出力層
z1
z2
zm
w1ij
w2jk
誤差関数の微分
シグモイド関数の微分
中間層の値
誤差関数の微分
シグモイド関数の微分
重み
中間ー出力層間
シグモイド関数の微分 入力値
入力ー中間層間
@E
@w1ij
=
qX
k=1
[
@E
@yk
@yk
@u2k
@u2k
@w1ij
]
@E
@w2jk
=
@E
@yk
@yk
@u2k
@u2k
@w2jk
@zj
@w1ij
=
@zj
@u1j
@u1j
@w1ij
@u2k
@w1ij
=
@u2k
@zj
@zj
@w1ij
yk
= 2
qX
k=1
[(rk yk)yk(1 yk)
@u2k
@w1ij
]
@E
@w1ij
= 2
qX
k=1
[(rk yk)yk(1 yk)w2jk]zj(1 zj)xi
83
誤差関数(1)
E =
qX
k=1
(rk yk)2
E =
NX
n=1
{rn ln yn + (1 rn) ln(1 yn)}
E =
NX
n=1
CX
c=1
rcn ln ycn
2クラス問題の場合
多クラス問題の場合
二乗誤差
クロスエントロピー誤差
84
誤差の更新方法(1)
すべての学習サンプルを一度に用いて誤差を求める
E =
NX
n=1
qX
k=1
(rnk ynk)2
誤差から重みを更新する
wi(t) wi(t+1)
E(t) @E(t)
@wi
学習サンプルが増えると計算量が
増加する
wi(t + 1) = wi(t) ⌘
@E(t)
@wi
最急降下法
85
誤差の更新方法(2)
1つの学習サンプルを一度に用いて誤差を求める
誤差から重みを更新する
wi(t) wi(t+1)
E(t) @E(t)
@wi
E =
qX
k=1
(rk yk)2
学習サンプル数が大量に増えても
計算量は変化しない
1つのサンプルの誤差で大きく更新される
wi(t + 1) = wi(t) ⌘
@E(t)
@wi
確率的勾配降下法(オンライン)
86
誤差の更新方法(3)
少量の学習サンプルを一度に用いて誤差を求める
誤差から重みを更新する
wi(t) wi(t+1)
E(t) @E(t)
@wi
最急降下法と確率的勾配降下法(オンライ
ン)のデメリットを補う
−計算量は変化しない
−誤差を総和するため大きく変化しにくい
E =
NX
n=1
qX
k=1
(rnk ynk)2
wi(t + 1) = wi(t) ⌘
@E(t)
@wi
確率的勾配降下法(ミニバッチ)
87
最適化方法
最適化とは?
予測結果と正解との誤差からパラメータを更新すること
更新の仕方により,最適な解が変わる
確率的勾配降下法(SGD)
Adagrad
Adadelta
RMSProp
Adam
Eve
など
88
確率的勾配降下法
勾配降下法
すべてのサンプルを利用して誤差を求めて更新する
確率的勾配降下法
1つのサンプルの誤差を求めて更新する
ミニバッチ勾配降下法
n個のサンプルを利用して誤差を求めて更新する
89
確率的勾配降下法の問題点
勾配の変化
勾配が大きくブレると収束しにくい
=> 慣性項をいれよう!
学習率の設定
1回の更新でパラメータをどの程度更新したらよいか?
学習過程で学習率をどの程度変えるとよいか?
=>学習率を自動で決めるようにしよう!
90
慣性項(モーメンタム)
ブレを低減するために,過去の更新量を考慮する
wt+1
wt
⌘
@E(wt
)
@wt
+ ↵ wt
α:慣性項のパラメータ
前回の更新量をα倍して加算
パラメータの更新をより慣性的なものにする
η:今回の更新量の学習率
ハイパーパラメータが 2つになり,設定が難しくなる
91
Adagrad
学習係数を自動で調整する
h0 = ✏
⌘t =
⌘0
p
ht
wt+1
wt
⌘t
@E(wt
)
@wt
ht = ht 1 +
@E(wt
)
@wt
2
ε:初期値(小さい値,10-8など)
ht:過去の更新量の2乗を累積
η0:学習率の初期値(0.001など)
ηt:学習率
過去の勾配情報を考慮して学習率を決める
学習率ηtは徐々に小さくなる
J. Duchi, E. Hazan, Y.Singer, Adaptive Subgradient Methods for Online Learning and Stochastic Optimization,
JMLR, Vol.12, pp.2121−2159, 2011.
92
RMSProp
Adagradを改良した手法
h0 = ✏
wt+1
wt
⌘t
@E(wt
)
@wt
ε:初期値(小さい値,10-8など)
ht:過去の更新量の2乗を累積
η0:学習率の初期値(0.001など)
ηt:学習率,徐々に小さくなる
α:過去を考慮する値(0.99など)
ht = ↵ht 1 + (1 ↵)
@E(wt
)
@wt
2
⌘t =
⌘0
p
ht + ✏
αにより過去の勾配の影響を抑える
今回のhtを優先して反映させる
直近の勾配情報を優先して学習率を決める
A. Graves, Generating Sequences With Recurrent Neural Networks, arXiv:1308.0850, 2013
93
Adadelta
学習係数ηを用いない手法
st+1 = ⇢st + (1 ⇢)v2
t
wt+1
= wt
vt
vt =
p
st + ✏
p
ht + ✏
@E(wt
)
@wt
ht = ⇢ht 1 + (1 ⇢)
@E(wt
)
@wt
2
過去の更新量stと勾配htの比から更新率をきめる
初期値:h0=0,s0=0
ρ:減衰率(0.95など)
ht:過去の更新量の2乗を累積
vt:学習率の初期値(0.001など)
st:学習率,徐々に小さくなる
ε:初期値(10-6など)
M. Zeiler, "ADADELTA: an adaptive learning rate method." arXiv arXiv:1212.5701, 2012
94
Adam
モーメンタムとAdagradの長所を組み合わせ
m:1次モーメントに相当
v:2次モーメントに相当
β1:減衰率
β2:減衰率
ˆm =
mt+1
1 t
1
ˆv =
vt+1
1 t
2
wt+1
+ wt
↵
ˆm
p
ˆv + ✏
vt+1 = 2vt + (1 2)
@E(wt
)
@wt
2
mt+1 = 1mt + (1 1)
@E(wt
)
@wt
α=0.001,β1=0.9,β2=0.999,ϵ=10−8
95
最適化の比較
http://sebastianruder.com/optimizing-gradient-descent/index.html
96
目次
ディープラーニングについて
ニューラルネットワーク
畳み込みニューラルネットワーク
リカレントニューラルネットワーク
強化学習
生成モデル(オートエンコーダ)
ディープラーニングのツール
97
畳み込みニューラルネットワーク
初期の研究(今も同じ)
畳み込み、サブサンプリング、全結合の層から構成
手書き文字認識に応用
Y. LeCun, et.al. “Gradient-based Learning Applied to Document Recognition”, Proc. of The IEEE, 1998.
98
畳み込み層(1)
カーネルをスライドさせて画像に畳み込む
近接の画素とのみ結合する(局所受容野)
Convolution
Response
f
Input image Feature map10x10 kernel 3x3 8x8
Activation
function
Convolutions
99
畳み込み層(1)
カーネルをスライドさせて画像に畳み込む
近接の画素とのみ結合する(局所受容野)
Convolution
Response
f
Input image Feature map10x10 kernel 3x3 8x8
Activation
function
Convolutions
100
畳み込み層(1)
カーネルをスライドさせて画像に畳み込む
近接の画素とのみ結合する(局所受容野)
Convolution
Response
f
Input image Feature map10x10 kernel 3x3 8x8
Activation
function
Convolutions
101
畳み込み層(2)
画像全体にフィルタを畳み込む
-1 0 1
-2 0 2
-1 0 1
例えば
ソーベルフィルタ Convolution Layerのフィルタは,
学習により獲得
102
畳み込み層(3)
カーネルをスライドさせて画像に畳み込む
近接の画素とのみ結合する(局所受容野)
カーネルは複数でも良い
Activation
functionInput image Feature map10x10 8x8
Convolution
Response
kernel 3x3
f
f
f
Convolutions
103
畳み込み層(4)
入力が複数チャンネル(カラー画像など)の場合
*
各チャンネルにフィルタを畳み込む
Red
Green
Blue
104
活性化関数
シグモイド関数 Rectified Linear Unit(ReLU) Leaky ReLU
古くから使われている
サチると勾配が消滅
画像認識でよく使われる
学習が速く、勾配がサチる
ことがない
f (xi ) = max(xj,0)f (xi ) =
1
1+e
−xj
Convolutions
f(x) = max(↵x, x) (0 < ↵ < 1)
f(xi) = max(↵xi, xi)
ReLUを改良した活性化関
数
負の値を出力
105
プーリング層
Feature mapのサイズを縮小させる
Max	pooling
2x2の領域
での最大値
Average	pooling
2x2の領域
での平均値
Sampling
89 56 65 18 24 9
121 77 43 22 32 18
181 56 42 35 45 19
210 166 101 67 79 56
121 65 32
210 101 79
89 56 65 18 24 9
121 77 43 22 32 18
181 56 42 35 45 19
210 166 101 67 79 56
86 37 21
153 61 50
106
hj = f(
nX
i=1
wijxi + bj)
全結合層
全結合型の構成
x1
x2
x3
xi
h1
h2
hj
各ノードとの結合重み
例えば、
は
を算出し、 activation functionに与えて値を得る
Full
connection
w11
w12
w21
w1j
w22w31
w32
w3 j
wij
wi2
wi1
107
出力層
出力ノード数=認識するクラス数
Softmaxを利用するのが一般的
P(y1)
P(y2)
P(yM)
各クラスの確率を算出して、
最大値を認識クラスとする
x1
x2
x3
xi
h1
h2
hM
前層
出力層
classification
各クラスの確率
P(yi
) =
exp(hi )
exp(hj )
j=1
M
∑
108
どうやって学習するの?
学習できめること: 各種パラメータ
畳み込み層の各カーネルの要素の値
全結合層の各ユニットの結合重み
Layer数が多ければ多いほど沢山のパラメータ
教師データをもとに識別エラーから各パラメータを更新
エラーが小さくなるように更新を繰り返し行い、収束を図る
確率的勾配降下法(Stochastic Gradient Descent)
109
確率的勾配降下法
順伝播と逆伝播を繰り返してパラメータ群を更新
Input:
画像:x
ラベル:y
学習セット:
(x1,y1),…, (xn,yn)
順伝播
現パラメータ群により各学習データの認識を行う
逆伝播
認識結果(誤差)をもとに,パラメータ群を更新する
Convolution
Full connection
Classification
110
確率的勾配降下法
誤差を最小化するように各層のパラメータを更新
Input:
画像:xi
ラベル:yi
学習セット:
(x1,y1),…, (xn,yn)
全パラメータをWとする
ロス関数:y’iとラベルyiの違いを算出
これを最小化する
Convolution
Full connection Classification
y'
= F(W, x)
E = Loss(F(W, xi ), yi )
i
n
∑
逆誤差伝搬法で誤差の偏微分を計算
更新率γを掛けて、パラメータ群Wを更新
W ← W −γ
∂E
∂W
111
ミニバッチ
一度に大量の学習サンプルでロスを求めるのは大変
⇒過学習もおきやすい
少しのサンプルだけでパラメータを更新⇒mini batch
確率的勾配降下法
(SGD)
m1
m2
mk
各mを利用して逐次的にパラメータを更新
mkまで利用したら再度m1を利用
n枚
112
畳み込み層の誤差逆伝播(1)
畳み込み層を全結合層のように書き直すと
Input image 5x5
f
Feature map 4x4kernel 2x2
Activation
function
n21
n22
n23
n2p
n31
n32
n33
n34
n35
n36
n37
n38
w2jk
n11
n12
n13
n14
y1
w1ij
p=16
n1r
n15
n16
n17
n18
r=25
中間層は入力層の特定のユニットとのみ結合
カーネルは重みw1ijに相当する
113
畳み込み層の誤差逆伝播(2)
畳み込み層を全結合層のように書き直すと
Input image 5x5
f
Feature map 4x4kernel 2x2
Activation
function
n21
n22
n23
n2p
n31
n32
n33
n34
n35
n36
n37
n38
w2jk
n11
n12
n13
n14
y1
w1ij
p=16
n1r
n15
n16
n17
n18
r=25
中間層は入力層の特定のユニットとのみ結合
カーネルは重みw1ijに相当する
114
畳み込み層の誤差逆伝播(3)
カーネルの要素の更新
上位層の重みw2jkを更新する
(全てのw2jkについて下記式で更新)
n21
n22
n23
n2p
n31
n32
n33
n34
n35
n36
n37
n38
w2jk
n11
n12
n13
n14
y1
w1ij
p=16
n1r
n15
n16
n17
n18
r=25
Zj
Input image 5x5
f
Feature map 4x4kernel 2x2
Activation
function
w2jk = ⌘(rk yk)yk(1 yk)zj
115
畳み込み層の誤差逆伝播(4)
カーネルの要素の更新
上位層の重みw2jkとx1から更新量を求める
n21
n22
n23
n2p
n31
n32
n33
n34
n35
n36
n37
n38
w2jk
n11
n12
n13
n14
y1
w1ij
p=16
n1r
n15
n16
n17
n18
r=25
Zj
Input image 5x5
f
Feature map 4x4kernel 2x2
Activation
function
w1
111 = ⌘
qX
k=1
[(rk yk)yk(1 yk)w2jk]z1(1 z1)x1
116
畳み込み層の誤差逆伝播(5)
カーネルの要素の更新
ずらした位置での更新量も求める
n21
n22
n23
n2p
n31
n32
n33
n34
n35
n36
n37
n38
w2jk
n11
n12
n13
n14
y1
w1ij
p=16
n1r
n15
n16
n17
n18
r=25
Zj
Input image 5x5
f
Feature map 4x4kernel 2x2
Activation
function
w2
122 = ⌘
qX
k=1
[(rk yk)yk(1 yk)w2jk]z2(1 z2)x2
117
畳み込み層の誤差逆伝播(6)
カーネルの要素の更新
全ての位置での更新量を累積して,最終的
な更新量を求める
n21
n22
n23
n2p
n31
n32
n33
n34
n35
n36
n37
n38
w2jk
n11
n12
n13
n14
y1
w1ij
p=16
n1r
n15
n16
n17
n18
r=25
Zj
Input image 5x5
f
Feature map 4x4kernel 2x2
Activation
function
wn
1ij = ⌘
qX
k=1
[(rk yk)yk(1 yk)w2jk]zj(1 zj)xi
w1ij = ⌘
NX
n=1
wn
1ij
118
プーリング層の誤差逆伝播(1)
プーリング層を全結合層のように書き直すと
n21
n22
n23
n24
n31
n32
w2jk
n11
n12
n13
n14
y1
w1ij
p=4
n1r
n15
n16
n17
n18
r=16
2x2のmaxプーリングの場合,4つのユニットから結合
し,最大となる結合の重みが1,それ以外は0となる.
Feature Map 4x4
subsampling 2x2
119
プーリング層の誤差逆伝播(2)
プーリング層を全結合層のように書き直すと
n21
n22
n23
n24
n31
n32
w2jk
n11
n12
n13
n14
y1
w1ij
p=4
n1r
n15
n16
n17
n18
r=16
選ばれたユニットのみ誤差が伝播する
Feature Map 4x4
subsampling 2x2
120
汎化性を向上させるための方法
121
Dropout
全結合層の過学習を抑制する
(学習方法のおさらい)
入力データのラベルとネットワークの
出力の誤差を元にパラメータを更新
Input layer
Kernel
K1
Kn
全結合層の一部のノードからの結合を取り除く
(0にする) だいたい50%
各mini-batchで異なる結合をランダムに取り除く
G. Hinton, N.Srivastava, A.Krizhevsky, I.Sutskever, and R.Salakhutdinov, “Improving neural networks by preventing co-
adaptation of feature detectors.”, arXiv preprint arXiv:1207.0580, 2012.
122
学習画像の生成
Data Augmentation
位置や大きさを変えて学習データ数を増やす
Elastic Distortion
位置や大きさだけでなく,形状の変化も適用
P.Y. Simard, D. Steinkraus, and J.C. Platt, “Best practices for convolutional neural networks applied to visual document
analysis.”, ICDAR2003.
123
前処理の重要性
Global Contrast Normalization
各画像を平均0,分散1になるように正規化
入力データの明るさを正規化することで性能が向上
124
前処理の重要性
Global Contrast Normalization
各画像を平均0,分散1になるように正規化
正規化なし 正規化あり
下図はpylearn2の結果
125
前処理の重要性
ZCA whitening
隣接ピクセルの冗長性をなくすような
Wを主成分分析により学習
X ' = WX
http://www.cs.toronto.edu/~kriz/learning-features-2009-TR.pdf
隣接ピクセルの冗長性をなくす
126
前処理の重要性
ZCA whitening
ZCA whitening only
Global contrast normalization +
ZCA whitening
127
Normalize Layer
activation function で得られた値を正規化
Convolutional layer Normalize layer
Pooling layer Convolutional layer
Normalize layer
Pooling layer
pooling layer後にNormalize layerを配置することもある
128
Normalize Layer
Local contrast normalization
Convolutional layer Normalize layer
同一特徴マップにおける局所領域内で正規化する
vj,k = xj,k − wp,q xj+p,k+q∑
wp,q =1∑
yj,k =
vj,k
max(C,σ jk )
σ jk = wpqvj+p,k+q
2
∑
K. Jarrett, K. Kavukcuoglu, M. Ranzato and Y.LeCun ,“What is the Best Multi-Stage Architecture for
Object Recognition?”, ICCV2009 129
Normalize Layer
Local response normalization
Convolutional layer Normalize layer
同一位置における異なる特徴マップ間で正規化する
yi
j,k = (1+α (yl
j,k )2
)β
l=i−N/2
i+N/2
∑
G. E. Hinton, N. Srivastava, A. Krizhevsky, I. Sutskever and R. R. Salakhutdinov ,“Improving neural networks by preventing
co-adaptation of feature detectors ”, arxiv2012
130
Batch Normalization
ミニバッチごとのデータ分布を統一する
スケールγとシフト量βを学習で獲得
収束性が高くなる(速くなる)
各層の入力または出力に対して行い,各層での分布のばらつきを統一することもできる
S.Ioffe, “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”, 2015
µB =
1
m
mX
i=1
xi
2
B =
1
m
mX
i=1
(xi µB)2
ˆxi =
xi µ
p
2
B + ✏
yi = ˆxi +
ミニバッチ内の平均と分散を算出 平均0,分散1になるように正規化
平均0,分散1になるように正規化
131
画像認識におけるDeep Learningの活用
132
Deep Learningの応用先
検出 回帰
セグメンテーション
人検出*
(Caltech Pedestrian dataset トップ)
*HOG+CSS-SVMでのSliding window処理あり
シーンラベリング
顔器官検出
人の姿勢推定
手領域抽出
髪領域抽出
顔ラベリング
認識
一般物体認識
(LSVRCトップ)
顔認識(照合)
(LFWトップ)
人物属性推定
一般物体検出
(Pascal VOCトップ)
文字認識
133
ディープラーニング手法の変遷
物体認識ベンチマークを通じて,より深い構造へ
1998年
2012年
2014年
2015年
AlexNet
LeNet
GoogLeNet
ResNet
134
物体認識
ImageNet Large Scale Visual Recognition Challenge
(ILSVRC)
ImageNetのデータセットを利用して1000クラスの物体認識を行う
http://image-net.org
135
ディープラーニングによる物体認識
AlexNet
ILSVRC2012で優勝
8層(畳み込み5層,全結合3層)の構造
Team year Error	(top-5)
SuperVision(AlexNet) 2012 15.3%
1層目のフィルタ
A. Krizhevsky, ImageNet Classification with Deep Convolutional Neural Networks, NIPS2012
136
ディープラーニングによる物体認識
VGG16
ILSVRC2014で2位
16層と深い構造
Team year Error	(top-5)
SuperVision 2012 15.3%
Clarifai 2013 11.2%
VGG – Oxford	(16 layers) 2014 7.32%
3x3のフィルタを2層積層すると
5x5のフィルタと等価になる
AlexNetとほぼ等価の構成
K. Simonyan, Very Deep Convolutional Networks for Large-Scale Image Recognition, ICLR2015
137
ディープラーニングによる物体認識
GoogLeNet
Inception モジュールを9つ積層
途中の層の誤差を求め,下位層まで誤差を伝播
Convolution
Pooling
Softmax
Other
Inception module
Team year Error	(top-5)
SuperVision 2012 15.3%
Clarifai 2013 11.2%
VGG – Oxford	(16 layers) 2014 7.32%
GoogLeNet (22layers) 2014 6.67%
3x3
convolutions
5x5
convolutions
Filter
concatenation
Previouslayer
3x3max
pooling
1x1
convolutions
1x1
convolutions
1x1
convolutions
1x1
convolutions
C. Szegedy, Going Deeper with Convolutions, CVPR2015
138
ディープラーニングによる物体認識
Residual Network
特定層への入力をバイパスして上位層へ与える
逆伝播時に誤差を下位層に直接与えることができる
Team year Error	(top-5)
SuperVision 2012 15.3%
Clarifai 2013 11.2%
VGG – Oxford	(16 layers) 2014 7.32%
GoogLeNet (22layers) 2014 6.67%
Residual	Net. 2015 3.57%
human expert 5.1%
K. He, Deep Residual Learning for Image Recognition, CVPR2016
139
ディープラーニングによる物体認識
http://research.microsoft.com/en-us/um/people/kahe/ilsvrc15/ilsvrc2015_deep_residual_learning_kaiminghe.pdf
140
Network in Network(1)
畳み込み層の活性化関数に小さなネットワークを導入
Input image
Feature map
Respon
se
kernel
マイクロネットワーク
Lin, Min, Qiang Chen, and Shuicheng Yan. "Network In Network.", ICLR2014
141
Network in Network(2)
簡単な実装:1x1の畳み込み処理として表現
CCCP層で畳み込むフィルタは全ての位置で同じなので,パラメータ数は増えない
Lin, Min, Qiang Chen, and Shuicheng Yan. "Network In Network.", ICLR2014
142
Network in Network(3)
全結合層なしでネットワークを構成
ILSVRC2014での性能
TOP5のエラー率
10.91% for 1 model
9.79% for 3 models
Lin, Min, Qiang Chen, and Shuicheng Yan. "Network In Network.", ICLR2014
143
Deep Learningの応用先
回帰
セグメンテーション
シーンラベリング
顔器官検出
人の姿勢推定
手領域抽出
髪領域抽出
顔ラベリング
認識
一般物体認識
(LSVRCトップ)
顔認識(照合)
(LFWトップ)
人物属性推定
文字認識
検出
人検出*
(Caltech Pedestrian dataset トップ)
*HOG+CSS-SVMでのSliding window処理あり
一般物体検出
(Pascal VOCトップ)
144
CNNの課題
物体検出への応用の難しさ
与えられた領域の名称を認識することは得意
問題:どのように物体の領域(=位置)を与えるか?
CNNだけでは物体らしい領域を抽出ことは困難
物体検出とは?
画像中の物体の名称と位置
を特定する
http://image-net.org/challenges/LSVRC/2014/slides/ILSVRC2014_09_12_14_det.pdf
145
一般物体検出
• Selective Searchにより物体候補を検出
• CNNで抽出した特徴量をSVMでクラス識別
4つのステップから構成
1)局所領域の切り出し
2)領域の変形
3)CNNによる特徴抽出
4)SVMによる識別
物体検出への応用の難しさ
R. Girshick, Rich feature hierarchies for accurate object detection and semantic segmentation, CVPR2014
146
R-CNN ステップ1:局所領域の切り出し
Selective Searchによる候補領域の抽出
候補数は2000
R. Girshick, Rich feature hierarchies for accurate object detection and semantic segmentation, CVPR2014
147
R-CNN ステップ2:領域の変形
全ての候補領域を一定の大きさに正規化
アスペクト比は無視
CNNの入力データサイズに合わせる
R. Girshick, Rich feature hierarchies for accurate object detection and semantic segmentation, CVPR2014
148
R-CNN ステップ3:CNNによる特徴量抽出
AlexNetの途中結果を特徴量ベクトルとして利用
最終層の手前の全結合層の値:4096次元
ネットワークは検出対象データセットの学習データを利用してチューニング
1)用意するもの:Image netで学習されたAlexNet
2)チューニング用データ:Pascal VOCの学習データセット
これにより,検出対象に適したネットワークになる
R. Girshick, Rich feature hierarchies for accurate object detection and semantic segmentation, CVPR2014
149
R-CNN ステップ4: SVMによる識別
各検出対象のSVMで,物体かどうかを判定する
Pascal VOCの場合:20種類の物体のSVMを用意
CNNで抽出した特徴量を用いて判定
SVMの学習
Pascal VOCの学習データセットについて,特徴量を抽出
線形SVMにより,各物体のSVMを学習
R. Girshick, Rich feature hierarchies for accurate object detection and semantic segmentation, CVPR2014
150
R-CNN ステップ5: 物体位置の補正
各検出について,座標を回帰により修正する
領域抽出のズレを補正する
R. Girshick, Rich feature hierarchies for accurate object detection and semantic segmentation, CVPR2014
151
R-CNNの課題
特徴抽出
(CNN)
特徴抽出
(CNN)
特徴抽出
(CNN)
物体識別
(SVM)
物体識別
( SVM)
物体識別
(SVM)
入力画像
領域切り出し
領域変形
背景
人
馬
領域ごとに実行
座標補正
(回帰)
座標補正
(回帰)
処理時間がかかる
1画像あたり:47秒 (VGGネットを使用時)
学習・検出プロセスが複雑
処理ごとに個別の学習とデータの準備が必要
R. Girshick, Rich feature hierarchies for accurate object detection and semantic segmentation, CVPR2014
152
Fast R-CNN
特徴抽出
(CNN)
特徴座標 識別層・回帰層
(CNN)
入力画像
領域切り出し
領域変形
物体:背景
座標情報
(-1,-1,-1,-1)
物体:人
座標情報
(10,3,40,100)
物体:馬
座標情報
(5,100,80,20)
領域ごとに実行
識別層・回帰層
(CNN)
識別層・回帰層
(CNN)
R. Girshick,, Fast RCNN, ICCV2015
特徴抽出処理をまとめて行うことで高速化
R-CNNと比べて10-100倍高速
学習・検出プロセスをシンプルに
領域切り出しの処理をCNNの構成で行う(SVMなし)
153
Fast R-CNNのネットワーク
1つのネットワークで識別と回帰を行う
Selective Searchで得られた領域について,
ステップ1)画像全体の特徴抽出(特徴マップ)
ステップ2)特徴マップから物体の特徴を抽出
ステップ3)特徴をプーリング(ROI Pooling)
ステップ4)識別層で物体名を識別・回帰
R. Girshick,, Fast RCNN, ICCV2015
154
Fast R-CNN ステップ1:画像全体の特徴抽出
VGGの最終畳み込み層までの特徴マップを生成
入力画像入力画像
R. Girshick,, Fast RCNN, ICCV2015
特徴マップ
155
特徴マップ
Fast R-CNN ステップ2:物体の特徴抽出
特徴マップから物体の位置の特徴を抽出
入力画像入力画像
領域切り出し
R. Girshick,, Fast RCNN, ICCV2015
156
Fast R-CNN ステップ3:物体の特徴抽出
特徴をプーリング 物体領域のサイズを変形していないので,
特徴マップ上でのサイズはバラバラ
サイズを揃えるプーリング
=ROI プーリング
例)10x15を5x5にプーリングしたい場合,
横10/5=2,縦15/5=3で,2x3の範囲で
max poolingを行う.
(正規化後/元のサイズで比もとめる)
入力画像
特徴マップ
入力画像
領域切り出し
ROI プーリング
R. Girshick,, Fast RCNN, ICCV2015
157
Fast R-CNN ステップ4:識別層での識別・回帰
ROIプーリングした結果をVGGの全結合層へ与える
入力画像
特徴マップ
入力画像
領域切り出し
ROI プーリング
R. Girshick,, Fast RCNN, ICCV2015
158
Fast R-CNN ステップ4:識別層での識別・回帰
softmax層の代わりに識別層・回帰層で結果出力
入力画像
特徴マップ
入力画像
領域切り出し
識別層
回帰層
各クラスの確率を出力
各クラスの座標を出力
出力ユニット数
識別層:K+1
回帰層:4K
クラス数=K
ROI プーリング
R. Girshick,, Fast RCNN, ICCV2015
159
Fast R-CNNの課題
学習・検出プロセスがまだ複雑
Selective Searchによる切り出しが必要
=>この処理が時間かかる
入力画像
特徴マップ
入力画像
領域切り出し
識別層
回帰層
各クラスの確率を出力
各クラスの座標を出力
出力ユニット数
識別層:K+1
回帰層:4K
クラス数=K
ROI プーリング
R. Girshick,, Fast RCNN, ICCV2015
160
Fast R-CNN
特徴抽出
(CNN)
特徴座標 識別層・回帰層
(CNN)
入力画像
領域切り出し
領域変形
物体:背景
座標情報
(-1,-1,-1,-1)
物体:人
座標情報
(10,3,40,100)
物体:馬
座標情報
(5,100,80,20)
領域ごとに実行
識別層・回帰層
(CNN)
識別層・回帰層
(CNN)Selective Searchによる切り出し
=>この処理が時間かかる
R. Girshick,, Fast RCNN, ICCV2015
特徴抽出処理をまとめて行うことで高速化
R-CNNと比べて10-100倍高速
学習・検出プロセスをシンプルに
領域切り出しの処理をCNNの構成で行う(SVMなし)
161
Faster R-CNN
領域切り出しもCNNで行うことでさらなる高速化
R-CNNと比べて10-100倍高速
学習・検出プロセスをさらにシンプルに
すべてをCNNで行う
特徴抽出
(CNN)
検出層
(全結合)
入力画像
回帰層
(全結合)
識別層
(Fast R-CNN)
Region Proposal
Network
S. Ren, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, NIPS2015
162
Region Proposal Network(RPN)
1つのネットワークで検出と回帰を行う
ステップ1)画像全体の特徴抽出(特徴マップ)
ステップ2)特徴マップを走査して特徴を抽出
ステップ3)特徴を検出層に与えて,物体判別行う
ステップ4)特徴を回帰層に与えて,物体の位置を同定する
特徴抽出
(CNN)
入力画像
S. Ren, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, NIPS2015
163
RPNの工夫点
大きさ変化と形状変化に対して同時に対応
各注目点の特徴を入力すると
k個のアンカーに対する物体か否か
k個のアンカーに対する座標
を2つの全結合層から出力する
特徴抽出
(CNN)
入力画像
形状は1:1,1:2,2:1の3種類
大きさは128, 256, 512の3スケール
物体でない形状の場合は,
座標値として-1などの値が入る
アンカー=注目領域の形状と
大きさのパターン
S. Ren, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, NIPS2015
164
RPN ステップ1:画像全体の特徴抽出
VGGの最終畳み込み層までの特徴マップを生成
入力画像入力画像
特徴マップ
S. Ren, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, NIPS2015
165
RPN ステップ2:領域の特徴抽出
局所領域から256次元の特徴を抽出
入力画像入力画像
特徴マップ
256
全結合層(=1x1の畳み込みで表現)
・入力:3x3領域の中央の値(全特徴マップ)
・出力:256次元
S. Ren, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, NIPS2015
166
RPN ステップ3:検出層による物体検出
局所領域から256次元の特徴を抽出
入力画像入力画像
特徴マップ
256
全結合層
・入力:256次元
・出力:2k (kはアンカー数,K=9)
物体の確率
物体でない確率
各
ア
ン
カ
の
確
率
S. Ren, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, NIPS2015
167
RPN ステップ4:回帰層による位置同定
局所領域から256次元の特徴を抽出
入力画像入力画像
特徴マップ
256
全結合層
・入力:256次元
・出力:4k (kはアンカー数,K=9)
左上x座標
左上y座標
各
ア
ン
カ
の
座
標
幅
高さ
S. Ren, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, NIPS2015
168
Faster R-CNNによる物体検出の速度
特徴マップ作成をVGGで行った場合,selective
searchの場合よりも約10倍高速化
ZFを特徴マップ作成に利用するとさらに3倍高速化
S. Ren, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, NIPS2015
169
Faster R-CNNによる物体検出例
S. Ren, Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, NIPS2015
170
YOLO
GPU上でリアルタイムでの一般物体検出(22ms)
画像全体をCNNに入力
グリッドごとに物体らしさと矩形を算出
各グリッドがどの物体クラスかを判定
NMSでグリッドを選択し,物体矩形として出力
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
171
YOLOの処理の流れ
入力画像 各グリットでの矩形と
物体クラスを算出
CNN
矩形算出結果
各グリッドの代表クラスを算出 各グリッドの代表矩形を選択
NMSで出力矩形を選択
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
172
YOLOのアルゴリズム
CNNの出力をSxSグリッドとして考える
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
173
YOLOのアルゴリズム
ある注目グリッドに対して
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
174
YOLOのアルゴリズム
複数の物体らしい領域を推定
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
175
YOLOのアルゴリズム
全グリッドで物体領域を推定
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
176
YOLOのアルゴリズム
グリッドごとにクラスを予測
Bicycle
Dog
Car
Dining
Table
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
177
YOLOのアルゴリズム
クラス予測と領域を対応
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
178
YOLOのアルゴリズム
スコアの高い領域を検出結果として出力
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
179
YOLOの出力内容
180
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
各グリッドの出力
矩形(x,y,幅,高さ)
物体らしさ
クラスの数だけ出力
各グリッドは,
複数の矩形を出力することも可能
Pascal VOCの場合
グリッド数:7x7
矩形数:2
クラ数数:20
出力ユニット数:1470 (7 x 7 x (2 x 5 + 20) = 7 x 7 x 30 tensor)
YOLOの精度
181
Pascal 2007 mAP Speed
DPM v5 33.7 .07 FPS 14 s/img
R-CNN 66.0 .05 FPS 20 s/img
Fast R-CNN 70.0 .5 FPS 2 s/img
Faster R-CNN 73.2 7 FPS 140 ms/img
YOLO 63.4 69.0 45 FPS 22 ms/img
You Only Look Once: Unified, Real-Time Object Detection, CVPR2016
Single Shot MultiBox Detector
182
複数の特徴マップから物体らしさと矩形を出力
小さな物体から大きな物体まで検出できる
SSD: Single Shot MultiBox Detector, ECCV2016
Single Shot MultiBox Detector
複数の特徴マップから物体らしさと矩形を出力
各特徴マップからクラス確率の高い矩形を算出
Default boxの形状を補正するオフセットベクトルを回帰
検出物体にフィットした矩形を出力
183
Ground truth boxes 5 x 5 feature map 3 x 3 feature map
SSD: Single Shot MultiBox Detector, ECCV2016
Single Shot MultiBox Detector
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.02
0.04
0.08
0.81
0.03
SSD: Single Shot MultiBox Detector, ECCV2016
184
Single Shot MultiBox Detector
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.02
0.04
0.08
0.81
0.03
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.01
0.03
0.93
0.01
SSD: Single Shot MultiBox Detector, ECCV2016
185
Single Shot MultiBox Detector
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.02
0.04
0.08
0.81
0.03
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.01
0.03
0.93
0.01
Box3 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.01
0.07
0.88
0.02
SSD: Single Shot MultiBox Detector, ECCV2016
186
Single Shot MultiBox Detector
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.02
0.04
0.08
0.81
0.03
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.01
0.03
0.93
0.01
Box3 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.01
0.07
0.88
0.02
Box4 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.02
0.02
0.09
0.82
0.03
SSD: Single Shot MultiBox Detector, ECCV2016
187
Single Shot MultiBox Detector
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.02
0.04
0.08
0.81
0.03
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.01
0.03
0.93
0.01
Box3 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.01
0.07
0.88
0.02
Box4 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.02
0.02
0.09
0.82
0.03
Max
SSD: Single Shot MultiBox Detector, ECCV2016
188
Single Shot MultiBox Detector
回帰で推定したオフセットベクトルにより
矩形を補正 (cx, cy, w, h)
SSD: Single Shot MultiBox Detector, ECCV2016
189
Single Shot MultiBox Detector
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.06
0.05
0.04
0.79
0.05
0.01
SSD: Single Shot MultiBox Detector, ECCV2016
190
Single Shot MultiBox Detector
191
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.06
0.05
0.04
0.79
0.05
0.01
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.04
0.02
0.02
0.81
0.09
0.02
SSD: Single Shot MultiBox Detector, ECCV2016
Single Shot MultiBox Detector
192
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.06
0.05
0.04
0.79
0.05
0.01
Box3 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.08
0.04
0.02
0.70
0.03
0.01
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.04
0.02
0.02
0.81
0.09
0.02
SSD: Single Shot MultiBox Detector, ECCV2016
Single Shot MultiBox Detector
193
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.06
0.05
0.04
0.79
0.05
0.01
Box3 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.08
0.04
0.02
0.70
0.03
0.01
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.04
0.02
0.02
0.81
0.09
0.02
Box4 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.05
0.02
0.01
0.68
0.02
0.02
SSD: Single Shot MultiBox Detector, ECCV2016
Single Shot MultiBox Detector
194
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.06
0.05
0.04
0.79
0.05
0.01
Box3 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.08
0.04
0.02
0.70
0.03
0.01
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.04
0.02
0.02
0.81
0.09
0.02
Box4 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.05
0.02
0.01
0.68
0.02
0.02
Box5 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.02
0.83
0.03
0.03
SSD: Single Shot MultiBox Detector, ECCV2016
Single Shot MultiBox Detector
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.06
0.05
0.04
0.79
0.05
0.01
Box3 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.08
0.04
0.02
0.70
0.03
0.01
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.04
0.02
0.02
0.81
0.09
0.02
Box4 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.05
0.02
0.01
0.68
0.02
0.02
Box5 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.02
0.83
0.03
0.03
Box6 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.02
0.01
0.84
0.02
0.04
SSD: Single Shot MultiBox Detector, ECCV2016
195
Single Shot MultiBox Detector
Box1 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.06
0.05
0.04
0.79
0.05
0.01
Box3 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.08
0.04
0.02
0.70
0.03
0.01
Box2 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.04
0.02
0.02
0.81
0.09
0.02
Box4 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.05
0.02
0.01
0.68
0.02
0.02
Box5 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.01
0.02
0.83
0.03
0.03
Box6 : クラス確率
Background
Car
Boat
Dog
Cat
Parson
0.01
0.02
0.01
0.84
0.02
0.04
Max
SSD: Single Shot MultiBox Detector, ECCV2016
196
Single Shot MultiBox Detector
197
回帰で推定したオフセットベクトルにより
Bounding boxを補正 (cx, cy, w, h)
SSD: Single Shot MultiBox Detector, ECCV2016
SSDのネットワーク構成
198
Non-Maximum Suppression
VGG conv
from conv1_1
to conv4_3
VGG conv
from conv5_1
to fc7
(replace conv)
SDD conv
from conv6_1
to conv6_2
SDD conv
from conv7_1
to conv7_2
SDD conv
from conv8_1
to conv8_2
SDD conv
from conv9_1
to conv9_2
Normalization
conv4_3_mbox_loc
(offset estimator)
&
conv4_3_mbox_conf
(object classifier)
fc7_mbox_loc
(offset estimator)
&
fc7_mbox_conf
(object classifier)
conv6_2_mbox_loc
(offset estimator)
&
conv6_2_mbox_conf
(object classifier)
conv7_2_mbox_loc
(offset estimator)
&
conv7_2_mbox_conf
(object classifier)
conv8_2_mbox_loc
(offset estimator)
&
conv8_2_mbox_conf
(object classifier)
conv9_2_mbox_loc
(offset estimator)
&
conv9_2_mbox_conf
(object classifier)
Input image
300x300x3
Feature maps
38x38x512
Feature maps
19x19x1024
Feature maps
10x10x512
Feature maps
5x5x256
Feature maps
3x3x256
Feature maps
1x1x256
Localization
maps
38x38x16
Confidence
maps
38x38x84
Localization
maps
19x19x24
Confidence
maps
19x19x126
Localization
maps
10x10x24
Confidence
maps
10x10x126
Localization
maps
5x5x24
Confidence
maps
5x5x126
Localization
maps
3x3x16
Confidence
maps
3x3x84
Localization
maps
1x1x16
Confidence
maps
1x1x84
# Default boxes = 4
# Classes = 21
# Default boxes = 6
# Classes = 21
# Default boxes = 6
# Classes = 21
# Default boxes = 6
# Classes = 21
# Default boxes = 4
# Classes = 21
# Default boxes = 4
# Classes = 21
Final detections
Pre-trained VGG Net (remove fc8)
SSD: Single Shot MultiBox Detector, ECCV2016
SSDのネットワーク構成
199
Non-Maximum Suppression
VGG conv
from conv1_1
to conv4_3
VGG conv
from conv5_1
to fc7
(replace conv)
SDD conv
from conv6_1
to conv6_2
SDD conv
from conv7_1
to conv7_2
SDD conv
from conv8_1
to conv8_2
SDD conv
from conv9_1
to conv9_2
Normalization
conv4_3_mbox_loc
(offset estimator)
&
conv4_3_mbox_conf
(object classifier)
fc7_mbox_loc
(offset estimator)
&
fc7_mbox_conf
(object classifier)
conv6_2_mbox_loc
(offset estimator)
&
conv6_2_mbox_conf
(object classifier)
conv7_2_mbox_loc
(offset estimator)
&
conv7_2_mbox_conf
(object classifier)
conv8_2_mbox_loc
(offset estimator)
&
conv8_2_mbox_conf
(object classifier)
conv9_2_mbox_loc
(offset estimator)
&
conv9_2_mbox_conf
(object classifier)
Input image
300x300x3
Feature maps
38x38x512
Feature maps
19x19x1024
Feature maps
10x10x512
Feature maps
5x5x256
Feature maps
3x3x256
Feature maps
1x1x256
Localization
maps
38x38x16
Confidence
maps
38x38x84
Localization
maps
19x19x24
Confidence
maps
19x19x126
Localization
maps
10x10x24
Confidence
maps
10x10x126
Localization
maps
5x5x24
Confidence
maps
5x5x126
Localization
maps
3x3x16
Confidence
maps
3x3x84
Localization
maps
1x1x16
Confidence
maps
1x1x84
# Default boxes = 4
# Classes = 21
# Default boxes = 6
# Classes = 21
# Default boxes = 6
# Classes = 21
# Default boxes = 6
# Classes = 21
# Default boxes = 4
# Classes = 21
# Default boxes = 4
# Classes = 21
Final detections
Pre-trained VGG Net (remove fc8)
SSD: Single Shot MultiBox Detector, ECCV2016
オフセットベクトルとクラス分類
200
Feature maps
5x5x256
SDD conv
from conv7_1
to conv7_2
Convolutional
feature extractor
conv7_2_mbox_loc
Convolutional
offset estimator
Convolutional
object classifier
conv7_2_mbox_conf
Default box generator
6 default boxes
5x5x6=150 default boxes
Localization maps
5x5x24
Confidence maps
5x5x126
# Offset vector dimensions : 4
# Default boxes : 6
# Classes : 21
# Default boxes : 6
SSD: Single Shot MultiBox Detector, ECCV2016
オフセットベクトルとクラス分類
201
conv7_2_mbox_loc
Convolutional
offset estimator
Convolutional
object classifier
conv7_2_mbox_conf
Default box generator
6 default boxes
Localization maps
5x5x24
Confidence maps
5x5x126
5x5x6=150 default boxes
Default box 1
5x5x4
Default box 2
5x5x4
Default box 6
5x5x4
Default box 1
5x5x21
Default box 2
5x5x21
Default box 6
5x5x21
Cat
Softmax
P(Background) = 0.01
P(Dog) = 0.09
P(Cat) = 0.88
P(Person) = 0.01
cx
cy
w
h
Default boxの
オフセットベクトル
Default boxの
クラス確率
Non-maximum suppression
同一物体かつJaccard overlapがT %以上であれば
認識スコアが最大の矩形のみを出力
202
物体候補 最終検出結果
SSD: Single Shot MultiBox Detector, ECCV2016
Non-maximum suppression
同一物体かつJaccard overlapがT %以上であれば
認識スコアが最大の矩形のみを出力
203
Overlap = 76.3%
Person = 0.98 Person = 0.74
物体候補 最終検出結果
SSD: Single Shot MultiBox Detector, ECCV2016
Non-maximum suppression
同一物体かつJaccard overlapがT %以上であれば
認識スコアが最大の矩形のみを出力
Overlap = 57.2%
Person = 0.87
Person = 0.62
物体候補 最終検出結果
SSD: Single Shot MultiBox Detector, ECCV2016
204
Non-maximum suppression
同一物体かつJaccard overlapがT %以上であれば
認識スコアが最大の矩形のみを出力
205
物体候補 最終検出結果
Overlap < T %
SSD: Single Shot MultiBox Detector, ECCV2016
SSDの特徴
複数の解像度の特徴マップを用いて物体検出
→ 小さな物体から大きな物体まで検出可能
多くのBounding box候補を使用
→ 1枚の画像から多くの物体を検出可能
206
YOLO v1の矩形候補数
7 x 7 x 2 = 98 (最新版コードでは 7 x 7 x 3 = 147)
SSDの矩形候補数
(38 x 38 x 4) + (19 x 19 x 6) + (10 x 10 x 6) + (5 x 5 x 6) + (3 x 3 x 4) + (1 x 1 x 4) = 8,732
SSD: Single Shot MultiBox Detector, ECCV2016
Pascal VOC 2007での認識結果
207
SSD: Single Shot MultiBox Detector, ECCV2016
Pascal VOC 2007での認識結果
208
SSD: Single Shot MultiBox Detector, ECCV2016
ディープラーニングベース手法の比較
209
SSD: Single Shot MultiBox Detector, ECCV2016
SSDによる検出結果例
210
SSD: Single Shot MultiBox Detector, ECCV2016
Deep Learningの応用先
検出 回帰
人検出*
(Caltech Pedestrian dataset トップ)
*HOG+CSS-SVMでのSliding window処理あり
顔器官検出
人の姿勢推定
認識
一般物体認識
(LSVRCトップ)
顔認識(照合)
(LFWトップ)
人物属性推定
一般物体検出
(Pascal VOCトップ)
文字認識
セグメンテーション
シーンラベリング
手領域抽出
髪領域抽出
顔ラベリング
211
シーン認識
畳み込みニューラルネットワークを利用して,各ピクセルのシーンラベルを付与
画素情報をそのまま入力して,特徴を自動的に学習
Superpixelによるセグメンテーションも併用
畳み込みニューラルネットワークでのシーン認識
212
C.Farabet, “Learning Hierarchical Features for Scene Labeling.”, PAMI2013
手の形状抽出
畳み込みニューラルネットワークにより手領域を抽出
213
layer type size, # of kernels
Input grayscale 40x40
1st convolution 5x5, 32
2nd max pooling 2x2
3rd maxout 4
4th convolution 5x5, 32
5th max pooling 2x2
6th maxout 4
7th fully connected 200
output L2 norm 1600
手の形状抽出
畳み込みニューラルネットワークにより手領域を抽出
214
更新回数 precision recall F value
0 0.2303 1.0000 0.3742
50000 0.8930 0.9135 0.9032
100000 0.8968 0.9199 0.9082
150000 0.9054 0.9186 0.9120
200000 0.9033 0.9234 0.9133
カーネル precision recall F value
3x3 0.9097 0.9133 0.9115
5x5 0.9033 0.9234 0.9133
7x7 0.9056 0.9039 0.9047
ネットワークの学習過程の可視化(1)
updating time : 0 - 50000
215
ネットワークの学習過程の可視化(2)
最上位の隠れ層ー識別層間の重み
216
x1
x2
x3
xi
y1
y2
Yj
ネットワークの学習過程の可視化(3)
最上位の隠れ層ー識別層間の重み
217
x1
x2
x3
xi
y1
y2
Yj
ネットワークの学習過程の可視化(3)
最上位の隠れ層ー識別層間の重み
218
x1
x2
x3
xi
y1
y2
Yj
ネットワークの学習過程の可視化(4)
最上位の隠れ層ー識別層間の重み
219
x1
x2
x3
xi
y1
y2
Yj
顔パーツラベリング
マルチクラスセグメンテーションへの応用
220
T. Yamashita, Cost-Alleviative Learning for Deep Convolutional Neural Network-based Facial Part Labeling, CVA2015
シーンラベリング手法
Fully Convolutional Network
プーリング層後の特徴マップを拡大し,結合
221
J. Long, Fully Convolutional Networks for Semantic Segmentation, CVPR2015
SegNet
エンコーダ・デコーダの構成
Max Poolingを行う時に位置情報を記憶
222
最大値&圧縮前の位置情報を参照
データがない座標には「0」を補完
V. Badrinarayanan, SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic
Pixel-Wise Labelling, 2015
PSPNet
223
複数の解像度で特徴抽出して統合
ILSVRC2016のScene Parsing 部門で優勝
H. Zhao, Pyramid Scene Parsing Network, 2016
Cityscapes
車載用セグメンテーションのデータセット
224
Dataset URL : https://www.cityscapes-dataset.com/
50都市で撮影
30クラスのラベリング
評価には19クラスを利用
(頻出頻度の低いクラスは対象外)
M. Cordts, The Cityscapes Dataset for Semantic Urban Scene Understanding, CVPR2016
シーンラベリング
225
[Yamashita, 2016]
ゲームを利用したデータ生成
226
S.R. Richter, Playing for Data: Ground Truth from Computer Games, ECCV2016
Grand Theft Auto(GTA)を利用
セグメンテーションをあらかじめ行い,アノテーション時間
を短縮
ゲームを利用したデータ生成
227
G. Ros, The SYNTHIA Dataset: A Large Collection of Synthetic Images for Semantic Segmentation of
Urban Scenes, CVPR2016
Virtual cityをCGで作成
様々な国の街の雰囲気,天候,季節を再現
13400フレーム分のデータ,13クラスにラベリング
全周囲のカメラ
距離画像
(未公開)
Dataset URL : http://synthia-dataset.net
Deep Learningの応用先
認識
検出
セグメンテーション
一般物体認識
(LSVRCトップ)
一般物体検出
(Pascal VOCトップ)
人検出*
(Caltech Pedestrian dataset トップ)
*HOG+CSS-SVMでのSliding window処理あり
顔認識(照合)
(LFWトップ)
シーンラベリング
人物属性推定
手領域抽出
髪領域抽出
顔ラベリング
回帰
顔器官検出
人の姿勢推定
228
顔器官検出
出力ユニット数=器官点の座標数
229
各器官点の座標を出力
誤差を最小二乗法で算出
・顔器官点検出
 -Deep Convolutional Neural Network を回帰問題に適応
 - 出力層で各器官点の座標値を推定
・シーンラベリング
正解座標
推定座標
0.23
0.42
0.15
0.77
0.58
0.85
ートした
ラスの出力値
路上物体
道路 山
草原
対象クラス
左目の左目尻
左目の左目頭
唇の右端入力画像
各器官点の座標値を出力
●ground truth / ● estimation
M.Kimura, Facial Point Detection Based on a Convolutional Neural Network with Optimal Mini-batch Procedure, ICIP2015
顔輪郭検出
出力ユニット数=輪郭点の座標数
230
画像と正解情報があれば,
検出点数を増やしたネットワーク学習は可能
M.Kimura, Facial Point Detection Based on a Convolutional Neural Network with Optimal Mini-batch Procedure, ICIP2015
画像認識における学習時の工夫
231
Data augmentationの重要性(1)
背景合成によるデータの自動生成
232
変化項目 範囲1 範囲2
移動 ±3 ±5
拡大縮小 ±5% ±10%
回転 ±5° ±15°
明度 ±10% ±20%
Data augmentationの重要性(2)
データの自動生成がある方が性能が良い
233
カリキュラムラーニング(1)
学習過程で難しいサンプルを追加する
(= similar with Bootstrap, but different…)
234
x1
x2
x3
xi
y1
y2
yj
y1
y2
y3
h1
h2
hj
初期の学習(単純なパターン)
学習の後期(複雑なパターン)
Y. Bengio, “Curriculum Learning”, ICML2009.
カリキュラムラーニング(2)
認識問題を直接解決するのではなく,中間的な問題
を通して解く
235
T. Yamashita, Hand Posture Recognition Based on Bottom-up Structured Deep Convolutional Neural Network with
Curriculum Learning”, “Curriculum Learning, ICIP2014
カリキュラムラーニング(3)
領域抽出に対応したネットワークを学習
236
Convolutional Layer Pooling Layer
Convolutional Layer Pooling Layer fully connection Layer
Binarization layer
Input data : gray scale image
ground truth : hand segmented image
T. Yamashita, Hand Posture Recognition Based on Bottom-up Structured Deep Convolutional Neural Network with
Curriculum Learning”, “Curriculum Learning, ICIP2014
カリキュラムラーニング(4)
ネットワークのパラメータを転移する
237
パラメータを初期値として利用
パラメータを更新
Input data : gray scale image
ground truth : class label
T. Yamashita, Hand Posture Recognition Based on Bottom-up Structured Deep Convolutional Neural Network with
Curriculum Learning”, “Curriculum Learning, ICIP2014
カリキュラムラーニング(5)
認識は識別問題に対応したネットワークのみ利用
238
5
Input data : gray scale image
output : class label
T. Yamashita, Hand Posture Recognition Based on Bottom-up Structured Deep Convolutional Neural Network with
Curriculum Learning”, “Curriculum Learning, ICIP2014
カリキュラムラーニング(6)
without curriculum learning with curriculum learning
Ground Truth class
classificationclass
Ground Truth class
classificationclass
239
T. Yamashita, Hand Posture Recognition Based on Bottom-up Structured Deep Convolutional Neural Network with
Curriculum Learning”, “Curriculum Learning, ICIP2014
カリキュラムラーニング(7)
カリキュラムラーニングを導入した顔器官検出
240
T. Yamashita, Facial Point Detection Using Convolutional Neural Network Transferred from a Heterogeneous Task,
ICIP2015
ヘテロジニアスラーニング(1)
複数の異なる情報を同時に学習
241
年齢と性別の同時推定
Convolution Layer Fully Connection Layer
Male or Female
input samples
Age
加藤, Heterogeneous Learningと重み付き誤差関数の導入による顔画像解析, MIRU2015
ヘテロジニアスラーニング(2)
複数の異なる情報を同時に学習
242
出力情報の種類を増やすことが可能
加藤, Heterogeneous Learningと重み付き誤差関数の導入による顔画像解析, MIRU2015
Convolution Layer Fully Connection Layer
Male or Female
input samples
Age
ヘテロジニアスラーニング(3)
243
加藤, Heterogeneous Learningと重み付き誤差関数の導入による顔画像解析, MIRU2015
ヘテロジニアスラーニング(4)
ヘテロジニアスラーニングによる歩行者検出と部位推定
244
1
0.0001 0.001 0.01 0.1 1 10
MissRate False Positive per Image
回帰型DCNN 31.77%
単体のDCNN 38.38%  
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
Daimler	Mono-Pedestrian	Benchmark	Dataset
の評価結果
距離[m] 距離推定結果[m] 誤差[%]
5 4.89 2.2
10 9.26 5.3
15 14.12 5.8
T. Yamashita, Pedestrian and Part Position Detection Using a Regression-Based Multiple Task
Deep Convolutional Neural Network, ICPR2016
その他の事例:ビデオの認識
時系列での特徴を抽出するネットワーク
245
・ピクセルレベルで複数フレーム
の情報を統合
・局所的な動き方向と速度の
検出が可能
・大域的な運動特性を計算可能
・時間、空間の情報をバランス
よく使用
・空間だけではなく時間的に
畳み込むため大域的な情報が
得られる
Single Frame Late Fusion Early Fusion Slow Fusion
・2つのSingle Frameを使用
A.Karpathy, “ Large-scale Video Classification with Convolutional Neural Networks”, CVPR2014
ビデオの認識
Slow Fusion network on the first layer
246
A.Karpathy, “ Large-scale Video Classification with Convolutional Neural Networks”, CVPR2014
ビデオの認識
247
A.Karpathy, “ Large-scale Video Classification with Convolutional Neural Networks”, CVPR2014
Sports-1M Datasetを公開
ネットワークの可視化(1)
プーリング層でどこが選ばれたのかを記憶しておく
248
M. D. Zeiler, Visualizing and Understanding Convolutional Networks, ECCV2014
ネットワークの可視化(2)
強く反応した特徴マップの位置を遡って可視化
249
M. D. Zeiler, Visualizing and Understanding Convolutional Networks, ECCV2014
ネットワークの可視化(3)
強く反応した特徴マップの位置を遡って可視化
250
M. D. Zeiler, Visualizing and Understanding Convolutional Networks, ECCV2014
Places CNN(1)
シーン認識に特化した大規模データセット
251
250万枚・205クラスのデータ
B. Zhou, Learning Deep Features for Scene Recognition using Places Database, NIPS2015
Places CNN(2)
2つのデータセットでそれぞれ学習
252
B. Zhou, Learning Deep Features for Scene Recognition using Places Database, NIPS2015
Places CNN(3)
Image netとの違い
253
B. Zhou, Learning Deep Features for Scene Recognition using Places Database, NIPS2015
DrawNet(1)
ネットワークのどこを通ってきたかを可視化
• 高い反応をしたユニットを各層で選択
254
DrawNet(2)
ネットワークのどこを通ってきたかを可視化
255
DrawNet(3)
ネットワークのどこを通ってきたかを可視化
256
DrawNet(4)
ネットワークのどこを通ってきたかを可視化
257
注目領域の検出
特定のユニットの反応をもとに注目領域を可視化
258http://places.csail.mit.edu
ディープラーニングについて
ニューラルネットワーク
畳み込みニューラルネットワーク
リカレントニューラルネットワーク
生成モデル(オートエンコーダ)
ディープラーニングのツール
259
Recurrent Neural Networkとは?
Recurrent = 再帰型
系列データを扱うニューラルネットワーク
系列データ=音声,言語,動画像,金融相場・・・
など
データの並びに意味や規則性があるもの
D1, D2, D3, ・・・, DT
系列データの文脈や関連性を学習する
系列データの要素ごとに推論結果を出力
260
RNNの構造(1)
中間層で自分自身に再帰する経路を持つ
入力層→中間層→出力層の経路は通常のNNと等
しい
261
Elman network
その他
Jordan network
Time delay network など
RNNの時間軸方向への展開
各時刻の入力が系列データの一つの要素に相当
ある時刻tにおいて時刻0からの全入力を考慮
262
双方向性RNN
系列データを順方向と逆方向の2方向から入力
順方向のみに比べ出力の精度が高い
オンライン学習では使用できない
263
RNNの問題点
-出力に反映されるのは10時刻分程度の入力
理論上は過去全ての系列データ
-時刻を遡るほど重みの乗算回数が増加
勾配の値が 消失 または 爆発 する
Long Short Term Memory (LSTM) を用いることで解決で
きる
264
順伝播
通常のニューラルネットワークとの違い
1時刻前の中間層の出力を受け取る
265
𝑡 = 1における順伝播
入力層から中間層の流れ
通常のニューラルネットワークと同様
中間層ユニットの入力
入力:𝑥%
&
,重み:𝑤%(の内積
𝑢(
&
= ∑ 𝑤%( 𝑥%
&
%
中間層ユニットの出力
活性化関数を通した応答値
𝑧(
&
= 𝑓 𝑢(
&
266
𝑖 : 入力層ユニット
𝑗 : 中間層ユニット
𝑡 ≧ 2における順伝播
入力層から中間層の流れ
時刻𝑡の中間層ユニット𝑗の入力
二つのユニットからの出力の和
時刻𝑡の入力層ユニットの出力 : 𝑥%
&
時刻𝑡 − 1の中間層ユニットの出力 : 𝑧(
&34
時刻𝑡の中間層ユニット𝑗の出力
活性化関数を通した応答値
267
順伝播
中間層から出力層の流れ
出力層ユニットの入力
中間層ユニットの出力:𝑧(
&
,重み:𝑤(5の内積
出力層ユニットの出力
活性化関数を通した応答値
268
誤差逆伝播
誤差逆伝播手法
Back Propagation Through Time (BPTT法)
• 一般的な方法
Real Time Recurrent Learning (RTRL法)
269
誤差関数の算出方法(1)
各時刻の誤差を算出
時刻𝑡	における誤差関数
最小の𝐸 𝑤 を見つけることが目的 → 𝑤 = 𝑎𝑟𝑔𝑚𝑖𝑛> 𝐸 𝑤
E w = − A A 𝑑5
&
5&
log 𝑦5
&
𝑥; 𝑤
𝑑5
&
= [𝑑4
&
, 𝑑J
&
, ・・・, 𝑑K
&
]Mはクラス数と同じ成分数を持つベクトル
270
𝑑 : 教師データ
𝑦 : 出力データ
𝑥 : 入力データ
𝑘 : 識別クラス
誤差関数の算出方法(2)
確率的勾配降下法により誤差関数を算出
ミニバッチを適用した場合の時刻𝑡	における誤差関
数
最小の𝐸 𝑤 を見つけることが目的 → 𝑤 = 𝑎𝑟𝑔𝑚𝑖𝑛> 𝐸 𝑤
E w = −
1
𝑁
A A A 𝑑P5
&
5&P∈RS
log 𝑦5
&
𝑥P; 𝑤
𝑑P5
&
= [𝑑P4
&
, 𝑑PJ
&
, ・・・, 𝑑PK
&
]M
はクラス数と同じ成分数を持つベクトル
271
𝑡 = 1 𝑡 = 2 𝑡 = 3 𝑈4 𝑡 = 1 𝑡 = 2 𝑡 = 3 𝑈J𝑡 = 4 𝑡 = 4
𝑁 : batch size
𝑑 : 教師データ
𝑦 : 出力データ
𝑥 : 入力データ
𝑘 : 識別クラス
誤差逆伝播 BPTT(1)
時系列を遡るように誤差勾配を伝播
最後の系列データの誤差計算を終えると逆伝播開始
全ての系列データの誤差・経路をメモリに蓄積
時刻Tの出力層から中間層に伝播を最初に行う
272
1
2
2
誤差逆伝播 BPTT(2)
時刻tの中間層の誤差
「時刻tの誤差」と「時刻t+1の誤差」の和
結合重みの更新式
𝑤&W4 = 𝑤& − 𝜂
YZ
Y>[
273
𝜂 : 学習係数
𝐸 : 誤差関数
誤差逆伝播 BPTT(3)
BPTTの終了時に行うこと
蓄積した誤差・誤差経路の消去
内部状態の初期化
1つ前の学習サンプルの最後の出力が引き継がれてしまう
274
誤差逆伝播 BPTT(4)
系列データが長い場合、逆伝播を時間幅単位で行う
指定した時間幅分の系列毎にBPTTを実行
蓄積していた誤差を解放
275
誤差逆伝播 RTRL
誤差を次時刻に伝播
オンライン学習に最適
系列データを入力すると誤差が順次入力層に戻る
メモリ効率がBPTTより良い
前時刻でのユニット間の誤差を記憶しておく必要がない
276
LSTM
Long Short Term Memory
長・短期記憶と呼ばれる
RNNの欠点を解決
勾配の値を意図的に抑制
状態を記憶するメモリセルにより長期の記憶を実現
RNNより長い系列データを扱うことが可能
RNNでは10時刻程度が限界
3種類のゲートによりメモリセルを管理
忘却ゲート
入力ゲート
出力ゲート
277
RNNとLSTMの違い
中間層の構造が異なる
入力・出力層は変わらない
LSTMユニットの構造は色々なバリエーションが存
在
278
通常のRNN RNN-LSTM
LSTMユニット
LSTMユニットの入出力
𝑐&34 : 1時刻前のメモリセルの値
ℎ&34 : 1時刻前のLSTMユニットから
出力層への出力値
𝑐&	: 更新したメモリセルの値
ℎ& :	LSTMユニットから出力層への出力値
𝑎& :		時刻𝑡の入力層からの入力値
活性化関数
𝑠𝑖𝑔𝑚 = 𝜎 :	ロジスティックシグモイド関数
0~1の値を出力
𝑡𝑎𝑛ℎ : シグモイド関数(双曲線正接関数)
-1~1の値を出力
279
𝑓 𝑢 =
1
1 + 𝑒3f
𝑓 𝑢 = tanh	( 𝑢)
LSTMユニット
1時刻前のメモリセルは
忘却ゲート => 入力ゲート => 出力ゲート の順で通過
各ゲートは
0~1の値を持ち,通過する値に対して乗算する
ゲート値が0ならば通過する値を0にする(=リセット)
ゲート値が1ならば通過する値をそのままの通す
メモリセルの入力候補値
入力ゲートを通過してメモリセルに加算(メモリセルの更
新)
時刻t-1の出力層の値と、時刻tの入力層の値より算出
280
忘却ゲート
1時刻前のメモリセルを忘却するかを制御
メモリセルに0~1の値を乗算
0 : メモリセルの値を忘却(0)にして通過させる
1 : メモリセルの値をそのまま通過させる
𝑓& = 𝑠𝑖𝑔𝑚 𝑊n o 𝑎& + 𝐻n o ℎ&34 + 𝐶n o 𝑐&34 + 𝑏n
281
f : 忘却ゲート
i : 入力ゲート
o : 出力ゲート
a : 入力層からの値
𝑐̃ : メモリセルへの入力候値
入力ゲート
メモリセルに加算する入力候補値を制御
入力候補値に0~1の値を乗算
0 : 入力候補値をメモリセルに加算させない(0を加算)
1 : 入力候補値をそのままメモリセルに加算させる
𝑖& = 𝑠𝑖𝑔𝑚 𝑊% o 𝑎& + 𝐻% o ℎ&34 + 𝐶% o 𝑐&34 + 𝑏%
282
f : 忘却ゲート
i : 入力ゲート
o : 出力ゲート
a : 入力層からの値
𝑐̃ : メモリセルへの入力候値
出力ゲート
メモリセルから出力層に出力する値を制御
出力ゲートではメモリセルへの書き込みはない
入力ゲートで更新されたメモリセルに0~1の値を乗
算
0 : メモリセルの値を出力層に伝播しない(0を出力)
1 : メモリセルの値を出力層にそのまま出力させる
𝑜& = 𝑠𝑖𝑔𝑚 𝑊u o 𝑎& + 𝐻u o ℎ&34 + 𝐶u o 𝑐& + 𝑏u
283
f : 忘却ゲート
i : 入力ゲート
o : 出力ゲート
a : 入力層からの値
𝑐̃ : メモリセルへの入力候値
LSTMユニットの出力
メモリセルの入力候補値
𝑐̃& = tanh	( 𝑊ṽ[
⋅ 𝑎& + 𝐻ṽ[
⋅ ℎ&34 + 𝑏ṽ[
)
1時刻前のメモリセルの更新
															𝑐& = 𝑓& ⊚ 𝑐&34 + 𝑖& ⊚ 𝑐̃&
LSTMユニットからの出力層への出力
												ℎ& = 𝑜& ⊚ 𝑡𝑎𝑛ℎ 𝑐&
284
f : 忘却ゲート
i : 入力ゲート
o : 出力ゲート
a : 入力層からの値
𝑐̃ : メモリセルへの入力候値
LSTMユニットの出力例
1時刻前のメモリセルが各ゲートを通過した後の出力
メモリセルへの入力候補値は1に固定
285
(𝑐&34)
(忘却, 入力, 出力)
0
(𝑐&, ℎ&)
1
(𝑐&, ℎ&)
(0, 0, 0) (0, 0) (0, 0)
(0, 0, 1) (0, 0) (0, 0)
(0, 1, 0) (1, 0) (1, 0)
(0, 1, 1) (1, 1) (1, 1)
(1, 0, 0) (0, 0) (1, 0)
(1, 0, 1) (0, 0) (1, 1)
(1, 1, 0) (1, 0) (2, 0)
(1, 1, 1) (1, 1) (2, 2)
RNNを利用した自然言語処理
Recurrent neural network based language model
286
Word Embedding
入力単語をベクトル表現
ベクトル長:辞書の単語数
入力単語の要素は1
それ以外は0
過去の履歴(文脈)をベクトルとして保持
各単語の確率を出力
ソフトマックスを利用
RNNを利用した機械翻訳
Sequence to Sequence Learning with Neural
Networks
287
ソース言語の文章の単語を逐次入力
全て入力後に,ターゲット言語の文章の単語を逐次出力
4層のLSTM層を利用
RNNの画像分野への応用方法
画像においてRNN(LSTM)を使う方法は2種類
なにを系列データとするか?
Ø 時系列 : 動画像などの連続したフレーム
Ø 系列 : X, Y座標方向の連続した画素・ブロックデータ
288
時刻0
時刻t
RNNを利用した画像要約
Deep Visual-Semantic Alignments for Generating
Image Descriptions
289
画像をCNNに入力し,画像特徴を抽出
LSTM層の最初に画像特徴を与える
以降は,単語特徴から次の単語を出力する
学習時の工夫
Infer region-word alignment
・R-CNNにより物体領域の画像ベクトルを抽出
・BRNNで文章ベクトルを生成
・画像と文章のベクトルの内積が最大となるものを
学習に利用
RNNを利用した画像要約
Show and Tell: A Neural Image Caption Generator
290
画像をCNNに入力し,画像特徴を抽出
LSTM層の最初に画像特徴を与える
単語は画像と共通の空間に写像し,次の単語を出力する
時系列を用いた自己運動推定
自己運動推定とは
1人称視点映像から自分自身の動きを推定
Ø前進,後退,右回転,左回転 など
車載映像から右左折などの行動を推定できる
アルゴリズム
1. 動画像の隣接するフレームから方向ベクトルを算出
2. 可視化した方向ベクトルを1フレーム毎にCNNに入力
3. CNNからの出力をLSTMに入力
4. 推定結果を出力
291
方向ベクトルの算出
方向ベクトルを色相情報にして画像化
292
ネットワークの構造
LSTMの入力 : CNNにより抽出した特徴マップ
293
自己運動推定の結果
294
自己運動推定の結果
295
時系列データへの応用
各時刻で得られたデータを入力
何を入力ベクトル,出力ベクトルとするか?を決めておく
入力:現時刻の電力・気温・湿度など
出力:5分後の電力など
296
0.1
0.4
0.5
0.9
0.3
0.5
0.5
0.8
0.4
0.2
0.6
0.7
各時刻の
ベクトルデータ
ディープラーニングについて
ニューラルネットワーク
畳み込みニューラルネットワーク
リカレントニューラルネットワーク
生成モデル(オートエンコーダ)
ディープラーニングのツール
297
生成モデルでできること
任意の画像を生成
298
生成モデルの学習とは?
生成したデータの分布がもとの分布と近くなるような
パラメータ(モデル)を学習すること
299
https://openai.com/blog/generative-models
分布の近さ(=距離)は,KL ダイバージェンスで測る
ディープラーニングの生成モデル
オートエンコーダ
変分オートエンコーダ
Generative Adversarial Network
300
オートエンコーダとは?
教師なし学習手法の1つ
出力が入力を再現するように学習
主な利用方法
特徴表現
事前学習
301
x1 x2 xn
y1 y2 ym
復
元
0.5
2.0
1.2
0.4
0.2
2.5
オートエンコーダ(1)
302
Input layer
hidden layer
Reconstruction layer
入力と復元結果のエラーが最小となるように
各パラメータを更新する
Reconstruction error
復元する際の重みはWの転置
Tied weights
パラメータ更新には確率的勾配降下法を利用
求めるパラメータ:w1, b1, b1’
h1(x) = (w1x + b1)
E = ||x x0
||2
x0
= (wT
1 h1(x) + b0
1)
x x’
h(x)
オートエンコーダ(2)
303
Input layer
hidden layer
Reconstruction layer
入力と復元結果のエラーが最小となるように
各パラメータを更新する
Reconstruction error
復元する際の重みはWの転置
Tied weights
パラメータ更新には確率的勾配降下法を利用
求めるパラメータ:w1, b1, b1’
h1(x) = (w1x + b1)
E = ||x x0
||2
x0
= (wT
1 h1(x) + b0
1)
x x’
h(x)
オートエンコーダ(3)
304
Input layer
hidden layer
Reconstruction layer
入力と復元結果のエラーが最小となるように
各パラメータを更新する
Reconstruction error
復元する際の重みはWの転置
Tied weights
パラメータ更新には確率的勾配降下法を利用
求めるパラメータ:w1, b1, b1’
h1(x) = (w1x + b1)
E = ||x x0
||2
x0
= (wT
1 h1(x) + b0
1)
x x’
h(x)
オートエンコーダ(4)
305
Input layer
hidden layer
Reconstruction layer
入力と復元結果のエラーが最小となるように
各パラメータを更新する
Reconstruction error
復元する際の重みはWの転置
Tied weights
パラメータ更新には確率的勾配降下法を利用
求めるパラメータ:w1, b1, b1’
h1(x) = (w1x + b1)
E = ||x x0
||2
x0
= (wT
1 h1(x) + b0
1)
x x’
h(x)
スタックド オートエンコーダ(1)
2層目以降は前層までの出力を利用して行う
306
Y.Bengio, Greedy Layer-Wise Training of Deep Networks, NIPS2007
スタックド オートエンコーダ(2)
2層目以降は前層までの出力を利用して行う
307
Input layer
hidden layer
Reconstruction layer
・1層目の出力を入力データして利用
・再構成層のユニット数は入力層と同じ
(この場合は1層目の出力数)
・2層目のパラメータを更新する
求めるパラメータ:w2, b2, b2’
h2(x) = (w2x + b2)
x0
= (wT
2 h2(x) + b0
2)
Reconstruction error
E = ||x x0
||2
h(x)
x x’
Y.Bengio, Greedy Layer-Wise Training of Deep Networks, NIPS2007
スタックド オートエンコーダ(3)
2層目以降は前層までの出力を利用して行う
308
Input layer
hidden layer
Reconstruction layer
・1層目の出力を入力データして利用
・再構成層のユニット数は入力層と同じ
(この場合は1層目の出力数)
・2層目のパラメータを更新する
求めるパラメータ:w2, b2, b2’
h2(x) = (w2x + b2)
x0
= (wT
2 h2(x) + b0
2)
Reconstruction error
E = ||x x0
||2
h(x)
x x’
Y.Bengio, Greedy Layer-Wise Training of Deep Networks, NIPS2007
デノイジング オートエンコーダ(1)
入力:ベクトルにノイズを付与
教師:元のベクトル
誤差:出力と教師の2乗誤差
309
	
ノイズありベクトルを入力し,ノイズなしベクトルを出力するように学習
オートエンコーダ(ノイズなし)
310
入力サンプル 復元結果 結合荷重
(a) ノイズなしの場合の復元結果と結合荷重
デノイジング オートエンコーダ(1)
311
元サンプル 復元結果 重みノイズ付与
(b) ノイズを20%付与した場合の復元結果と結合荷重
デノイジング オートエンコーダ(2)
312
元サンプル 復元結果 重みノイズ付与
(c) ノイズを40%付与した場合の復元結果と結合荷重
スパース オートエンコーダ(1)
スパース正則化を導入したオートエンコーダ
出力が0となるユニットが多くなるようにする
少ないユニット数で効率的な圧縮を実現する
313
中間層の値が0となるユニットを
多く持つよう に制約項を入れる
hidden layer
x x’
h(x)
min
NX
n=1
||xn exn||2
+
MX
j=1
|hj|
h = f(Wx + b)
変分オートエンコーダ(1)
入力データを潜在変数で表現
潜在変数からデータを生成
314
入力層 エンコーダ
潜在変数
デコーダ 出力層
μ
σ
Z
ガウス分布からサンプリング
http://www.slideshare.net/ssusere55c63/variational-autoencoder-64515581
変分オートエンコーダ(2)
入力データを潜在変数で表現
潜在変数からデータを生成
315
潜在変数の分布の生成
潜在変数のサンプリング
入力 出力
http://www.slideshare.net/ssusere55c63/variational-autoencoder-64515581
変分オートエンコーダ(3)
誤差関数
316
正則化項:KL Divergence
(Regularization Parameter)
復元誤差
(Reconstruction Error)
潜在変数の分布の生成
潜在変数のサンプリング
入力 出力
http://www.slideshare.net/ssusere55c63/variational-autoencoder-64515581
変分オートエンコーダ(4)
317
表情の生成 文字の生成
Generative Adversarial Network
2つのネットワークを用意
318
min
G
max
D
Ex⇠Pdata(x) [ln D(x)] + Ez⇠Pz(z) [ln(1 D(G(z)))]
ノイズzをデータ空間へ写像するネットワークG(z)
入力データxが学習データである確率を出力するネットワークD(x)
I. Goodfellow, Generative Adversarial Networks, 2014
Generative Adversarial Network
2つのネットワークを競わせて学習する
319
min
G
max
D
Ex⇠Pdata(x) [ln D(x)] + Ez⇠Pz(z) [ln(1 D(G(z)))]
ノイズzをデータ空間へ写像するネットワーク(Generator)
入力xが学習データである確率を出力するネットワーク(Discriminator)
Generator Discriminator
z
G(z)
D(x)
学習データ
I. Goodfellow, Generative Adversarial Networks, 2014
Generative Adversarial Network
Discriminator
320
入力が本物のデータか生成されたデータかを見分ける
本物データ:1を出力,
生成データ:0を出力
Generator Discriminator
z
G(z)
D(x)
学習データ
min
G
max
D
Ex⇠Pdata(x) [ln D(x)] + Ez⇠Pz(z) [ln(1 D(G(z)))]
本物らしさ 0.9 0.3I. Goodfellow, Generative Adversarial Networks, 2014
Generative Adversarial Network
Generator
321
Discriminatorを騙すような画像を生成するようにする
Generator Discriminator
z
G(z)
D(x)
学習データ
min
G
max
D
Ex⇠Pdata(x) [ln D(x)] + Ez⇠Pz(z) [ln(1 D(G(z)))]
本物らしさ 0.9 0.8I. Goodfellow, Generative Adversarial Networks, 2014
Generative Adversarial Network
Discriminatorの学習
322
本物らしさの誤差を逆伝播して,Discriminatorネットワークを更新
Generator Discriminator
z
G(z)
D(x)
学習データ
min
G
max
D
Ex⇠Pdata(x) [ln D(x)] + Ez⇠Pz(z) [ln(1 D(G(z)))]
本物らしさ 0.9 0.3I. Goodfellow, Generative Adversarial Networks, 2014
本物らしさ 0.9 0.7
Generative Adversarial Network
Generatorの学習
323
Discriminatorを騙すような画像を生成するようにする
生成データの誤差を(1−本物らしさ)として逆伝播する
本物データは利用しない
Generator Discriminator
z
G(z)
D(x)
学習データ
min
G
max
D
Ex⇠Pdata(x) [ln D(x)] + Ez⇠Pz(z) [ln(1 D(G(z)))]
パラメータは固定
I. Goodfellow, Generative Adversarial Networks, 2014
Generatorの工夫
Laplacian Pyramid of Generative Adversarial Net
324
z3を入力とし,低解像度画像を生成
z2と低解像度画像から高周波成分を生成し,低解像度画像を合成
高解像度化を繰り返し行う
E.Denton, Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks, 2015
LPGANの学習
Laplacian Pyramid of Generative Adversarial Net
325
高解像度画像の高周波成分を本物かどうかを判定するDiscriminatorを学習
徐々に低解像度のDiscriminatorを学習していく
E.Denton, Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks, 2015
DCGAN
Deep Convolutional Generative Adversarial Nets
326
CNNでGeneratorを構成
A. Radford, Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks, 2015
DCGAN
Deep Convolutional Generative Adversarial Nets
327
A. Radford, Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks, 2015
顔画像で学習を回したもの
Iterationごとに100回データを生成した結果
328
初期(Iteration = 0) Iteration = 10
顔画像で学習を回したもの
Iterationごとに100回データを生成した結果
329
Iteration = 40 Iteration = 80
DCGAN
Deep Convolutional Generative Adversarial Nets
330
特徴ベクトルzの空間での演算で特長をもった画像を生成できる
A. Radford, Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks, 2015
テキストから画像へ
文章をベクトル表現して,Generator で画像化
331
S.Reed, Generative Adversarial Text to Image Synthesis, 2016
画像復元
Context Encoder
332
画像の特徴べクトルを生成するエンコーダ
欠落している領域を生成するデコーダ
から構成
D.Pathak, Context Encoders: Feature Learning by Inpainting, 2016
正解情報を利用したGAN
Conditional Generative Adversarial Nets
333
入力と出力のペアを用意
ペアが本物ペアか生成されたペアかを判別
M.Mirza, S.Osindero,Conditional Generative Adversarial Nets, 2014
線画から画像へ
Pix2Pix
334
線画(アノテーション画像)から実画像を生成
条件付きGANにより生成されたペアかを判別
Generatorにはencoder-decoder型ネット利用
P.Isola, Image-to-Image Translation with Conditional Adversarial Networks, 2016
GANによるセグメンテーション
条件付きGANによりセグメンテーション用ネットワー
クを学習
335
P.Luc, Semantic Segmentation using Adversarial Networks, 2016
3次元物体への拡張
3次元ボクセルを生成
336
J.Wu, Learning a Probabilistic Latent Space of Object Shapes via 3D Generative-Adversarial Modeling, 2016
高解像度な画像生成
2段階のGAN構成により256x256の画像を生成
337
H.Zhang, StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks,2016
ディープラーニングについて
ニューラルネットワーク
畳み込みニューラルネットワーク
リカレントニューラルネットワーク
強化学習
生成モデル(オートエンコーダ)
ディープラーニングのツール
338
ディープラーニングのフレームワーク
339
Caffeについて(1)
https://github.com/BVLC/caffe
UC バークレーの研究グループ(T. Darrell)
開発速度が早く,最新の手法が実装されている
コミュニティが大きく,情報共有が盛ん
340
Caffeについて(2)
開発者:Yangqing Jia (UC Berkeley大, 現在はFacebook)
メンテナンス:Berkeley Vision and Learning Center (BVLC)
ライセンス:BSD 2 clause
動作環境OS
Ubuntu 16.04, 14.04, 12.04, Mac OS X 10.11, 10.9, 10.8
Windowsに対応したものもあり
対応言語
C++, CUDA,Python, MATLAB
ダウンロード先
git clone https://github.com/BVLC/caffe
概要
341
インストールに必要なパッケージ
CUDA toolkit バージョン 7以上 (6.0, 6.5でもOK,5.5, 5.0は少し古い)
BLAS ( atlas, mkl, openblasでもOK)
Boost バージョン1.55以上
glog, gflags, protobuf, leveldb, snappy, hdf5, lmdb
OpenCV バージョン2.4以上
pythonで使う場合
Python 2.7, numpy バージョン1.7以上, boost-provided
boost.python
MATLABで使う場合
MATLAB with the mex compiler.
cuDNNを使う場合
NVIDIAのcuDNNサイトに登録してダウンロード
http://caffe.berkeleyvision.org/installation.html に公式のインストール方法が記載
必要なパッケージ
342
Caffeのインストール(1)
セットアップ用のファイルを用意
Make.config.exampleを Make.configにコピー
cp Makefile.config.example Makefile.config
Make.configを修正
## Refer to http://caffe.berkeleyvision.org/installation.html
# Contributions simplifying and improving our build system are welcome!
# cuDNN acceleration switch (uncomment to build with cuDNN).
# USE_CUDNN := 1
# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1
# uncomment to disable IO dependencies and corresponding data layers
# USE_OPENCV := 0
# USE_LEVELDB := 0
# USE_LMDB := 0
cuDNNを使用する場合は「#」を削除
CPUで使用する場合は「#」を削除
入力データを与える方法で使用する場合ものの「#」を削除
343
Caffeのインストール(2)
セットアップ用のファイルを用意
Make.config.exampleを Make.configにコピー
cp Makefile.config.example Makefile.config
Make.configを修正
# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := atlas
# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
# Leave commented to accept the defaults for your choice of BLAS
# (which should work)!
# BLAS_INCLUDE := /path/to/your/blas
# BLAS_LIB := /path/to/your/blas
# Homebrew puts openblas in a directory that is not on the standard search path
# BLAS_INCLUDE := $(shell brew --prefix openblas)/include
# BLAS_LIB := $(shell brew --prefix openblas)/lib
BLASのパッケージを指定する
BLASのパッケージの場所を指定する
(標準的な場所にない場合)
主にmacの場合の設定
344
Caffeのインストール(3)
セットアップ用のファイルを用意
Make.config.exampleを Make.configにコピー
cp Makefile.config.example Makefile.config
Make.configを修正
# This is required only if you will compile the matlab interface.
# MATLAB directory should contain the mex binary in /bin.
# MATLAB_DIR := /usr/local
# MATLAB_DIR := /Applications/MATLAB_R2012b.app
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
PYTHON_INCLUDE := /usr/include/python2.7 ¥
/usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
# ANACONDA_HOME := $(HOME)/anaconda
# PYTHON_INCLUDE := $(ANACONDA_HOME)/include ¥
# $(ANACONDA_HOME)/include/python2.7 ¥
# $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include ¥
MATLABから利用する場合のみ
MATLABの場所を指定
pythonの場所を指定
anacondaを利用する場合は,
こちらでpythonの場所を指定
345
Caffeのインストール(4)
セットアップ用のファイルを用意
Make.config.exampleを Make.configにコピー
cp Makefile.config.example Makefile.config
Make.configを修正
# Uncomment to use Python 3 (default is Python 2)
# PYTHON_LIBRARIES := boost_python3 python3.5m
# PYTHON_INCLUDE := /usr/include/python3.5m ¥
# /usr/lib/python3.5/dist-packages/numpy/core/include
# We need to be able to find libpythonX.X.so or .dylib.
PYTHON_LIB := /usr/lib
# PYTHON_LIB := $(ANACONDA_HOME)/lib
# Homebrew installs numpy in a non standard path (keg only)
# PYTHON_INCLUDE += $(dir $(shell python -c 'import numpy.core;
print(numpy.core.__file__)'))/include
# PYTHON_LIB += $(shell brew --prefix numpy)/lib
python3を利用する場合の設定
pythonのライブラリの場所を指定
特に変更する必要はなし
346
Caffeのインストール(5)
セットアップ用のファイルを用意
Make.config.exampleを Make.configにコピー
cp Makefile.config.example Makefile.config
Make.configを修正
# Uncomment to support layers written in Python (will link against Python libs)
# WITH_PYTHON_LAYER := 1
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
# If Homebrew is installed at a non standard location (for example your home directory) and you
use it for general dependencies
# INCLUDE_DIRS += $(shell brew --prefix)/include
# LIBRARY_DIRS += $(shell brew --prefix)/lib
pythonで独自の層を使用する場合
ライブラリなどを独自の場所に
置いている場合
特に変更する必要はなし
347
Caffeのインストール(6)
セットアップ用のファイルを用意
Make.config.exampleを Make.configにコピー
cp Makefile.config.example Makefile.config
Make.configを修正
コンパイル,インストールとその確認
make all
make test
make runtest
python環境のコンパイル
make pycaffe
348
Caffeのディレクトリ構成
Caffeのディレクトリ
CMakeLists.txt
CONTRIBUTORS.md
LICENSE
Makefile.config
README.md
caffe.cloc
data
docker
docs
include
models
scripts
tools
CONTRIBUTING.md
INSTALL.md
Makefile Makefile.config.example
build
cmake
distribute
examples
matlab
python
src
コンパイルした実行ファイルが入っている
サンプルが入っている
サンプルを動かすためのデータセットの場所
学習済みモデルの場所
349
Caffeの構成
基本構成
C++実装のコア部分
python, MATLABのラッパー
設定ファイル
GPU CPU
データセット
設定ファイルにネットワークの構成,学習の設定を記述
350
Caffeの設定ファイル
設定ファイル(prototxtファイル)
train_test.prototxt (名前は何でも良い)
学習のためのネットワークの構成を記述
学習,評価のデータセットについても記述
(1つの(層)レイヤーと見なしている)
net_solver.prtotxt (名前は何でも良い)
学習するネットワーク記述ファイルと学習パラメータを記述
deploy.prototxt (名前は何でも良い)
入力サンプルと評価のためのネットワークの構成を記述
351
examples/mnistの中身
examples/mnistのディレクトリ (*一部のみ)
convert_mnist_data.cpp
lenet_multistep_solver.prototxt
create_mnist.sh
lenet_solver.prototxt
train_lenet.sh
lenet.prototxt
lenet_solver_adam.prototxt
train_lenet_adam.sh
lenet_adadelta_solver.prototxt
lenet_solver_rmsprop.prototxt
train_lenet_consolidated.sh
lenet_train_test.prototxt
lenet_consolidated_solver.prototxt
train_lenet_rmsprop.sh
352
prototxtファイルの書き方(1)
DATA
label
ip
loss layerの内容を定義
layerをblobとして命名する
layer
blob
ip
data
353
prototxtファイルの書き方(2)
Layerを組み合わせて記述する
Data Layer
Convolution Layer
Pooling Layer
Activation Layer
Inner Product Layer
Fully Connected Layer
Loss Layer
layers {
name: "mnist"
type: DATA
data_param {
source: "mnist_train_lmdb"
backend: LMDB
batch_size: 64
scale: 0.00390625
}
top: "data"
top: "label"
}
layers {
name: "ip"
type: INNER_PRODUCT
bottom: "data"
top: "ip"
inner_product_param {
num_output: 2
}
}
layers {
name: "loss"
type: SOFTMAX_LOSS
bottom: "ip"
bottom: "label"
top: "loss"
}
354
prototxtファイルの書き方(3)
Data Layer
学習サンプルの情報を記述する
name : データの名前(何でも良い)
type:layerの種類(学習サンプルはDATA)
data_param { } :データの情報
source:データセット名
backend:データセットの構成(LMDB)
batch_size:学習時に1回の更新に利用する枚数
scale:1/256の値(画素値を0-1に正規化)
top:出力側blobの名前(data,labelの2つにしている)
LMDBはpythonのデータベース作成ライブラリ
これを利用して1つのファイルにまとめている
layers {
name: "mnist"
type: DATA
data_param {
source:
"mnist_train_lmdb"
backend: LMDB
batch_size: 64
scale: 0.00390625
}
top: "data"
top: "label"
}
DATA
data
label
355
prototxtファイルの書き方(4)
Convolution Layer
畳み込み層の情報を記述する
name : データの名前(何でも良い)
type:layerの種類(畳み込み層はCONVOLUTION)
blobs_lr:学習率(1つ目は重み,2つ目はバイアス)
convolution_param { } :畳み込み層の情報
num_output:フィルタ数
kernelsize:フィルタのサイズ
stride:フィルタを畳み込むステップ
weight_fileter:初期化の方法(入出力ニューロン数から決める)
bias_filter:バイアスの初期値(0にする)
top:出力側のblobの名前
bottom:入力側のblobの名前
layers {
name: "conv1"
type: CONVOLUTION
blobs_lr: 1.
blobs_lr: 2.
convolution_param {
num_output: 20
kernelsize: 5
stride: 1
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
bottom: "data"
top: "conv1"
}
DATA
data
conv1
conv1
label
356
prototxtファイルの書き方(5)
Pooling Layer
プーリング層の情報を記述する
name : データの名前(何でも良い)
type:layerの種類(プーリング層はPOOLING)
pooling_param{ } :プーリング層の情報
kernel_size:プーリングするサイズ(この例では2x2)
stride:プーリングするステップ
pool:プーリングの種類
top:出力側のblobの名前
bottom:入力側のblobの名前
layers {
name: "pool1"
type: POOLING
pooling_param {
kernel_size: 2
stride: 2
pool: MAX
}
bottom: "conv1"
top: "pool1"
}
DATA
data
conv1
conv1
pool1
pool1
label
357
prototxtファイルの書き方(6)
Fully Connected Layer
全結合層の情報を記述する
name : データの名前(何でも良い)
type:layerの種類
(全結合層はINNER_PRODUCT)
blobs_lr:学習率
inner_product_param{ } :
全結合層の情報
num_output:ニューロン数
weight_filter:重みの初期化方法
bias_filter:バイアスの初期化方法
top:出力側のblobの名前
bottom:入力側のblobの名前
layers {
name: "ip1"
type: INNER_PRODUCT
blobs_lr: 1.
blobs_lr: 2.
inner_product_param {
num_output: 500
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
bottom: "pool1"
top: "ip1"
}
DATA
data
conv1
conv1
pool1
pool1
ip1
ip1
label
358
prototxtファイルの書き方(7)
Activation Layer
活性化関数の情報を記述する
name :データの名前(何でも良い)
type:layerの種類
(活性化関数の種類)
top:出力側のblobの名前
bottom:入力側のblobの名前
layers {
name: "relu1"
type: RELU
bottom: "ip1"
top: "ip1"
}
DATA
data
conv1
conv1
pool1
pool1
ip1
ip1 relu1
label
359
prototxtファイルの書き方(8)
Classification Layer
全結合層として情報を記述する
name :データの名前(何でも良い)
type:layerの種類
(識別層はINNER_PRODUCT)
blobs_lr:学習率
inner_product_param{ } :
全結合層の情報
num_output:クラス数
weight_filter:重みの初期化方法
bias_filter:バイアスの初期化方法
top:出力側のblobの名前
bottom:入力側のblobの名前
layers {
name: "ip2"
type: INNER_PRODUCT
blobs_lr: 1.
blobs_lr: 2.
inner_product_param {
num_output: 10
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
bottom: "ip1"
top: "ip2"
}
DATA
data
conv1
conv1
pool1
pool1
ip1
ip1 relu1
ip2
ip2
label
360
prototxtファイルの書き方(9)
Loss Layer
誤差計算の層として情報を記述する
name :データの名前(何でも良い)
type:layerの種類
(誤差計算はSOFTMAX_LOSS)
top:出力側のblobの名前
bottom:入力側のblobの名前
layers {
name: "loss"
type: SOFTMAX_LOSS
bottom: "ip2"
bottom: "label"
}
DATA
label
data
conv1
conv1
pool1
pool1
ip1
ip1 relu1
ip2
ip2
loss
361
solverファイルの書き方
net: “examples/mnist/lenet_train_test.prototxt” #ネットワークの設定ファイル
solver_type: SGD #学習方法(SGDは確率的勾配降下法)
test_iter: 100 #評価を行う回数
test_interval: 500 #評価を行うタイミング.500回毎に行う
base_lr: 0.01 #学習率(これを各層の学習率をかけて利用)
momentum: 0.9 #モーメンタム
weight_decay: 0.0005 #重みのdecoy率(学習率を下げる値)
lr_policy: “inv” #学習率の方針(inv,step,fixedなど)
gamma: 0.0001
power: 0.75
display: 100 #学習過程の表示タイミング
max_iter: 10000 #学習の更新回数
snapshot: 5000 #学習ネットワークの保存タイミング
snapshot_prefix: “examples/mnist/lenet” #保存ファイル名
solver_mode: GPU #学習を行う環境(CPUかGPU)
362
deployファイルの書き方
name: ”MNIST"
input: "data"
input_dim: 10
input_dim: 1
input_dim: 28
input_dim: 28
layers {
name: "conv1"
type: CONVOLUTION
bottom: "data"
top: "conv1"
convolution_param {
num_output: 20
kernel_size: 5
stride: 2
}
}
layers {
name: "prob"
type: SOFTMAX
bottom: ”ip2"
top: "prob"
}
}
入力画像の情報
各層の情報
最上位層は識別層
DATA
label
data
conv1
conv1
pool1
pool1
ip1
ip1 relu1
ip2
ip2
prob
ここの部分を記述
363
Caffeの学習
学習を行うためにすること
学習データセットの準備
データをダウンロード
LMDB形式に変換
学習するネットワークモデルの準備
prototxtファイルを記述
MNISTのサンプルプログラムを利用して説明します
364
学習データセットの準備
MNISTデータセットのダウンロード
dataのディレクトリに移動
cd data/mnist
スクリプトを実行
sh get_mnist.sh
LMDB形式に変換
*caffeのディレクトリで以下を行う(以降のページでも同様)
examples/mnist/create_mnist.sh を修正
vim examples/mnist/create_mnist.sh
creat_mnist.shを実行
sh examples/mnist/create_mnist.sh
365
creat_mnist.shの修正内容
#!/usr/bin/env sh
# This script converts the mnist data into lmdb/leveldb format,
# depending on the value assigned to $BACKEND.
set -e
EXAMPLE=examples/mnist
DATA=data/mnist
BUILD=build/examples/mnist
BACKEND="lmdb"
echo "Creating ${BACKEND}..."
rm -rf $EXAMPLE/mnist_train_${BACKEND}
rm -rf $EXAMPLE/mnist_test_${BACKEND}
$BUILD/convert_mnist_data.bin $DATA/train-images-idx3-ubyte ¥
$DATA/train-labels-idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}
$BUILD/convert_mnist_data.bin $DATA/t10k-images-idx3-ubyte ¥
$DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND}
echo "Done."
ここを修正
convert_mnist_data.binがある場所を指定
366
学習ネットワークの準備
設定ファイル
学習設定ファイル
examples/mnist/lenet_solver.prototxt
ネットワーク設定ファイル
examples/mnist/lenet_train_test.prototxt
367
ネットワークの学習(1)
学習スクリプトを実行
sh examples/mnist/train_lenet.sh
学習時間
GPU (GTX1080)
1分50秒
CPU(Core i7-6750K)
11分40秒
368
学習スクリプトの中身
学習の実行ファイル
./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt
実行ファイルはcaffe
引数で train を指定
--solver オプションで学習の設定ファイルを指定
レジューム学習
-- snapshotオプションで,学習でできたsolverstateファイルを指定すると,
続きから学習できる
GPUのID
--gpu で使用するGPUの番号を指定できる
369
ネットワークの学習(2)
CIFAR10を学習
データセットのダウンロード
cd data/cifar10 data/cifar10に移動
sh get_cifar10.sh ダウンロードスクリプトを実行
LMDBに変換
caffeのディレクトリに移動
sh examples/cifar10/create_cifar10.sh 変換スクリプト実行
学習を実行
sh examples/cifar10/train_full.sh
精度:81.7%
学習時間:約16分
370
ImageNetを学習する場合
データセットのダウンロード
http://image-net.org/
ユーザ登録が必要
数百GB程度
LMDBに変換
examples/imagenetの
create_imagenet.shを修正・実行
平均画像の作成
make_imagenet_mean.shを修正・実行
学習を実行
sh examples/imagenet/train_caffenet.sh
371
学習済みモデルの利用(1)
http://caffe.berkeleyvision.org/model_zoo.html
372
学習済みモデルの利用(2)
学習済みモデルのダウンロード
python scripts/download_model_binary.py <dir name>
<dir name>に指定するもの
models/bvlc_alexnet AlexNet trained on ILSVRC 2012
models/bvlc_reference_caffenet AlexNet の別バージョン
models/bvlc_reference_rcnn_ilsvrc13 R-CNN ILSVRC-2013
models/bvlc_googlenet GoogLeNet trained on ILSVRC 2014
など
その他 下記にも学習済みのネットワークあり
https://github.com/BVLC/caffe/wiki/Model-Zoo
VGGの学習済みモデルも取得可能
373
学習済みモデルの利用(3)
学習済みモデルを利用した認識
./build/examples/cpp_classification/classification.bin
<prototxt> <caffemodel> <mean_img> <id_name> <image>
実行ファイルはclassification.bin
引数
<prototxt> 学習済みモデルの構成を記述したprototxt
<caffemodel> 学習済みモデルファイル
<mean_img> 平均画像
<id_name> 各クラスの名前を記載したファイル
<image> 認識させたい画像
./build/examples/cpp_classification/classification.bin ¥
models/bvlc_reference_caffenet/deploy.prototxt ¥
models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel ¥
data/ilsvrc12/imagenet_mean.binaryproto ¥
data/ilsvrc12/synset_words.txt ¥
examples/images/cat.jpg 374
学習済みモデルの利用(4)
ネットワークのファインチューニング
Image netでの学習
1000カテゴリ,120万枚
画像サイズ 256x256 (カラー画像)
ネットワークの構成
8層(畳み込み5層,全結合3層)
学習が非常に大変(性能,学習時間ともに)
学習済みのネットワークを活用
375
学習済みモデルの利用(5)
ネットワークのファインチューニング
build/tools/caffe train -solver solver.prototxt -weights XXXX.caffemodel
実行ファイルはcaffe
引数で train を指定
--solver オプションで新しい構成の学習の設定ファイルを指定
--weight オプションで学習済みネットワークを指定
376
学習済みモデルの利用(6)
特徴抽出
全結合層(6層目)の値を特徴ベクトルとする
(4096次元のベクトル)
SVMにより,各クラスの識別器を学習
この範囲を利用
377
学習済みモデルの利用(8)
特徴抽出
./build/tools/extract_features.bin
<caffemodel> <prototxt> <blob_name> <output> <mini-batch> <format>
引数
<caffemodel> 特徴抽出したいも学習済みネットワーク
<prototxt>学習済みネットワークの構成を記述したprototxt
< blob_name > 特徴抽出したい層を指定(prototxtで命名したblob名)
<output> 出力
<mini-batch> 一度に処理するバッチサイズ
<format> 特徴抽出結果の出力フォーマット
378
Caffeを利用した実装コード(1)
物体検出
Fast R-CNN
https://github.com/rbgirshick/caffe-fast-rcnn
Faster R-CNN
https://github.com/rbgirshick/py-faster-rcnn
YOLO
https://github.com/xingwangsfu/caffe-yolo
379
Caffeを利用した実装コード(2)
顔器官検出(回帰)
Facial Landmark
https://github.com/luoyetx/deep-landmark
https://github.com/qiexing/caffe-regression
人体姿勢推定
Convolutional Pose Machines
https://github.com/shihenw/convolutional-pose-machines-release
380
Caffeを利用した実装コード(3)
セグメンテーション
FCN
https://github.com/shelhamer/fcn.berkeleyvision.org
CRFasRNN
https://github.com/torrvision/crfasrnn
SegNet
https://github.com/alexgkendall/caffe-segnet
https://github.com/alexgkendall/SegNet-Tutorial
TransferNet
https://github.com/maga33/TransferNet
381
Caffeを利用した実装コード(4)
顔認識
Deep Face
https://github.com/RiweiChen/DeepFace
行動認識(動画像)
C3D
https://github.com/antran89/New-C3D-Caffe
可視化・画像変換
DrawNet
https://github.com/auduno/deepdraw
Style Transfer
https://github.com/crowsonkb/style_transfer
382
Caffeを利用した実装コード(5)
その他
Deep Hashing
https://github.com/kevinlin311tw/Caffe-DeepBinaryCode
Highway Network
https://github.com/flukeskywalker/highway-networks
Deep Q Network
https://github.com/muupan/dqn-in-the-caffe
Dilation Network
https://github.com/fyu/caffe-dilation
Multi-label 対応
https://github.com/kyocen/Caffe-Multi-Label
DenseNet
https://github.com/liuzhuang13/DenseNetCaffe
383
Caffeの実行環境
Caffe on Spark
https://github.com/yahoo/CaffeOnSpark
Caffe on Windows
https://github.com/happynear/caffe-windows
384
Chainer
http://chainer.org
Chainer : pythonベースで非常に使いやすい
Preferred Networksが開発
385
Chainerの特長
Python のスクリプトとして記述できる
様々なニューラルネットの構造に対応できる
ネットワーク構造を直感的でわかりやすく記述できる
GPU をサポートし,複数のGPU をつかった学習もできる
386
Chainer環境のセットアップ
関係するライブラリのインストール
sudo apt-get install python2.7
sudo apt-get install python-numpy
sudo apt-get install libhdf5-dev
sudo pip install -U setuptool sudo pip install -U cython
環境変数の設定
export CUDA ROOT=/usr/local/cuda
export PATH=$PATH:/usr/local/cuda/bin
export LD LIBRARY PATH=$LD LIBRARY
PATH:/usr/local/cuda/lib64:/usr/local/cuda/lib
export CPATH=$CPATH:/usr/local/cuda/include
export CUDA INC DIR=/usr/local/cuda/bin:$CUDA INC DIR
Chainerのインストール
sudo pip install chainer
387
Chainerのコアとなるクラス
Variable :変数の値の変化を記憶する
Function :ネットワークの演算を行う関数
活性化関数の ReLU やプーリングに相当
Link :ネットワークのパラメータを持つ関数
畳み込み層,全結合層
Chain :Link をまとめたもの
Optimizer :ネットワークを学習する方法
388
Chainerのプログラム例
import chainer
import chainer.functions as F
import chainer.links as L
class Alex(chainer.Chain):
insize = 227
def __init__(self):
super(Alex, self).__init__(
conv1=L.Convolution2D(3, 96, 11, stride=4),
conv2=L.Convolution2D(96, 256, 5, pad=2),
conv3=L.Convolution2D(256, 384, 3, pad=1),
conv4=L.Convolution2D(384, 384, 3, pad=1),
conv5=L.Convolution2D(384, 256, 3, pad=1),
fc6=L.Linear(9216, 4096),
fc7=L.Linear(4096, 4096),
fc8=L.Linear(4096, 1000) )
self.train = True
def __call__(self, x, t):
h = F.max_pooling_2d(F.relu(
F.local_response_normalization(self.conv1(x))), 3, stride=2)
h = F.max_pooling_2d(F.relu(
F.local_response_normalization(self.conv2(h))), 3, stride=2)
h = F.relu(self.conv3(h))
h = F.relu(self.conv4(h))
h = F.max_pooling_2d(F.relu(self.conv5(h)), 3, stride=2)
h = F.dropout(F.relu(self.fc6(h)), train=self.train)
h = F.dropout(F.relu(self.fc7(h)), train=self.train)
h = self.fc8(h)
self.loss = F.softmax_cross_entropy(h, t)
self.accuracy = F.accuracy(h, t)
return self.loss
畳み込みニューラルネットワークの構成(AlexNet)
389
TensorFlow
Googleが提供する機械学習用ライブラリ (V1.0)
390
http://www.tensorflow.org
TensorFlow
マルチプラットフォーム
Windows, Linux, MacOS X
Windows
python 3.5に対応
pip3 install --upgrade tensorflow
pip3 install --upgrade tensorflow-gpu
Linux / MacOS X
python 2.7 またはpython 3.3以上に対応
pip install --upgrade tensorflow
pip install --upgrade tensorflow-gpu
391
TensorFlow
CNNのチュートリアル
https://github.com/tensorflow/models/tree/master/tutorials/image/cifar10
Computational Graphを作成
SessionでComputational Graphを実行する
Placeholderを利用して変数に入力値を与える
Variableを利用して学習するパラメータを定義する
392
TensorFlow
393
import numpy as np
import tensorflow as tf
W = tf.Variable([.3], tf.float32) # Model parameters
b = tf.Variable([-.3], tf.float32)
x = tf.placeholder(tf.float32) # Model input and output
y = tf.placeholder(tf.float32)
linear_model = W * x + b
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
optimizer = tf.train.GradientDescentOptimizer(0.01) # optimizer
train = optimizer.minimize(loss)
x_train = [1,2,3,4] # training data
y_train = [0,-1,-2,-3]
init = tf.global_variables_initializer() # training loop
sess = tf.Session()
sess.run(init) # reset values to wrong
for i in range(1000):
sess.run(train, {x:x_train, y:y_train})
curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x:x_train, y:y_train}) # evaluate training
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
TenforFlow
394
def main(_):
mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
# Create the model
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, W) + b
# Define loss and optimizer
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
# Train
for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
# Test trained model
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images,
y_: mnist.test.labels}))
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--data_dir', type=str, default='/tmp/tensorflow/mnist/input_data',
help='Directory for storing input data')
FLAGS, unparsed = parser.parse_known_args()
tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
TensorFlow
395
def cnn_model_fn(features, labels, mode):
input_layer = tf.reshape(features, [-1, 28, 28, 1])
conv1 = tf.layers.conv2d(inputs=input_layer,filters=32, kernel_size=[5, 5], padding="same", activation=tf.nn.relu)
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
conv2 = tf.layers.conv2d(inputs=pool1, filters=64, kernel_size=[5, 5], padding="same", activation=tf.nn.relu)
pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], strides=2)
pool2_flat = tf.reshape(pool2, [-1, 7 * 7 * 64])
dense = tf.layers.dense(inputs=pool2_flat, units=1024, activation=tf.nn.relu)
dropout = tf.layers.dropout(inputs=dense, rate=0.4, training=mode == learn.ModeKeys.TRAIN)
logits = tf.layers.dense(inputs=dropout, units=10)
loss = None train_op = None if mode != learn.ModeKeys.INFER:
onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=10)
loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels, logits=logits)
if mode == learn.ModeKeys.TRAIN:
train_op = tf.contrib.layers.optimize_loss(
loss=loss, global_step=tf.contrib.framework.get_global_step(),
learning_rate=0.001, optimizer="SGD")
# Generate Predictions
predictions = { "classes": tf.argmax(input=logits, axis=1),
"probabilities": tf.nn.softmax(logits, name="softmax_tensor")
}
return model_fn_lib.ModelFnOps( mode=mode, predictions=predictions, loss=loss, train_op=train_op)
TensorFlow
396
def main(unused_argv):
mnist = learn.datasets.load_dataset("mnist")
train_data = mnist.train.images
train_labels = np.asarray(mnist.train.labels, dtype=np.int32)
eval_data = mnist.test.images
eval_labels = np.asarray(mnist.test.labels, dtype=np.int32)
mnist_classifier = learn.Estimator( model_fn=cnn_model_fn, model_dir="/tmp/mnist_convnet_model")
tensors_to_log = {"probabilities": "softmax_tensor"}
logging_hook = tf.train.LoggingTensorHook(tensors=tensors_to_log, every_n_iter=50)
mnist_classifier.fit(x=train_data, y=train_labels, batch_size=100,
steps=20000, monitors=[logging_hook])
metrics = { "accuracy": learn.metric_spec.MetricSpec(
metric_fn=tf.metrics.accuracy, prediction_key="classes"),
}
eval_results = mnist_classifier.evaluate(x=eval_data, y=eval_labels, metrics=metrics) print(eval_results)
if __name__ == "__main__":
tf.app.run()
まとめ
ディープラーニングの基礎について紹介
ニューラルネットワーク
畳み込みニューラルネットワーク
リカレントニューラルネットワーク
オートエンコーダ
実利用に向けたツール紹介
Caffe
Chainer
TensorFlow
質問などは yamashita@cs.chubu.ac.jp へ
397
Ad

More Related Content

What's hot (20)

Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
Yoshitaka Ushiku
 
フーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組みフーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組み
yuichi takeda
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida
 
Data-Centric AIの紹介
Data-Centric AIの紹介Data-Centric AIの紹介
Data-Centric AIの紹介
Kazuyuki Miyazawa
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
Taiji Suzuki
 
「世界モデル」と関連研究について
「世界モデル」と関連研究について「世界モデル」と関連研究について
「世界モデル」と関連研究について
Masahiro Suzuki
 
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
Yosuke Shinya
 
感覚運動随伴性、予測符号化、そして自由エネルギー原理 (Sensory-Motor Contingency, Predictive Coding and ...
感覚運動随伴性、予測符号化、そして自由エネルギー原理 (Sensory-Motor Contingency, Predictive Coding and ...感覚運動随伴性、予測符号化、そして自由エネルギー原理 (Sensory-Motor Contingency, Predictive Coding and ...
感覚運動随伴性、予測符号化、そして自由エネルギー原理 (Sensory-Motor Contingency, Predictive Coding and ...
Masatoshi Yoshida
 
カルマンフィルタ入門
カルマンフィルタ入門カルマンフィルタ入門
カルマンフィルタ入門
Yasunori Nihei
 
SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜
SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜
SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜
SSII
 
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
Deep Learning JP
 
2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)
Tatsuya Yokota
 
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII
 
Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)
Yamato OKAMOTO
 
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
Deep Learning JP
 
コンピュータビジョン分野メジャー国際会議 Award までの道のり
コンピュータビジョン分野メジャー国際会議 Award までの道のりコンピュータビジョン分野メジャー国際会議 Award までの道のり
コンピュータビジョン分野メジャー国際会議 Award までの道のり
cvpaper. challenge
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~
nlab_utokyo
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)
Satoshi Hara
 
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
Deep Learning JP
 
【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...
【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...
【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...
Deep Learning JP
 
Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
Yoshitaka Ushiku
 
フーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組みフーリエ変換と画像圧縮の仕組み
フーリエ変換と画像圧縮の仕組み
yuichi takeda
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
Taiji Suzuki
 
「世界モデル」と関連研究について
「世界モデル」と関連研究について「世界モデル」と関連研究について
「世界モデル」と関連研究について
Masahiro Suzuki
 
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
Yosuke Shinya
 
感覚運動随伴性、予測符号化、そして自由エネルギー原理 (Sensory-Motor Contingency, Predictive Coding and ...
感覚運動随伴性、予測符号化、そして自由エネルギー原理 (Sensory-Motor Contingency, Predictive Coding and ...感覚運動随伴性、予測符号化、そして自由エネルギー原理 (Sensory-Motor Contingency, Predictive Coding and ...
感覚運動随伴性、予測符号化、そして自由エネルギー原理 (Sensory-Motor Contingency, Predictive Coding and ...
Masatoshi Yoshida
 
カルマンフィルタ入門
カルマンフィルタ入門カルマンフィルタ入門
カルマンフィルタ入門
Yasunori Nihei
 
SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜
SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜
SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜
SSII
 
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
【DL輪読会】ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
Deep Learning JP
 
2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)
Tatsuya Yokota
 
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII
 
Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)Skip Connection まとめ(Neural Network)
Skip Connection まとめ(Neural Network)
Yamato OKAMOTO
 
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
Deep Learning JP
 
コンピュータビジョン分野メジャー国際会議 Award までの道のり
コンピュータビジョン分野メジャー国際会議 Award までの道のりコンピュータビジョン分野メジャー国際会議 Award までの道のり
コンピュータビジョン分野メジャー国際会議 Award までの道のり
cvpaper. challenge
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~
nlab_utokyo
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)
Satoshi Hara
 
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
[DL輪読会]Wasserstein GAN/Towards Principled Methods for Training Generative Adv...
Deep Learning JP
 
【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...
【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...
【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...
Deep Learning JP
 

Viewers also liked (19)

ROSによるロボットソフトウェアの開発
ROSによるロボットソフトウェアの開発ROSによるロボットソフトウェアの開発
ROSによるロボットソフトウェアの開発
Yuji Yamauchi
 
Stochastic Variational Inference
Stochastic Variational InferenceStochastic Variational Inference
Stochastic Variational Inference
Kaede Hayashi
 
CVPR2016読み会 Sparsifying Neural Network Connections for Face Recognition
CVPR2016読み会 Sparsifying Neural Network Connections for Face RecognitionCVPR2016読み会 Sparsifying Neural Network Connections for Face Recognition
CVPR2016読み会 Sparsifying Neural Network Connections for Face Recognition
Koichi Takahashi
 
20170819 CV勉強会 CVPR 2017
20170819 CV勉強会 CVPR 201720170819 CV勉強会 CVPR 2017
20170819 CV勉強会 CVPR 2017
issaymk2
 
On the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
On the Dynamics of Machine Learning Algorithms and Behavioral Game TheoryOn the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
On the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
Rikiya Takahashi
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
Yuma Inoue
 
Greed is Good: 劣モジュラ関数最大化とその発展
Greed is Good: 劣モジュラ関数最大化とその発展Greed is Good: 劣モジュラ関数最大化とその発展
Greed is Good: 劣モジュラ関数最大化とその発展
Yuichi Yoshida
 
sublabel accurate convex relaxation of vectorial multilabel energies
sublabel accurate convex relaxation of vectorial multilabel energiessublabel accurate convex relaxation of vectorial multilabel energies
sublabel accurate convex relaxation of vectorial multilabel energies
Fujimoto Keisuke
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
 
PRML輪読#14
PRML輪読#14PRML輪読#14
PRML輪読#14
matsuolab
 
Fractality of Massive Graphs: Scalable Analysis with Sketch-Based Box-Coverin...
Fractality of Massive Graphs: Scalable Analysis with Sketch-Based Box-Coverin...Fractality of Massive Graphs: Scalable Analysis with Sketch-Based Box-Coverin...
Fractality of Massive Graphs: Scalable Analysis with Sketch-Based Box-Coverin...
Kenko Nakamura
 
Practical recommendations for gradient-based training of deep architectures
Practical recommendations for gradient-based training of deep architecturesPractical recommendations for gradient-based training of deep architectures
Practical recommendations for gradient-based training of deep architectures
Koji Matsuda
 
ORB-SLAMを動かしてみた
ORB-SLAMを動かしてみたORB-SLAMを動かしてみた
ORB-SLAMを動かしてみた
Takuya Minagawa
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
nishio
 
多項式あてはめで眺めるベイズ推定 ~今日からきみもベイジアン~
多項式あてはめで眺めるベイズ推定~今日からきみもベイジアン~多項式あてはめで眺めるベイズ推定~今日からきみもベイジアン~
多項式あてはめで眺めるベイズ推定 ~今日からきみもベイジアン~
tanutarou
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
 
LiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせLiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせ
Takuya Minagawa
 
画像認識モデルを作るための鉄板レシピ
画像認識モデルを作るための鉄板レシピ画像認識モデルを作るための鉄板レシピ
画像認識モデルを作るための鉄板レシピ
Takahiro Kubo
 
ROSによるロボットソフトウェアの開発
ROSによるロボットソフトウェアの開発ROSによるロボットソフトウェアの開発
ROSによるロボットソフトウェアの開発
Yuji Yamauchi
 
Stochastic Variational Inference
Stochastic Variational InferenceStochastic Variational Inference
Stochastic Variational Inference
Kaede Hayashi
 
CVPR2016読み会 Sparsifying Neural Network Connections for Face Recognition
CVPR2016読み会 Sparsifying Neural Network Connections for Face RecognitionCVPR2016読み会 Sparsifying Neural Network Connections for Face Recognition
CVPR2016読み会 Sparsifying Neural Network Connections for Face Recognition
Koichi Takahashi
 
20170819 CV勉強会 CVPR 2017
20170819 CV勉強会 CVPR 201720170819 CV勉強会 CVPR 2017
20170819 CV勉強会 CVPR 2017
issaymk2
 
On the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
On the Dynamics of Machine Learning Algorithms and Behavioral Game TheoryOn the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
On the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
Rikiya Takahashi
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
Yuma Inoue
 
Greed is Good: 劣モジュラ関数最大化とその発展
Greed is Good: 劣モジュラ関数最大化とその発展Greed is Good: 劣モジュラ関数最大化とその発展
Greed is Good: 劣モジュラ関数最大化とその発展
Yuichi Yoshida
 
sublabel accurate convex relaxation of vectorial multilabel energies
sublabel accurate convex relaxation of vectorial multilabel energiessublabel accurate convex relaxation of vectorial multilabel energies
sublabel accurate convex relaxation of vectorial multilabel energies
Fujimoto Keisuke
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
 
PRML輪読#14
PRML輪読#14PRML輪読#14
PRML輪読#14
matsuolab
 
Fractality of Massive Graphs: Scalable Analysis with Sketch-Based Box-Coverin...
Fractality of Massive Graphs: Scalable Analysis with Sketch-Based Box-Coverin...Fractality of Massive Graphs: Scalable Analysis with Sketch-Based Box-Coverin...
Fractality of Massive Graphs: Scalable Analysis with Sketch-Based Box-Coverin...
Kenko Nakamura
 
Practical recommendations for gradient-based training of deep architectures
Practical recommendations for gradient-based training of deep architecturesPractical recommendations for gradient-based training of deep architectures
Practical recommendations for gradient-based training of deep architectures
Koji Matsuda
 
ORB-SLAMを動かしてみた
ORB-SLAMを動かしてみたORB-SLAMを動かしてみた
ORB-SLAMを動かしてみた
Takuya Minagawa
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
nishio
 
多項式あてはめで眺めるベイズ推定 ~今日からきみもベイジアン~
多項式あてはめで眺めるベイズ推定~今日からきみもベイジアン~多項式あてはめで眺めるベイズ推定~今日からきみもベイジアン~
多項式あてはめで眺めるベイズ推定 ~今日からきみもベイジアン~
tanutarou
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
shindannin
 
LiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせLiDAR点群とSfM点群との位置合わせ
LiDAR点群とSfM点群との位置合わせ
Takuya Minagawa
 
画像認識モデルを作るための鉄板レシピ
画像認識モデルを作るための鉄板レシピ画像認識モデルを作るための鉄板レシピ
画像認識モデルを作るための鉄板レシピ
Takahiro Kubo
 
Ad

Similar to DeepLearningTutorial (20)

機械学習と深層学習の数理
機械学習と深層学習の数理機械学習と深層学習の数理
機械学習と深層学習の数理
Ryo Nakamura
 
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1
hirokazutanaka
 
【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター 【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター
Unity Technologies Japan K.K.
 
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
Unity Technologies Japan K.K.
 
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333一般化線形混合モデル isseing333
一般化線形混合モデル isseing333
Issei Kurahashi
 
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用 2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
Kenta Oono
 
ディープニューラルネット入門
ディープニューラルネット入門ディープニューラルネット入門
ディープニューラルネット入門
TanUkkii
 
画像処理の高性能計算
画像処理の高性能計算画像処理の高性能計算
画像処理の高性能計算
Norishige Fukushima
 
17ゼロから作るディープラーニング2章パーセプトロン
17ゼロから作るディープラーニング2章パーセプトロン17ゼロから作るディープラーニング2章パーセプトロン
17ゼロから作るディープラーニング2章パーセプトロン
Keiichirou Miyamoto
 
PATTERN RECOGNITION AND MACHINE LEARNING (1.1)
PATTERN RECOGNITION AND MACHINE LEARNING (1.1)PATTERN RECOGNITION AND MACHINE LEARNING (1.1)
PATTERN RECOGNITION AND MACHINE LEARNING (1.1)
Yuma Yoshimoto
 
Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5
KazuhiroSato8
 
20170422 数学カフェ Part1
20170422 数学カフェ Part120170422 数学カフェ Part1
20170422 数学カフェ Part1
Kenta Oono
 
第2回 メドレー読書会
第2回 メドレー読書会第2回 メドレー読書会
第2回 メドレー読書会
Toshifumi
 
Coqチュートリアル
CoqチュートリアルCoqチュートリアル
Coqチュートリアル
Yoshihiro Mizoguchi
 
[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について
Deep Learning JP
 
パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
Miyoshi Yuya
 
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
hirokazutanaka
 
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz..."Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
nkazuki
 
機械学習と深層学習の数理
機械学習と深層学習の数理機械学習と深層学習の数理
機械学習と深層学習の数理
Ryo Nakamura
 
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1
東京都市大学 データ解析入門 10 ニューラルネットワークと深層学習 1
hirokazutanaka
 
【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター 【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター
Unity Technologies Japan K.K.
 
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
Unity Technologies Japan K.K.
 
一般化線形混合モデル isseing333
一般化線形混合モデル isseing333一般化線形混合モデル isseing333
一般化線形混合モデル isseing333
Issei Kurahashi
 
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用 2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
Kenta Oono
 
ディープニューラルネット入門
ディープニューラルネット入門ディープニューラルネット入門
ディープニューラルネット入門
TanUkkii
 
17ゼロから作るディープラーニング2章パーセプトロン
17ゼロから作るディープラーニング2章パーセプトロン17ゼロから作るディープラーニング2章パーセプトロン
17ゼロから作るディープラーニング2章パーセプトロン
Keiichirou Miyamoto
 
PATTERN RECOGNITION AND MACHINE LEARNING (1.1)
PATTERN RECOGNITION AND MACHINE LEARNING (1.1)PATTERN RECOGNITION AND MACHINE LEARNING (1.1)
PATTERN RECOGNITION AND MACHINE LEARNING (1.1)
Yuma Yoshimoto
 
Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5Casual learning machine learning with_excel_no5
Casual learning machine learning with_excel_no5
KazuhiroSato8
 
20170422 数学カフェ Part1
20170422 数学カフェ Part120170422 数学カフェ Part1
20170422 数学カフェ Part1
Kenta Oono
 
第2回 メドレー読書会
第2回 メドレー読書会第2回 メドレー読書会
第2回 メドレー読書会
Toshifumi
 
[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について[DL輪読会]GQNと関連研究,世界モデルとの関係について
[DL輪読会]GQNと関連研究,世界モデルとの関係について
Deep Learning JP
 
パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化パターン認識第9章 学習ベクトル量子化
パターン認識第9章 学習ベクトル量子化
Miyoshi Yuya
 
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
hirokazutanaka
 
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz..."Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
"Puzzle-Based Automatic Testing: Bringing Humans into the Loop by Solving Puz...
nkazuki
 
Ad

More from Takayoshi Yamashita (13)

AI_DL_Education
AI_DL_EducationAI_DL_Education
AI_DL_Education
Takayoshi Yamashita
 
20190804_icml_kyoto
20190804_icml_kyoto20190804_icml_kyoto
20190804_icml_kyoto
Takayoshi Yamashita
 
MIRU_Preview_JSAI2019
MIRU_Preview_JSAI2019MIRU_Preview_JSAI2019
MIRU_Preview_JSAI2019
Takayoshi Yamashita
 
MIRU2018 tutorial
MIRU2018 tutorialMIRU2018 tutorial
MIRU2018 tutorial
Takayoshi Yamashita
 
RL_Tutorial
RL_TutorialRL_Tutorial
RL_Tutorial
Takayoshi Yamashita
 
UsingChainerMN
UsingChainerMNUsingChainerMN
UsingChainerMN
Takayoshi Yamashita
 
Tutorial-DeepLearning-PCSJ-IMPS2016
Tutorial-DeepLearning-PCSJ-IMPS2016Tutorial-DeepLearning-PCSJ-IMPS2016
Tutorial-DeepLearning-PCSJ-IMPS2016
Takayoshi Yamashita
 
DeepLearningDay2016Summer
DeepLearningDay2016SummerDeepLearningDay2016Summer
DeepLearningDay2016Summer
Takayoshi Yamashita
 
IEEE ITSS Nagoya Chapter
IEEE ITSS Nagoya ChapterIEEE ITSS Nagoya Chapter
IEEE ITSS Nagoya Chapter
Takayoshi Yamashita
 
DeepLearningDay2016Spring
DeepLearningDay2016SpringDeepLearningDay2016Spring
DeepLearningDay2016Spring
Takayoshi Yamashita
 
NVIDIA Seminar ディープラーニングによる画像認識と応用事例
NVIDIA Seminar ディープラーニングによる画像認識と応用事例NVIDIA Seminar ディープラーニングによる画像認識と応用事例
NVIDIA Seminar ディープラーニングによる画像認識と応用事例
Takayoshi Yamashita
 
ICIP2014 Presentation
ICIP2014 PresentationICIP2014 Presentation
ICIP2014 Presentation
Takayoshi Yamashita
 
MIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearningMIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearning
Takayoshi Yamashita
 

DeepLearningTutorial