登場キャラクター
カードを押すと全身が見られます
味方|パワータイプ
戦士アルファ
力 80
魔 −20
技 20
(80, −20, 20) 味方|パワータイプ
騎士ベータ
力 75
魔 −15
技 20
(75, −15, 20) 味方|魔法タイプ
魔法使いガンマ
力 10
魔 65
技 25
(10, 65, 25) 味方|魔法特化(力はマイナス)
賢者デルタ
力 −70
魔 85
技 5
(−70, 85, 5) ステータス画面はベクトルだった
戦士アルファのステータス画面から始めよう。
力 80魔法 −20技 20⟶a=(80,−20,20)いくつかの数字をひとまとめにしたものがベクトルである。順番さえ決めておけば,3つの数の組でキャラ1人を表せる。

4人のキャラを並べる
4人のパーティを考える。
(80, −20, 20) (75, −15, 20) (10, 65, 25) (−70, 85, 5) 戦士と騎士はパワータイプ,魔法使いと賢者は魔法特化で,とくに賢者は力がマイナスに振り切れている。
内積を計算してみる
2人の「似ている度」を測る第一歩が内積である。成分ごとに掛けて,足すだけ。
a⋅b=力a1b1+魔法a2b2+技a3b3戦士と騎士なら
a⋅b=80⋅75+(−20)(−15)+20⋅20=6000+300+400=6700どちらも力が高いので力の項が大きく伸び,どちらも魔法がマイナスなので魔法の項も(マイナス × マイナスで)プラスに効いている。
ところが,内積は「強さ」でも変わる
ここで立ち止まる。知りたいのはタイプの近さなのに,内積は強さにも反応してしまう。
向きがまったく同じで,強さだけ2倍のキャラを考えると,内積もちょうど2倍になる。タイプは同じはずなのに,「強い」というだけで値が大きくなってしまう。

体験長さだけ変えて内積を見る
内積 a·b—
|b|—
cos θ—
内積は倍率にぴったり比例して増えるのに,
cos θ は 1 ミリも動きません。
キャラの向きを固定したまま長さだけを伸ばすと,内積がそれに比例して増えていきます。一方で「向きは変わっていない」ことも同時に表示されます。この食い違いが,次の一手の理由です。
大きさで割って cosθ
そこで,内積を2人の大きさで割る。
cosθ=∣a∣∣b∣a⋅b大きさは三平方の定理と同じで,成分の2乗の和の平方根。4人ぶんを先に出しておく。
戦士アルファ ∣a∣=7200≒84.9
騎士ベータ ∣b∣=6250≒79.1
魔法使いガンマ ∣c∣=4950≒70.4
賢者デルタ ∣d∣=12150≒110.2

これで長さの影響が消え,純粋に向きだけの指標になる。この値は必ず −1 から 1 の間に収まる。その根拠が次の不等式である。
もう少し詳しくなぜ必ず −1 から 1 に収まるのか
コーシー・シュワルツの不等式:任意のベクトル a,b について ∣a⋅b∣≤∣a∣∣b∣。等号は2本が平行なときに限る。
証明は3行で済む。実数 t について ∣a+tb∣2≥0。展開すると
∣b∣2t2+2(a⋅b)t+∣a∣2≥0t の2次式がつねに非負なので判別式が 0 以下:
4(a⋅b)2−4∣a∣2∣b∣2≤0整理すれば主張を得る。両辺を ∣a∣∣b∣ で割れば ∣cosθ∣≤1。cosθ の値域は,この1行が保証している。
そして等号が成り立つのは2本が平行なとき,つまり b=ka と書けるときである。さきほど考えた「向きは同じで強さだけ2倍」のキャラは,まさにこの等号成立の場合だった。
cosθ の3つの目印
値の意味を3つの位置で確認しておく。
| なす角 | cosθ | 意味 |
|---|
| 0∘ | 1 | 同じ向き(配分がまったく同じ) |
| 90∘ | 0 | 直角(まったく別のタイプ) |
| 180∘ | −1 | 逆向き(正反対のタイプ) |

