#azurejp
https://www.facebook.com/dahatake/
https://twitter.com/dahatake/
https://github.com/dahatake/
https://daiyuhatakeyama.wordpress.com/
https://www.slideshare.net/dahatake/
トレーニングデー
タ
独立したデータ, 特徴, シグナル, 属
性
“Predict したい分類, クラス, ラ
ベル, 依存しているデータ
35
49,000
M
3.5
4.9
-1.0
1.0
0.0
0.23
Age
Income
Sex
0.15
Republican0.62
Education
可能性
inpu
t
hidd
en
outp
ut
High
Activate
Function
Input Layer Hidden Layer
(妥当な数で)
重み
(Weight)
入力層 隠れ層 出力層
𝑦1 𝑤11
𝑦2 𝑤12
𝑏1
𝑦 = 𝑓 𝑦1 𝑤11 + 𝑦2 𝑤12 + 𝑏1
𝑦: 出力
𝑤: 重み
𝑏: バイアス
𝑓 𝑥 : 活性化関数
パラメータ更新:誤差逆伝播法(Back Propagation)
→ 全ての「重み」と「バイアス」を調整する
Loss Function
(実際値と予測値の差を計算)
Activation Function:
例: ReLU
人間の脳の動きを模倣した分析手法
MNIST
Deep Learning の
Hello World!
28 pixel
28pixel
28 pixel
28pixel
0 1 2 9
特徴量
28 pixel
28pixel
0 1 2 9
色無し
シナプスに0/(サンプル数/10)が足される
色あり
シナプスに1/(サンプル数/10)が
足される
28 pixel
28pixel
0 1 2 9
色あり
シナプスに1/(サンプル数/10)が
足される
色無し
シナプスに0/(サンプル数/10)が足される
0 1 2
28 pixel
28pixel
0 1 2
色が付いているニューロンと繋がっている
シナプスのみを残し、そのシナプスの値を
アウトプットのニューロンごとに足して平均を計算
0 1 2 3 4 5 6 7 8 9
0.2 0.85 0.3 0.4 0.3 0.3 0.34 0.71 0.4 0.4
1
0 1 2
ニューロンは 784+10= 794個
784 x 10 = 7840本
0 1 2
ニューロンは
784+100+10= 894個
784 x 100 + 100 x 10 = 785000本
隠れ層
0 1 2 9
単純に層を増やしシナプスを増やすだけでは
学習時間が増えるばかりで
回答結果が上がるとは限りません。
最適な層の数とニューロンの数を探します
ニューロン数 正解率
なし 76%
100 x 1 87%
200 x 1 88%
400 x 1 90%
784 x 1 91%
784 x 2 92%
784 x 3 92%
200 x 2 90%
隠れ層内のニューロン数を変えた場合
隠れ層の数 正解率
なし 76%
1 87%
2 88%
3 89%
4 87%
隠れ層の数を変えた場合 (各層100ニューロン)
0 1 2
隠れ層
嘘つきを入れます
0 1 2
隠れ層
消します
0 1 2
隠れ層
こいつは信頼できる
層が深くなるとインプットニューロンの情報が平均化されてしまいます。
その中から信頼できる情報を発信するニューロンを見つけ重みづけを変えます
データを1/100
に圧縮
髭や瞳孔の形はもう
解りません
でも、まだ猫ってわ
かります
整理
しましょう
学習 = 最適化
最適化 (Optimization) とは、関数やパラメータなどを最適な状態に近づ
けること
最適化 (Optimization) とは、目的関数を最小化(または最大化)するた
めの
最適化対象となるパラメータを探索手法を用いて探索すること
言いかえると
重要なのはこの3つ
「目的関数」、 「最適化対象」、 「探索
ニューラルネットワークにおける学習とは、
モデルの予測値と実際の値との誤差から、パラメータ(重み)を適切に更新
すること
目的関数 探索最適化対象
重要なのはこの3つ
「目的関数」、 「最適化対象」、 「探索
• 各層間の「重み」
• 平均二乗誤差
(Mean Squared Error /
Classification Error)
• 交差エントロピー誤差
(Cross-Entropy Error)
• 勾配法
(Gradient method)
最適化対象
(Optimization Target)
目的関数
(別名:損失関数 - loss function)
探索手法
(別名:Optimizer, Learner)
ニューラルネットワークにおける学習とは、
モデルの予測値と実際の値との誤差から、パラメータ(重み)を適切に更新
すること
平均二乗誤差
(Mean Squared Error /
Classification Error)
•交差エントロピー誤差
(Cross-Entropy Error)
σ(z) がsigmoid 関数の場合、0,1近傍
で微分が≃0となってしまい、コスト
関数の変化(学習)が止まってしまう
差が大きくなればなるほど、コスト
関数の変化も大きくなる
Cross-entropyが使われることが多いが、Cognitive Toolkit のチュートリアルでは両方使っている。
Activate
Function
Input Layer Hidden Layer
(妥当な数で)
↑学習対象
These are target
Activate Function
恒等写像(identity mapping)
ReLU
シグモイド関数(Sigmoid)
ソフトマックス関数(Softmax)
x
f(x)
Input Layer Hidden Layer Output
Layer
直線がない
直線がある
総和 1
入力画像データ Input Layer Hidden Layer
(妥当な数で)
Output Layer
直線がない
直線がある
学習用データ Input Layer Hidden Layer Output Layer
直線がない
直線がある
学習用データ Input Layer Hidden
Layer
(妥当な数で)
Output
Layer
直線がない
直線がある
結果が違う場合は、
勾配法で学習(調整)
入力データを計算していく
SGD
MomentumSGD
• 色々な勾配法
- Gradient Descent
- SGD
- MomentumSGD
- AdaGrad
- AdaDelta
- Adam
- RMSpropGraves
- NesterovAG
学習率
(Learning Rate)
学習率 モーメンタム
(Momentum)
「学習率」を
ハイパーパラメータとして指定
「学習率」と「モーメンタム」を
ハイパーパラメータとして指定
勾配消失問題
(Vanishing Gradient)
過学習
(Overfitting)
モデルの学習では重みの勾配 (精度に与える影響
度)を
求める必要があるが、その勾配が 「0」 になって
しまうこと
過学習 (Overfitting) とは、学習データに対して学
習されているが、未知のデータに対して適合でき
ていない
(汎化できていない)状態。
特にニューラルネットは複雑なモデルのため
過学習に陥りやすい
• Batch Normalization
• Dropout
• Regularization
• Expanding the training
data
内容 解決策課題
引用元: http://qiita.com/supersaiakujin/items/935bbc9610d0f87607e8
https://arxiv.org/pdf/1512.03385v1.pdf
https://deepage.net/deep_learning/2016/10/26/batch_normalization.html
http://akimacho.hatenablog.com/entry/2016/07/02/001202
Mini-batch単位で違うネットワークを内部的に育成する効果があり、
L2+Dropoutは多くの領域でNeural netsの改善をもたらす
L1
regularization
L2
regularization
Cost function(C0) にL1正規化項を追加
※λ:正規化パラメータ
wが大きい: L1 shrinks the weight much less than L2 does.
wが小さい: L1 shrinks the weight much more than L2 does.
Cost function(C0) にL2正規化項を追加
※λ:正規化パラメータ
→The effect of regularization is to make it so the network
prefer to learn small weight
Wight decay it makes weight smaller lower complexity reduce overfitting
引用例:http://sig.tsg.ne.jp/ml2015/ml/2015/06/29/techniques-of-learning.html
learner = C.momentum_sgd(
tl_model.parameters,
lr_schedule,
mm_schedule,
l2_regularization_weight=0.0005
)
元データ ずらしたり 広げたり 回転させたり さらに回転させたり !?
“Is algorithm A better than algorithm B??”
“What training data set are you using?”
• uniform
• normal
• xavier
• glorot_uniform
• glorot_normal
• he_uniform
• he_normal
• bilinear
• initializer_with_rank
• truncated_normal
Xavierの初期値
Heの初期値
Glorotの初期値
Learning rate η?
Hidden Layer の数は?
Mini-batchはどのくらい必要?
Cost functionをどうする?
何epochでやるの?
Weight initializationはど
うする?
Regularization parameter λ?
Cost function
epoch
η= 2.5
η= 0.025
η= 0.25
パラメータチューニングに正解はないので、
Try-and-Errorでやっていきましょう。
または、先人の設定から学びましょう。
Is there a deer in
the image?
Where is the deer
in the image?
Where exactly is the
deer? What pixels?
Which images are similar
to the query image?
Image
Classification
Object
detection
Image
segmentation
Image
Similarity
Similar
image
Query
imageYes
Jabil, Printed Circuit Board
Defect Detection
Schneider Electric, Circuit
Breaker Defect Detection
Shell, Counting Grey Stock of
Pipes for Inventory
Management
Land O’Lakes, Sustainability
Farming, Map Labeling
Brillio - Which images are
similar to the query image?
Image
Classification
Object
detection
Image
segmentation
Image
Similarity
Darlie, Retail Store Inspection
深層学習による主な画像解析
Image
Classification
Object
Detection
What?
What? Where?
What? Where? Shape?
What are specified? Algorithms
CNN
Fast(er)
R-CNN
Mask
R-CNN
Microsoft の例
Custom Vision, CNTK
Custom Vision, CNTK
..(In near future?)
複雑
単純
2015
• Fast R-CNN
2015-16
• Faster R-
CNN
2015-16
• YOLO
2015-16
• SSD
2017
• Mask R-CNN
Object
Detection
Image
Segmentation
CNN
畳み込み プーリング 畳み込み プーリング 全結合層 出力入力
犬 (0.01)
猫 (0.04)
ボート(0.94)
鳥 (0.01)
ガウシアンフィルタの様な処理をして特徴を自動抽出する層
http://intellabs.github.io/RiverTrail/tutorial/
1 2 3 0
0 1 2 3
3 0 1 2
2 3 0 1
2 0 1
0 1 2
1 0 2
15 16
6 15
1 2 3 0
0 1 2 3
3 0 1 2
2 3 0 1
2 0 1
0 1 2
1 0 2
15
1*2=2 2*0=0 3*1=3
0*0=0 1*1=1 2*2=4
3*1=3 0*0=0 1*2=2
1 2 3 0
0 1 2 3
3 0 1 2
2 3 0 1
2 0 1
0 1 2
1 0 2
15 16
1 2 3 0
0 1 2 3
3 0 1 2
2 3 0 1
2 0 1
0 1 2
1 0 2
15 16
6
1 2 3 0
0 1 2 3
3 0 1 2
2 3 0 1
2 0 1
0 1 2
1 0 2
15 16
6 15
1 4 2 5 1 8 7
14 2 5 1 8 7
1 42 5 1 8 7
1 4 25 1 8 7
1 4 2 51 8 7
1 4 2 5 18 7
1 4 2 5 1 87
4 2 5
2 5 1
5 1 8
12 102 14 25 …
54 99 21 33 …
76 90 20 223 …
… … … … …
12 102 14 25 …
54 99 21 33 …
76 90 20 223 …
… … … … …
12 102 14 25 …
54 99 21 33 …
76 90 20 223 …
… … … … …
12 102 14 25 …
54 99 21 33 …
76 90 20 223 …
… … … … …
Dense
(
全
結
合
層
)
ReLU
Dense
ReLU
Dense
Softmax
Input Layer Hidden Layer Output LayerHidden Layer
my_model = Sequential ([
Dense(64, activation=relu),
Dense(64, activation=relu),
Dense(10, activation=softmax)
])
with default_options(activation=relu):
my_model = Sequential([
For(range(2), lambda: Dense(64)),
Dense(10, activation=softmax)
])
net = Dense(64, activation=relu)(net)
net = Dense(64, activation=relu)(net)
net = Dense(10, activation=softmax)(net)
普通に実装
Sequential()
For()
活性化関数にReLU を
使う 2つの隠れ層と
Softmaxを使う出力層
を実装した3つの例
Convolution
ReLU
Pooling
Convolution
ReLU
Pooling
Convolution
ReLU
Pooling
Dence(Affine)
None
CNNの処理フロー Cognitive Toolkitを使った実装例
Dence(Affine)
None
https://deepage.net/deep_learning/2016/11/30/resnet.html
https://github.com/Microsoft/CNTK/tree/master/Examples/Image/Classification/ResNet
とてもシンプルな構成で応用性が高いため、多く
の技術者に使われている
Tips
Deep Learning には
大量のデータが必要?
Training Validation Test
7000 2000 1000
汎用的なモデル
特定の用途のモデル
特定のレイヤを置き換え
http://www.nlab.ci.i.u-tokyo.ac.jp/pdf/CNN_survey.pdf
https://elix-tech.github.io/ja/2016/06/22/transfer-learning-ja.html http://www.kamishima.net/archive/2010-s-jsai_tl.pdf
def create_model(model_uri, num_classes, input_features, feature_node_name, last_hidden_name, new_prediction_node_name='pred
base_model = C.load_model(download_from_uri(model_uri))
feature_node = C.logging.find_by_name(base_model, feature_node_name)
last_node = C.logging.find_by_name(base_model, last_hidden_name)
cloned_layers = C.combine([last_node.owner]).clone(C.CloneMethod.clone,
{feature_node: C.placeholder(name='features')})
feat_norm = input_features - C.Constant(114)
cloned_out = cloned_layers(feat_norm)
return C.layers.Dense(num_classes, activation=None, name=new_prediction_node_name) (cloned_out)
https://keras.io/applications/
https://keras.io/applications/
--model_type ResNet50 --score True
Rotate
Transfer Learning で使いまわ
し
Learning Rate でより細かく
Data Augmentation で水増し
Imbalanced データには気を付
けて
Object
Detection
xmin xmax
ymin
ymax
x., y.ともに、左上の●から計った両端
点●
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編

機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編