機械学習の基礎
ロジスティック回帰から言語モデルまで、あらゆるモデルに共通する考え方。教師あり学習と教師なし学習、バイアスと分散のトレードオフ、損失関数、勾配降下法、そして信頼できる評価を解説します。
概要
機械学習とは、プログラムの振る舞いを手で書く代わりに、データに合わせて当てはめる営みです。調整可能なパラメータをもつ関数の族を選び、そのパラメータのある設定が例に対してどれだけ悪いかを採点する損失を選び、損失を押し下げる手続きを選びます。そして、その手続きが一度も見ていないデータで結果を測ります。このレシピは、20点を通る直線でも、数千億パラメータのモデルでも同じです。だからこのハブが最初に置かれています。
大きく分けて3つの設定があります。教師あり学習では、すべての例にラベルがあり、それを予測することを学びます。価格、クラス、次のトークンなどです。教師なし学習にはラベルがなく、構造を探します。クラスタ、低次元への射影、密度などです。自己教師あり学習はその中間に位置し、データ自身からラベルを作り出します。たとえば入力の一部を隠してそれを予測する方法で、言語モデルやほとんどの画像バックボーンはこうして事前学習されています。信号が遅延した報酬である強化学習には専用のハブがあります。
現場のエンジニアにとってこれらの考え方が重要なのは、診断のための語彙だからです。ノートブックでは良好だったモデルが本番では不調なとき、その説明はほぼ必ず次のいずれかです。学習データがデプロイ先のデータと一致していなかった、損失が誰も気にしていない指標だった、モデルの容量が多すぎるか少なすぎた、あるいは評価にリークがあった。いずれもライブラリの問題ではありません。
重要な考え方
学習とは例に対する損失を最小化すること
モデルとはパラメータをもつ関数です。線形モデルならパラメータは重みベクトルとバイアスで、ニューラルネットワークなら何百万もの行列の要素ですが、どちらにせよ問いは同じです。どのパラメータ値なら予測が例と一致するか、です。損失関数は「一致する」を数値に変えます。二乗誤差は回帰に向いています。交差エントロピーは分類に向いています。モデルの出力を確率として扱い、自信をもった誤答を厳しく罰しつつ、どこでも滑らかな勾配を与えるからです。学習は学習セット全体にわたる平均損失を最小化することで、統計学者はこれを経験リスク最小化と呼びます。
損失は代理指標です。交差エントロピーそのものを気にすることはめったになく、本当に気にするのはある閾値での適合率、収益、ユーザーが提案を受け入れるかどうかです。レポートでは代理指標と本当の指標を分けて書き、一方の改善が他方の改善につながっているかを確認してください。
バイアス、分散、汎化
パターンを表現できないモデルはアンダーフィットします。学習誤差も検証誤差も高い状態です。これがバイアスです。学習セットのノイズまで当てはめられるほど柔軟なモデルは過学習(オーバーフィッティング)します。学習誤差は低く、検証誤差は高い状態です。これが分散です。二乗誤差の場合、期待テスト誤差はバイアスの二乗、分散、取り除けないノイズに厳密に分解でき、古典的な描像では容量が増えるにつれて検証曲線がU字を描きます。
この古典的な描像は、現代のネットワークに対しては不完全です。Zhang et al.は2016年に、標準的なネットワークがランダムなラベルを丸暗記できることを示し、Belkin et al.は2018年に、補間点を越えると検証誤差が再び下がりうること、すなわち二重降下曲線を示しました。実務上の教訓はどちらの結果でも生き残ります。学習誤差と検証誤差を容量およびデータ量に対してプロットし、その差を読み取ってください。分散への対処はデータを増やすこと、正則化、早期終了、アンサンブルです。バイアスへの対処はより表現力のあるモデルかより良い特徴量で、ここでデータと特徴量の出番になります。
最適化: 勾配降下法とその仲間
通常の最小二乗法には閉形式の解があります。それ以外のほぼすべてにはないので、学習とは反復のことです。パラメータに関する損失の勾配を計算し、その逆向きに少し進み、繰り返します。ステップ幅、すなわち学習率は、最初にスイープすべきハイパーパラメータであり、最もよく間違っているものでもあります。確率的勾配降下法は、全体ではなくミニバッチで勾配を推定します。これは安価なうえ、悪い領域から抜け出すのに役立つノイズを加えます。モーメンタムはステップを滑らかにします。Adamは各パラメータのステップをその勾配分散の移動推定でスケールし、ディープラーニングの既定になっています。ロジスティック回帰のような凸損失では、どの手法でも大域的最小値に到達します。ニューラルネットワークでは局所的最小値に到達しますが、その汎化性能は他の局所解と大差ありません。
評価は後付けではなく手法の一部
データを見る前に分割してください。検証セットはモデルや設定の間で選択するためのものです。テストセットは最後の1つの数値のためのもので、覗き見て何かを変えるたびに検証セットになってしまいます。データが少ないときは、k分割交差検証によってすべての例を順番に両方の役割で再利用できますが、コストはk倍です。指標はモデルが支える意思決定に合わせて選びます。陽性率1%では正解率は無意味で、ランキングされたリストにはランキング指標が必要です。評価のハブと指標のリファレンスで選択肢を扱っています。
どこから始めるか
入門レッスンを順に読んでください。語彙のために機械学習とは何か、分割とリークのためにデータこそがモデル、パラメータと損失が書き下されるのを見るために線形回帰とロジスティック回帰をゼロから、勾配降下法のために学習ループ、そして嘘をつかない評価です。その後の決定木と勾配ブースティングは、勾配をまったく持たないモデルでも同じ考え方が成り立つことを示します。
ツールとプラットフォーム
| ツール | 用途 | ライセンス | プラットフォーム |
|---|---|---|---|
| NumPy | 配列と、すべてのモデルが帰着する算術演算 | BSD-3 | オープンソース |
| scikit-learn | 古典的モデル、分割、交差検証、指標 | BSD-3 | オープンソース |
| PyTorch | 自動微分とニューラルネットワーク | BSD-3 | PyTorch |
| JAX | NumPy風コードに対する合成可能な勾配と変換 | Apache-2.0 | JAX |
| pandas | 表形式データの読み込みと確認 | BSD-3 | オープンソース |
| matplotlib | 学習曲線と残差プロット | PSF風(matplotlibライセンス) | オープンソース |
よくある間違い
- テストセットでチューニングした後にテストセットの数値を報告する。その数値は紛らわしい名前のついた検証スコアです。
- 学習損失が下がるのを見て学習できたと言う。モデルが汎化しているかどうかは検証曲線だけが教えてくれます。
- 不均衡なクラスで正解率を使う。常に多数派クラスを予測するモデルは、1%の事象に対して99%のスコアを出します。
- ベースラインを省く。平均値や多数派クラス、あるいは先週の値を予測することが、すべてのモデルが上回らなければならない数値です。
- シードを1つしか走らせない。0.5%の差がある2回の実行は、同じモデルにノイズが乗っただけかもしれません。
さらに深く
- Bishop, Pattern Recognition and Machine Learning, 2006。出版社の研究ページから無料のPDFが入手できます。
- Hastie, Tibshirani and Friedman, The Elements of Statistical Learning, 第2版 2009。無料のPDFがあります。
- Zhang et al., Understanding deep learning requires rethinking generalization, 2016。
- Belkin et al., Reconciling modern machine learning practice and the bias-variance trade-off, 2018。
- Kingma and Ba, Adam: A Method for Stochastic Optimization, 2014。
- scikit-learnのモデル評価ガイドと交差検証ガイド。