体験角度を回して cosθ を見る 2本の矢印の間の角度をスライダーで 0∘ から 180∘ まで回すと,cosθ の値が 1→0→−1 と連続的に変わります。どのあたりから「似ていない」と感じるか,自分の感覚と比べられます。
戦士から見た3人
戦士アルファを基準に,残りの3人との cosθ を計算する。
×
騎士ベータ ほぼ同じタイプ a⋅b=80⋅75+(−20)(−15)+20⋅20=6700 ∣a∣=802+202+202=7200,∣b∣=752+152+202=6250 cosθ=720062506700≒0.99
×
魔法使いガンマ 直交=別タイプ a⋅c=80⋅10+(−20)⋅65+20⋅25=800−1300+500=0 ∣a∣=7200,∣c∣=102+652+252=4950 cosθ=720049500=0
×
賢者デルタ ほぼ正反対 a⋅d=80(−70)+(−20)⋅85+20⋅5=−5600−1700+100=−7200 ∣a∣=7200,∣d∣=702+852+52=12150 cosθ=720012150−7200≒−0.77 魔法使いとの内積がぴったり 0 になるのが面白い。力の項 +800 と技の項 +500 を,魔法の項 −1300 がきれいに打ち消している。
シミュレーター2人のステータスを自由に決めて,似ている度を見る
内積 a·b—
大きさ |a|—
大きさ |b|—
cos θ—
なす角 θ—
—
片方を固定したまま,もう片方の長さだけを伸ばすとどうなるか。矢印は伸びても向きは変わらないので,内積は増えるのに cosθ は動きません。逆に,長さをそのままに向きだけ回すと cosθ が大きく動きます。cosθ がちょうど 0 になる組み合わせ(直交する2人)は,探してみると意外といくらでも見つかります。
世の中ベクトルだらけ
楽曲・味覚・天気・映画など,世の中の多くのデータはベクトルで表せる。そして音楽や動画のレコメンド,検索エンジンのランキングは,まさにこの「似ている度」で動いている。

もう少し詳しく平均を引くと,統計の相関係数になる
実データでは,各成分から平均を引いてから比べることがよくある。戦士 a=(80,−20,20) の平均は aˉ≒26.7 なので
a′=(53.3,−46.7,−6.7)この中心化したベクトルどうしでコサイン類似度を取ると,それは統計でおなじみのピアソンの相関係数に一致する。
r=∑i(ai−aˉ)2∑i(bi−bˉ)2∑i(ai−aˉ)(bi−bˉ)=cos(a′,b′)つまり相関係数とは,平均を引いたあとのコサイン類似度だった。
平均を引く操作には意味がある。「全能力が高いキャラ」と「全能力が低いキャラ」は,そのままだと向きが近いので cosθ が大きく出るが,平均を引くとどの能力に偏っているかだけが残る。何を「似ている」と呼びたいかで,引くか引かないかを選ぶ。
もっと先へ ── 成分を増やしていくと
ここまでは(力, 魔法, 技)の3成分だけを考えてきた。矢印として描けたのは,成分が3つだったからである。
では,キャラに素早さと運を足して5成分にしたらどうなるか。5次元の矢印は描けない。図がなくなった時点で,これまでの話は全部くずれてしまうのだろうか。
定義に「3」は一度も出てこない
内積の定義をもう一度見てみる。
a⋅b=a1b1+a2b2+a3b3やっていることは「成分ごとに掛けて,全部足す」だけだった。成分が5つでも100でも,まったく同じことができる。
a⋅b=i=1∑naibi∣a∣=i=1∑nai2cosθ=∣a∣∣b∣a⋅bどの式にも「3」という数字は出てこない。つまり図が描けるかどうかは,計算とは何の関係もなかったのである。
5成分でやってみる
戦士と騎士に素早さと運を足す。
a=(80,−20,20,30,10),b=(75,−15,20,25,40)成分ごとに掛けて足すだけ。
a⋅b=6000+300+400+750+400=7850∣a∣=8200≒90.6,∣b∣=8475≒92.1cosθ=90.6×92.17850≒0.943成分のときは 0.99 だった。素早さと運を加えると 0.94 に下がる。「運」で差がついたぶん,少しだけ似ていない,と読める。見るための軸を増やせば,判定も細かくなるわけである。
「直交」も,そのまま生き残る
内積が 0 なら直交,という言い方も次元によらず使える。たとえば4成分の
u=(1,1,1,1),v=(1,1,−1,−1)は u⋅v=1+1−1−1=0 で直交している。4次元の直角を目で見ることはできないが,「まったく別の方向を向いている」という意味はそのまま残る。
ここでいう「まったく別の方向」とは,つまり
その方向にどんなに進んでも,もう一方の方向にはいっさい進むことができない
ということである。平面で考えれば当たり前で,東へ何km歩いても北には1mmも進まない。東と北は直交しているからだ。u の向きにいくら進んでも v の側には1ミリも近づかない ── この関係が,図に描けない4次元でも,数千次元でもそのまま成り立つ。
戦士と魔法使いの内積がぴったり 0 だったのも同じで,戦士をどれだけ鍛え上げても,魔法使いの方向には一歩も近づけない。
実際には,もっと大きい
現実のデータの成分数は5どころではない。
| データ | よくある成分数 |
|---|
| 文章(単語の出現回数) | 数万 |
| 楽曲の特徴量 | 数十〜数百 |
| 画像(AIが扱う特徴ベクトル) | 数百〜数千 |
「向きの近さで似ているを測る」という考え方が,そのまま数千次元で動いている。図に描くことはもうできないが,やっていることは「成分ごとに掛けて,足す」だけである。