行列の転置と逆行列
転置はアテンション機構で頻繁に登場し、逆行列は「可逆変換」の理解に役立ちます——例えばPCAにおける座標変換などです。
転置:行と列の入れ替え
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 1 | 4 |
| 2 | 5 |
| 3 | 6 |
元々 (i, j) の位置にあった値は、転置後には (j, i) の位置に移ります。形状は m×n から n×m に変わります。
逆行列:変換を元に戻す
行列 A は1つの線形変換を表します。\( A^{-1} \) は「A の効果を元に戻す」ことを表します。
数学的表現:\( AA^{-1} = A^{-1}A = I \)(I は単位行列で、数字の 1 に相当します)。
持つのは正方行列かつフルランクの行列だけです。
非正方行列やランク不足の正方行列は「特異行列」であり、逆行列を持ちません——これは不可逆な操作に相当します。
重要な性質
- 積の転置は順序が反転する:\( (\mathbf{AB})^T = \mathbf{B}^T\mathbf{A}^T \)
- 積の逆行列も順序が反転する:\( (\mathbf{AB})^{-1} = \mathbf{B}^{-1}\mathbf{A}^{-1} \)
身近な例
転置:Excel の表の行と列の入れ替え
「名前が行、月が列」の販売表を転置すると、「名前が列、月が行」になります。
データは変わらず、並べ方が変わるだけ——これが転置です。
逆行列:Ctrl+Z で元に戻す
回転 + スケーリング操作(行列 A)を行い、元に戻したい場合(A^{-1})を考えます。
2つの操作の合成 = 何も変わらない(AA^{-1} = I、恒等変換)。
数学的定義
転置
\[ (\mathbf{A}^T)_{ij} = \mathbf{A}_{ji} \]逆行列
n×n 正方行列 A について、\( \mathbf{AB} = \mathbf{BA} = \mathbf{I}_n \) を満たす B が存在するならば、B = A^{-1} です。
Python で実践する
実例
A = np.array([[1, 2, 3], [4, 5, 6]])
print("A (2x3):\n", A)
print("A.T (3x2):\n", A.T)
print()
# (AB)^T = B^T @ A^T を検証
B = np.array([[1,2],[3,4],[5,6]]) # 3x2
AB = A @ B # (2,3) @ (3,2) = (2,2)
print("(AB)^T:\n", AB.T)
print("B^T @ A^T:\n", B.T @ A.T)
print("等しい:", np.allclose(AB.T, B.T @ A.T))
print()
# 逆行列
C = np.array([[2, 1], [5, 3]]) # 2x2 正方行列
C_inv = np.linalg.inv(C)
print("C:\n", C)
print("C^{-1}:\n", C_inv)
print("C @ C^{-1} = I:\n", C @ C_inv)
# 特異行列には逆行列がない
D = np.array([[1, 2], [2, 4]]) # 2行目は1行目の2倍
try:
np.linalg.inv(D)
except np.linalg.LinAlgError:
print("\n特異行列 D には逆行列がありません(2行目=2×1行目)")
A (2x3):
[[1 2 3]
[4 5 6]]
A.T (3x2):
[[1 4]
[2 5]
[3 6]]
C @ C^{-1} = I:
[[1. 0.]
[0. 1.]]
奇异矩阵 D 没有逆矩阵(第2行=2×第1行)
AIでの応用シーン
アテンション機構の K^T 操作
\( QK^T \) における Key 行列の転置により、(seq_len, d_k) の Q が (seq_len, d_k) の K と行列乗算できます——転置によって K は (d_k, seq_len) になり、内側の次元が一致します。この K^T は、すべての Transformer モデルのアテンション計算において最も重要な次元変換です。
線形回帰の閉形式解
\( \hat{\beta} = (X^TX)^{-1}X^Ty \)——転置と逆行列が同時に登場します。X^T X により結果が対称正定値行列(可逆)であることが保証され、その逆行列を求めることで解析解が得られます。sklearn の LinearRegression は正則化を加えない場合、内部でこれを計算しています。
勾配降下法におけるパラメータ更新
逆伝播では、重み勾配行列の形状が重み行列と一致している必要があり、それによって減算による更新が可能になります。例えば W が (d_out, d_in) の場合、その勾配 \nabla_W L も (d_out, d_in) です——転置は中間層で勾配が計算グラフ内を正しい次元で伝播するのを助けます。
その他の関連項目