Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Auto Encoderの実装と比較
法政大学理工学部3年 松岡 佑磨
1
http://www.facebook.com/yuma.matsuoka.0226
自己紹介
 松岡 佑磨(Matsuoka Yuma)
 法政大学理工学部3年 知的情報処理研究室所属
 全脳アーキテクチャ若手の会
 趣味:料理、旅行、ボイパ
 3月に青春18切符で
小田原、焼津、名古屋、京都、
奈良、大阪、神戸、姫...
Auto Encoder作成へのモチベーション
3
6月
• Back Propagationの完成
• 中間層いじったらAuto Encoderできるじゃん!
7月
• Auto Encoderのスパース化…正則化項って意味ワカメ
10月
•...
What’s Auto Encoder?
 機械学習において、ニューラルネットワークを
使用した次元圧縮のためのアルゴリズム
(ウィキペディアより)
 非線形の次元圧縮器(PCAも次元圧縮器)
4
Back Propagationの
中間層...
Back Propagation
5
 3層構造のニューラルネットワーク
 教師あり学習
 誤差からパラメータを更新
入力
中間層
出力層
Back Propagation
6
 Forward
 入力ベクトルと重み行列の内積をとる、活性関数に通す
 誤差を計算
 出力ベクトルと教師データベクトルの2乗誤差を計算
 Backward
 誤差を微分して重みの更新に必要な値...
Back Propagation
7
 Forward
 入力ベクトルと重み行列の内積をとる、活性関数に通す
 誤差を計算
 出力ベクトルと教師データベクトルの2乗誤差を計算
 Backward
 誤差を微分して重みの更新に必要な値...
Back Propagation
8
 Forward
 入力ベクトルと重み行列の内積をとる、活性関数に通す
 誤差を計算
 出力ベクトルと教師データベクトルの2乗誤差を計算
 Backward
 誤差を微分して重みの更新に必要な値...
Back Propagationの実装
9
 Pythonによる実装(numpyを使用)
 データセットはUCIのIris.data(Input:4, Output:3)
入力層
中間層
出力層
誤差計算層
Back Propagationの実装
10
F(x)
中間層と出力層はおなじ処理を行う→同じクラスで作成
Auto Encoder
11
 フィードフォワード型のニューラルネットワーク
(Back Propagationと同じような構造)
 中間層を入出力層よりも小さくする(ボトルネック)
 出力は入力と同じベクトルを出力するように学習
 ...
Auto Encoderの愉快な仲間たち
12
 Auto Encoder
 従来の手法
 Denoising Auto Encoder
 入力にノイズを加えて、そのノイズを取り除くように学習
 Sparse Auto Encoder...
Denoising Auto Encoder
13
 入力にノイズを加えてニューラルネットワークに
データを与える
 教師データはノイズを加える前のデータを用いる
入力層 中間層 出力層
誤差出力層
ノイズ付与
教師データは
ノイズなし
Denoising Auto Encoder
14
 入力にノイズを加えてニューラルネットワークに
データを与える
 教師データはノイズを加える前のデータを用いる
入力層 隠れ層 出力層
誤差出力層
ノイズ付与
教師データは
ノイズなし
ノ...
Sparse Auto Encoder
15
 誤差関数に中間層が疎(スパース)になるような
正則化項を加えて学習
𝑚𝑖𝑛
𝑖
𝑥𝑖 − 𝑓′
𝑊 𝑇
𝑓 𝑊𝑥𝑖 + 𝑏 + 𝑏′
2
2
+
𝑖
𝑓(𝑊𝑥 𝑖
+ 𝑏)
 入力→中間層:エ...
Sparse Auto Encoder
16
 誤差関数に中間層が疎(スパース)になるような
正則化項を加えて学習
𝑚𝑖𝑛
𝑖
𝑥𝑖 − 𝑓′
𝑊 𝑇
𝑓 𝑊𝑥𝑖 + 𝑏 + 𝑏′
2
2
+
𝑖
𝑓(𝑊𝑥 𝑖
+ 𝑏)
 正則化項:L1ノ...
 スパース化させたい部分をL1ノルムにして正則化項に加える
