SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Ver. 1.0, 2017-08-19
森下功啓
1
更新履歴
• 2017-08-19 Ver. 1.0 release
2
Series Index
ML-01 機械学習の概要
ML-02 機械学習におけるデータの前処理
ML-03 ランダムフォレストによる自動識別
ML-04 機械学習の性能の定義と一般的な性能向上策
ML-05 ニューラルネットワーク
ML-06 ニューラルネットワークによる線形回帰
ML-07 ニューラルネットワークによる非線形回帰
ML-08 ニューラルネットワークを用いた識別・分類 ーシングルラベルー
ML-09 ニューラルネットワークを用いた識別・分類 ーマルチラベルー
ML-10 ニューラルネットワークで画像識別
ML-11 ニューラルネットワークのチューニングの基本
3
Re:識別(分類)問題とは?
• 特徴ベクトルを基に、クラスを分類する問題を識別問題という
4
• 特徴ベクトルが数値やラベルという点は回帰問題と同じ
• 正解が文字列や整数で与えられる「ラベル」という点が回帰問
題と異なる
“ネコ”
“イヌ”
学習器
学習器
ここでの「クラ
ス」とは、”ネコ”
とか”イヌ”のこと
5
識別(分類)問題は更に
シングルラベル分類問題とマルチラベル分類問題に別れる
*正確には、識別(分類)問題といえばシングルラベルでの分類問題を指し、「シングルラベル
分類問題」とはほぼ言わないのだが、このスライドでは区別しやすくこう呼ぶこととする。
シングルラベル分類問題と
マルチラベル分類問題
• 写真に写っている物体が”イヌ”か”ネコ”かという単一のラベ
ルに分類する問題は、シングルラベル分類問題という
• 一方で、「SF」「アニメ」など、映画のジャンルの様に複数のラ
ベルに分類する問題はマルチラベル分類問題という
6
タイトル アニメ SF 映画版 押し
プリンセス・プリンシパル ◯ ◯ ◯
ノーゲーム・ノーライフ ゼロ ◯ ◯ ◯
マルチラベルの例
入力画像 識別結果の正解
ネコが写った画像 “ネコ”
イヌが写った画像 “イヌ”
シングルラベルの例
7
このスライドでは、シングルラベル分類問題を扱う
8
さて、扱う問題領域を明らかにしたので、次は
シングルラベル分類問題をNNで扱う上での定石
を見てみよう
ラベルを含む問題はほぼ非線形問題
9
4次元ベクトルデータ
花のラベル(整数)
2
1
0
この変換を一次式だ
けで実現は不可能
Irisの識別例
非線形な問題を扱えるアルゴリズムを使う
正解ラベルをベクトル化する
• 正解(整数)を非線形回帰問題として求められなくはない
• しかし、正解はベクトル化した方が高性能となる
• 正解をベクトル化すると、出力層におけるとあるユニットにつながる結合
係数を調整しても、他の出力層のユニットには影響せず、調整し易い
• ∴正解ラベルをベクトル化する(これをOne-hot-encodingという)
10
教師データに含まれ
る正解ラベル
2
1
0
virginica
versicolor
setosa
Irisの識別例におけるOne-hot-encoding
[0, 0, 1]
[0, 1, 0]
[1, 0, 0]
このベクトルを出力層のユニット
の出力として学習させる
ベクトル化した
正解ラベル
11
3層NNを使ったIris分類においてversicolor
の特徴量を入力した場合の出力層の出力例
中間層
(隠れ層)
出力層
入力層
がくの長さ
がくの幅
花弁の長さ
花弁の幅
setosa
versicolor
virginica
0.07
0.93
0.1
NNにおける識別問題への対応
• ニューラルネットワークを用いて識別問題を解く場合、実現
したいことが非線形な変換なので、3層以上の構成として、
中間層には非線形な活性化関数を使う
• また、出力層のユニットには0か1しか出して欲しくないので、
出力層の活性化関数はsigmoidを使う
• 故に、入力する特徴ベクトルは次元ごとの正規化をしていな
いとほとんど学習が進まない
• 正規化しない場合は、活性化関数を全てLeakyReLUにすると良いか
もしれないが、ノイズに弱くなるかもしれない
• 出力層の出力を確率に変換するために、softmax層を使う
12
Softmax層の役割
13
• 出力層の複数のユニットが同時に活性化している場合は、推定
結果の信頼性は低下する
• 例えば、”ネコ”のユニットが最も活性化していても、他にも”イヌ”のユ
ニットも活性化している場合は”ネコ”の可能性は下がる
• Softmax層は信頼性を反映した確率を計算する
• 後述する、categorical_crossentropyを使った学習にも寄与する
中間層
(隠れ層) 出力層
ネコ
イヌ
0.98
0.65
・・・
中間層
(隠れ層) 出力層
ネコ
イヌ
0.98
0.05
・・・
ネコのユニットは0.98と強く発火してい
るが、イヌのユニットもそこそこ発火し
ており、ネコの可能性が低い状態
ネコのユニットは同じ0.98だが、イ
ヌのユニットは発火しておらず、ネ
コである可能性が高い状態
小さい
基本的なモデル構成のイメージ
14
活性化関数は
ReLUやsigmoidなど 活性化関数は
sigmoid
中間層
(隠れ層)
Softmax層
入力層
出力層
・・・
中間層は1層以上
𝑥1
𝑥2
𝑥3
⋮
𝑥 𝑛−1
𝑥 𝑛
𝑦1
𝑦2
𝑦3
⋮
𝑦 𝑁−1
𝑦 𝑁
各次元毎に
N(0,1)に調整し
た特徴ベクトル
𝑦′1
𝑦′2
𝑦′3
⋮
𝑦′ 𝑁−1
𝑦′ 𝑁
෍
𝑗=1
𝑁
𝑦′ 𝑗 = 1.0
* 𝑁は識別したいクラス
の数でもあり、出力層
のユニット数 に等しい。
Kerasでは、損失関数(目的関数)に
binary_crossentropyか
categorical_crossentropyを使う
• 出力の誤差を定義するのが損失関数
• binary_crossentropy
• 正解のベクトルに含まれる1と0を学習に使う
• categorical_crossentropy
• 正解のベクトルに含まれる1だけを学習に使う
• ∴Softmax層とセットで使う
• 一般的には、categorical_crossentropyが使われる
• とはいえ、性能の良い方を使えば良い
15
クラス間データ量のバランスを取る
16
クラス
イヌ
イヌ
イヌ
イヌ
ネコ
←こんな教師データを1通り学習すると、”イヌ”は5回
学習されるが、”ネコ”は1回しか学習に使われない。
学習の過程で、本当は”ネコ”だけど”イヌ”と間違えて
も全体の誤差は少ない。”ネコ”は1/5の重みしかない。
極端な例で言うと、”イヌ”のデータ100万個と”ネコ”のデータ1万個を
含む教師データの学習では、何を入力しても”イヌ”と答えても精度
99%を達成できる。これでは”ネコ”と”イヌ”を分類できなくてダメ。
クラスの識別能力を高めるには、学習データ内の各クラス
の数を同数にするか、学習時の重みを調整する。
17
な、長かった・・・・・
18
ようやく、NNでシングルラベル分類問題に
取り組むための前提知識をインプットできた
それではお馴染みのIrisを分類するサンプルコードを眺めてみよう
Kerasを使ったIrisの分類例
19
アヤメ(Iris)の分類問題
20
Iris versicolorIris setosa Iris versinica
3種類の花の種類を自動的に識別したい
Irisの4つの特徴量
• ガク片の長さと幅
• 花弁の長さと幅
21
https://www.kamikochi-vc.or.jp/learn/dictionary/dic_plants.html
特徴量の散布図行列
花の種類毎(層別)に色を付けた散布図行列
setosaは完全に集団から独立しており、識別しやすそうだ。 22
サンプルプログラムのダウンロード
23
1
2
Download:
https://github.com/KatsuhiroMorishita/machine_leaning_samples
24
• 以降のスライドでは、下記のプログラムを使った解説を行います
• Irisの識別を行うサンプルです
iris_learning_str_label.csv
• 教師データのCSVファイル
• 正解は文字列のラベルで与えてある
25
iris_learning_num_label.csv
• 教師データのCSVファイル
• 正解は整数で与えてある
• 注:Excelで編集したときに数値が丸まったorz
26
iris_test.csv
• 検証用の正解が付属していない未知データのCSVファイル
27
learning.py
• 教師データを学習するプログラム(スクリプト)
• 教師データを学習データと検証データに自動的に分割
• 結果は教師データに含まれる正解ラベルに自動変換
28
200行もあって結構複雑→
29
データの読み込み
予測結果をラベルに変換する辞書を作成
クラス毎の重みを計算
モデルを構築
学習の実行
検証用のデータの予測
検証用のデータの予測結果の保存
学習器の学習済み結合係数や
モデル情報の保存
learning.pyのmain()だけ
カスタマイズする際の調整項目
30
読み込むファイル名
学習回数やバッチサイズ
モデル構造(飛んで行った先
の関数の記述を編集)
中間層の数
(活性化関数の指定を忘れないように)
中間層のユニット数
学習係数
活性化関数は
ReLU
活性化関数は
sigmoid
モデル構造
31
ユニット数
input_dim
ユニット数3
ユニット数
output_dim
中間層
(隠れ層)
Softmax層
入力層
Layer 0 Layer 1
Layer 3
出力層
Layer 2
実行時に出力されるもの
32
学習に使ったデータと検証用のデー
タに対するlossのepoch毎の変化
コンソールに表示された、検証デー
タを使って作成された分割表
(上は数、下は割合)
この例では、2つのversicolorを
virginicaに誤って分類している。
ファイルにも保存されている
上から、モデルデータ,結合係数,正
規化用のパラメータ(平均と標準偏
差),ラベル変換用の辞書データ
prediction.py
• 未知データの属するクラスを推定するプログラム
• 取り込むファイルは正解が付属していないことを想定
• 結果はprediction_rexult.csvに出力
33
34
prediction.py
データの読み込み
モデル情報の読み込み
結合係数の読み込み
予測結果をラベルに変
換する辞書の読み込み
予測と結果の保存
prediction.pyの実行結果
• 予測結果はprediction_result.csvに出力される
35
出力例
36
予測結果をラベルに変換したりクラス間の重みを計算するなど
の周辺機能のせいでプログラムが膨れてしまった。
このスライドでは、ニューラルネットワーク(NN)で識別問題を扱
う上での複雑さが際立ったように思う。Scikit-learn内のランダム
フォレスト(RF)のシンプルさが目に染みる・・・。
だが、NNにはRFにはできない画像の識別がある。
次は画像の識別について見てみよう。
あ、その前にマルチラベル分類問題だった。。。
37

