SlideShare a Scribd company logo
1 of 32
Download to read offline
線形?非線形?
2016-11-09
サイボウズラボ 西尾泰和
ver. 2 2016-12-05 末尾に加筆
このスライドの目的
機械学習に関して「線形な学習機より非線形な学
習機の方がよい」という誤解が根強い。
モデルの表現力は確かに非線形版の方が高い。
が、トレードオフとして必要なデータ量も多い。
実際に少ないデータ量で非線形版を使うと何が起
こるのか回帰を題材に実験して確認する。
2
参考
データが10万件なければ線形版、あってもまずは線形版を
試してうまく行かない場合だけ非線形版、という提案
3
http://peekaboo-vision.blogspot.jp/2013/01/machine-learning-cheat-sheet-for-scikit.html
学習モデル
SGD Regressor: 与えられた損失関数を確率的勾
配降下法(SGD)で最小化する。デフォルトの二乗
誤差の最小化を使った。線形モデル。以下SGD
SVR: Support Vector Regression。性能を出すた
めにカーネル選択やパラメータの調整が必要 * だ
が今回はデフォルト値で使った。非線形。
GPR: Gaussian Process Regression。デフォルト
ではノイズにover fitして比較対象にすらならな
いのでnugget=0.001した。非線形。
4
* http://www.slideshare.net/sleepy_yoshi/svm-13435949
実験の概要
学習データを生成し、SGD、SVR、GPRの3つを
学習。別途生成した1000件のデータで性能を測
り、10回繰り返して平均と2SDを表示する。
5
ソースはこちら: https://github.com/nishio/linear/blob/master/t.py
実験結果はこちら: https://github.com/nishio/linear/blob/master/result3.txt
性能の測り方
性能は回帰の評価によく使われる R2
決定係数で
測った。完全に正解した時は 1.0、常にYの平均
値を返した時に 0.0 になる大きい方が良い値。
負の値になるのは「平均を返す方がマシ」という
酷い状態で、以下では赤字で表示する。
6
データ分布の概要
入力XはD次元の標準正規分布に従う。サンプル
数はN件。
予測すべき真の値は sum(X) で、
これに正規分布に従うノイズが乗ったものを
観測された正解データYとする。
ノイズの標準偏差はS。
7
結果考察1
入力が3次元の時、データ数30~1000のいずれで
もSGDが一番性能が良い。
SVRはデータが増えるにしたがって徐々に良くな
るが、N=300の時の性能がSGDのN=100の時の性
能と同程度。
8
N=30 D=3 S=1.0
SGD 0.80(+-0.01), SVR 0.74(+-0.04), GPR -1.96(+-0.64)
N=100 D=3 S=1.0
SGD 0.91(+-0.01), SVR 0.76(+-0.02), GPR -0.35(+-0.35)
N=300 D=3 S=1.0
SGD 1.00(+-0.00), SVR 0.91(+-0.02), GPR 0.85(+-0.08)
N=1000 D=3 S=1.0
SGD 1.00(+-0.00), SVR 0.96(+-0.01), GPR 0.94(+-0.02)
結果考察2
入力が10次元でも、SVRがSGDと同程度の性能に
なるには3倍程度のデータ量が必要という傾向は
同じ。
N=30の際にGPRがSGDに勝っている。興味深い。
9
N=30 D=10 S=1.0
SGD 0.66(+-0.01), SVR 0.20(+-0.04), GPR 0.75(+-0.02)
N=100 D=10 S=1.0
SGD 0.86(+-0.00), SVR 0.65(+-0.01), GPR 0.77(+-0.01)
N=300 D=10 S=1.0
SGD 0.99(+-0.00), SVR 0.83(+-0.02), GPR 0.83(+-0.02)
N=1000 D=10 S=1.0
SGD 1.00(+-0.00), SVR 0.90(+-0.01), GPR 0.76(+-0.04)
結果考察3
入力が30次元になると、N=30ではSVRやGPRだ
とスコアがほとんど0、つまり「回帰しないで平
均値を返すのと大差ない」という状態。
SVRはSGDの10倍程度のデータが必要。
10
N=30 D=30 S=1.0
SGD 0.54(+-0.02), SVR 0.06(+-0.01), GPR 0.02(+-0.01)
N=100 D=30 S=1.0
SGD 0.81(+-0.01), SVR 0.20(+-0.01), GPR 0.10(+-0.01)
N=300 D=30 S=1.0
SGD 0.99(+-0.00), SVR 0.57(+-0.02), GPR 0.29(+-0.02)
N=1000 D=30 S=1.0
SGD 1.00(+-0.00), SVR 0.89(+-0.01), GPR 0.59(+-0.02)
結果考察4
入力が100次元だとSVRはN=300でもSGDのN=30
に勝てない。GPRはN=1000まで全滅。
11
N=30 D=100 S=1.0
SGD 0.24(+-0.03), SVR -0.01(+-0.02), GPR -0.05(+-0.03)
N=100 D=100 S=1.0
SGD 0.69(+-0.02), SVR 0.02(+-0.01), GPR -0.01(+-0.01)
N=300 D=100 S=1.0
SGD 0.96(+-0.01), SVR 0.12(+-0.01), GPR -0.01(+-0.01)
N=1000 D=100 S=1.0
SGD 1.00(+-0.00), SVR 0.38(+-0.01), GPR -0.00(+-0.00)
ここまでのまとめ
全般的にSGDがよい(1件GPRが勝ったのは謎)
SVRはSGDと同程度の性能を出すのに3~10倍の
データ量が必要。
GPRは高次元になった時の性能劣化が激しい。
なお、ノイズが強い(S=3.0)時も傾向は同じなの
で説明を割愛する。
12
結果考察5
ノイズが小さい(S=0.1)時、
入力次元が小さいなら、GPRが少ないデータ量で
もよい性能を出しチャンピオンになる。
13
N=30 D=3 S=0.1
SGD 0.65(+-0.01), SVR 0.73(+-0.05), GPR 0.97(+-0.01)
N=100 D=3 S=0.1
SGD 0.93(+-0.01), SVR 0.90(+-0.02), GPR 0.99(+-0.01)
N=300 D=3 S=0.1
SGD 1.00(+-0.00), SVR 0.95(+-0.02), GPR 1.00(+-0.00)
N=1000 D=3 S=0.1
SGD 1.00(+-0.00), SVR 0.99(+-0.01), GPR 1.00(+-0.00)
結果考察6
ただし、GPRはDが増えるとSGDに負ける。
14
N=30 D=10 S=0.1
SGD 0.62(+-0.02), SVR 0.29(+-0.02), GPR 0.68(+-0.03)
N=100 D=10 S=0.1
SGD 0.91(+-0.00), SVR 0.76(+-0.02), GPR 0.83(+-0.02)
N=300 D=10 S=0.1
SGD 1.00(+-0.00), SVR 0.87(+-0.02), GPR 0.94(+-0.01)
N=1000 D=10 S=0.1
SGD 1.00(+-0.00), SVR 0.94(+-0.02), GPR 0.98(+-0.01)
N=30 D=30 S=0.1
SGD 0.44(+-0.03), SVR -0.06(+-0.05), GPR -0.15(+-0.06)
N=100 D=30 S=0.1
SGD 0.93(+-0.01), SVR 0.26(+-0.01), GPR 0.15(+-0.01)
N=300 D=30 S=0.1
SGD 0.99(+-0.00), SVR 0.61(+-0.02), GPR 0.32(+-0.02)
N=1000 D=30 S=0.1
SGD 1.00(+-0.00), SVR 0.91(+-0.01), GPR 0.58(+-0.02)
ここまでのまとめ
ノイズが少なくて入力の次元が小さいときには
GPRがSGDを上回る性能を出す。D=10でN=30の
時にGPRが勝つのはS=1.0の時にも観測された結
果ので、これくらいの規模の問題はGPRが有利な
のかも。ただ、スムージングパラメータ
nugget=0.001が適当かどうか本当はパラメータ
を変えて繰り返し実験すべき。
次元が大きくなるとSGDが安定して強い。
15
まとめ
同じデータ量ならSGDが強い。GPRが意外と有効
なケースもある。SVRはデータが3~10倍くらい
あればSGDに並ぶ。
データ量が少なくて「非線形な関係もあるかも」
という状況ならまずは線形でやってみるのがよさ
そう。
16
以下付録
17
真の関数
今回の実験では、回帰したい真の関数が
sumという線形な関数なのでSGDに有利。
「X1とX2がともに大きいときだけYが大きくな
る」のような非線形な項がたくさんあるとSGDが
不利になってくるだろう。
そういう場合は「X1とX2がともに大きい」を入
力に追加すればいい。線形学習機は学習後に係数
を観察することでどの特徴量がどれくらいの重み
で効いているのか観察できるのが長所。
18
線形学習機の力
線形学習機は複雑な課題に使えないという誤解が
あるかもしれないが、単語の分かち書きみたいな
複雑そうな課題でも十分な性能を出している * 。
新しい手法に比べて歴史が長いので、各種ライブ
ラリの高速化が進んでいるのも長所の一つ。
19
* http://www.phontron.com/kytea/index-ja.html
publication bias
コンペや機械学習の手法に関する論文で使われる
既存データセットは、そもそも線形学習機で解き
にくいことを確認済みのものが用いられているの
で「線形で十分」と目にすることが少ない。
機械学習を新規データセットに使った応用系の論
文は、手段ではなく結果の有用性の方にフォーカ
スされがち。
枯れた手法より目新しい手法の方が話題になって
SNSでシェアされやすい。などなど枯れた手法に
不利なバイアスが強いのではないだろうか……。
20
テストデータ
今回の実験では、テストで1000件を10回、
つまり10000件のデータをテストに使っている。
実問題では貴重な学習データの一部をテストに回
すことになる。データが乏しいと今回の実験より
も結果の分散が大きくなって「改善したのかどう
かよくわからない」「どちらの手法が良いのかよ
くわからない」という事態が多くなる。その意味
でも「データが少ないならまずは線形」がよいと
思う。
21
加筆(2016-12-05)
「線形/非線形」について
非線形な問題について
Feature Engineereingについて
SGDがGPRに負ける謎の解明
22
線形/非線形について
Q: そもそも「モデルが線形かどうか」を
意識していない人が多いのでは
A: 確かに。線形かどうかより下記が重要:
• モデルがシンプルで振る舞いを理解できる
• 少ないデータ量でまともな学習をする
• 学習結果を人間が観察できる
線形回帰はこの条件を満たしているので
データが少ない状況で試行錯誤する際に
適している。
23
タイトルの選択はミスったかも
非線形な問題について
Q: この実験は真の関数が線形で、線形モデルが
良い性能を出す、という結果だった。真の関数が
非線形の場合は非線形が勝つのでは。
A: もちろんその可能性はある。例えば手書き文
字認識を各ピクセルを入力として線形識別しても
良い成果が出ないはず。 *
「線形モデルでどの程度表現できるか」は問題依
存なので、読者のみなさんが自分のデータで試し
てみると良いと思う。まずは線形を試して、それ
から非線形で精度が向上するのかどうかを実験す
るイメージ。
24
* これもどれくらいのデータでどの程度の精度になるのか実験すると面白そう
Feature Engineeringについて
もし「X1とX2がともに大きいときだけYが大きく
なる」という非線形な関係があるかもと思うので
あれば「X1とX2がともに大きい」という特徴量
を入力に追加すれば、線形モデルでもその関係を
扱えるようになる。
この「特徴量の工夫」は「feature engineering」
と呼ばれていて、機械学習のコンペではこれが時
間の大半を占める、という意見がある。優勝者イ
ンタビュー:
>I spent 50% on feature engineering, 40% on
feature selection plus model ensembling, and less
than 10% on model selection and tuning.
25
http://blog.kaggle.com/2015/12/21/rossmann-store-sales-winners-interview-1st-place-gert/
SGDがGPRに負ける謎
まずお詫びと訂正
この図のここの分岐を「データが100Kなければ
線形な方法で」と紹介したけど、これは誤読で、
「データが100K超えてたら、SGDぐらいしか現
実的な速度で動かないよ」
という趣旨でした。
26
SGD Regressor
SGD Regressorと普通の線形回帰*の違い:
普通の線形回帰はデータ全部を使って最適化問題
を解くが、SGD Regressorは「データが多すぎて
全部一度には無理」という状況を想定して、ラン
ダムにデータを選んで逐次的に最適化する。
これは選ばれた順による影響がある。最後のデー
タにより強く影響される。
27
* sklearn.linear_model.LinearRegression
仮説
データが少ないときにSGD RegressorがGPRに負
けたのは、データが少ないことによってSGDの
「データ順の影響」のデメリットが強く出てし
まったからではないか?
検証実験:
データ全体を使う線形回帰(以下LIN)を追加
28
コードと結果はこちら:
https://github.com/nishio/linear/commit/64dff8f715a585fcaff856488351ce8c2cad5e34
Linear Regressorの頭文字を取るとLRだけど、
これはLogistic Regressionを指すことが多いから避けた
結果1
前回GPRが強かったノイズ少なめの問題設定で
普通の線形回帰(LIN)はN=30でもスコア1.00。
(余談: 線形SVR*も同様の結果)
データ量の少ないときにSGDの性能が悪いだけ。
29
N=30 D=3 S=0.1
LIN 1.00(+-0.00), SGD 0.62(+-0.01), SVR 0.74(+-0.02), LSVR 1.00(+-0.00) GPR 0.95(+-0.01)
N=100 D=3 S=0.1
LIN 1.00(+-0.00), SGD 0.95(+-0.00), SVR 0.90(+-0.02), LSVR 1.00(+-0.00) GPR 1.00(+-0.00)
N=300 D=3 S=0.1
LIN 1.00(+-0.00), SGD 1.00(+-0.00), SVR 0.96(+-0.02), LSVR 1.00(+-0.00) GPR 1.00(+-0.00)
N=1000 D=3 S=0.1
LIN 1.00(+-0.00), SGD 1.00(+-0.00), SVR 0.98(+-0.01), LSVR 1.00(+-0.00) GPR 1.00(+-0.00)
* sklearn.svm.LinearSVR
結果2
普通の線形回帰はだいたいどのシチュエーション
でも一番性能が良い。(例外は次ページ)
今回の問題設定ではN=30の時の普通の線形回帰
の性能にSVRやGPRはN=1000でも追いつけない。
30
N=30 D=10 S=1.0
LIN 0.92(+-0.01), SGD 0.60(+-0.02), SVR 0.30(+-0.02), LSVR 0.87(+-0.02) GPR 0.72(+-0.03)
N=100 D=10 S=1.0
LIN 0.99(+-0.00), SGD 0.95(+-0.00), SVR 0.71(+-0.02), LSVR 0.99(+-0.00) GPR 0.77(+-0.03)
N=300 D=10 S=1.0
LIN 1.00(+-0.00), SGD 0.99(+-0.00), SVR 0.82(+-0.01), LSVR 0.99(+-0.00) GPR 0.82(+-0.01)
N=1000 D=10 S=1.0
LIN 1.00(+-0.00), SGD 1.00(+-0.00), SVR 0.90(+-0.02), LSVR 1.00(+-0.00) GPR 0.77(+-0.03)
結果3
普通の線形回帰の性能が悪いのは D ≧ N の時。
D次元の係数を決定するのにデータが足りない。
一方、そういうシチュエーションでも線形SVRは
悪くない性能を出している。
31
N=30 D=30 S=1.0
LIN 0.02(+-0.13), SGD 0.67(+-0.02), SVR 0.09(+-0.00), LSVR 0.79(+-0.03) GPR 0.04(+-0.01)
N=30 D=100 S=1.0
LIN 0.15(+-0.04), SGD 0.22(+-0.04), SVR -0.18(+-0.03), LSVR 0.23(+-0.04) GPR -0.08(+-0.02
N=100 D=100 S=1.0
LIN -19.66(+-2.39), SGD 0.71(+-0.02), SVR 0.03(+-0.02), LSVR 0.87(+-0.01) GPR -0.01(+-0.0
まとめ
今回の問題設定に関しては全データを使った線形
回帰が圧倒的に強い。
ただしD ≧ N の状況では使えない。線形SVRはこ
の状況でも悪くない性能を出した。
非線形なGPRがSGDに勝つことがあるが、これは
SGDがデータの少ない状況に弱いだけだった。今
回の問題設定ではGPRやSVRに良いところはない
緩募:よさげな非線形データセット
32

More Related Content

What's hot

変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
Shuyo Nakatani
 

What's hot (20)

機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)機械学習による統計的実験計画(ベイズ最適化を中心に)
機械学習による統計的実験計画(ベイズ最適化を中心に)
 
PRML輪読#1
PRML輪読#1PRML輪読#1
PRML輪読#1
 
ブースティング入門
ブースティング入門ブースティング入門
ブースティング入門
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 
数学で解き明かす深層学習の原理
数学で解き明かす深層学習の原理数学で解き明かす深層学習の原理
数学で解き明かす深層学習の原理
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向最適輸送の計算アルゴリズムの研究動向
最適輸送の計算アルゴリズムの研究動向
 
関数データ解析の概要とその方法
関数データ解析の概要とその方法関数データ解析の概要とその方法
関数データ解析の概要とその方法
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
 
Stan超初心者入門
Stan超初心者入門Stan超初心者入門
Stan超初心者入門
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 
[DL輪読会]相互情報量最大化による表現学習
[DL輪読会]相互情報量最大化による表現学習[DL輪読会]相互情報量最大化による表現学習
[DL輪読会]相互情報量最大化による表現学習
 
Hyperoptとその周辺について
Hyperoptとその周辺についてHyperoptとその周辺について
Hyperoptとその周辺について
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定
 
Stanコードの書き方 中級編
Stanコードの書き方 中級編Stanコードの書き方 中級編
Stanコードの書き方 中級編
 
PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門
 
畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向畳み込みニューラルネットワークの研究動向
畳み込みニューラルネットワークの研究動向
 
2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)2014 3 13(テンソル分解の基礎)
2014 3 13(テンソル分解の基礎)
 
猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder猫でも分かるVariational AutoEncoder
猫でも分かるVariational AutoEncoder
 
全力解説!Transformer
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
 

More from nishio

More from nishio (20)

量子アニーリングマシンのプログラミング
量子アニーリングマシンのプログラミング量子アニーリングマシンのプログラミング
量子アニーリングマシンのプログラミング
 
夏プロ報告
夏プロ報告夏プロ報告
夏プロ報告
 
ITと経営
ITと経営ITと経営
ITと経営
 
部分観測モンテカルロ計画法を用いたガイスターAI
部分観測モンテカルロ計画法を用いたガイスターAI部分観測モンテカルロ計画法を用いたガイスターAI
部分観測モンテカルロ計画法を用いたガイスターAI
 
交渉力について
交渉力について交渉力について
交渉力について
 
If文から機械学習への道
If文から機械学習への道If文から機械学習への道
If文から機械学習への道
 
組織横断型研究室構想
組織横断型研究室構想組織横断型研究室構想
組織横断型研究室構想
 
2017首都大学東京情報通信特別講義
2017首都大学東京情報通信特別講義2017首都大学東京情報通信特別講義
2017首都大学東京情報通信特別講義
 
強化学習その5
強化学習その5強化学習その5
強化学習その5
 
良いアイデアを出すための方法
良いアイデアを出すための方法良いアイデアを出すための方法
良いアイデアを出すための方法
 
