機械学習の用語は、1つずつ暗記すると関係が見えにくくなりがちです。
たとえば、
- 過学習
- 汎化
- 正則化
- 交差検証
- アンサンブル学習
- マルチタスク学習
は、どれも教師あり学習の周辺でよく登場します。
この記事では、これらを個別に覚えるのではなく、
「学習したモデルを、未知のデータでもうまく使うにはどうすればよいか」
という1本の流れとして整理します。
教師あり学習とは
教師あり学習(Supervised Learning)は、
入力データと正解をセットにして、入力から正解を予測する規則を学習させる方法
です。
たとえば住宅の家賃を予測したい場合、次のようなデータを用意します。
| 面積 | 築年数 | 駅からの距離 | 家賃 |
|---|---|---|---|
| 40㎡ | 5年 | 5分 | 9万円 |
| 60㎡ | 10年 | 10分 | 11万円 |
| 25㎡ | 20年 | 15分 | 5万円 |
ここでは「面積・築年数・駅からの距離」が入力で、「家賃」が正解です。
モデルとは何か
機械学習でいう モデル とは、
入力を受け取り、そこから予測結果を出すための、学習済みの仕組み
です。
たとえば住宅価格予測なら、
という働きをします。
通常のプログラムでは、人間がルールを直接書きます。
人間
↓
ルールを書く
↓
プログラム
一方、機械学習では、
データ
↓
学習アルゴリズム
↓
モデル
という流れになります。
ここで、 アルゴリズム と モデル は同じものではありません。
- アルゴリズム :どのように学習するかという方法
- モデル :その方法で実際にデータを学習した結果できたもの
料理にたとえるなら、「アルゴリズム = レシピ」「データ = 材料」「モデル = 出来上がった料理」くらいの関係です。
分類と回帰
教師あり学習の代表的な問題は、大きく 分類 と 回帰 に分けられます。
覚え方はシンプルです。
分類 = 何者なのか
回帰 = いくつなのか
学習できたら終わり、ではない
モデルを作る目的は、 学習に使ったデータだけを正しく当てること ではありません。
本当に重要なのは、
学習時には見たことがない、新しいデータにも正しく対応できること
です。
ここから、 過学習 と 汎化 という重要な概念が出てきます。
過学習とは
モデルが訓練データに合わせすぎてしまうことを、 過学習(Overfitting) といいます。
たとえば、
という状態です。
訓練データには非常によく合っているのに、未知データでは性能が落ちています。
モデルが、
データ全体に共通する本質的な規則
だけではなく、
訓練データにたまたま含まれていた細かな特徴やノイズ
まで覚えてしまうと、このようなことが起こります。
汎化とは
汎化(Generalization) とは、
学習時に見ていないデータにも、学習した規則を適用できること
です。
その能力を 汎化性能 と呼びます。
訓練データに強い
≠
良いモデル
理想は、
訓練データにも強い
+
未知データにも強い
状態です。
正則化とは
過学習を防ぐ代表的な方法の1つが、 正則化(Regularization) です。
※「正規化(Normalization)」とは別の用語です。
正則化を理解するには、まず モデルの複雑さ が何を意味するのかを理解すると分かりやすくなります。
モデルの「複雑さ」とは何か
ここでいう複雑さは、「コードが読みにくい」「ファイルサイズが大きい」という意味ではありません。
ざっくり言えば、
どれだけ多様な規則や形を表現できるかという、モデルの自由度・表現力
です。
直線しか引けないモデル
たとえば、入力 x から出力 y を予測するとします。
最も単純なモデルの1つは直線です。
y = ax + b
このモデルが調整できるのは、主に傾き a と切片 b です。
表現できる形は直線だけなので、自由度はそれほど高くありません。
データ ●
●
●
●
モデル /
/
/
多少データから外れていても、全体としての傾向を捉えようとします。
より自由に曲がれるモデル
一方、より高い次数の多項式なら、
y = a₀ + a₁x + a₂x² + a₃x³ + … + aₙxⁿ
のように、調整できる係数が増えます。
次数を上げるほど、より複雑な曲線を表現できます。
単純なモデル
────────/────────
より複雑なモデル
──/\_/\__/\──
複雑なモデルは悪いのか?
複雑であること自体が悪いわけではありません。
現実の規則そのものが複雑なら、単純すぎるモデルでは表現できません。
問題なのは、
必要以上に自由度が高く、訓練データの偶然のばらつきまで説明できてしまうこと
です。
なぜ複雑なモデルほど過学習しやすいのか
たとえば、勉強時間とテストの点数に、
勉強時間が長いほど、点数も高くなりやすい
という大まかな関係があるとします。
しかし、現実のデータには、
- その日たまたま体調が悪かった
- 得意な問題が出た
- 睡眠不足だった
といった偶然のばらつきも含まれます。
自由度の低いモデルなら、
「多少ずれている点はあるけれど、全体として右肩上がりだ」
と学習します。
一方、自由度が高すぎるモデルは、1点1点の偶然のズレまで説明するように曲線を変えることができます。
つまり、
表現力が高い → 良い規則も表現できるが、ノイズまで表現できてしまう
という両面があります。
実際の機械学習でいう複雑さは、単純に「パラメータ数」だけで決まるわけではありません。
たとえば、
- 決定木:木の深さや分岐数
- 多項式回帰:多項式の次数
- ニューラルネットワーク:層、ユニット、パラメータ、構造
- 各種モデル:制約や正則化の強さ
など、モデルの種類によって「自由度」に関わる要素は異なります。
正則化は「複雑さにもコストを課す」
通常の学習では、予測の誤差を小さくしたいと考えます。
しかし誤差だけを小さくしようとすると、訓練データへ過剰に合わせるために、モデルが必要以上に複雑になることがあります。
そこで正則化では、
予測誤差だけでなく、モデルが必要以上に複雑になることにもコストを課す
という考え方を使います。
概念的には、次のように考えられます。
Objective = Loss + λ × Complexity
ここで、
-
Loss:予測がどれだけ外れているか -
Complexity:モデルの複雑さを表す量 -
λ:複雑さへのペナルティをどれくらい重視するか
です。
つまり正則化は、
「訓練データを完璧に覚えるためだけに、必要以上に複雑になるな」
というブレーキです。
代表的な方法として、
- L1正則化
- L2正則化
などがあります。
なお、上の式は考え方をつかむための概念図です。実際に何を「複雑さ」としてペナルティ化するかは、正則化手法やモデルによって異なります。
汎化性能をどうやって確認するのか
正則化は、 過学習を抑えるための手法 でした。
しかし、
本当に未知データにも強くなったのか?
は別途確認する必要があります。
そこで登場するのが、
- ホールドアウト法
- 交差検証
です。
正則化
↓
モデルの学習方法を調整する
交差検証
↓
モデルの汎化性能を評価する
ホールドアウト法
最も単純な方法は、データを学習用と評価用に分けることです。
たとえば1000件のデータなら、
800件 → 学習
200件 → 評価
とします。
これが ホールドアウト法 です。
ホールドアウト法の問題
1回だけ分割すると、 どのデータが評価側に入ったか によって結果が変わります。
たまたま簡単なデータばかりが評価側に入れば、実際より性能が高く見えるかもしれません。
逆に、難しいデータばかりが入れば、実際より悪く見える可能性があります。
そこで登場するのが 交差検証 です。
交差検証とは
交差検証(Cross Validation)は、
訓練用と評価用のデータを入れ替えながら、何度も学習と評価を行う方法
です。
代表的なのが k分割交差検証(k-fold cross validation) です。
たとえば5分割なら、
[A][B][C][D][E]
のようにデータを分けます。
こうすることで、特定の分割だけに評価結果が左右されにくくなります。
正則化と交差検証は役割が違う
| 手法 | 目的 |
|---|---|
| 正則化 | 過学習を抑え、モデルの学習を調整する |
| 交差検証 | 未知データに対する性能を評価する |
アンサンブル学習とは
アンサンブル学習(Ensemble Learning) とは、
複数のモデルを組み合わせて、1つの予測結果を作る方法
です。
1つのモデルだけに頼るのではなく、 複数の専門家に判断させて総合判断する ようなイメージです。
代表的な方法には、
- バギング
- ブースティング
- スタッキング
があります。
Random Forestも、複数の決定木を組み合わせる代表的なアンサンブル学習です。
マルチタスク学習とは
マルチタスク学習(Multi-task Learning) とは、
1つのモデルで、関連する複数の課題を同時に学習する方法
です。
たとえば顔画像から、
- 年齢
- 表情
- 顔の向き
を予測するとします。
これらの課題には、目・鼻・輪郭・顔の形など、共通して役立つ特徴があります。
そのため、共通部分を共有して学習することで、それぞれの課題に知識を活用できます。
アンサンブルとマルチタスクの違い
アンサンブル
複数モデル
↓
1つの予測
マルチタスク
1つのモデル
↓
複数タスク
方向が逆です。
全体を一枚で整理する
用語の位置関係
| 用語 | 一言でいうと | 主な目的 |
|---|---|---|
| 教師あり学習 | 正解付きデータから学ぶ | 予測モデルを作る |
| モデル | 入力から予測する学習済みの仕組み | 予測する |
| 分類 | カテゴリを予測 | 犬/猫など |
| 回帰 | 数値を予測 | 売上・価格など |
| 過学習 | 訓練データに合わせすぎる | 避けたい状態 |
| 汎化 | 未知データにも対応する | 良いモデルの条件 |
| 正則化 | 複雑さにペナルティを与える | 過学習を抑える |
| ホールドアウト | データを1回分割する | 汎化性能の評価 |
| 交差検証 | 評価用データを交代させる | より安定した評価 |
| アンサンブル | 複数モデルを統合 | 予測性能向上 |
| マルチタスク | 1モデルで複数課題 | 共通知識の活用 |
まとめ
過学習
↓
モデルが訓練データに合わせすぎた状態
正則化
↓
過学習を抑えるための手法
汎化性能
↓
未知データにも対応できる能力
交差検証
↓
汎化性能を評価する方法
アンサンブル学習
↓
複数モデルを組み合わせる方法
マルチタスク学習
↓
1つのモデルで関連する複数課題を学ぶ方法
個別の言葉を覚えるより、
「何が問題で、その問題に対して何をする技術なのか」
という関係で理解すると、機械学習全体の見通しがかなり良くなります。
参考資料
- Google for Developers — Machine Learning
https://developers.google.com/machine-learning/ - scikit-learn — Cross-validation
https://scikit-learn.org/stable/modules/cross_validation.html - IBM — Ensemble Learning
https://www.ibm.com/think/topics/ensemble-learning