Mais conteúdo relacionado

Mais de Katsuhiro Morishita

Mais de Katsuhiro Morishita (20)

Excelでのグラフの作成方法re
Excelでのグラフの作成方法reExcelでのグラフの作成方法re
Excelでのグラフの作成方法re
 
Pythonのmain関数
Pythonのmain関数Pythonのmain関数
Pythonのmain関数
 
Pythonスクリプトの実行方法@2018
Pythonスクリプトの実行方法@2018Pythonスクリプトの実行方法@2018
Pythonスクリプトの実行方法@2018
 
機械学習と主成分分析
機械学習と主成分分析機械学習と主成分分析
機械学習と主成分分析
 
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
Pythonで始めた数値計算の授業@わんくま勉強会2018-04Pythonで始めた数値計算の授業@わんくま勉強会2018-04
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
 
マークシート読み込みプログラムを作ってみた@2018-04-04
マークシート読み込みプログラムを作ってみた@2018-04-04マークシート読み込みプログラムを作ってみた@2018-04-04
マークシート読み込みプログラムを作ってみた@2018-04-04
 
オトナの画像認識 2018年3月21日実施
オトナの画像認識 2018年3月21日実施オトナの画像認識 2018年3月21日実施
オトナの画像認識 2018年3月21日実施
 
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
 