Sparse Auto Encoder
17
正則化項がノルム→出力が0になる部分が生じる
𝑑 = (𝑥2 − 𝑥1 )2−(𝑦2 − 𝑦1 )2
𝑑 = 𝑥2 − 𝑥1 + 𝑦2 ...
Auto Encoderの実装
18
 Pythonによる実装(numpy,matplotlibを使用)
 データセットはMNISTの手書き文字画像
(Input:784 Output:784)
784784
入力層 中間層 出力層
誤差出...
Denoising Auto Encoderの実装
19
 入力ベクトルに対して任意の確率で値を変更
 ノイズ付与前の画像を教師データとして学習
原画像=教師データ ノイズ付与画像
Sparse Auto Encoderの実装
20
 中間層の重みとバイアスの微分をBack Propagationから変
更

𝜕𝐸
𝜕𝑤
=
𝜕𝐸
𝜕𝑍
𝜕𝑍
𝜕𝑤
+
𝜕𝑦
𝜕𝑤
=
𝜕𝐸
𝜕𝑍
𝜕𝑍
𝜕ℎ2
𝜕ℎ2
𝜕𝑦
𝜕𝑦
𝜕ℎ...
Sparse Auto Encoder
21
 誤差関数に中間層が疎(スパース)になるような
正則化項を加えて学習
一部の中間層で出力が0となる
↓
スパース化できている
0
0
0
1
1
実験内容
22
 中間層の次元は100, 400, 900の3種類用意
 3種類のAuto Encoderで学習を実行
 以下の内容に注目する
 データを流した時の中間層の出力を可視化
 中間層と出力層の重みを可視化
 出力層の出力...
実験内容
23
種類 中間層素子数
AE 100
Denoising AE 100
Sparse AE 100
AE 400
Denoising AE 400
Sparse AE 400
AE 900
Denoising AE 900
Spar...
出力の再現性(AEの種類で比較)
24
入力データと出力データ(9パターン)
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力
出力
入力
出力
入力
出力
入力
出力
入...
出力の再現性(AEの種類で比較)
25
入力データと出力データ(9パターン)
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
Sparse Auto Encoder
中間層素子...
誤差率の推移(AEの種類で比較)
26
誤差計算層の出力
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
Denoising Auto Encoder
中間層素子数 100 学...
誤差率の推移(AEの種類で比較)
27
誤差計算層の出力
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
Sparse Auto Encoder
中間層素子数 100 学習係数...
誤差率の推移(AEの種類で比較)
28
誤差計算層の出力
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
Sparse Auto Encoder
中間層素子数 100 学習係数...
中間層と出力層の特徴量取得を比較
29
Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み 出力層の重み
中間層と出力層の特徴量取得を比較
30
Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み 出力層の重み
中間層と出力層の特徴量取得を比較
31
Sparse Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み 出力層の重み
スパース化による特徴量取得の比較
32
出力層の重み
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
Sparse Auto Encoder
中間層素子数 100 学習係数 0...
スパース化による特徴量取得の比較
33
出力層の重み
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
Sparse Auto Encoder
中間層素子数 100 学習係数 0...
Sparse性の確認
34
SparseAEには0に近い輝度値を取る要素が明らかに多い
中間層の出力(9パターン)
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
Sparse...
Sparse性の確認
35
SparseAEには0に近い輝度値を取る要素が明らかに多い
中間層の出力(9パターン)
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
Sparse...
Sparse性の確認
36
SparseAEには0に近い輝度値を取る要素が明らかに多い
中間層の出力をヒストグラムに出力
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
Spa...
Sparse性の確認
37
SparseAEには0に近い輝度値を取る要素が明らかに多い
中間層の出力をヒストグラムに出力
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
Spa...
Auto Encoder_まとめ
 スパース化によって出力が少しぼやける
 過学習を防げそう?
 スパース項を加えることで誤差が下がりにくくなる
 中間層出力をスパース化しているから
 SparseAEは特徴抽出に素子間で偏りがあった...
appendix
39
 ソースコード
 実験結果一覧
ソースコード
40
 Back Propagation
 https://github.com/yumatsuoka/Back_propagation/bl
ob/master/BP_Iris_One_Numpy.py
 Auto Enc...
