第2回: ノルムの呪い: 意味と不確実性の未分化
注意事項
本回で扱う高次元空間の性質には、成立条件がある:
- 「高次元でほぼ直交」は、ベクトルが独立にランダムサンプリングされた場合に成り立つ。学習済み埋め込みは必ずしもランダムではなく、意図的な構造を持つため、この性質が常に成り立つとは限らない。
- 「距離の集中」は、各成分が独立同分布のランダムベクトルを仮定した場合の現象である。実データが低次元多様体上に集中している場合、集中は緩和されうる。
- 「距離より角度が安定」は多くの場合に経験的に観察されるが、普遍的法則ではない。データの性質、タスク、正規化の有無に依存する。
導入:一つの数値に詰め込まれた複数の意味
ベクトルには「向き」と「長さ」がある。向きが意味を、長さが大きさを表す。そう考えておけば、ひとまず困らないはずだった。ところが、高次元の表現学習では、この素朴な直感はあっさり破綻する。
深層学習以前、そして深層学習の初期においても、ベクトルのノルム(長さ) は曖昧な存在だった。それは「意味の強度」なのか、「モデルの確信度」なのか、それとも「単なるスケーリングノイズ」なのか。三つとも、ありそうな答えである。区別しようという発想自体が、これまでほとんど生まれなかった。
この「ノルムの呪い」を解剖しよう。そして、高次元空間が持つ奇妙な性質(距離の集中と直交性)を理解することで、なぜ「角度中心の設計」が必要になるのかを準備する。
未分化な指標としてのノルム
三重の意味
ベクトル
| 解釈 | 意味 | 例 |
|---|---|---|
| 意味の強度 | 概念がどれだけ「強く」表現されているか | Word2Vecで高頻度語のノルムが大きい |
| モデルの確信度 | 予測に対するモデルの自信 | ロジットの絶対値が大きいほど確信 |
| スケーリングノイズ | 学習過程で生じた偶発的なスケール | 初期化や学習率に依存する変動 |
問題は、これらが同じ数値に混在していることだ。
Word2Vecにおけるノルムの曖昧さ
Word2Vec(Mikolov et al., 2013)を例に考えよう。学習後の単語ベクトルを観察すると、ノルムは語の有意性(significance)(頻度と情報量が絡み合った量)を反映しており、たとえば固有名詞(proper nouns)は機能語(function words)よりノルムが大きい傾向がある(Schakel & Wilson, 2015)。
NOTE
条件依存性: この傾向は常に成り立つわけではなく、手法(SGNS/CBOW)、サブサンプリングの有無、負例分布、正則化、学習率スケジュール等によって変わりうる。また、入力側の埋め込み、出力側の埋め込み、あるいはそれらの平均など、どの表現を観察するかでも傾向は異なる。以下の議論は「典型的に観察される傾向」として理解されたい。
これは何を意味するのか?
- 解釈A(意味の強度): 有意性の高い語は「意味が濃い」から大きい
- 解釈B(学習の偏り): 頻度が高い語は更新回数が多いから大きくなっただけ
- 解釈C(情報量): 文脈が少なく固定的な語(固有名詞等)は情報が凝縮されているから大きい
どれか一つを選べれば話は簡単だが、そう都合よくはいかない。正解は不明瞭である。おそらく、これらが混ざり合っている。
確信度とノルムの混同
分類タスクでは、最終層の出力(ロジット)がSoftmaxに入力される。ロジットの絶対値が大きいほど、Softmax後の確率分布は「尖る」。
ここで、ロジット
自信満々に見える出力が、実は自信の表れではないかもしれない。このスケールは学習過程で制御されていないことが多い。結果として、「モデルが本当に確信しているのか」「たまたまスケールが大きいだけなのか」が区別できない。
NOTE
温度パラメータとの関係: Softmaxの「温度」
正規化しない時代の問題
深層学習の初期(2010年代前半)には、表現ベクトルを正規化せずに使うことが一般的だった。コサイン類似度を使う場合でも、計算時に正規化するだけで、表現自体は非正規化のままであることが多かった。
NOTE
例外の存在: タスクによっては、昔からコサイン類似度を前提として、事実上の正規化相当の運用をしていた例もある(情報検索、距離学習(metric learning)など)。ここでの記述は「代表的な深層学習の実践」についてである。
この設計には、以下の問題がある:
- 類似度とノルムの干渉(ハブ化の問題): 内積
を使う場合、ノルムが大きいベクトルは、あらゆるベクトルとの内積が大きくなりやすい。これにより、高頻度語などが無関係な検索クエリでも上位に出現する「ハブ化(hubness)」と呼ばれる現象が生じる。 - 学習の不安定性: ノルムが発散または崩壊すると、勾配も不安定になる
- 解釈の困難: ベクトルの各成分が何を意味するか分かりにくい
TIP
現代的な緩和策(Layer Normalization): 現代のTransformerモデルで標準的に使われる Layer Normalization も、この問題への回答の一つだ。LayerNormは各トークンベクトルの平均と分散を正規化するため、結果としてベクトルのノルムを
次元の呪いの幾何学的理解
高次元空間の逆説
「次元の呪い(curse of dimensionality)」という言葉は、Richard Bellmanが動的計画法の文脈で1957年に導入した(Bellman, 1957)。機械学習では、高次元空間でデータを扱う際に生じるさまざまな困難を指す。
その困難の中でも、最も直感に反するものが一つある。距離の集中(concentration of distances) である。
距離の集中:すべてが「同じくらい遠い」
期待値:
したがって
分散:
標準偏差は
同様に、
実験による確認
この現象を実験で確認しよう:
| 次元 | 距離の期待値 | 挙動 | |
|---|---|---|---|
| 3 | ばらつきが大きい | ||
| 100 | かなり集中 | ||
| 1000 | ほぼ一定値 | ||
| 10000 | 事実上、定数 |
IMPORTANT
集中の条件: この距離の集中は、各成分が独立同分布であることを仮定している。実データが低次元多様体上に集中している場合、あるいは成分間に強い相関がある場合、集中の程度は緩和される。「高次元だから必ず距離が区別できなくなる」わけではない。
ユークリッド距離が情報を失う瞬間
距離の集中は、最近傍探索(kNN) に深刻な影響を与えうる。
理想的には、「近い点」と「遠い点」を明確に区別したい。しかし、典型的な i.i.d. 設定では、次元が上がるにつれて最近傍と最遠傍の相対差が小さくなることが知られている。これは以下のように表現される:
すべての点が「だいたい同じ距離」になると、「近さ」の概念が曖昧になる。これが、第1回で触れた「kNNの高次元での困難」の数学的背景の一つである。
CAUTION
極限の条件: この式の収束は、どの極限を取るか(
CAUTION
内在次元との区別: アンビエント次元(座標の次元)が高くても、データの内在次元(多様体の次元)が低ければ、kNNは機能しうる。例えば、1000次元空間に埋め込まれた10次元多様体上のデータでは、多様体上の距離は依然として意味を持つ。
直交性の発見:呪いから祝福へ
ランダムベクトルはほぼ直交する
距離が集中して区別がつかなくなる。そんな空間に、実はもう一つ驚くべき性質が隠れている。ランダムに選んだ二つのベクトルは、ほぼ直交する。
単位球面上で一様ランダムに選んだ二つのベクトル
期待値:
これは対称性から明らか。
分散:
したがって、内積の標準偏差は
つまり、高次元では、ランダムなベクトル同士の角度は90°に集中する。
赤道への集中
この現象は、第0回で予告した「赤道集中」と表裏一体である。
幾何学的直感: 高次元球面では、「表面積のほとんどが赤道付近」に存在する。北極から見れば、ほぼすべての点が「真横」(90°)にある。
呪いを祝福に変える
近傍探索を狂わせる同じ性質が、見方を変えると武器になる。この直交性は、呪いではなく祝福と見なすこともできる。
祝福としての解釈:
| 性質 | 呪いとしての側面 | 祝福としての側面 |
|---|---|---|
| 距離の集中 | 近傍探索が困難 | ノイズに対してロバスト |
| 直交性 | ランダムな構造が見えない | 独立な表現を大量に詰め込める |
直交するベクトルは「互いに干渉しない」。高次元空間には、内積が小さい(ほぼ直交する)ベクトルを多数配置できる。
NOTE
球面符号との関係: 「内積が
向きだけで意味を表現する余地
この「直交性の祝福」は、本回の出発点だったノルムの曖昧さに、設計上の一つの答えを与える。
ノルムが意味の運び手として使われてきた背景には、「方向だけでは足りないのではないか」という暗黙の前提があった。方向だけで多数の表現を区別するには、互いの分離を保ったまま配置できる余地が必要である。
先ほどの議論のとおり、高次元空間では、内積のしきい値を固定しても、互いに十分離れた方向を指数的に多く配置できる。したがって、数万から数十万の語彙を数千次元の空間で方向によって区別する余地はある。ただし、必要な分離の大きさは、しきい値を表す
つまり「直交性の祝福」は、向きだけで意味を表現する設計を支える容量が高次元空間に備わっていることの根拠になる。これは意味構造そのものの保証ではなく、ノルムを固定して方向だけを使う設計(第3回で導入する)を可能にする、幾何学的な余地である。
ただし、この余地は意味構造の保証ではない。ランダムに選んだ方向は、意味を持たない方向の集合にすぎない。関連する表現を近く、役割の異なる表現を十分に分離して配置する構造は、データと学習目的に基づいて形成される。空間の容量が実現可能な配置の範囲を与え、学習がその中から目的に合う配置を選ぶのである。したがって、ノルムを固定して意味情報を方向に担わせる設計は幾何学的に可能だが、意味の割り当て自体は学習が担う。
NOTE
応用例: 複数の「専門家」ネットワークを用意し、入力に応じて一部だけを活性化する Mixture of Experts(MoE) は、入力表現をルーターが学習した領域に分ける設計の一例である。高次元空間には、複数の専門家が担当する領域を十分に分けて配置する余地がある。実際の領域の形状、専門家の担当範囲、重なりは、球面符号から決まるのではなく、ルーター、学習データ、学習条件によって決まる(第13回)。
ヒントンの苦闘:向きと長さを分離する試み
問題意識
ノルムの三重の意味に気づいていたのは、この講義だけではない。Geoffrey Hintonは、ニューラルネットワークの表現における「向き」と「長さ」の分離に長年取り組んできた。その背景には、「ノルムが複数の意味を担っている」という同じ問題意識がある。
RBM:エネルギー関数による表現学習
制限ボルツマンマシン(RBM: Restricted Boltzmann Machine) は、Hintonらが2000年代に精力的に研究した生成モデルである(Hinton, 2002; Hinton & Salakhutdinov, 2006)。
RBMは、可視層と隠れ層の間のエネルギー関数を定義し、低エネルギーの状態が「良い表現」に対応するように学習する。
ここで
RBMの文脈では、隠れ層の活性化パターンが「表現」となる。しかし、この表現においても、ノルム(活性化の総和)が何を意味するかは曖昧だった。
カプセルネットワーク:明示的な分離の試み
カプセルネットワーク(Capsule Networks) は、Hintonらが2017年に提案したアーキテクチャである(Sabour et al., 2017)。
そのアイデアは、「向き」と「長さ」を明示的に分離することである:
| 成分 | 意味 | 例(顔認識) |
|---|---|---|
| 向き(方向ベクトル) | 特徴の「姿勢」や「属性」 | 顔の向き、表情、照明 |
| 長さ(ノルム) | 特徴の「存在確率」 | その顔がどれだけ確実に存在するか |
カプセルの出力ベクトル
これにより、
カプセルネットワークの評価
カプセルネットワークは、理論的には美しいアイデアだが、実用上の課題が多いと指摘されている(Peer et al., 2021; Gu & Tresp, 2020):
- 計算コスト: 動的ルーティングが計算量を増やす
- スケーラビリティ: ImageNetのような大規模データセットへの適用が困難
- 性能: MNISTやsmallNORBなどの小規模データセットでは競争力があるが、CNNやTransformerに比べて、大規模ベンチマークでの優位性は限定的と報告されている
NOTE
カプセルネットワークの意義: 実用的な成功は限定的だったが、「向きと長さの分離」という問題提起は重要である。後のCosFace/ArcFace(第5回)やnGPTの正規化設計にも、「向き(方向)を重視し、長さを制御する」という共通の発想が見られる。ただし、これらの手法がカプセルネットワークから直接的な影響を受けたかどうかは、公開されている資料からは確認できない。共通する問題意識が独立に発展した可能性もある。
「なぜ長さを捨てられないのか?」
Hintonの苦闘は、根本的な問いを投げかける:
ノルムに意味があるなら、それを明示的にモデル化すべきではないか? ノルムに意味がないなら、なぜ捨てないのか?
どちらの問いも、突き詰めれば同じ結論に行き着く。中途半端に持たせるくらいなら、いっそ立場を決めてしまえばよい。ノルムに情報量や確信度を持たせたいなら、それは学習によって明示的に獲得されるべきであり、暗黙のうちに意味を込めたまま曖昧に扱い続けるわけにはいかない。この問いに対する一つの回答が、「最初から単位球面上で計算する」という設計方針である。次回、この方針を「プラネタリウムの建設」として導入する。
まとめ:ノルムの呪いと高次元の逆説
一つの数値に三つの意味を詰め込んでいたことが、そもそもの発端だった。高次元という舞台に立つと、この曖昧さとは別に、距離という指標そのものが裏切られる。近づくどころか一様に遠ざかり、代わりに角度という「空きスペース」が表現の豊かさを生んでいた。ヒントンがカプセルネットワークで挑んだのも、突き詰めれば同じ「向きと長さの分離」という課題である。
| 主題 | 要点 | 次の問い |
|---|---|---|
| ノルムの三重の意味 | 意味の強度、確信度、スケーリングノイズが混在し、制御不能 | 長さと向きを明示的に分離できないか |
| 次元の呪い | 高次元では距離が集中し、ユークリッド距離が情報を失う | 距離に代わる安定な類似度尺度は何か |
| 直交性の祝福 | ランダムな高次元ベクトルはほぼ直交しており、この「空きスペース」が表現の豊富さを生む | 角度(方向)中心の設計に切り替えられないか |
| ヒントンの苦闘 | カプセルネットワークは明示的分離を試みたが普及しなかった | 暗黙ではなく明示的なノルム設計が必要 |
この表の右端に並んだ問いは、どれも同じ場所を指している。回答は、第3回で得られる。「最初から単位球面上で計算する」という設計(ノルムを定数に固定し、方向だけを自由度として残す)が、混乱の根本原因を解消する。
次回予告
第3回「プラネタリウムの建設」では、ノルムの問題を根本から解決する設計方針(球面上での計算)を導入する。
「ノルムを捨てるのではなく、定数に固定して向きだけを自由度にする」という発想がどこから来るのか、そしてnGPTがこの発想をTransformerに徹底した結果、何が変わったのかを見る。角度中心の設計、正規化の実装上の注意点、球面上の確率分布(von Mises-Fisher分布)も扱う。「平らな地図」を捨て、「丸い地球儀」の上で表現学習を再構築する旅が始まる。
実装ノート:高次元の性質を体感する
NOTE
以下のコードは NumPy >= 1.20, Matplotlib >= 3.5 を前提とする。再現性のために np.random.seed(42) 等でシードを固定することを推奨。
距離の集中の可視化
コード例: 02_distance_concentration.py
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
def distance_concentration(dims, n_samples=10000):
"""各次元での原点からの距離分布を計算"""
results = []
for d in dims:
# 標準正規分布からサンプリング
X = np.random.randn(n_samples, d)
distances = np.linalg.norm(X, axis=1)
results.append(
{
"dim": d,
"mean": distances.mean(),
"std": distances.std(),
"relative_std": distances.std() / distances.mean(),
"distances": distances,
}
)
return results
dims = [3, 10, 100, 1000]
results = distance_concentration(dims)
# 結果の表示
print("次元 | 平均距離 | 標準偏差 | 相対標準偏差")
print("-" * 45)
for r in results:
print(f"{r['dim']:4d} | {r['mean']:8.2f} | {r['std']:8.2f} | {r['relative_std']:8.4f}")
# ヒストグラムの可視化
fig, axes = plt.subplots(1, 4, figsize=(16, 3))
for ax, r in zip(axes, results, strict=False):
ax.hist(r["distances"], bins=50, density=True, alpha=0.7)
ax.axvline(r["mean"], color="red", linestyle="--", label=f"mean={r['mean']:.1f}")
ax.set_title(f"d = {r['dim']}")
ax.set_xlabel("Distance from origin")
ax.legend()
plt.tight_layout()
plt.show()高次元での直交性の確認
コード例: 02_highdim_orthogonality.py
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
def check_orthogonality(dims, n_pairs=5000):
"""ランダムな単位ベクトル対の内積分布を計算"""
results = []
for d in dims:
# 単位球面上の一様ランダムベクトル
v1 = np.random.randn(n_pairs, d)
v1 = v1 / np.linalg.norm(v1, axis=1, keepdims=True)
v2 = np.random.randn(n_pairs, d)
v2 = v2 / np.linalg.norm(v2, axis=1, keepdims=True)
# 内積の計算
dots = np.sum(v1 * v2, axis=1)
# 角度に変換(度数法)
angles = np.arccos(np.clip(dots, -1, 1)) * 180 / np.pi
results.append(
{
"dim": d,
"dot_mean": dots.mean(),
"dot_std": dots.std(),
"angle_mean": angles.mean(),
"angle_std": angles.std(),
"angles": angles,
}
)
return results
dims = [3, 10, 100, 1000]
results = check_orthogonality(dims)
# 結果の表示
print("次元 | 内積平均 | 内積標準偏差 | 角度平均 | 角度標準偏差")
print("-" * 60)
for r in results:
print(
f"{r['dim']:4d} | {r['dot_mean']:+8.4f} | {r['dot_std']:12.4f} | "
f"{r['angle_mean']:8.1f}° | {r['angle_std']:8.1f}°"
)
# 角度のヒストグラム
fig, axes = plt.subplots(1, 4, figsize=(16, 3))
for ax, r in zip(axes, results, strict=False):
ax.hist(r["angles"], bins=50, density=True, alpha=0.7)
ax.axvline(90, color="red", linestyle="--", label="90°")
ax.set_title(f"d = {r['dim']}")
ax.set_xlabel("Angle (degrees)")
ax.set_xlim(0, 180)
ax.legend()
plt.tight_layout()
plt.show()Word2Vecにおけるノルムと頻度の関係(概念実験)
コード例: 02_word2vec_norm_frequency.py
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
# 擬似的なWord2Vecベクトル(実際のWord2Vecモデルがあれば置き換え可能)
# 高頻度語ほど更新回数が多く、ノルムが大きくなる傾向をシミュレート
n_words = 1000
dim = 100
# Zipf則に従う頻度
ranks = np.arange(1, n_words + 1)
frequencies = 1.0 / ranks # Zipf則: f ∝ 1/rank
frequencies = frequencies / frequencies.sum()
# 頻度に比例した「更新回数」でノルムが成長すると仮定
# (これは単純化したモデルであり、実際のWord2Vecとは異なる)
norms = np.sqrt(frequencies * 10000) # 単純化モデル:更新回数に比例してノルム成長
# 実際には有意性・情報量がノルムを左右する(本文参照)
# 散布図
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
plt.scatter(np.log10(frequencies), norms, alpha=0.5, s=10)
plt.xlabel("log10(Frequency)")
plt.ylabel("Norm (simulated)")
plt.title("頻度とノルムの関係(シミュレーション)")
plt.subplot(1, 2, 2)
plt.scatter(np.log10(ranks), norms, alpha=0.5, s=10)
plt.xlabel("log10(Rank)")
plt.ylabel("Norm (simulated)")
plt.title("順位とノルムの関係(シミュレーション)")
plt.tight_layout()
plt.show()
# 注意:これは概念的なシミュレーションです。
# 実際のWord2Vecベクトルでの検証には、gensimなどのライブラリを使用してください。参考文献
次元の呪いと距離の集中
- Bellman, R. (1957). Dynamic Programming. Princeton University Press. https://press.princeton.edu/books/paperback/9780691146683/dynamic-programming
- 「次元の呪い」という用語の起源。
- Beyer, K., Goldstein, J., Ramakrishnan, R., & Shaft, U. (1999). When Is "Nearest Neighbor" Meaningful? ICDT 1999, 217–235. DOI: 10.1007/3-540-49257-7_15
- 高次元での距離の集中と、kNNの困難を分析。
- Aggarwal, C. C., Hinneburg, A., & Keim, D. A. (2001). On the Surprising Behavior of Distance Metrics in High Dimensional Space. ICDT 2001, 420–434. DOI: 10.1007/3-540-44503-X_27
- さまざまな距離尺度の高次元での挙動を比較。
単語埋め込みとノルム
- Mikolov, T., Sutskever, I., Chen, K., Corrado, G. S., & Dean, J. (2013). Distributed Representations of Words and Phrases and their Compositionality. NeurIPS 2013. arXiv: 1310.4546
- Word2Vecの論文。
- Schakel, A. M. J., & Wilson, B. J. (2015). Measuring Word Significance using Distributed Representations of Words. arXiv: 1508.02297
- Word2Vecにおけるノルムと頻度の関係を分析。
RBMとカプセルネットワーク
- Hinton, G. E. (2002). Training Products of Experts by Minimizing Contrastive Divergence. Neural Computation, 14(8), 1771–1800. DOI: 10.1162/089976602760128018
- RBMの学習アルゴリズム(Contrastive Divergence)。
- Hinton, G. E., & Salakhutdinov, R. R. (2006). Reducing the Dimensionality of Data with Neural Networks. Science, 313(5786), 504–507. DOI: 10.1126/science.1127647
- 深層オートエンコーダとRBMによる事前学習。
- Sabour, S., Frosst, N., & Hinton, G. E. (2017). Dynamic Routing Between Capsules. NeurIPS 2017. arXiv: 1710.09829
- カプセルネットワークの原論文。
- Peer, D., Stabinger, S., & Rodríguez-Sánchez, A. (2021). Limitation of Capsule Networks. Pattern Recognition Letters, 144, 68–75. arXiv: 1905.08744 (2019)
- カプセルネットワークの限界(計算コスト、動的ルーティングの効果の疑問)を実験的に分析。
- Gu, J., & Tresp, V. (2020). Improving the Robustness of Capsule Networks to Image Affine Transformations. CVPR 2020. arXiv: 1911.07968
- カプセルネットワークの改良と、大規模データセットでの課題を議論。
球面符号と高次元幾何
- Conway, J. H., & Sloane, N. J. A. (1999). Sphere Packings, Lattices and Groups (3rd ed.). Springer. DOI: 10.1007/978-1-4757-6568-7
- 球面符号とパッキング問題の包括的な参考書。