1.ベクトル ― 何でも数のリストに
AIは文字も写真も好みも、数のリストに変えて扱います。この数のリストをベクトルといいます。映画の好みを(アクション、恋愛、コメディ)の好き度で表せば、さくらは [5, 1, 3]、けんたは [4, 2, 3]、ゆいは [1, 5, 2] のように書けます。言語モデルは単語や単語のかけら1つを、数百から数千個の数からなるベクトルに変えますが、原理はこの3つの数の例と同じです。
ベクトルが2つあれば、「どれくらい似ているか」を計算できます。第6講で見た2点間の距離が1つの方法で、AIでよりよく使われるのが内積とコサイン類似度です。
2.内積とコサイン類似度
内積は、2つのベクトルの同じ位置の数同士をかけて、すべて足した値です。2人が同じ項目をそろって好きであるほど、大きな数同士がかけ合わされて内積が大きくなります。ただし内積は、数が全体的に大きいベクトルほど無条件に大きくなるので、ベクトルの大きさ(長さ)で割って向きだけを比べたものがコサイン類似度です。
コサイン類似度は −1 から 1 までの値です。1に近ければ同じ向き(好みが似ている)、0なら互いに関係のない向き(直角)、−1なら正反対です。検索やおすすめで「意味の似た文書を探す」とは、たいていこの値を計算して大きい順に選ぶことです。
- 手順1:内積。さくら・けんた = 5×4 + 1×2 + 3×3 = 20 + 2 + 9 = 31。さくら・ゆい = 5×1 + 1×5 + 3×2 = 5 + 5 + 6 = 16。
- 手順2:大きさ。|さくら| = √(25 + 1 + 9) = √35 ≈ 5.92、|けんた| = √(16 + 4 + 9) = √29 ≈ 5.39、|ゆい| = √(1 + 25 + 4) = √30 ≈ 5.48。
- 手順3:さくら・けんたの類似度 = 31 ÷ √(35 × 29) = 31 ÷ √1015 ≈ 31 ÷ 31.86 ≈ 0.97。
- 手順4:さくら・ゆいの類似度 = 16 ÷ √(35 × 30) = 16 ÷ √1050 ≈ 16 ÷ 32.40 ≈ 0.49。
- 検算:どちらの類似度も −1 と 1 の間にあります。さくらとけんたはアクションがいちばん好きという点が同じで、ゆいは恋愛がいちばん好きなので、結果は直感とも合っています。
3.行列の積 ― 重み付き和をまとめて
ニューラルネットワークのニューロン1つがすることは単純です。入力ごとに重みをかけて足し(重み付き和)、バイアスを加えた後、その結果を決まった規則で1回変換します。最もよくある規則の一つは、負の数なら0に、正の数ならそのままにするものです。入力 [2, 3]、重み [0.5, −1]、バイアス 1 なら 0.5×2 + (−1)×3 + 1 = −1 で、負の数なので0を出力します。
ニューロンがいくつもあれば、重み付き和を何回も計算しなければなりません。これを一度に書く方法が行列です。行列の各行がニューロン1つの重みで、行列とベクトルの積は「行ごとに入力ベクトルと内積をとる」ことです。巨大なAIモデルの計算のほとんどがこの行列の積であり、だからこそ行列の積を高速に行う専用チップが重要になりました。
- 手順1:1つ目のニューロン = 1行目と入力の内積。1×4 + 2×1 = 4 + 2 = 6。
- 手順2:2つ目のニューロン = 2行目と入力の内積。3×4 + (−1)×1 = 12 − 1 = 11。
- 手順3:結果のベクトルは [6, 11] です。
- 検算:行列の列ごとに計算し直してみます。入力 4 × 1列目 [1, 3] = [4, 12]、入力 1 × 2列目 [2, −1] = [2, −1]、足すと [6, 11] で同じです。
4.損失関数 ― どれだけ間違えたかを数で
モデルが学ぶには、まず「どれだけ間違えたか」を1つの数で測らなければなりません。この数を出す関数を損失関数といいます。数を予測するモデルでよく使われるのが平均二乗誤差(MSE)です。予測と正解の差(誤差)を2乗して平均した値で、第8講の分散とほとんど同じ形をしています。
2乗する理由は2つあります。誤差が正でも負でもすべて「間違い」として数えるため、そして大きく外れたものをより重く罰するためです。誤差が2なら4、誤差が4なら16になります。
- 手順1:誤差。3 − 2 = 1、5 − 5 = 0、8 − 10 = −2。
- 手順2:2乗。1、0、4。合計は5。
- 手順3:平均。5 ÷ 3 ≈ 1.67。
- 検算:誤差がいちばん大きい3つ目の値(−2)が、合計5のうち4を占めています。大きく外れた値が損失を左右するという2乗の性質と合っています。
5.傾きと勾配降下法
損失を減らすには、重みをどちらへ直せばよいのでしょうか。霧のかかった山で谷へ下りていく人を思い浮かべてください。遠くは見えませんが、足もとの傾きは感じられます。下り坂のほうへ1歩進み、また傾きを感じ取り、さらに1歩進みます。第4講で見た「1点での傾き」がまさにこの足もとの傾きで、こうして下りていく方法が勾配降下法です。
いちばん簡単な例として、損失が L(w) = (w − 3)² の場合を見てみましょう。w = 3 のとき損失は0で最小です。この関数の傾きは 2(w − 3) です。w が3より小さければ傾きは負なので w を大きくし、大きければ正なので小さくしなければなりません。そこで「新しい w = w − 学習率 × 傾き」と直します。学習率は1歩の大きさです。
実際のモデルには重みが数十億個あることもありますが、することは同じです。重みごとに「これを少し変えると損失がどれだけ変わるか」(傾き)を計算し、損失が減る方向へ少しずつ直すことを、数えきれないほど繰り返します。
- 手順1:w = 0。傾き 2(0 − 3) = −6、新しい w = 0 − 0.25 × (−6) = 1.5。損失 9 → (1.5 − 3)² = 2.25。
- 手順2:w = 1.5。傾き 2(1.5 − 3) = −3、新しい w = 1.5 − 0.25 × (−3) = 2.25。損失 (2.25 − 3)² = 0.5625。
- 手順3:w = 2.25。傾き 2(2.25 − 3) = −1.5、新しい w = 2.25 − 0.25 × (−1.5) = 2.625。損失 (2.625 − 3)² = 0.140625。
- 検算:目標の3までの残りの距離が 3 → 1.5 → 0.75 → 0.375 と毎回半分になります。損失は毎回 1/4 になり、9 → 2.25 → 0.5625 → 0.140625 と減っていきます。
- 手順1:傾き −6、新しい w = 0 − 1.1 × (−6) = 6.6。
- 手順2:目標3との距離。最初の3から |6.6 − 3| = 3.6 と、かえって遠ざかりました。損失も9から12.96へと大きくなりました。
- 手順3:次の1歩。傾き 2(6.6 − 3) = 7.2、新しい w = 6.6 − 7.92 = −1.32、距離 4.32。反対側へ飛び越えながら、だんだん遠ざかります。
- 検算:3.6² = 12.96 で、距離は毎回1.2倍(3 → 3.6 → 4.32)になるので発散します。
📌 要点まとめ
- AIは単語・写真・好みを数のリスト(ベクトル)に変えて扱う
- 内積は同じ位置同士をかけて足した値、コサイン類似度は大きさで割った向きの似かたである
- 行列 × ベクトル = 行ごとの内積 = いくつものニューロンの重み付き和をまとめて計算したもの
- 損失関数は間違いの度合いを1つの数で測る ― 平均二乗誤差は誤差²の平均である
- 勾配降下法:新しい重み = 重み − 学習率 × 傾き。損失が減る方向へ繰り返し直す
- 学習率が大きすぎると発散し、小さすぎると遅い
🤖 AIにはこう聞いてみましょう
コピーして [ ] の部分を自分の状況に書き換えて使います。答えはそのまま信じず、本文と比べて確かめましょう。
AIの概念を小さな数で自分で確かめたいとき
コサイン類似度を、3つの数からなるベクトル3つを使って説明してください。内積、大きさ、類似度を段階ごとに計算してほしいのですが、最後の答えを言う前に私が自分で計算してみられるように、途中の結果だけを先に見せてください。
勾配降下法を手でたどってみたいとき
損失関数 L(w) = (w − 3)² で勾配降下法を練習したいです。開始値と学習率を変えながら、3つの場合(うまく収束する、遅すぎる、発散する)をそれぞれ5歩ずつ表で見せてください。各表に w、傾き、新しい w、損失の列を入れてください。最初の2行は私が自分で計算して答え合わせをします。
AIが出した数学の説明を検証するとき
今の説明で使った数式それぞれに、ごく小さな数の例を1つずつ入れて、実際に計算して見せてください。説明と計算結果が食い違うところがあれば印をつけてください。
- 高校の数学教科書の一般的な内容(ベクトル、行列、微分の基礎)
- 高校でAIのための数学を扱う教科・教材の一般的な内容
学習目標をすべて達成できたら完了を押しましょう。
このブラウザでは保存できないため、この画面でのみ表示されます。