41
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
42
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
43
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
44
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
45
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
46
Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
47
Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
48
Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
49
Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
50
Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
51
Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
52
Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
53
Sparse Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
54
Sparse Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
55
Sparse Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
56
Sparse Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
57
Sparse Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
58
Sparse Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
59
Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
60
Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
61
Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
62
Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
63
Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
64
Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
65
Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
66
Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
67
Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
68
Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
69
Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
70
Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
71
Sparse Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
72
Sparse Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
73
Sparse Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
74
Sparse Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
75
Sparse Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
76
Sparse Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
77
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
78
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
79
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
80
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
81
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
82
Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
83
Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
84
Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
85
Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
86
Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
87
Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
88
Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
89
Sparse Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
90
Sparse Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
91
Sparse Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
92
Sparse Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
93
Sparse Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
94
Sparse Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
95
 以下からSparse Denoising Auto Encoder
96
Sparse Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
97
Sparse Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
98
Sparse Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
99
Sparse Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
100
Sparse Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
101
Sparse Denoising Auto Encoder
中間層素子数 100 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
102
Sparse Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
103
Sparse Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
104
Sparse Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
105
Sparse Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
106
Sparse Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
107
Sparse Denoising Auto Encoder
中間層素子数 400 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
108
Sparse Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
誤差の勾配
109
Sparse Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
入力データと出力データ(100パターン)
110
Sparse Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の重み
111
Sparse Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
出力層の重み
112
Sparse Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力(100パターン)
113
Sparse Denoising Auto Encoder
中間層素子数 900 学習係数 0.001
バッチサイズ 100 エポック 10,000
中間層の出力をヒストグラムに出力
Upcoming SlideShare
Loading in …5
×

Autoencoderの実装と愉快な仲間との比較

9,050 views

Published on

2016年2月9日 みんなのPython勉強会#9 LT枠
Autoencoder, SparseAutoencoder, DenoisingAutoencoderをPython(Numpy)を使ってフルスクラッチで実装して性能を比較してみました。
ソースコードはappendixに載せています。

Published in: Data & Analytics
  • Login to see the comments

