みんなのAI
機械学習AI論文
読み込み中…

学ぶ

🏅マイ実績

Ch.04

行列の積と線形変換:空間を操作する数学

チャプター別 数学図

チャプターを選ぶと、下の図がそのチャプターの内容に切り替わります。中級数学の流れを一覧で確認できます。

正方格子 → AAA → 傾いた格子

左の同じ座標の点が、右へ一気に移ります。格子全体が一緒に伸びます。

オレンジの A: この図の 行列 AAA(線形変換)。左の座標 x\mathbf{x}x に掛けて、右の点 AxA\mathbf{x}Ax を作ります。

入力出力a₁a₂xAxℝ²: 入力の2次元実数空間(座標の組)。回帰の決定係数 R² とは別です。ℝ²実数座標平面 · 入力ℝ²: 変換後の点を描く2次元実数空間。この図では入力と同じ次元です。ℝ²実数座標平面 · 出力A灰点線 = A=I のときの正方形

同じ平面上で正方格子が A により平行四辺形になり、x が Ax に移ります。

入力 / 枠|AAA|届く面|x↦Ax\mathbf{x} \mapsto A\mathbf{x}x↦Ax

この図だけ覚えよう

T(x)=AxT(\mathbf{x})=A\mathbf{x}T(x)=Ax。TTT は「行列 AAA を掛ける線形変換」に付けた名前(関数記号)です。T(x)T(\mathbf{x})T(x) は「x\mathbf{x}x に TTT を適用した結果」で、計算上は AxA\mathbf{x}Ax と同じ意味です。
青い領域 = AAA の二つの列ベクトルが張る平行四辺形。T(x)=AxT(\mathbf{x})=A\mathbf{x}T(x)=Ax は常にその内側(列の線形結合で届く範囲)にあります。
行列の積は、ただ数字をたくさん足し掛ける退屈な計算ではありません。行列は元データを回し、ねじり、圧縮するデジタル写真編集ソフトのスマートフィルターと同じ役割を果たします。本章では、ひとつのデータ(ベクトル)を編集ツール(行列)に通し、まったく別の次元へ写す線形変換(Linear Transformation)を掘り下げます。深層学習モデルの根幹 y=Wx+b\mathbf{y} = W\mathbf{x} + \mathbf{b}y=Wx+b が、どんな数学的意味で動くのかを丁寧に見ていきます。

行列の積と線形変換: 空間を自在に編集する