シリーズML-03 ランダムフォレストによる自動識別
シリーズML-03 ランダムフォレストによる自動識別シリーズML-03 ランダムフォレストによる自動識別
シリーズML-03 ランダムフォレストによる自動識別
 
シリーズML-01 機械学習の概要
シリーズML-01 機械学習の概要シリーズML-01 機械学習の概要
シリーズML-01 機械学習の概要
 
Pandas利用上のエラーとその対策
Pandas利用上のエラーとその対策Pandas利用上のエラーとその対策
Pandas利用上のエラーとその対策
 
Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成
Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成
Pythonによる、デジタル通信のための ビタビ符号化・復号ライブラリの作成
 
機械学習(仮)in Mobile conference 2017
機械学習(仮)in Mobile conference 2017機械学習(仮)in Mobile conference 2017
機械学習(仮)in Mobile conference 2017
 
VBAとPythonで始める数値計算教育
VBAとPythonで始める数値計算教育VBAとPythonで始める数値計算教育
VBAとPythonで始める数値計算教育
 
海洋調査用ブイの水深制御のためのPID制御パラメータの求め方
海洋調査用ブイの水深制御のためのPID制御パラメータの求め方海洋調査用ブイの水深制御のためのPID制御パラメータの求め方
海洋調査用ブイの水深制御のためのPID制御パラメータの求め方
 
中心極限定理
中心極限定理中心極限定理
中心極限定理
 
VBAにおける配列の データ構造と行列
VBAにおける配列の データ構造と行列VBAにおける配列の データ構造と行列
VBAにおける配列の データ構造と行列
 
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
 
VBAで数値計算 編集後記
VBAで数値計算 編集後記VBAで数値計算 編集後記
VBAで数値計算 編集後記
 
VBAで数値計算 10 逆行列と疑似逆行列
VBAで数値計算 10 逆行列と疑似逆行列VBAで数値計算 10 逆行列と疑似逆行列
VBAで数値計算 10 逆行列と疑似逆行列
 

シリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルー