機械学習の基礎!単位ベクトルとは?計算効率を上げる魔法の数字「1」の秘密

こんにちは。ゆうせいです。

みなさん、機械学習の勉強は進んでいますか。

エンジニアとしてデビューしたばかりの頃、「数学なんてライブラリがやってくれるから不要だろう」なんて思っていませんでしたか。実は私もそうでした。

でも、少し踏み込んだ実装をしようとすると、必ず壁にぶつかります。その一つが「ベクトル」です。

特に今回は、機械学習の世界でとても愛されている「単位ベクトル」についてお話ししましょう。

「単位」と聞くと難しそうに感じるかもしれませんが、要するに「長さを1にする」ということです。

なぜわざわざ長さを1にする必要があるのでしょうか。そのままの数字じゃダメなのでしょうか。

実は、この「1にする」という操作には、計算を爆速にしたり、データの不平等をなくしたりする深い意味があるのです。

高校数学を忘れてしまった人でも大丈夫です。ゆっくり紐解いていきましょう。

単位ベクトルってなに?

まずは言葉の定義から入りますね。

単位ベクトルとは、大きさが1であるベクトルのことです。

ベクトルというのは「向き」と「大きさ(長さ)」を持つ矢印のようなものだとイメージしてください。

この矢印の向きはそのまま保ちつつ、長さだけをキュッと縮めたり、あるいは伸ばしたりして、ピッタリ「1」の長さにそろえたもの。これが単位ベクトルです。

データの「濃さ」だけに注目する

例え話をしましょう。

あなたはカルピスを作るとき、原液と水の割合をどうしていますか。

Aさんは、コップ一杯(200ml)に対して、濃いめの配合で作りました。

Bさんは、大きな水筒(1L)に対して、全く同じ濃さの配合で作りました。

このとき、液体の「総量(大きさ)」はBさんの方が圧倒的に多いですよね。

でも、味の「濃さ(向き)」はAさんもBさんも同じです。

単位ベクトルにするという操作は、この「総量」の違いを無視して、「味の濃さ(配合比率)」だけに注目したいときに行う処理に似ています。

機械学習では、データの絶対量よりも、そのデータが持つ「性質の傾向」を見たい場面が多々あるのです。

どうやって計算するの?

では、実際にどうやって普通のベクトルを単位ベクトルにするのでしょうか。

これを専門用語で「正規化」と呼びます。

計算方法はとてもシンプルです。

あるベクトルを、そのベクトルの「長さ」で割り算すればいいのです。

たとえば、原点から座標 (3, 4) に伸びるベクトルがあるとします。

このベクトルの長さは、三平方の定理を使うと 5 になりますよね。

\sqrt{3^2 + 4^2} = \sqrt{9 + 16} = \sqrt{25} = 5

長さが 5 のベクトルを、長さ 1 にしたい。

どうすればいいでしょうか。

そうです。元の成分をそれぞれ 5 で割ってあげればいいのです。

X座標は 3 \div 5 = 0.6

Y座標は 4 \div 5 = 0.8

これで新しいベクトル (0.6, 0.8) ができました。

この新しいベクトルの長さを計算してみましょう。

\sqrt{0.6^2 + 0.8^2} = \sqrt{0.36 + 0.64} = \sqrt{1} = 1

見事に長さが 1 になりましたね!

これで単位ベクトルの完成です。

なぜ機械学習で重要なのか

ここからが本番です。

なぜエンジニアはわざわざ割り算をしてまで、長さを 1 にしたがるのでしょうか。

1. コサイン類似度の計算が楽になる

機械学習、特に「レコメンドシステム(おすすめ機能)」や「自然言語処理」では、データ同士がどれくらい似ているかを計算する場面が頻繁にあります。

これを測る指標の一つに「コサイン類似度」というものがあります。

二つの矢印がどれくらい同じ方向を向いているかを調べる計算なのですが、通常は以下の式を使います。

コサイン類似度 = (ベクトルAとBの内積) \div (Aの長さ \times Bの長さ)

ちょっと面倒くさそうですよね。割り算が入ると計算コストもかかります。

でも、もし最初からベクトルAとBが「単位ベクトル(長さが1)」だったらどうなるでしょう。

分母は 1 \times 1 = 1 になります。

つまり、割り算が消えてなくなります!

コサイン類似度 = ベクトルAとBの内積

これだけで済むのです。

何百万、何千万回と計算を繰り返すAIにとって、この「割り算を省略できる」というメリットは計り知れません。

2. 学習が安定する

ニューラルネットワークなどの学習において、入力されるデータの桁数がバラバラだと、AIが混乱してしまうことがあります。

あるデータは 0.1 くらいの大きさなのに、別のデータは 10000 くらいの大きさだと、大きな数字の方に引きずられて適切な学習ができません。

そこで、データをすべて単位ベクトル化(正規化)して、「みんな長さは1だよ」と揃えてあげることで、AIが公平にデータの特徴を捉えられるようになるのです。

メリットとデメリット

ここで一度、単位ベクトルを使うことの良し悪しを整理しておきましょう。

メリット

まず、先ほども触れた通り「計算速度の向上」が挙げられます。計算式がシンプルになるため、処理が軽くなります。

次に「スケーリングの影響を受けない」こと。データの絶対量(例えば文章の長さや、画像の明るさなど)に左右されず、中身の特徴(単語の分布や、色のバランス)だけを比較できます。

デメリット

最大のデメリットは「大きさの情報が失われる」ことです。

例えば、Webサイトの訪問者数を分析する場合、「10人が来た日」と「10000人が来た日」では、ビジネス的なインパクトが全く違いますよね。

しかし、これを単位ベクトルにしてしまうと、どちらも「長さ1」になってしまい、規模感の違いが消え去ってしまいます。

「量」そのものが重要な意味を持つデータの場合、単位ベクトル化は逆効果になることがあるので注意が必要です。

Pythonで確認してみよう

最後に、エンジニアのあなたならコードで見たほうが早いかもしれません。

PythonのNumPyライブラリを使うと、一瞬で計算できます。

import numpy as np

# 元のベクトル
v = np.array([3, 4])

# ベクトルの長さ(ノルム)を計算
length = np.linalg.norm(v)

# 単位ベクトルに変換(正規化)
unit_v = v / length

print(unit_v)
# 出力: [0.6 0.8]

これだけで完了です。

簡単ですよね!

まとめ

いかがでしたか。

単位ベクトルとは、「向き」という情報を純粋に取り出すために、「大きさ」をあえて「1」に揃えたベクトルのことでした。

機械学習の世界では、データの本質的な特徴を見抜くために、この「1」という数字が魔法のような力を発揮します。

計算を軽くし、学習を安定させる縁の下の力持ち、それが単位ベクトルなのです。

今後の学習として、まずは「線形代数」の基礎である「内積」について学んでみることをおすすめします。単位ベクトルと内積のペアは、機械学習のいたるところで顔を出しますよ。

もし、さらに詳しく知りたいことや、次に解説してほしい数学用語があれば、ぜひ教えてくださいね。

一緒にエンジニアとしての基礎体力をつけていきましょう。

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。