1. 線形変換(Linear Transformation):画像編集の「自由変形」ツール
概念: 透明なグリッドの上に描いた画像を Photoshop で開いたと想像してください。角を掴んで斜めに伸ばしたり、45°回転したり、せん断して潰したり——幾何学でいう線形変換は、まさにそういう操作です。
厳格なルール: このツールには壊してはいけないルールが二つあります。第一に、画像の中心にある原点 (0,0)(0,0)(0,0) は変形後も同じ位置に留まります。第二に、もともと直線だった線は曲がらず直線のまま、互いに平行だった線は平行のままです。
2. 行列×ベクトル (AxA\mathbf{x}Ax):原画像にフィルターをかける
概念: ベクトル x\mathbf{x}x はまだ何も加工していない「元データ(点の位置)」、行列 AAA は角度と比率で歪ませるスマートフィルター(変換ルール)です。フィルターをかける操作を AxA\mathbf{x}Ax(行列 AAA が x\mathbf{x}x に作用する)と書きます。
深層学習での使い方: ニューラルネットの1層は、y=Wx+b\mathbf{y} = W\mathbf{x} + \mathbf{b}y=Wx+b を作るためにこれを使います。
* WWW(重み行列):データを解析しやすい角度・比率へ歪める(線形変換)。
* b\mathbf{b}b(バイアスベクトル):レイヤーをまるごと横に動かすような平行移動。
「歪めてから動かす」結果が y\mathbf{y}y となり、次の層へ渡ります。
3. 行列×行列 (ABABAB):フィルターを順に重ねる
概念: AAA と BBB の積は、二つの編集フィルターを連続で適用することです。式は右から左へ読むので、まず BBB、その結果に AAA を重ねる意味になります。
要点(AB≠BAAB \neq BAAB=BA): 「横に2倍に伸ばしてから90°回転」は縦に細長い画像になり、「90°回転してから横に2倍」は横に広い画像になります。順序を変えると結果が変わるので、AB≠BAAB \neq BAAB=BA(交換法則は成り立たない)が重要です。
4. 積の次元合わせ:規格の合うケーブルをつなぐ
概念: フィルターを重ねるには、左行列の列数と右行列の行数がぴったり一致している必要があります。
要点: (m×n)(m\times n)(m×n) と (n×p)(n\times p)(n×p) を掛けると、接する nnn は計算の中で吸収され、(m×p)(m\times p)(m×p) が出力されます。実装ではデータ XXX と重み WWW の形を合わせるため転置を使い、Y=XWTY = XW^{\mathsf{T}}Y=XWT の形できれいに積みます。
5. 変換の具体例:3次元を平面に「押しつぶす」
例1 点 (x1,x2,x3)(x_1,x_2,x_3)(x1​,x2​,x3​) を z=0z=0z=0 の xyxyxy 平面に落とす(第3座標を捨てる)線形写像は、次のように書けます。
A=(100010000)A=\begin{pmatrix}1&0&0\\0&1&0\\0&0&0\end{pmatrix}A=​100​010​000​​
規則: x↦Ax\mathbf{x}\mapsto A\mathbf{x}x↦Ax。同じ積を 行ごとの内積 に分けて書くと次のとおりです。
ステップ1 — 式を立てる x=(x1,x2,x3)T\mathbf{x}=(x_1,x_2,x_3)^{\mathsf T}x=(x1​,x2​,x3​)T に対して
Ax=(100010000)(x1x2x3)A\mathbf{x}=\begin{pmatrix}1&0&0\\0&1&0\\0&0&0\end{pmatrix}\begin{pmatrix}x_1\\x_2\\x_3\end{pmatrix}Ax=​100​010​000​​​x1​x2​x3​​​
ステップ2 — 各行と x\mathbf{x}x の内積(iii 番目の成分 = AAA の iii 行目 · x\mathbf{x}x)
y1=1⋅x1+0⋅x2+0⋅x3=x1,y2=0⋅x1+1⋅x2+0⋅x3=x2,y3=0⋅x1+0⋅x2+0⋅x3=0.\begin{aligned} y_1 &= 1\cdot x_1+0\cdot x_2+0\cdot x_3 = x_1,\\ y_2 &= 0\cdot x_1+1\cdot x_2+0\cdot x_3 = x_2,\\ y_3 &= 0\cdot x_1+0\cdot x_2+0\cdot x_3 = 0. \end{aligned}y1​y2​y3​​=1⋅x1​+0⋅x2​+0⋅x3​=x1​,=0⋅x1​+1⋅x2​+0⋅x3​=x2​,=0⋅x1​+0⋅x2​+0⋅x3​=0.​
ステップ3 — 結果ベクトル
Ax=(y1y2y3)=(x1x20)A\mathbf{x}=\begin{pmatrix}y_1\\y_2\\y_3\end{pmatrix}=\begin{pmatrix}x_1\\x_2\\0\end{pmatrix}Ax=​y1​y2​y3​​​=​x1​x2​0​​
つまり x1,x2x_1,x_2x1​,x2​ はそのまま、x3x_3x3​ だけ 0 になります。幾何的には原点を通る xyxyxy 平面への正射影(orthogonal projection)であり、「1本の軸の情報を消す」フィルターを行列の一度の積で表した例です。Ch.02 の内積・射影の直感ともつながります。
実務者向け要点: 行列の積は、データをただの数の列ではなく、多次元空間で潰したり回したりする動的な空間変換ツール(y=Wx+b\mathbf{y} = W\mathbf{x} + \mathbf{b}y=Wx+b)です。層を積むときは規格((m×n)×(n×p)(m \times n) \times (n \times p)(m×n)×(n×p))を合わせることが最優先で、変換の順序(AB≠BAAB \neq BAAB=BA)が結果を根本から変えることを忘れないでください。
数十万ピクセルを一度に処理する並列の魔法
高解像度の写真一枚でもピクセルは数百万あり、一つずつ for 文で回すと1日かかっても足りません。行列の積は、それらを巨大な表(行列)にまとめ、変換ルールも別の行列として表します。だから「フィルターをかける」直感が一度の行列積にそのまま落ちます。
GPU はこの積を数千コアで同時に処理するよう設計されています。TensorFlow・PyTorch でよく見るバッチ GEMMは、サンプルを行に積んだ XXX に WWW を一度に掛け、Y=XWTY = XW^{\mathsf{T}}Y=XWT でミニバッチ全体を流し込みます。深層学習が大量データを速く学べるのは、行列という共通フォーマットでハードウェアの並列性を引き出せるからです。
あらゆるAIモデルを貫く共通言語
Netflix の推薦、テスラの車線認識、ChatGPT の対話——見かけは違っても、底流ではいつも Y=XWTY = XW^{\mathsf{T}}Y=XWT という行列積が動いています。全結合層・埋め込み・アテンションのスコアまで、名前は違っても根は行列×行列です。
この感覚があれば Shape mismatch のとき、どのブロックのサイズが合っていないかを早く特定できます。前列の列と後列の行が揃わなければ積が定義されないのは、ケーブル規格を合わせるのと同じです。この「共通言語」に慣れると、分野が違っても論文・コード・ログが同じ地図で読めます。
1) トランスフォーマーとアテンション:単語間の「注目マップ」を行列で
ChatGPT 系モデルの心臓であるアテンションは、文中の単語同士がどれだけ関係するかをスコア行列で一括計算します。QKTQK^{\mathsf{T}}QKT は「この単語があの単語をどれだけ見るか」の素スコアを高速に埋めます。ソフトマックスと VVV の重み付き和が載ってスケール付き内積アテンションが完成。一行で言えば、行列積で関係グラフを作り、同じ代数で重み付き和を取る構造です。
2) 線形層・バッチ学習:ミニバッチを一括で
全結合層は y=Wx+b\mathbf{y} = W\mathbf{x} + \mathbf{b}y=Wx+b の繰り返しです。学習では NNN サンプルを行に積んだ XXX に対し Y=XWT+1bTY = XW^{\mathsf{T}} + \mathbf{1}\mathbf{b}^{\mathsf{T}}Y=XWT+1bT のように一度に処理します。畳み込みもチャネルと空間を展開すれば大きな行列積として見られ、フレームワークが内部で GEMM を使う理由につながります。
3) 埋め込み・推薦:意味ベクトルを突き合わせる
単語・ユーザー・アイテムをベクトル化し、内積や行列積で類似度・スコアを出すと推薦・検索・ランキングが回ります。「誰が誰に近いか」を一枚の行列にまとめるイメージです。
1) PCA・次元削減:千次元を「影」に落とす
人間は3次元以上を直感的に描きにくいですが、データは数百・数千次元になりがちです。PCA は共分散を行列にし、固有ベクトル方向(分散の大きい軸)を選んでデータを射影します。線形変換として書けば「不要な方向を潰して本質の軸だけ残す」ことになります。可視化用の2次元散布図は、高次元の雲を行列で押しつぶした影だと考えられます。
2) 幾何の予習:後に出る固有値・行列式
同じ線形変換でも方向によって伸び縮みは違います。その特別な方向が固有ベクトル、伸び率が固有値です。列が作る平行四辺形や合成 ABABAB の感覚があれば、Ch.05 以降の可逆性・行列式・スペクトルがつかみやすくなります。
3) CG:画面に映すまでも行列
ゲームや CAD でも回転・平行移動・遠近法に同次座標と行列積を使います。「3D を 2D に映す」も座標を行列で一括で動かす話です。深層学習と CG は別分野に見えても、空間を行列で扱う点では同じ道具箱を共有します。
下の表は次元のルールとよく使う公式をまとめたものです。解説例は代表的な型ごとに段階を示しています。
  • 記号ABABAB
  • 意味AAA の列数 = BBB の行数のとき定義される
  • 記号(AB)ij(AB)_{ij}(AB)ij​
  • 意味AAA の iii 行目と BBB の jjj 列目の内積
  • 記号AxA\mathbf{x}Ax
  • 意味AAA の各行と x\mathbf{x}x の内積からなるベクトル
  • 記号(AB)T(AB)^{\mathsf T}(AB)T
  • 意味BTATB^{\mathsf T}A^{\mathsf T}BTAT
  • 記号合成
  • 意味x↦A(Bx)=(AB)x\mathbf{x}\mapsto A(B\mathbf{x})=(AB)\mathbf{x}x↦A(Bx)=(AB)x
  • 記号線形層
  • 意味y=Wx+b\mathbf{y}=W\mathbf{x}+\mathbf{b}y=Wx+b(重み WWW、バイアス b\mathbf{b}b)