Autoencoderの実装と愉快な仲間との比較

  1. 1. Auto Encoderの実装と比較 法政大学理工学部3年 松岡 佑磨 1 http://www.facebook.com/yuma.matsuoka.0226
  2. 2. 自己紹介  松岡 佑磨(Matsuoka Yuma)  法政大学理工学部3年 知的情報処理研究室所属  全脳アーキテクチャ若手の会  趣味:料理、旅行、ボイパ  3月に青春18切符で 小田原、焼津、名古屋、京都、 奈良、大阪、神戸、姫路、直島、 宮島を回ってきますー! 2
  3. 3. Auto Encoder作成へのモチベーション 3 6月 • Back Propagationの完成 • 中間層いじったらAuto Encoderできるじゃん! 7月 • Auto Encoderのスパース化…正則化項って意味ワカメ 10月 • 微分の更新式いじってスパース化できたか!? 11月 • 出力用ライブラリ使えるようになってぶちおもろい!
  4. 4. What’s Auto Encoder?  機械学習において、ニューラルネットワークを 使用した次元圧縮のためのアルゴリズム (ウィキペディアより)  非線形の次元圧縮器(PCAも次元圧縮器) 4 Back Propagationの 中間層をボトルネックにする
  5. 5. Back Propagation 5  3層構造のニューラルネットワーク  教師あり学習  誤差からパラメータを更新 入力 中間層 出力層
  6. 6. Back Propagation 6  Forward  入力ベクトルと重み行列の内積をとる、活性関数に通す  誤差を計算  出力ベクトルと教師データベクトルの2乗誤差を計算  Backward  誤差を微分して重みの更新に必要な値を取得  重みの更新  既存の重みの値から誤差の微分を減算 Forward 誤差を 計算 Backward 重みの 更新
  7. 7. Back Propagation 7  Forward  入力ベクトルと重み行列の内積をとる、活性関数に通す  誤差を計算  出力ベクトルと教師データベクトルの2乗誤差を計算  Backward  誤差を微分して重みの更新に必要な値を取得  重みの更新  既存の重みの値から誤差の微分を減算 Forward 誤差を 計算 Backward 重みの 更新 誤差関数に関して 誤差を小さく→傾きを小さく
  8. 8. Back Propagation 8  Forward  入力ベクトルと重み行列の内積をとる、活性関数に通す  誤差を計算  出力ベクトルと教師データベクトルの2乗誤差を計算  Backward  誤差を微分して重みの更新に必要な値を取得  重みの更新  既存の重みの値から誤差の微分を減算 Forward 誤差を 計算 Backward 重みの 更新 Back Propagationの詳しい流れは省略します
  9. 9. Back Propagationの実装 9  Pythonによる実装(numpyを使用)  データセットはUCIのIris.data(Input:4, Output:3) 入力層 中間層 出力層 誤差計算層
  10. 10. Back Propagationの実装 10 F(x) 中間層と出力層はおなじ処理を行う→同じクラスで作成
  11. 11. Auto Encoder 11  フィードフォワード型のニューラルネットワーク (Back Propagationと同じような構造)  中間層を入出力層よりも小さくする(ボトルネック)  出力は入力と同じベクトルを出力するように学習  入力→中間層:エンコーダ h = 𝑓 𝑊𝑥 + 𝑏  中間層→出力:デコーダ y = 𝑓′ 𝑊 𝑇 ℎ + 𝑏′ エンコーダ デコーダ 入力層 中間層 出力層 𝑥 𝑥 𝑥 𝑥 𝑥 h h h y y y y y 𝑊 𝑊 𝑊 𝑇 𝑊 𝑇
  12. 12. Auto Encoderの愉快な仲間たち 12  Auto Encoder  従来の手法  Denoising Auto Encoder  入力にノイズを加えて、そのノイズを取り除くように学習  Sparse Auto Encoder  一部の中間層が疎になるように学習
  13. 13. Denoising Auto Encoder 13  入力にノイズを加えてニューラルネットワークに データを与える  教師データはノイズを加える前のデータを用いる 入力層 中間層 出力層 誤差出力層 ノイズ付与 教師データは ノイズなし
  14. 14. Denoising Auto Encoder 14  入力にノイズを加えてニューラルネットワークに データを与える  教師データはノイズを加える前のデータを用いる 入力層 隠れ層 出力層 誤差出力層 ノイズ付与 教師データは ノイズなし ノイズのある画像にも対応しやすい ↓ 汎化性能が高い
  15. 15. Sparse Auto Encoder 15  誤差関数に中間層が疎(スパース)になるような 正則化項を加えて学習 𝑚𝑖𝑛 𝑖 𝑥𝑖 − 𝑓′ 𝑊 𝑇 𝑓 𝑊𝑥𝑖 + 𝑏 + 𝑏′ 2 2 + 𝑖 𝑓(𝑊𝑥 𝑖 + 𝑏)  入力→中間層:エンコーダ h = 𝑓 𝑊𝑥 + 𝑏  中間層→入力:デコーダ y = 𝑓′ 𝑊 𝑇 ℎ + 𝑏′  スパース項(L1ノルム):中間層の絶対値の総和 ℎ𝑖 1
  16. 16. Sparse Auto Encoder 16  誤差関数に中間層が疎(スパース)になるような 正則化項を加えて学習 𝑚𝑖𝑛 𝑖 𝑥𝑖 − 𝑓′ 𝑊 𝑇 𝑓 𝑊𝑥𝑖 + 𝑏 + 𝑏′ 2 2 + 𝑖 𝑓(𝑊𝑥 𝑖 + 𝑏)  正則化項:L1ノルム( ℎ𝑖 1 )  ℎ𝑖 1:中間層の絶対値の総和 中間層も最少になるように Neural Networkを最適化
  17. 17.  スパース化させたい部分をL1ノルムにして正則化項に加える Sparse Auto Encoder 17 正則化項がノルム→出力が0になる部分が生じる 𝑑 = (𝑥2 − 𝑥1 )2−(𝑦2 − 𝑦1 )2 𝑑 = 𝑥2 − 𝑥1 + 𝑦2 − 𝑦1 0 マンハッタン距離 ユーグリッド距離
  18. 18. Auto Encoderの実装 18  Pythonによる実装(numpy,matplotlibを使用)  データセットはMNISTの手書き文字画像 (Input:784 Output:784) 784784 入力層 中間層 出力層 誤差出力層
  19. 19. Denoising Auto Encoderの実装 19  入力ベクトルに対して任意の確率で値を変更  ノイズ付与前の画像を教師データとして学習 原画像=教師データ ノイズ付与画像
  20. 20. Sparse Auto Encoderの実装 20  中間層の重みとバイアスの微分をBack Propagationから変 更  𝜕𝐸 𝜕𝑤 = 𝜕𝐸 𝜕𝑍 𝜕𝑍 𝜕𝑤 + 𝜕𝑦 𝜕𝑤 = 𝜕𝐸 𝜕𝑍 𝜕𝑍 𝜕ℎ2 𝜕ℎ2 𝜕𝑦 𝜕𝑦 𝜕ℎ1 𝜕ℎ1 𝜕𝑤 + 𝜕𝑦 𝜕𝑤  𝜕𝐸 𝜕𝑤 = 𝜕𝐸 𝜕𝑍 𝜕𝑍 𝜕𝑏 + 𝜕𝑦 𝜕𝑏 = 𝜕𝐸 𝜕𝑍 𝜕𝑍 𝜕ℎ2 𝜕ℎ2 𝜕𝑦 𝜕𝑦 𝜕ℎ1 𝜕ℎ1 𝜕𝑏 + 𝜕𝑦 𝜕𝑏 • 𝜕𝐸 𝜕𝑍 = 2 𝑋 − 𝑍 • 𝜕𝑍 𝜕ℎ2 = 𝑓′ = 𝑓 1 − 𝑓 • 𝜕ℎ 𝜕𝑦 = 𝑊 𝑇 • 𝜕𝑦 𝜕ℎ1 = 𝑓′ = 𝑓 1 − 𝑓 • 𝜕ℎ1 𝜕𝑤 = 𝑥 • 𝜕𝑦 𝜕𝑤 = 𝑓′ℎ1 = 𝑓 1 − 𝑓 𝑥 • 𝜕𝑦 𝜕𝑏 = 𝑓′ = 𝑓 1 − 𝑓
  21. 21. Sparse Auto Encoder 21  誤差関数に中間層が疎(スパース)になるような 正則化項を加えて学習 一部の中間層で出力が0となる ↓ スパース化できている 0 0 0 1 1
  22. 22. 実験内容 22  中間層の次元は100, 400, 900の3種類用意  3種類のAuto Encoderで学習を実行  以下の内容に注目する  データを流した時の中間層の出力を可視化  中間層と出力層の重みを可視化  出力層の出力を可視化
  23. 23. 実験内容 23 種類 中間層素子数 AE 100 Denoising AE 100 Sparse AE 100 AE 400 Denoising AE 400 Sparse AE 400 AE 900 Denoising AE 900 Sparse AE 900 • MNISTの手書き文字画像6万枚 (Input:784 Output:784) • 学習係数:0.001 • バッチサイズ:100 • エポック:10000 AutoEncoderの種類 中間層の素子数 を変えて性能比較
  24. 24. 出力の再現性(AEの種類で比較) 24 入力データと出力データ(9パターン) Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力 出力 入力 出力 入力 出力 入力 出力 入力 出力 入力 出力 Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000
  25. 25. 出力の再現性(AEの種類で比較) 25 入力データと出力データ(9パターン) Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力 出力 入力 出力 入力 出力 入力 出力 入力 出力 入力 出力
  26. 26. 誤差率の推移(AEの種類で比較) 26 誤差計算層の出力 Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000
  27. 27. 誤差率の推移(AEの種類で比較) 27 誤差計算層の出力 Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000
  28. 28. 誤差率の推移(AEの種類で比較) 28 誤差計算層の出力 Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をスパース化させるために 誤差が下がりにくい
  29. 29. 中間層と出力層の特徴量取得を比較 29 Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み 出力層の重み
  30. 30. 中間層と出力層の特徴量取得を比較 30 Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み 出力層の重み
  31. 31. 中間層と出力層の特徴量取得を比較 31 Sparse Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み 出力層の重み
  32. 32. スパース化による特徴量取得の比較 32 出力層の重み Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000
  33. 33. スパース化による特徴量取得の比較 33 出力層の重み Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 SparseAEは学習性能が高く、中間層の次元は100で 余裕があるため、特徴を取っていない素子があるのでは?
  34. 34. Sparse性の確認 34 SparseAEには0に近い輝度値を取る要素が明らかに多い 中間層の出力(9パターン) Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(9パターン)
  35. 35. Sparse性の確認 35 SparseAEには0に近い輝度値を取る要素が明らかに多い 中間層の出力(9パターン) Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(9パターン) 明らかに黒い部分(値が0)が多い
  36. 36. Sparse性の確認 36 SparseAEには0に近い輝度値を取る要素が明らかに多い 中間層の出力をヒストグラムに出力 Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  37. 37. Sparse性の確認 37 SparseAEには0に近い輝度値を取る要素が明らかに多い 中間層の出力をヒストグラムに出力 Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力 Auto Encoderをスパース化できてる(^^)v
  38. 38. Auto Encoder_まとめ  スパース化によって出力が少しぼやける  過学習を防げそう?  スパース項を加えることで誤差が下がりにくくなる  中間層出力をスパース化しているから  SparseAEは特徴抽出に素子間で偏りがあった  特徴表現能力がほかの仲間たちより高い  SparseAEは全体の1割以下の素子で特徴表現できた  枝刈りをして計算量を大幅に減らせるかも 38
  39. 39. appendix 39  ソースコード  実験結果一覧
  40. 40. ソースコード 40  Back Propagation  https://github.com/yumatsuoka/Back_propagation/bl ob/master/BP_Iris_One_Numpy.py  Auto Encoder  https://github.com/yumatsuoka/Auto_Encoder/blob/ master/autoencoder_multi.py AutoEncoderでの可視化に関して以下のページのコードを参考にしました http://qiita.com/kenmatsu4/items/99d4a54d5a57405ecaf8#1%E6%9C%80%E5%88%9D%E3%81%AB
  41. 41. 41 Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  42. 42. 42 Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  43. 43. 43 Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  44. 44. 44 Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  45. 45. 45 Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  46. 46. 46 Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  47. 47. 47 Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  48. 48. 48 Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  49. 49. 49 Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  50. 50. 50 Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  51. 51. 51 Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  52. 52. 52 Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  53. 53. 53 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  54. 54. 54 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  55. 55. 55 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  56. 56. 56 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  57. 57. 57 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  58. 58. 58 Sparse Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  59. 59. 59 Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  60. 60. 60 Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  61. 61. 61 Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  62. 62. 62 Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  63. 63. 63 Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  64. 64. 64 Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  65. 65. 65 Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  66. 66. 66 Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  67. 67. 67 Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  68. 68. 68 Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  69. 69. 69 Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  70. 70. 70 Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  71. 71. 71 Sparse Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  72. 72. 72 Sparse Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  73. 73. 73 Sparse Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  74. 74. 74 Sparse Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  75. 75. 75 Sparse Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  76. 76. 76 Sparse Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  77. 77. 77 Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  78. 78. 78 Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  79. 79. 79 Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  80. 80. 80 Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  81. 81. 81 Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  82. 82. 82 Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  83. 83. 83 Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  84. 84. 84 Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  85. 85. 85 Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  86. 86. 86 Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  87. 87. 87 Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  88. 88. 88 Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  89. 89. 89 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  90. 90. 90 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  91. 91. 91 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  92. 92. 92 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  93. 93. 93 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  94. 94. 94 Sparse Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  95. 95. 95  以下からSparse Denoising Auto Encoder
  96. 96. 96 Sparse Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  97. 97. 97 Sparse Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  98. 98. 98 Sparse Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  99. 99. 99 Sparse Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  100. 100. 100 Sparse Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  101. 101. 101 Sparse Denoising Auto Encoder 中間層素子数 100 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  102. 102. 102 Sparse Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  103. 103. 103 Sparse Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  104. 104. 104 Sparse Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  105. 105. 105 Sparse Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  106. 106. 106 Sparse Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  107. 107. 107 Sparse Denoising Auto Encoder 中間層素子数 400 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力
  108. 108. 108 Sparse Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 誤差の勾配
  109. 109. 109 Sparse Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 入力データと出力データ(100パターン)
  110. 110. 110 Sparse Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の重み
  111. 111. 111 Sparse Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 出力層の重み
  112. 112. 112 Sparse Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力(100パターン)
  113. 113. 113 Sparse Denoising Auto Encoder 中間層素子数 900 学習係数 0.001 バッチサイズ 100 エポック 10,000 中間層の出力をヒストグラムに出力

×