More Related Content Similar to それっぽく感じる機械学習 (20) それっぽく感じる機械学習1. ~ 第5回 サトヤ勉強会 ~
それっぽく感じる機械学習
五十嵐 祐貴(いがらし ゆうき) @bonprosoft
Microsoft MVP
サトヤ仙台
2. 自己紹介
• 五十嵐 祐貴 ( @bonprosoft )
• Microsoft MVPfor Visual Studio and Development Technologies
• Microsoft Student Partners Fellow
• サトヤ仙台 代表
• 他
o 東北大学工学部電気情報工学科 4年(4月から)
27. シシトウ分類問題
0 40 80 120 160
辛さ
種の数
(90, 3)
(40, 2) (60, 2)
(20, 1) (70, 1)
(100, 2)
(120, 1)
(120, 3)
27
右側は修正方法が
気になる人向け
分離平面の修正方法①
・問題定義
線形識別関数の一般系を定義
・入力 𝑥 = (𝑥1, 𝑥2, … , 𝑥 𝑛)
・関数
・出力 y =
+1 (𝐹 𝑥 > 0)
−1 (𝐹 𝑥 < 0)
重みベクトル𝒘 = (𝒘 𝟎, 𝒘 𝟏, … , 𝒘 𝒏)
を求めたい!
𝐹 𝑥 = 𝑤0 + 𝒘 ⋅ 𝒙
= 𝑤0 + 𝑤1 𝑥1 + ⋯ + 𝑤 𝑛 𝑥 𝑛
28. シシトウ分類問題
0 40 80 120 160
辛さ
種の数
(90, 3)
(40, 2) (60, 2)
(20, 1) (70, 1)
(100, 2)
(120, 1)
(120, 3)
28
右側は修正方法が
気になる人向け
分離平面の修正方法②
・方針
すべての訓練データについて出
力と正解が一致するようにする
・アルゴリズム
ランダムに訓練データ𝑥 𝑖
を取得
正解が正、予測が負の場合:
𝑤 ≔ 𝑤 + 𝑥 𝑖 で更新
正解が負、予測が正の場合:
𝑤 ≔ 𝑤 − 𝑥 𝑖 で更新
𝑤の値が収束するまで繰り返す
29. シシトウ分類問題
0 40 80 120 160
辛さ
種の数
(90, 3)
(40, 2) (60, 2)
(20, 1) (70, 1)
(100, 2)
(120, 1)
(120, 3)
29
右側は修正方法が
気になる人向け
分離平面の修正方法③
・なぜ学習可能か
例えば正例の場合は
のように重みを更新できるた
め。
単純パーセプトロン[ローゼンブラッド, 1957]
𝑤′
⋅ 𝑥 𝑖
= 𝑤 + 𝑥 𝑖
⋅ 𝑥 𝑖
= 𝑤 ⋅ 𝑥 𝑖
+ 𝑥 𝑖
⋅ 𝑥 𝑖
> 𝑤 ⋅ 𝑥 𝑖
33. 33
さまざまな機械学習
• 教師あり学習
o 分類問題: 入力から対応するラベルを求める
o 回帰問題: 入力から対応する値を求める
など…
• 教師なし学習
o クラスタリング:入力から共通の特徴を持つような部分集合を出力する
o 異常検出: データ中の特徴的な点を検出する
など…
35. 35
線形分類
「入力ベクトルに対応する出力ラベルを学習」
o シシトウ問題: (種の数, 匂い)⇒ (辛いか否か)
例: (90, 3)→ +1, (110, 2)→ -1
• 評価尺度:損失関数(小さいほうが良い)
o しきい値関数 r 𝑥𝑖, 𝑦𝑖 =
0 𝑦𝑖 𝑥𝑖 > 0
1 𝑦𝑖 𝑥𝑖 < 0
単純パーセプトロン
o ヒンジ関数 r 𝑥𝑖, 𝑦𝑖 = max(0, 1 − 𝑦𝑖 𝑥𝑖) SVM
など、様々な関数を用いて損失関数を構築
36. 36
SVMのメリットと評価尺度のイメージ
• 評価尺度のイメージ
o しきい値関数: 不正解の数
o ヒンジ関数: 不正解・正解の信頼度
SVMと とは何も関係がないです
0 40 80 120 160
しきい値関数:分類できればおk
0 40 80 120 160
ヒンジ関数:
なるべく安定して分類できるよう
分離平面を調整
マージン最大化
SVM
検出器がミス
画像は https://en.wikipedia.org/wiki/Hinge_loss より
38. 38
線形回帰とロジスティック回帰
• 線形回帰
o 値は無制限 ⇒ 数量予測などに利用
• ロジスティック回帰
o 値が0~1に収束 ⇒ 確率予測などに利用
最小二乗法 ロジスティック回帰(sigmoid関数)
ロジスティック回帰の出力にしきい値を設定して、
しきい値関数を適用すれば分類問題とも言えるね!
画像は http://www2.my-pharm.ac.jp/~info1/info_p07/kadai4/kadaix/exe_x_leastsq.htm より 画像は http://tikalon.com/blog/blog.php?article=2011/sigmoid より
44. 44
非線形分離問題の解決策
• 学習に向けたアプローチ
o カーネルを使う
既存の値と相関のある新しい次元を作り出す
例:多変数関数の適用、組み合わせなど
𝑧 = 𝑥 ⋅ 𝑦を導入すると…
o 非線形なモデルを使う
画像出典: https://github.com/levelfour/machine-learning-
2014/wiki/%E7%AC%AC3%E5%9B%9E---
%E5%A4%9A%E5%B1%A4%E3%83%91%E3%83%BC%E3%82%BB%E3%83%97%
E3%83%88%E3%83%AD%E3%83%B3
45. 45
非線形分離問題の解決策
• 学習に向けたアプローチ
o カーネルを使う
既存の値と相関のある新しい次元を作り出す
例:多変数関数の適用、組み合わせなど
𝑧 = 𝑥 ⋅ 𝑦を導入すると…
o 非線形なモデルを使う
画像出典: https://github.com/levelfour/machine-learning-
2014/wiki/%E7%AC%AC3%E5%9B%9E---
%E5%A4%9A%E5%B1%A4%E3%83%91%E3%83%BC%E3%82%BB%E3%83%97%
E3%83%88%E3%83%AD%E3%83%B3
46. 46
非線形分離問題の解決策
• 学習に向けたアプローチ
o カーネルを使う
既存の値と相関のある新しい次元を作り出す
例:多変数関数の適用、組み合わせなど
𝑧 = 𝑥 ⋅ 𝑦を導入すると…
o 非線形なモデルを使う
画像出典: https://github.com/levelfour/machine-learning-
2014/wiki/%E7%AC%AC3%E5%9B%9E---
%E5%A4%9A%E5%B1%A4%E3%83%91%E3%83%BC%E3%82%BB%E3%83%97%
E3%83%88%E3%83%AD%E3%83%B3
52. 52
クラスタリング
「入力ベクトルを外部基準なしに自動で分類」
o 例
入力: {7, 75, 3, 90, 68, 5, 92}, K=3
出力: {{3, 5, 7}, {68, 75}, {90, 92}}
• 主な手法
o 階層的クラスタリング
クラスタ間の類似度をもってマージ
結果が階層構造(トーナメントグラフのような感じ)
o 非階層的クラスタリング
割と大ざっぱに指定された個数に分割
結果は階層構造にはならない
66. 66
職業分析・性別分析における入力
• 入力に用いる素性(特徴)は非常に重要
o Bag of Words 単語をそのまま入れる
o Polarity classifier ポジティブ・ネガティブなどの分析結果
など…
• その重み(特徴量)も重要
o 含まれていた数(各要素の値は1)
o Tf-Idf(トピック依存度)やPMI(共起頻度)を考慮したスコア
• ↑を自動で獲得する仕組みとしてword2vecが提案
o 業界全体がかなり注目
73. CNN (Convolutional Neural Network)
73
重み(フィルタ)𝑤を学習 特徴のあるものだけを残す
画像は http://systemdesign.altera.com/can-you-see-using-convolutional-neural-networks/ より
74. 74
特徴抽出
• 自然言語処理
o 形態素解析: 「笑う」「ご飯」など意味を持つ最小単位
• 画像処理
o 1画素は0~255を取りうる離散値
o 画素ごとではなく一定領域をまとめて考える
ヒストグラム
– SIFT、LBPなど
フィルタ
– 微分フィルタ、ラプラシアンフィルタなど
76. • [0,2]で40km進んだ
• [0,1]で20km進んだ
• [0, 0.5]で10km進んだ
76
微分の直感的説明
0
10
20
30
40
0 0.5 1 1.5 2
距離[km]
時間 [h]
20km/h
20km/h
20km/h
• [0,2]で40km進んだ
• [0,1]で30km進んだ
• [0, 0.5]で20km進んだ
0
10
20
30
40
0 0.5 1 1.5 2
距離[km]
時間 [h]
20km/h
30km/h
40km/h
77. • [0,2]で40km進んだ
• [0,1]で20km進んだ
• [0, 0.5]で10km進んだ
77
微分の直感的説明
0
10
20
30
40
0 0.5 1 1.5 2
距離[km]
時間 [h]
20km/h
20km/h
20km/h
• [0,2]で40km進んだ
• [0,1]で30km進んだ
• [0, 0.5]で20km進んだ
0
10
20
30
40
0 0.5 1 1.5 2
距離[km]
時間 [h]
20km/h
30km/h
40km/h
𝑣 =
𝑓 𝑥 + ℎ − 𝑓(𝑥)
ℎ
78. • [0,2]で40km進んだ
• [0,1]で20km進んだ
• [0, 0.5]で10km進んだ
78
微分の直感的説明
0
10
20
30
40
0 0.5 1 1.5 2
距離[km]
時間 [h]
20km/h
20km/h
20km/h
• [0,2]で40km進んだ
• [0,1]で30km進んだ
• [0, 0.5]で20km進んだ
0
10
20
30
40
0 0.5 1 1.5 2
距離[km]
時間 [h]
20km/h
30km/h
40km/h
𝑣 = lim
ℎ→0
𝑓 𝑥 + ℎ − 𝑓(𝑥)
ℎ
81. 81
微分の直感的説明
0
10
20
30
40
0 0.5 1 1.5 2
輝度の変化[km/h]
時間 [h]
0
10
20
30
40
0 0.5 1 1.5 2
輝度の変化[km/h]
時間 [h]
𝑓′ 𝑥 =
𝑓 𝑥 + 1 − 𝑓 𝑥
1
変化量(直線の傾き)の推移を求める
20 40 60 80 20 60 60 80
82. 82
微分の直感的説明
0
10
20
30
40
0 0.5 1 1.5 2
輝度の変化[km/h]
時間 [h]
0
10
20
30
40
0 0.5 1 1.5 2
輝度の変化[km/h]
時間 [h]
𝑟 𝑥 =
𝑓 𝑥 + 1 − 𝑓 𝑥
1
+
𝑓 𝑥 − 𝑓(𝑥 − 1)
1
= 𝑓 𝑥 + 1 − 𝑓(𝑥 − 1)
変化量(直線の傾き)の推移を求める
20 40 60 80 20 60 60 80
-1 0 1
83. 83
微分の直感的説明
𝑟 𝑥 =
𝑓 𝑥 + 1 − 𝑓 𝑥
1
+
𝑓 𝑥 − 𝑓(𝑥 − 1)
1
= 𝑓 𝑥 + 1 − 𝑓(𝑥 − 1)
変化量(直線の傾き)の推移を求める
0 20 40 60 80 0 20 60 60 80
20 40 40 40 20 20 60 40 20 20
-1 0 1
84. 84
微分の直感的説明
𝑟 𝑥, 𝑦 = 𝑓 𝑥 + 1, 𝑦 + 1 + 𝑓 𝑥 + 1, 𝑦 + 𝑓 𝑥 + 1, 𝑦 − 1
−𝑓 𝑥 − 1, 𝑦 + 1 − 𝑓 𝑥 − 1, 𝑦 − 𝑓(𝑥 − 1, 𝑦 − 1)
変化量(直線の傾き)の推移を求める
0 20 40 60 80 0 20 60 60 80
-1 0 1
-1 0 1
-1 0 1
20 40 40 40 20 20 60 40 20 20
86. • 元画像 • 処理後
86
Prewittフィルタ
画像は http://www.mis.med.akita-u.ac.jp/~kata/image/sobelprew.html より
87. CNN (Convolutional Neural Network)
87
重み(フィルタ)𝑤を学習
分類を学習特徴抽出を学習
特徴のあるものだけを残す
画像は http://systemdesign.altera.com/can-you-see-using-convolutional-neural-networks/ より