Successfully reported this slideshow.                                Upcoming SlideShare
×

# 線形？非線形？

9,656 views

Published on

モデルの表現力は確かに非線形版の方が高い。 が、トレードオフとして必要なデータ量も多い。

Published in: Education
• Full Name
Comment goes here.

Are you sure you want to Yes No Are you sure you want to  Yes  No

Are you sure you want to  Yes  No

Are you sure you want to  Yes  No

Are you sure you want to  Yes  No

Are you sure you want to  Yes  No

### 線形？非線形？

1. 1. 線形？非線形？ 2016-11-09 サイボウズラボ 西尾泰和 ver. 2 2016-12-05 末尾に加筆
2. 2. このスライドの目的 機械学習に関して「線形な学習機より非線形な学 習機の方がよい」という誤解が根強い。 モデルの表現力は確かに非線形版の方が高い。 が、トレードオフとして必要なデータ量も多い。 実際に少ないデータ量で非線形版を使うと何が起 こるのか回帰を題材に実験して確認する。 2
3. 3. 参考 データが10万件なければ線形版、あってもまずは線形版を 試してうまく行かない場合だけ非線形版、という提案 3 http://peekaboo-vision.blogspot.jp/2013/01/machine-learning-cheat-sheet-for-scikit.html
4. 4. 学習モデル 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
5. 5. 実験の概要 学習データを生成し、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
6. 6. 性能の測り方 性能は回帰の評価によく使われる R2 決定係数で 測った。完全に正解した時は 1.0、常にYの平均 値を返した時に 0.0 になる大きい方が良い値。 負の値になるのは「平均を返す方がマシ」という 酷い状態で、以下では赤字で表示する。 6
7. 7. データ分布の概要 入力XはD次元の標準正規分布に従う。サンプル 数はN件。 予測すべき真の値は sum(X) で、 これに正規分布に従うノイズが乗ったものを 観測された正解データYとする。 ノイズの標準偏差はS。 7
8. 8. 結果考察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)
9. 9. 結果考察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)
10. 10. 結果考察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)
11. 11. 結果考察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)
12. 12. ここまでのまとめ 全般的にSGDがよい(1件GPRが勝ったのは謎) SVRはSGDと同程度の性能を出すのに3～10倍の データ量が必要。 GPRは高次元になった時の性能劣化が激しい。 なお、ノイズが強い(S=3.0)時も傾向は同じなの で説明を割愛する。 12
13. 13. 結果考察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)
14. 14. 結果考察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)
15. 15. ここまでのまとめ ノイズが少なくて入力の次元が小さいときには GPRがSGDを上回る性能を出す。D=10でN=30の 時にGPRが勝つのはS=1.0の時にも観測された結 果ので、これくらいの規模の問題はGPRが有利な のかも。ただ、スムージングパラメータ nugget=0.001が適当かどうか本当はパラメータ を変えて繰り返し実験すべき。 次元が大きくなるとSGDが安定して強い。 15
16. 16. まとめ 同じデータ量ならSGDが強い。GPRが意外と有効 なケースもある。SVRはデータが3～10倍くらい あればSGDに並ぶ。 データ量が少なくて「非線形な関係もあるかも」 という状況ならまずは線形でやってみるのがよさ そう。 16
17. 17. 以下付録 17
18. 18. 真の関数 今回の実験では、回帰したい真の関数が sumという線形な関数なのでSGDに有利。 「X1とX2がともに大きいときだけYが大きくな る」のような非線形な項がたくさんあるとSGDが 不利になってくるだろう。 そういう場合は「X1とX2がともに大きい」を入 力に追加すればいい。線形学習機は学習後に係数 を観察することでどの特徴量がどれくらいの重み で効いているのか観察できるのが長所。 18
19. 19. 線形学習機の力 線形学習機は複雑な課題に使えないという誤解が あるかもしれないが、単語の分かち書きみたいな 複雑そうな課題でも十分な性能を出している * 。 新しい手法に比べて歴史が長いので、各種ライブ ラリの高速化が進んでいるのも長所の一つ。 19 * http://www.phontron.com/kytea/index-ja.html
20. 20. publication bias コンペや機械学習の手法に関する論文で使われる 既存データセットは、そもそも線形学習機で解き にくいことを確認済みのものが用いられているの で「線形で十分」と目にすることが少ない。 機械学習を新規データセットに使った応用系の論 文は、手段ではなく結果の有用性の方にフォーカ スされがち。 枯れた手法より目新しい手法の方が話題になって SNSでシェアされやすい。などなど枯れた手法に 不利なバイアスが強いのではないだろうか……。 20
21. 21. テストデータ 今回の実験では、テストで1000件を10回、 つまり10000件のデータをテストに使っている。 実問題では貴重な学習データの一部をテストに回 すことになる。データが乏しいと今回の実験より も結果の分散が大きくなって「改善したのかどう かよくわからない」「どちらの手法が良いのかよ くわからない」という事態が多くなる。その意味 でも「データが少ないならまずは線形」がよいと 思う。 21
22. 22. 加筆(2016-12-05) 「線形/非線形」について 非線形な問題について Feature Engineereingについて SGDがGPRに負ける謎の解明 22
23. 23. 線形/非線形について Q: そもそも「モデルが線形かどうか」を 意識していない人が多いのでは A: 確かに。線形かどうかより下記が重要： • モデルがシンプルで振る舞いを理解できる • 少ないデータ量でまともな学習をする • 学習結果を人間が観察できる 線形回帰はこの条件を満たしているので データが少ない状況で試行錯誤する際に 適している。 23 タイトルの選択はミスったかも
24. 24. 非線形な問題について Q: この実験は真の関数が線形で、線形モデルが 良い性能を出す、という結果だった。真の関数が 非線形の場合は非線形が勝つのでは。 A: もちろんその可能性はある。例えば手書き文 字認識を各ピクセルを入力として線形識別しても 良い成果が出ないはず。 * 「線形モデルでどの程度表現できるか」は問題依 存なので、読者のみなさんが自分のデータで試し てみると良いと思う。まずは線形を試して、それ から非線形で精度が向上するのかどうかを実験す るイメージ。 24 * これもどれくらいのデータでどの程度の精度になるのか実験すると面白そう
25. 25. 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/
26. 26. SGDがGPRに負ける謎 まずお詫びと訂正 この図のここの分岐を「データが100Kなければ 線形な方法で」と紹介したけど、これは誤読で、 「データが100K超えてたら、SGDぐらいしか現 実的な速度で動かないよ」 という趣旨でした。 26
27. 27. SGD Regressor SGD Regressorと普通の線形回帰*の違い： 普通の線形回帰はデータ全部を使って最適化問題 を解くが、SGD Regressorは「データが多すぎて 全部一度には無理」という状況を想定して、ラン ダムにデータを選んで逐次的に最適化する。 これは選ばれた順による影響がある。最後のデー タにより強く影響される。 27 * sklearn.linear_model.LinearRegression
28. 28. 仮説 データが少ないときにSGD RegressorがGPRに負 けたのは、データが少ないことによってSGDの 「データ順の影響」のデメリットが強く出てし まったからではないか？ 検証実験： データ全体を使う線形回帰(以下LIN)を追加 28 コードと結果はこちら： https://github.com/nishio/linear/commit/64dff8f715a585fcaff856488351ce8c2cad5e34 Linear Regressorの頭文字を取るとLRだけど、 これはLogistic Regressionを指すことが多いから避けた
29. 29. 結果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
30. 30. 結果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)
31. 31. 結果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
32. 32. まとめ 今回の問題設定に関しては全データを使った線形 回帰が圧倒的に強い。 ただしD ≧ N の状況では使えない。線形SVRはこ の状況でも悪くない性能を出した。 非線形なGPRがSGDに勝つことがあるが、これは SGDがデータの少ない状況に弱いだけだった。今 回の問題設定ではGPRやSVRに良いところはない 緩募：よさげな非線形データセット 32