機械学習の原理なんか誰でもわかるという話

Yusuke Shinyama, 2026/04

1. そもそも人工知能とか機械学習って何か

人工知能 (AI) と機械学習 (ML)、ニューラルネットワークの関係は 以下のようになっている:

IT技術全般 人工知能 (AI) 機械学習 (ML) ニューラル ネットワーク (NN) ディープ ニューラル ネットワーク (DNN) = ディープ ラーニング (DL)

人工知能

この処理を非常に大規模かつ高速にやると、人間にとっては 「賢そう」に見える。

練習問題

次のうち「探索問題」として定義可能なものはどれでしょう?

  1. 行列の積を計算する。
  2. 迷路の解法を発見する。
  3. 売れる小説を書く。
  4. 確定申告を作成する。

機械学習

たとえば、以下のような処理を考える。 100×100ピクセルの画像が与えられたとき、 それが「人間の顔か否か」を判定するプログラムを作りたい:

画像顔らしさ
0.95
0.87
0.02

このようなプログラムは頑張れば人間にも作れるかもしれない。が、非常に難しい。 そこで...

  1. あらかじめ「顔らしい画像」と「顔らしくない画像」を大量に用意しておく。
  2. コンピュータを使ってこのようなプログラムを自動的に発見 (探索) させよう。

つまり、

機械学習 = 「プログラムを自動的に作成(探索)するプログラム」

機械学習では、答えの「よさそう度」は比較的簡単にわかる:

ちなみにこれは「教師つき機械学習」と呼ばれる。
練習問題

教師つき学習で以下のものを学習させたい。 学習用データとして何が必要?

  1. 画像にネコが写っているかどうか判定したい。
  2. ある地点の24時間後の天気・気温を、過去の気象記録のみから推測したい。
  3. ある人の年齢・性別・出身学校から、年収を予想したい。
  4. 血液型から平均寿命を推測したい。(??)

機械学習の前提条件:

そもそも、相関がないものは学習できない。

2. 実際にどうやって学習させるか

機械学習における大きな問題: 「ありうるプログラム」は無限に存在する中で、どうやって絞り込むか?

答え: 機械学習で探索するプログラムは JavaScriptやPythonのコードではなく、 限定された形の「プログラムもどき」を使う。

ニューラルネットワーク

ニューラルネットワーク とは、 以下のような人間の神経回路を模した架空の装置を「プログラムもどき」として使うものである。

ニューロン (ノード) 入力1 入力2 入力3 入力4 出力1 出力2

しかし、まず機械学習の概念をよりよく理解するために、 もっと簡単な教師つき学習方式である 決定木を見てみよう。

決定木

決定木とは、 if文の集合だけからなるプログラムのことである:

if 変数 == 値1:
    return 答えA
if 変数 == 値2:
    return 答えB
...

たとえば「ある年・月の日数」を推定する決定木を考えてみる。 (人間は完全な規則を知っているが、ここではデータだけをもとに推測させる)

訓練データ
年 (y)月 (m)日数 (n)
2016 131
2016 229
2016 430
2016 731
2016 831
2017 228
2017 430
2017 630
2017 930
20171130
2018 131
2018 228
2018 331
20181031
2020 531
20201231

まず、重要な仮定:

「日数 n は、与えられた変数 ym だけから推測可能である」
この仮定が成り立たなければ、そもそも学習は不可能。

ここで、推測のヒントとなる ym のような変数を 特徴量 または 素性 とよぶ。

これらの特徴量を使って、以下の2通りの決定木を作ることができる:

練習問題

上の 16件のデータに対して、決定木 A と 決定木 B はどれくらい「よい」か、測定してみよう。

年 (y)月 (m) 決定木A決定木B日数 (n)
2016 131
2016 229
2016 430
2016 731
2016 831
2017 228
2017 430
2017 630
2017 930
20171130
2018 131
2018 228
2018 331
20181031
2020 531
20201231

すべての教師つき機械学習には 2つのフェーズが存在する:

重要なこと:

「機械学習モデルの「賢さ」は与えるデータによって決まる」
偏ったデータを与えれば、機械学習は偏った規則を学習してしまう。

3. ニューラルネットワークはなぜ動くのか

原理

ニューロン (ノード) 入力1 入力2 入力3 入力4 出力1 出力2

ニューラルネットワークの入力と出力は、以下のように定義される:

入力と出力は、0〜1 の範囲で数値化できるものであればなんでもよい。 したがって、画像のようなものも「各ピクセルの RGB値」を個別の入力と考えれば、 入力として使える。

各ノードは、非常に単純な仕組みである:

ノード x1 x2 x3 w1 w2 w3 b y