強化学習その4
強化学習その4強化学習その4
強化学習その4
 
強化学習その3
強化学習その3強化学習その3
強化学習その3
 
強化学習その2
強化学習その2強化学習その2
強化学習その2
 
強化学習その1
強化学習その1強化学習その1
強化学習その1
 
機械学習キャンバス0.1
機械学習キャンバス0.1機械学習キャンバス0.1
機械学習キャンバス0.1
 
首都大学東京「情報通信特別講義」2016年西尾担当分
首都大学東京「情報通信特別講義」2016年西尾担当分首都大学東京「情報通信特別講義」2016年西尾担当分
首都大学東京「情報通信特別講義」2016年西尾担当分
 
勾配降下法の 最適化アルゴリズム
勾配降下法の最適化アルゴリズム勾配降下法の最適化アルゴリズム
勾配降下法の 最適化アルゴリズム
 
Wifiで位置推定
Wifiで位置推定Wifiで位置推定
Wifiで位置推定
 
ESP8266EXで位置推定
ESP8266EXで位置推定ESP8266EXで位置推定
ESP8266EXで位置推定
 
Raspberry Piで Wifiルータを作る
Raspberry PiでWifiルータを作るRaspberry PiでWifiルータを作る
Raspberry Piで Wifiルータを作る
 

線形?非線形?