記号意味
ABABABAAA の列数 = BBB の行数のとき定義される
(AB)ij(AB)_{ij}(AB)ij​AAA の iii 行目と BBB の jjj 列目の内積
AxA\mathbf{x}AxAAA の各行と x\mathbf{x}x の内積からなるベクトル
(AB)T(AB)^{\mathsf T}(AB)TBTATB^{\mathsf T}A^{\mathsf T}BTAT
合成x↦A(Bx)=(AB)x\mathbf{x}\mapsto A(B\mathbf{x})=(AB)\mathbf{x}x↦A(Bx)=(AB)x
線形層y=Wx+b\mathbf{y}=W\mathbf{x}+\mathbf{b}y=Wx+b(重み WWW、バイアス b\mathbf{b}b)
① 次元 掛ける前に内側の二つの数が一致している必要があります。
② バッチ 行がサンプルなら各行に同じ WWW を掛け、`GEMM` で処理します。

解説例

例1 — 積の形
問: AAA が 4×74\times 74×7、BBB が 7×37\times 37×3 のとき ABABAB は?
答: 4×34\times 34×3。

例2 — 合成の順序
問: x\mathbf{x}x に「BBB のあと AAA」を対応する行列は?
答: ABABAB。

例3 — 転置
問: (AB)T(AB)^{\mathsf T}(AB)T は?
答: BTATB^{\mathsf T}A^{\mathsf T}BTAT。

例4 — 列の見方
問: Ae2A\mathbf{e}_2Ae2​ は?
答: AAA の第2列。

例5 — バッチ
問: 行がサンプルである XXX に線形層を一度に?
答: よく XWTXW^{\mathsf T}XWT の形を使います。

練習問題

線形写像 T(x)=AxT(\mathbf{x})=A\mathbf{x}T(x)=Ax が満たすべき性質として常に正しいものは?
1 / 10