ニューラルネットワークの最終的な出力は、以下のような関数として表現できる。

出力1 = σ(σ(入力1×w1 + 入力2×w2 + 入力3×w3 + ...) × w4 + ...)

ニューラルネットワークは、各ノード間の「重み」w1, w2, w3, ... さえ うまく調整すれば、非常に複雑な計算や判断ができる。

例. 3層のニューラルネットワーク (576ノード + 100ノード + 10ノード) を使って、手書き数字認識をおこなう。

  Answer:  
練習問題

ニューラルネットワークを使って以下の関数を学習したい。 「入力」と「出力」はどのような量を使えばよい?

  1. 過去10日間の気温を入力し、明日の気温を予想する関数。
  2. 決められた大きさの画像を入力し、そこにネコが写っているかどうかを判定する関数。
  3. 決められた大きさの画像を入力し、そこに写っている動物の種類が 「ネコ」「イヌ」「ウシ」「ウマ」のどれかを判定する関数。

今日ニューラルネットワークがこれほど流行している理由は:

どうやって学習させる?

ニューラルネットワークには、以下のような特徴がある:

損失=「現在のモデルの悪さ」を表す数値
=(出力値 - 正解値)2
=(σ(σ(入力1×w1 + 入力2×w2 + 入力3×w3 + ...) × w4 + ...) - 正解値)2
損失 0 が最小 (完璧な状態)。
練習問題

以下の学習タスクで、損失が 0 の状態とはどんな状態か? 損失が大きい (悪い) 状態とは、どんな状態か?

  1. 過去10日間の気温を入力し、明日の気温を予想するタスク。
  2. 画像にネコが何匹含まれているかどうかを判定するタスク。
  3. 画像に含まれるネコの大きさを判定するタスク。

ここで、数学的なトリック:
式 ax + by
は、xとyを変数とした関数
f(x, y)
とみなすこともできるし、aとbを変数とした関数
f(a, b)
とみなすこともできる。

同様に、ニューラルネットワークの損失

(σ(σ(入力1×w1 + 入力2×w2 + 入力3×w3 + ...) × w4 + ...) - 正解値)2
は、入力と正解値を変数とした関数
(σ(σ(入力1×w1 + 入力2×w2 + 入力3×w3 + ...) × w4 + ...) - 正解値)2
とみなすこともできるし、
重み w1, w2, w3, ... を変数とした関数
(σ(σ(入力1×w1 + 入力2×w2 + 入力3×w3 + ...) × w4 + ...) - 正解値)2
とみなすことができる。

するとニューラルネットワークの「推論」とは:

w1, w2, w3, w4, ... が決まっている状態で、 入力から出力を計算する。

そしてニューラルネットワークの「訓練(学習)」とは:

入力と出力 (正解値) が決まっている状態で、
損失を最小限にするような w1, w2, w3, w4, ... の値を見つける。
と言い換えることができる。

でも、この言い換えにどういう意味があるのか?

勾配降下法

ニューラルネットワークには、さらに以下のような特徴がある:

勾配とは?

練習問題

10個のスライダーを動かして、損失がなるべく小さくなるようにしよう。

損失 (ゼロが目標)

上の例を実際にやってみると、なかなか一筋縄ではいかない。

では、まったく同じ問題の「ヒントつきのバージョン」を紹介する。

練習問題

10個のスライダーを動かして、損失がなるべく小さくなるようにしよう。 各スライダーの下に、ヒント「↓」「↑」で表示される。

損失 (ゼロが目標)

ここでのヒントが「勾配」に相当する。 ヒントとして表示された矢印「↑」「↓」は各パラメータの勾配の向きを表している。

この問題は、曲線で表された関数に対して、もっとも低い点を見つけることに相当する。 このように、勾配を使って最適解を見つける方法を 勾配降下法 (gradient descent) という。

全体像は不明 勾配 近傍だけ が見える 0 x0

結論:

勾配降下法が使えるおかげで、 「損失を最小限にするような」ニューラルネットワークを 現実的な時間で学習できる。

ニューラルネットワークを決定するもの:

以前のニューラルネットワークは、固定長のデータのみを得意とし、 テキストや言語などの可変超データの扱いは苦手だったが、 transformer の発明により、言語を扱えるようになった。

おまけ: 決定木でやった日数計算をニューラルネットワークにやらせてみた例 (Python)

補足・決定木について

上で例として挙げた決定木はごく単純だが、実際の決定木はかなり複雑になりうる。 ニューラルネットワークでは、学習された重みを見ても人間には何がどう動いているのかよくわからないが、 決定木は学習結果を人間が読んで理解できるという利点がある。 そのため、決定木は実は機械学習ではよく使われている。

まとめ


Yusuke Shinyama