最終更新:

機械学習の仕組み — 例から学んで、まだ見ていない例で試す


例の関係を学び、次の値を予測する

結果 = 2 × 入力 + 1結果入力31527394青:学習の例 橙:入力4の予測
本文の線形回帰の例です。入力4は学習範囲の外です。現実のデータにもこの直線が成り立つ保証ではありません。
ひよこ ひよこ
例から学ぶって、具体的に何が変わるの?
ペンギン先生 ペンギン先生
モデルのパラメーター等を、データに合うよう調整するんだ。たとえば入力1、2、3に結果3、5、7が対応するとき、直線で関係を表すモデルを学ばせられるよ。
ひよこ ひよこ
その例なら、2倍して1を足す?
ペンギン先生 ペンギン先生
そう。下の小さな線形回帰では、その関係をデータから求める。次に入力4なら9と予測するよ。ただし、実際のデータがずっとこの関係に従う保証はないんだ。
ひよこ ひよこ
モデルに例を見せるだけで、何でも分かる?
ペンギン先生 ペンギン先生
何を入力にし、何を予測するか、どのモデルや目的を使うかは設計するよ。データの欠損や偏り、正解の付け方も結果に関わる。例をたくさん渡すだけで完成とは考えないんだ。
ひよこ ひよこ
教師あり・教師なしは、何が違うの?
ペンギン先生 ペンギン先生
正解付きの例で予測を学ぶのが教師あり。教師なしはラベルなしで構造やまとまり等を探す。強化学習では行動と報酬から方策を学ぶよ。この3つだけで、すべての学習方法を分類し切るわけでもないんだ。
ひよこ ひよこ
中では、必ず勾配降下法を使う?
ペンギン先生 ペンギン先生
モデルと方法によるよ。ニューラルネットワーク等では損失の勾配で更新する方法がよく使われるけれど、決定木や別の解き方もある。下の線形回帰も、反復して勾配で学ぶ例ではないんだ。
ひよこ ひよこ
損失が一番小さければ、一番正確?
ペンギン先生 ペンギン先生
学習の目的の数値と、知りたい評価は分けよう。学習データの損失が小さくても、未学習データの正解率等が最良とは限らない。勾配の更新で必ず最良の谷へ到達するとも言えないよ。
ひよこ ひよこ
同じ問題を何度も練習すればいい?
ペンギン先生 ペンギン先生
学習用によく合っても、新しい例で結果が落ちる過学習があるよ。評価用を先に分け、前処理にも評価の情報を混ぜない。結果を見て選び続けると、その評価にも合わせてしまうんだ。
ひよこ ひよこ
ペンギン先生 ペンギン先生
数理モデルの一種で、人の脳そのものではないよ。深層学習は層を重ねたモデルを使う分野だけど、深さを増やすだけで精度が必ず上がるわけではない。まずは入力・学習・評価を自分で説明してみよう。

まずは、小さな関係を学習する

Python 3の新しい仮想環境へscikit-learnを追加し、次をlearning-demo.pyに保存します。環境の作り方はAI・機械学習入門を使えます。

from sklearn.linear_model import LinearRegression

X = [[1], [2], [3]]
y = [3, 5, 7]
model = LinearRegression()
model.fit(X, y)
print(f"係数: {model.coef_[0]:.1f}")
print(f"切片: {model.intercept_:.1f}")
print(f"入力4の予測: {model.predict([[4]])[0]:.1f}")
係数: 2.0
切片: 1.0
入力4の予測: 9.0

この練習では、結果 = 2 × 入力 + 1という直線に合うパラメーターを求めます。fitが学習、predictが予測です。3件しかなく、実務の性能評価をするデータではありません。入力4は学習した範囲の外なので、現実でもこの直線が成り立つかは別に確かめます。

学習方法と、評価の問いを分ける

教師あり学習は正解付きの例、教師なし学習は正解ラベルなしの構造、強化学習は行動と報酬を扱います。学習する情報や目的はさまざまで、「写真を見せるだけで必ず猫が分かる」のような保証ではありません。

損失は学習時に最適化する目的の数値です。正解率、誤検出、見逃し等の評価とは同じものとは限りません。勾配降下法は更新方法の一つで、すべての機械学習が使うわけでも、必ず最良の解へ到達する方法でもありません。

初めてのデータで試す

学習用と評価用を先に分け、前処理のパラメーターも学習用だけから求めます。評価を何度も見てモデルを選ぶと、その評価へ合わせてしまいます。検証や交差検証と、最後のテストの役割を分けましょう。

時間順のデータや同じ人の記録は、単純なランダム分割では漏れが起きることがあります。花の分類を試す機械学習入門で、学習120件と評価30件が分かれていることを確認してみましょう。

もう少し詳しく:深層学習と汎化

ニューラルネットワークはパラメーターを持つ数理モデルで、脳と同じ動作をするという説明ではありません。深層学習では複数の層を使いますが、深さ・計算量・データ量の増加だけで、どの課題も改善する保証はありません。

新しいデータで役立つことが汎化です。過学習を疑ったら、分割と情報の漏れ、データの分布を調べ、必要に応じてモデルや正則化を見直します。学習データへ良く合うことと、本番で役立つことを分けます。

🐧 ペンギン先生のまとめ:「機械学習」って出てきたら「例から予測の手がかりを学び、初めての例で確かめる方法」と思えばだいたいOK!

資料を探して回答へ使う方法はRAGの仕組みで学べます。

参考資料