28

第2章

線形代数

線形代数は,科学と工学全体で広く使われている数学の一分野である.しかし,線形代数は
離散数学ではなく連続数学の一種なので,コンピュータ科学者の多くには,その経験がほとん
どない.線形代数の深い理解は,多くの機械学習アルゴリズム,特に深層学習の理解と取り扱
いに不可欠である.そこで深層学習の紹介に先立ち,線形代数の主要な知識に焦点を当てた
事前説明を行う.

線形代数に慣れている読者は,本章を飛ばしてもよい.過去にこれらの概念に関する経験が
あるが,重要な公式を見直すための詳しい参考書が必要なら,The Matrix Cookbook(Petersen
and Pedersen, 2006) をお勧めする.線形代数に全く触れたことがない読者は,本書を読むの
に十分な内容を本章で学べるが,(Shilov, 1977) のように,特に線形代数に焦点を当てた他の
教科書を参照することを強くお勧めする.本章では,数多くの重要な線形代数の話題のうち,
深層学習の理解に不要なものは完全に割愛する.

2.1 スカラー,ベクトル,行列,テンソル
線形代数の学問では次のような数種類の数学的対象を扱う.

• スカラー(Scalars):スカラーは単なる単一の数である.これは線形代数の他の研究
対象のほとんどが,通常は複数の数からなる配列であるのとは対照的である.スカラー
はイタリックで書かれる.通常,小文字の変数名がスカラーに割り当てられる.スカ
ラーを導入するときは,そのスカラーがどんな種類の数なのかを明示する.例えば,実
数値のスカラーを定義して「s ∈ R を直線の傾きとする」,あるいは自然数のスカラー
を定義して「n ∈ N をユニットの個数とする」のように言う場合がある.
第 2. 線形代数

• ベクトル(Vectors):ベクトルは数値の配列である.数字は順番に並べられている.
その順序に対応したインデックスで,個々の要素を示すことができる.通常,ベクトル
は x のように,太字の小文字で記す.ベクトルの要素は,イタリック体のベクトル名に
下付き文字を添えて区別される.x の 1 番目の要素は x1 ,2 番目の要素は x2 ,のよう
に記述される.ベクトルに格納できる数値の種類についても説明が必要である.各要
素が R に含まれ,ベクトルの要素数が n 個の場合,そのベクトルは R のデカルト積を
n 回とることで形成される集合に含まれ,その集合は Rn と表記される.ベクトルの要
素を明示的に指定する必要があるときは,次のように角括弧で囲まれた列で表記する.
⎡ ⎤
x1
⎢ x2 ⎥
⎢ ⎥
x=⎢ .. ⎥. (2.1)
⎣ . ⎦
xn

ベクトルは,空間上の点を表しているとみなすことができて,このときそれぞれの要素
は各軸に沿った座標を与える.
ベクトルの要素の集合に,インデックスを振る必要がある場合がある.この場合,イン
デックスを含む集合を定義して,その集合を下付き文字で記す.例えば,x1 ,x3 ,x6
を対象にする場合,集合 S = {1,3,6} を定義し,xS と書く.− 記号はある集合の補
集合のインデックスを示すために使われる.例えば x−1 は,x のうち x1 以外の全要
素を含むベクトルである.x−S は,x のうち x1 ,x3 ,x6 以外の全要素を含むベクトル
である.
• 行列(Matrices):行列は 2-D の数値配列なので,各成分は 1 つだけでなく 2 つのイ
ンデックスで示される.通常,行列の変数名は,A のように太字の大文字で表す.実
数値行列 A の高さが m で幅が n のとき,A ∈ Rm×n と表す.通常,行列の要素を示
す場合は,行列名に太字のフォントではなくイタリックを使い,インデックスはコンマ
で区切って並べる.例えば,A1,1 は,A の左上の成分で,Am,n は右下の要素である.
水平座標に「:」を書くことで,垂直座標が i である全ての要素を指定できる.例えば
Ai,: は,A の垂直座標 i における水平な断面を示している.これは,A の i 番目の行
(row)と言う.同様に,A:,i は,A の i 番目の列(column)である.行列の成分を
明示的に指定する必要があるときは,その成分を角括弧で囲まれた配列として以下の
ように表記する. ' (
A1,1 A1,2
. (2.2)
A2,1 A2,2

複数の文字で表される行列値の式に,インデックスを振る必要が生じることがある.こ

29
第 2. 線形代数

2 3
A1,1 A1,2 
A1,1 A2,1 A3,1
A = 4 A2,1 A2,2 5 ) A> =
A1,2 A2,2 A3,2
A3,1 A3,2

図 2.1: 行列の転置は,主対角線に対する鏡像と考えられる.

の場合,その数式の後ろにインデックスを振るが,どの文字も小文字には変えない.例
えば f (A)i,j は,関数 f を A に適用して得られた行列の (i, j) 成分である. 
• テンソル(Tensors):場合によっては,3 つ以上の軸を持つ配列が必要になる.一般
的な場合では,軸の数が可変で,規則的なグリッド上に配置された数字の配列はテンソ
ルとして知られている.「A」という名称のテンソルを次の書体で表記する:A.A の
座標 (i, j, k) 成分を Ai,j,k と表す.

行列に関する重要な演算の 1 つに転置(transpose)がある.行列の転置とは,左上の角
から始まって右下までの主対角線(main diagonal)と呼ばれる行列の対角線に対する鏡像
である.この演算の視覚的な描写を,図2.1に示す.行列 A の転置を A⊤ と表し,これは以下
のように定義される.
(A⊤ )i,j = Aj,i . (2.3)

ベクトルは,列を 1 つだけ含む行列と考えられる.したがってベクトルの転置は,行を 1
つだけ持つ行列である.ベクトルを定義するとき,例えば x = [x1 , x2 , x3 ]⊤ のように,ベク
トルの要素を行の行列として本文中に書き出し,さらに転置演算子を使って,これを普通の列
ベクトルに変形させる場合がある.

スカラーは,要素を 1 つだけ持つ行列と考えられる.このことから,スカラーの転置はその
スカラー自体になる,つまり a = a⊤ であることがわかる.

同じ型の行列同士は,単に対応する要素を足し合わせることで,加算ができる.すなわち,
C = A + B ,ただし Ci,j = Ai,j + Bi,j .
行列にスカラーを足したり,あるいはスカラーを掛けたりするには,単に行列の各要素に対
して演算を行えばよい.すなわち,D = a · B + c,ただし Di,j = a · Bi,j + c.

30
第 2. 線形代数

深層学習の文脈では,あまり一般的でない記法も用いられている.行列とベクトルの加算
による,別の行列の生成を許容している.すなわち,C = A + b,ただし Ci,j = Ai,j + bj .
言い換えれば,ベクトル b が行列の各行に追加されることになる.この簡略化により,それ
ぞれの行で加算を行う前に,b を各行にコピーした行列を定義せずに済む.b を暗黙的に多く
の場所にコピーすることは,ブロードキャスティング(broadcasting)と呼ばれる.

2.2 行列とベクトルの乗算
行列に関わる最も重要な演算の 1 つが,2 つの行列の乗算である.行列 A と B を掛けた行
列の積(matrix product)は,第 3 の行列 C となる.この積が定義されるためには,A の
列の数と B の行の数は同じでなければならない.A の型が m × n で,B の型が n × p なら,
C の型は m × p となる.行列の積は,2 つまたはそれより多くの行列を一緒に並べて,例え
ば以下のように書ける.
C = AB. (2.4)

積の演算は,以下で定義される.
!
Ci,j = Ai,k Bk,j . (2.5)
k

2 つの行列の積は通常,単純に個々の成分の積を並べた行列ではないことに注意されたい.
そのような演算も存在して,要素ごとの積(element-wise product)またはアダマール積
(Hadamard product)と呼ばれ,A ⊙ B と表記される.

同じ次元の 2 つのベクトル x と y の間のドット積(dot product)とは,行列の積 x⊤ y
である.行列の積 C = AB は,A の i 行と B の j 列の内積として Ci,j を計算したものとみ
なせる.

行列の積の演算には,行列の数学的な解析をしやすくする有用な性質が数多く存在する.例
えば,行列の乗算は分配法則を満たしている.

A(B + C) = AB + AC. (2.6)

また,結合法則も満たしている.

A(BC) = (AB)C. (2.7)

行列の乗算はスカラーの乗算とは異なり,交換法則を満たさない(条件 AB = BA は必ずし
も成立しない).しかし,2 つのベクトル間の内積は可換である.

x⊤ y = y ⊤ x. (2.8)
31
第 2. 線形代数

行列の積の転置は,単純な形になる.

(AB)⊤ = B ⊤ A⊤ . (2.9)

ここから,このような積の値がスカラーであり,したがってそれ自身の転置に等しいという事
実を利用すれば,式2.8を次のように書くことができる.
! "⊤
x⊤ y = x⊤ y = y ⊤ x. (2.10)

本書のテーマは線形代数ではないので,ここでは行列の積の有用な性質を包括的に挙げた
リストを示すことはしないが,もっと多くの性質が存在することに留意されたい.

ここまでに学んだ線形代数の知識で,次のような線形方程式系を記述することができる.

Ax = b (2.11)

ただし,A ∈ Rm×n は既知の行列であり,b ∈ Rm は既知のベクトル,そして x ∈ Rn は求め
たい未知の変数を持つベクトルだとする.x の各要素 xi はそれぞれ未知の変数である.A の
各行と b の各要素からもう 1 つの制約が課される.式2.11は以下のように書き換えられる.

A1,: x = b1 (2.12)

A2,: x = b2 (2.13)

... (2.14)

Am,: x = bm . (2.15)

または,さらに明示的に,以下のように書ける.

A1,1 x1 + A1,2 x2 + · · · + A1,n xn = b1 (2.16)

A2,1 x1 + A2,2 x2 + · · · + A2,n xn = b2 (2.17)

... (2.18)

Am,1 x1 + Am,2 x2 + · · · + Am,n xn = bm . (2.19)

行列とベクトルの積の表記は,この形式の方程式をもっと簡潔に表記したものである.

32
第 2. 線形代数

⎡ ⎤
1 0 0
⎣ 0 1 0 ⎦
0 0 1

図 2.2: 単位行列の例.これは I3 である.

2.3 単位行列と逆行列
線形代数には,A の多くの値に対して解析的に式2.11を解くことを可能にする,逆行列法
(matrix inversion)という強力な手段がある.

逆行列法を説明するために,まず単位行列(identity matrix)の概念を定義する必要があ
る.単位行列とは,任意のベクトルに掛け合わせてもそのベクトルを変化させないような行
列である.n 次元のベクトルを変えない単位行列を In と記す.形式的には,In ∈ Rn×n で,
かつ以下のように表せる.
∀x ∈ Rn , In x = x. (2.20)

単位行列の構造は単純で,主対角線に沿った成分は 1,他の成分は全てゼロとなっている.
単位行列の例は図2.2を参照してほしい.

A の逆行列(matrix inverse)は A−1 と表され,その定義は以下のようになる.

A−1 A = In . (2.21)

これで,以下の手順を利用して,式2.11を解くことができる.

Ax = b (2.22)

A−1 Ax = A−1 b (2.23)

In x = A−1 b (2.24)

x = A−1 b. (2.25)

もちろんこの手順は,A−1 を見つけられるかどうかに依存している.次項で A−1 が存在
する条件を議論する.

A−1 が存在する場合,それを閉形式で求めるためのアルゴリズムがいくつか存在する.理
論的には,同じ逆行列を使って,b の異なる値について,何度も方程式を解くことができる.
33
第 2. 線形代数

しかし,A−1 は主に理論的な手段として有用なのであって,実際には,ほとんどのソフトウェ
アアプリケーションで実用としては使わない方がよい.A−1 は,デジタルなコンピュータで
は限定された精度で表現されてしまうため,通常は b の値を利用するアルゴリズムを使う方
が,得られる x の推定値の精度が高くなる.

2.4 線形従属と張る空間
A−1 が存在するためには,式2.11が b のどんな値に対しても 1 つだけ解を持たなければな
らない.b の値のいくつかに対して,連立方程式の解がない,または無限に多くの解を持つ場
合がある.しかし,ある b に対して,解の数が 2 個以上かつ有限個となることはない.なぜ
なら,もし x と y の両方が解であれば,任意の実数 α について

z = αx + (1 − α)y (2.26)

も解となるからである.

方程式の解の数を解析するために,A の列が,原点(origin)(全ての要素が 0 のベクト
ルで指定される点)から移動できる様々な方向を指定していて,b に到達する道筋の数を決定
するものだと考えてみよう.この見方において,x の各要素は,それぞれの方向に進む距離を
指定している.つまり,xi は列 i の方向に進む距離を示している.
!
Ax = xi A:,i . (2.27)
i

一般的に,この演算は線形結合(linear combination)と呼ばれる.形式的には,いくつか
のベクトルから成る集合 {v(1),. . . ,v(n)} の線形結合は,それぞれのベクトル v (i) に対応す
るスカラーの係数を掛け,その結果を加算したものになる.
!
ci v (i) . (2.28)
i

ベクトルの集合の張る空間(スパン,span)とは,元のベクトルの線形結合によって得ら
れる全ての点から成る集合である.したがって,Ax = b に解があるかどうかは,b が A の
列の張る空間に含まれるかどうかを調べれば判定できる.この場合の張る空間は,A の列空
間(column space)または値域(range)として知られている.

Ax = b が b ∈ Rm の全ての値に対して解を持つためには,A の列空間が Rm 全体である
ことが必要である.もし列空間から除外される Rm 内の点があるなら,その点は解を持たな
い b の潜在的な値である.A の列空間が Rm 全体であるという必要条件はただちに,A は少

34
第 2. 線形代数

なくとも m 列を持たねばならないこと,すなわち n ≥ m を含意している.それ以外の場合
は,列空間の次元数は m 未満になる.例えば,3 × 2 行列を考えてみる.対象となる b は 3
次元だが,x は 2 次元しかないので,x の値を動かしても,せいぜい R3 の中の 2 次元平面内
をなぞれるだけである.この方程式は,b がその平面上にある場合にのみ解を持つ.

n ≥ m は,すべての点が解を持つための必要条件に過ぎない.列の一部が冗長になる可能
性があるため,これは十分条件ではない.2 つの列が同じである 2 × 2 行列を考えてみよう.
この行列は,そこから 1 つの列だけを複製した 2 × 1 行列と同じ列空間を持つ.言い換える
と,この列空間はまだ単なる直線でしかないので,たとえ 2 列あっても,R2 全体を覆うこと
はできない.

この冗長性は線形従属(linear dependence)として知られている.ベクトルの集合は,
その集合内のどのベクトルも他のベクトルの線形結合ではない場合,線形独立(linearly
independent)と呼ばれる.集合内のベクトルの線形結合となるベクトルを,同じ集合に追
加しても,その新しいベクトルは集合の張る空間に点を加えない.このことは,行列の列空
間が Rm 全体を覆うためには,その行列には m 個の線形独立な列を持つ集合が少なくとも 1
つ必要になることを意味している.これは式2.11が b のあらゆる値に対して解を持つための,
必要十分条件である.必要条件は,集合がちょうど m 個の線形独立な列を持つことであって,
少なくとも m 個あればいいということではないことに注意してほしい.相互に線形独立な列
の数が m 個を超えるような m 次元ベクトルの集合は存在しないが,列の数が m 個を超える
行列であれば,そのような集合を複数持つ場合がある.

行列が逆行列を持つためには,式2.11が b の各値に対して最大で解が 1 つであることも必
要である.そのためには,行列の列の数を最大で m 個とする必要がある.それ以外の場合は,
各解をパラメータ化する方法が複数通り存在する.

同時にこれは,行列が正方(square)でなければならないことを意味している.つまり,
m = n で,かつ全ての列が線形独立でなければならない.線形従属な列を持つ正方行列は,
特異(singular)と呼ばれる.

A が正方行列でない,あるいは正方行列だが特異行列である場合でも,この方程式を解く
ことは可能である.しかし,その解を見つけるために逆行列法を用いることはできない.

ここまで,逆行列は左から掛けると説明してきたが,右から掛ける逆行列を定義することも
可能である.
AA−1 = I. (2.29)

正方行列の場合,左から掛ける逆行列と右から掛ける逆行列は等しくなる.

35
第 2. 線形代数

2.5 ノルム
ベクトルの大きさを計算しなければならない場合がある.通常機械学習では,ノルム
(norm)という関数を使って,ベクトルの大きさを計算する.形式的には,ノルム Lp は次の
ように得られる.
! # p1
"
||x||p = |xi |p . (2.30)
i

ここで p ∈ R, p ≥ 1 である.

Lp ノルムを含めて,ノルムはベクトルを非負の値に写像する関数である.直感的には,ベ
クトル x のノルムは,原点から点 x までの距離を表している.より厳密には,ノルムは次の
性質を満たす任意の関数 f である.

• f (x) = 0 ⇒ x = 0
• f (x + y) ≤ f (x) + f (y) (三角不等式(triangle inequality))
• ∀α ∈ R, f (αx) = |α|f (x)

p = 2 である L2 ノルムは,ユークリッドノルム(Euclidean norm)として知られてい
て,これは単に原点から x で示される点までのユークリッド距離である.L2 ノルムは機械学
習で頻繁に使用されるため,単に ||x|| と表記されて,添え字の 2 は省略されることが多い.
また,ベクトルの大きさを L2 ノルムの二乗で示すこともよくあり,単に x⊤ x で計算できる.

L2 ノルムの二乗は,L2 ノルムそのものよりも,数学的にも計算的にも扱いやすい.例え
ば,L2 ノルムの二乗の x の各要素に対する微分はそれぞれ,x の対応する要素にのみ依存す
るが,一方の L2 ノルムではどの微分もベクトル全体に依存する.さまざまな状況で,L2 ノ
ルムの二乗は原点近くでは非常にゆっくりと増加するため,望ましくない場合がある.機械
学習への応用では,厳密にゼロである要素と,小さいが非ゼロ要素との区別が重要な場合があ
る.このような場合は,全ての場所において同じ割合で増加するが,数学的な単純性を保持し
た関数である L1 ノルムを使う.L1 ノルムは次のように単純化できる.
"
||x||1 = |xi |. (2.31)
i

L1 ノルムが機械学習でよく使われるのは,ゼロの要素とゼロ以外の要素の差が非常に重要で
ある場合である.x の要素が 0 から ϵ だけ離れるたびに,L1 ノルムは ϵ だけ増加する.

36
第 2. 線形代数

非ゼロ要素の数を数えてベクトルの大きさを測ることがある.この関数を「L0 ノルム」と
呼ぶ著者もいるが,これは誤った用語の使い方である.ベクトルを α 倍しても,非ゼロ要素
の数は変わらないので,ベクトル内の非ゼロ要素の数はノルムではない.L1 ノルムは,非ゼ
ロ要素の数の代用としてよく使われる.

機械学習でよく出てくるもう 1 つのノルムは L∞ ノルムであり,最大値ノルム(max
norm)とも呼ばれる.最大値ノルムは,次のようにベクトルの中で絶対値が最大の要素の絶
対値である.
||x||∞ = max |xi |. (2.32)
i

行列のサイズを調べたい場合もある.深層学習の観点で,これを行う最も一般的な方法は,
フロベニウスノルム(Frobenius norm)である.
!"
||A||F = A2i,j . (2.33)
i,j

これはベクトルの L2 ノルムに似ている.

2 つのベクトルの内積は,ノルムで書き直すことができる.具体的には次のようになる.

x⊤ y = ||x||2 ||y||2 cos θ. (2.34)

ただし θ は x と y の間の角度である.

2.6 特殊な行列とベクトル
特殊な行列やベクトルの中には特に便利なものがある.

対角(Diagonal)行列は大部分がゼロで,主対角線に沿ってのみ非ゼロ成分がある.形式
的には,行列 D はすべての i ̸= j について Di,j = 0 のときのみ対角行列である.ここまでで
既に対角行列の 1 つの例として単位行列を学んでいる.単位行列は,すべての対角成分が 1
の対角行列である.対角成分がベクトル v の要素で与えられる正方対角行列を,diag(v) と記
す.対角行列が興味深いのは,対角行列の掛け算の計算効率が良い点である.diag(v)x を計
算する場合,各要素 xi を vi 倍すればよい.言い換えれば,diag(v)x = v ⊙ x である.正方
対角行列の逆行列もまた計算効率が良い.逆行列が存在するのは,全ての対角成分が非ゼロ
場合のみであり,その場合は,diag(v)−1 = diag([1/v1 , . . . , 1/vn ]⊤ ) である.多くの場合で,
任意の行列に関する一般的な機械学習アルゴリズムを導き出せるが,いくつかの行列を対角
行列に限定すれば,もっと計算負荷の低い(そしてもっと記述しやすい)アルゴリズムが得ら
れることもある.
37
第 2. 線形代数

全ての対角行列が正方行列である必要はない.長方形の対角行列を作ることが可能である.
非正方対角行列は逆行列を持たないが,それでも乗算のコストは高くない.非正方対角行列
D の場合,積 Dx は x の各要素を拡大縮小するが,D が幅より高さがあるなら,結果にゼ
ロをいくつか連結して挿入し,D は高さより幅があるなら,ベクトルの最後の要素のいくつ
かを破棄する.

対称(symmetric)行列は,その転置行列が元の行列と同じになる行列である.

A = A⊤ . (2.35)

対称行列は,順序に依存しない 2 つの引数を持つ関数によって成分が生成される場合に出て
くることが多い.例えば,A が距離を成分として持つ行列で,Ai,j が点 i から点 j までの距
離を表すとすると,距離関数は対称なので,Ai,j = Aj,i となる.

単位ベクトル(unit vector) は,単位ノルム(unit norm)

||x||2 = 1 (2.36)

を持つベクトルである.

ベクトル x とベクトル y は,x⊤ y = 0 のとき,互いに直交(orthogonal)している.こ
れは,両方のベクトルのノルムが非ゼロなら,互いに 90 度の角度を成していることを意味す
る.Rn では,ノルムが非ゼロベクトルが最大で n 個,互いに直交する可能性がある.ベクト
ルが直交しているだけでなく単位ノルムも持つとき,正規直交(orthonormal)と呼ぶ.

直交行列(orthogonal matrix)は正方行列で,その行が互いに正規直交で,かつ列も互
いに正規直交となる行列である.

A⊤ A = AA⊤ = I. (2.37)

このことから,
A−1 = A⊤ (2.38)

となり,その逆行列が簡単に計算できるので,直交行列は興味深い.直交行列の定義には十分
注意されたい.直感に反して,それらの行は単に直交しているのではなく,全てが正規直交し
ている.行または列が直交しているが正規直交ではない行列を指す特別な用語はない.

2.7 固有値分解
数学的な対象の多くは,対象の表現方法の選択によらず,対象を構成部分に分解したり,そ
の普遍的な性質を探したりする方がより理解しやすくなる.
38
第 2. 線形代数

例えば,整数は素因数に分解できる.12 という数字の表現は,10 進数で書くか 2 進数で書
くかによって変わるが,12 = 2 × 2 × 3 は常に真である.例えばこの表現から,12 は 5 で割
り切れないとか,12 の整数倍は 3 で割り切れるといった有用な性質を知ることができる.

整数を素因数に分解することで,その本質が発見できるように,行列を分解することで,成
分の配列という表現からは明らかではない,行列の機能的性質についての情報が得られる.

最も広く使用されている行列分解の 1 つに固有値分解(eigendecomposition)がある.
これは行列を固有ベクトルと固有値の集合に分解するものである.

正方行列 A の固有ベクトル(eigenvector)とは,A を掛けたとき,

Av = λv (2.39)

のようにその縮尺のみが変わる非ゼロベクトル v のことである.スカラー λ は,この固有ベ
クトルに対応する固有値(eigenvalue)と呼ばれる.(v ⊤ A = λv ⊤ となるような左固有ベク
トル(left eigenvector)もあるが,通常は右固有ベクトルに関心がある.)

v が A の固有ベクトルならば,s ∈ R, s ̸= 0 の場合に再度拡大縮小された任意のベクトル
sv も固有ベクトルになる.さらには,sv も同じ固有値を持つ.このため,通常は単位固有ベ
クトルのみに注目する.

行列 A に n 個の線形独立な固有ベクトル {v (1) , . . . , v (n) } があり,それに対応する固有値
が {λ1 , . . . , λn } だとする.全ての固有ベクトルを連結すると,列ごとに固有ベクトルを 1 つ
持つ行列 V ができる.つまり,V = [v (1) , . . . , v (n) ].同様に,固有値を連結すると λ = [λ1 ,
. . . , λn ]⊤ というベクトルができる.このとき,A の固有値分解(eigendecomposition)は
次式で与えられる.
A = V diag(λ)V −1 . (2.40)

特定の固有値と固有ベクトルを持つ行列を構成することで,望む方向に空間を広げられる
ことが分かった.しかしながら,行列を固有値と固有ベクトルに分解(decompose)したい
ことがよくある.そうすることで,整数の素因数分解がその整数の振る舞いを理解するのに
役立つのと同様に,行列の特別な性質を解析できる.

全ての行列が固有値と固有ベクトルに分解できるわけではない.場合によっては,分解は
できても,実数でなく複素数を含むこともある.幸い本書では,通常,単純な分解ができる特
定の行列のみを扱う.特に,実対称行列はすべて,実数値だけからなる固有ベクトルと固有値
を使って,次のように分解できる.
A = QΛQ⊤ . (2.41)

39
第 2. 線形代数

Effect of eigenvectors and eigenvalues

Before multiplication After multiplication
3 3

λ1 v(1)
2 2

1 1
v(1) v(1)

0 0
x1

x1′
λ1 v(1)
(1)
v v(1)
−1 −1

−2 −2

−3 −3
−3 −2 −1 0 1 2 3 −3 −2 −1 0 1 2 3
x( x(′

図 2.3: 固有ベクトルと固有値の効果の例.ここでは,行列 A が 2 つの正規直交ベクトルを持ち,それ
ぞれ v (1) の固有値を λ1 ,v (2) の固有値を λ2 とする.(左)すべての単位ベクトル u ∈ R2 の集合を,
単位円としてプロットしている.(右)Au となる点すべての集合をプロットした.A が単位円をどの
ように歪めるかを観察することで,空間が v (i) の方向に λi だけ拡大縮小されることが分かる.

ただし Q は A の固有ベクトルからなる直交行列であり,Λ は対角行列である.固有値 Λi,i
は,Q の列 i の固有ベクトルに関連付けられ,Q:,i と表記される.Q は直交行列なので,A
は,v (i) の方向に λi だけ拡大縮小した空間と考えられる.例として図2.3を参照されたい.

すべての実対称行列 A は固有値分解できることが保証されているが,固有値分解が一意で
あるとは限らない.任意の 2 つ以上の固有ベクトルが同じ固有値を持つなら,それらの張る
空間にある直交ベクトルの任意の集合も同じ固有値を持つ固有ベクトルであり,代わりにそ
の固有ベクトルを使う Q を選んでも同じことになる.慣例的に,通常 Λ の成分は降順で並べ
る.この慣例の下で,全ての固有値が一意である場合にのみ,固有値分解は一意に定まる.

行列を固有値分解すると,行列について多くの有用な事実が分かる.行列は,固有値のいず
れかがゼロであるときにのみ特異となる.実対称行列の固有値分解を使って,||x||2 = 1 の場

40
第 2. 線形代数

合に f(x)= x⊤ Ax の形をした二次式を最適化できる.x が A の固有ベクトルに等しいと
きは必ず,対応する固有値が f の値となる.制限領域内の f の最大値は,固有値の最大値で
あり,制限領域内の最小値は,固有値の最小値である.

固有値がすべて正の行列は正定値(positive definite)と呼ばれる.固有値がすべて正ま
たはゼロの値の行列は半正定値(positive semidefinite)と呼ばれる.同様に,すべての
固有値が負であれば,行列は負定値(negative definite)であり,全ての固有値が負または
ゼロであるなら,それは半負定値(negative semidefinite)である.∀x, x⊤ Ax ≥ 0 が保
証される半正定値行列は興味深い.正定値行列では,さらに x⊤ Ax = 0 ⇒ x = 0 が保証さ
れる.

2.8 特異値分解
2.7節では,行列を固有ベクトルと固有値に分解する方法を説明した.特異値分解(singular
value decomposition,SVD)は行列を分解するもう 1 つの方法で,特異ベクトル(singular
vectors)と特異値(singular values)に分解する.SVD からは,固有値分解でわかるも
のと同様の情報もいくらか得られるが,SVD はもっと一般的に適用できるものである.実行
列はすべて特異値分解を持つが,固有値分解については同じことが当てはまらない.例えば,
行列が正方でない場合,固有値分解は定義されず,代わりに特異値分解を使う必要がある.

固有値分解では,行列 A を解析して,固有ベクトルの行列 V と固有値 λ のベクトルが見
つかると,A は以下のように書き換えられることを思い出してほしい.

A = V diag(λ)V −1 . (2.42)

特異値分解も似ているが,今回は A を次のように 3 つの行列の積で書く点が異なっている.

A = U DV ⊤ . (2.43)

A が m × n 行列であるとする.すると,U は m × m 行列と定義され,D は m × n 行列
で,V は n × n 行列となる.

これらの行列はそれぞれ特別な構造を持つように定義されている.行列 U と V はともに
直交行列となるように定義される.行列 D は対角行列となるように定義される.D は必ず
しも正方行列ではないことに注意されたい.

D の対角成分は,行列 A の特異値(singular values)と呼ばれる.U の列は左特異ベク
トル(left-singular vectors)とも呼ばれる.V の列は右特異ベクトル(right-singular
vectors)としても呼ばれる.
41
第 2. 線形代数

実際には,A の特異値分解を,A の関数の固有値分解で解釈できる.A の左特異ベクトル
は,AA⊤ の固有ベクトルである.A の右特異ベクトルは,A⊤ A の固有ベクトルである.A
の非ゼロ特異値は,A⊤ A の固有値の平方根である.同じことが AA⊤ にも当てはまる.

おそらく SVD の最も有用な特徴は,SVD を使うと逆行列法を非正方行列に部分的に一般
化できることである.これは次節で説明する.

2.9 ムーア・ペンローズ疑似逆行列
逆行列は,非正方行列に対しては定義されない.行列 A の左逆行列 B を求めて,以下の線
形方程式を解くとする.
Ax = y. (2.44)

このとき,両辺に左から乗算して以下のようになる.

x = By. (2.45)

問題の構造によっては,A から B への一意な写像を構成できない場合がある.

A は幅よりも高さがある場合,この方程式は解を持たない可能性がある.A は高さよりも
幅がある場合,解が複数になる可能性がある.

このような場合,ムーア・ペンローズ擬似逆行列(Moore-Penrose pseudoinverse)を
用いることで,いくらか前進が図れる.A の疑似逆行列は次の行列で定義される.

A+ = lim (A⊤ A + αI)−1 A⊤ . (2.46)
α↘0

疑似逆行列を計算するための実践的なアルゴリズムは,上の定義ではなく,次式に基づく.

A+ = V D + U ⊤ . (2.47)

ただし,U ,D および V は A の特異値分解であり,対角行列 D の擬似逆行列 D + は,非ゼ
ロ成分の逆数を求めた結果の行列を,転置させることで得られる.A の行数より列数が多い
場合に,疑似逆行列を使って線形方程式を解くと,数多くある可能な解のうちの 1 つが得られ
る.特に解 x = A+ y は,全ての可能な解の中で最小のユークリッドノルム ||x||2 を与える.

A に列よりも多くの行がある場合は,解が存在しない可能性がある.この場合,疑似逆行
列を用いると,ユークリッドノルム ||Ax − y||2 の観点で Ax が y に最も近くなるような x
が得られる.

42
第 2. 線形代数

2.10 トレース演算子
トレース演算子を使うと,行列の対角成分の総和が得られる.
!
Tr(A) = Ai,i . (2.48)
i

トレース演算子はさまざまな理由で有用である.総和表記を使わないと記述が難しい演算
でも,行列積とトレース演算子を使うことで記述できる場合がある.例えば,トレース演算子
を使うことで行列のフロベニウスノルムを異なる方法で書ける.
"
||A||F = Tr(AA⊤ ). (2.49)

数式をトレース演算子を用いて記述することで,その数式を多くの便利な性質を使って操
作できるようになる.例えば,トレース演算子は転置演算子に対して不変である.

Tr(A) = Tr(A⊤ ). (2.50)

多くの因子からなる正方行列のトレースも,もし対応する行列の積が定義可能な形になる
なら,最後の因子を最初の位置に動かしても不変である.

Tr(ABC) = Tr(CAB) = Tr(BCA) (2.51)

または,もっと一般的には次のように書ける.

n
# n−1
#
Tr( F (i) ) = Tr(F (n) F (i) ). (2.52)
i=1 i=1

この巡回置換に対する不変性は,結果の積が別の形の場合でも成り立つ.例えば,A ∈ Rm×n
かつ B ∈ Rn×m ならば,次が言える.

Tr(AB) = Tr(BA) (2.53)

これは,AB ∈ Rm×m かつ BA ∈ Rn×n であっても成り立つ.

もう 1 つ心に留めておくべき有用な事実は,スカラーはそれ自身のトレースであること,す
なわち a = Tr(a) となることである.

43
第 2. 線形代数

2.11 行列式
正方行列の行列式は,行列を実数値のスカラーに写像する関数で,det(A) で表される.行
列式は,行列のすべての固有値の積に等しい.行列式の絶対値は,行列による乗算で空間がど
れだけ拡大または縮小するかを示す尺度と考えることができる.行列式が 0 の場合,空間は
少なくとも 1 つの次元に沿って完全に収縮し,体積が全て失われてしまう.行列式が 1 の場
合は,変換しても体積は保存される.

2.12 例:主成分分析
単純な機械学習アルゴリズムの一つである,主成分分析(principal components anal-
ysis,PCA)は,線形代数の基本知識のみを使用して導出できる.
Rn における m 個の点の集まり {x(1) , . . . , x(m) } があり,これらの点に不可逆圧縮を適用
したいとしよう.不可逆圧縮は,点の格納に必要となるメモリ容量が少なくて済むが,精度が
失われる可能性がある.ここでは精度はできるだけ落としたくないとする.

これらの点を符号化する場合,点の次元を落として表現する方法がある.各点 x(i) ∈ Rn
に対して,対応する符号化ベクトル c(i)∈ Rl を見つける.l が n より小さければ,元のデー
タよりも符号化された点を格納する方が,メモリ容量は少なくて済む.ここでは,入力から
符号を生成する符号化関数 f (x) = c と,符号から再構成された入力を生成する復号化関数
x ≈ g(f (x)) を見つけたい.
PCA は,復号化器をどのように選ぶかによって定義される.具体的には,復号化器を非常
に単純にするために,行列の乗算を使って符号を Rn に逆写像することを選択する.つまり
g(c) = Dc である.ただし D ∈ Rn×l は,復号化を定義する行列である.

この復号化器に最適な符号を計算することは,難しい問題になる可能性がある.符号化の
問題を容易にするために,PCA では D の列が互いに直交するように制約を設ける.(D は
l = n でない限り,厳密にはまだ「直交行列」ではないことに注意されたい.)
ここまで説明してきた問題に対しては,多数の解の可能性がある.なぜなら,すべての点で
比例的に ci を減少させることで,D:,i を増大できるからである.問題の一意な解を得るため
に,D のすべての列が単位ノルムを持つことを制約とする.

この基本的な考えを実装可能なアルゴリズムに転換するため,最初にするべきことは,各入

44
第 2. 線形代数

力点 x に対する最適な符号化点 c∗ を生成する方法を見つけることである.その方法の 1 つ
は,入力点 x とその再構成 g(c∗ ) の間の距離を最小化することである.この距離はノルムを
使って表せる.主成分分析アルゴリズムでは,L2 ノルムを用いて次のように書ける.

c∗ = arg min ||x − g(c)||2 . (2.54)
c

L2 ノルムそのものを使う代わりに,L2 ノルムの二乗を使うことが出来る.なぜなら,どち
らも同じ c の値で最小化されるからである.どちらも同じ c の値で最小化されるのは,L2 ノ
ルムが非負であり,二乗演算は非負の引数に対して単調に増加するからである.

c∗ = arg min ||x − g(c)||22 . (2.55)
c

最小化する関数は,次のように単純化される.

(x − g(c))⊤ (x − g(c)) (2.56)

(式2.30の L2 ノルムの定義による)

= x⊤ x − x⊤ g(c) − g(c)⊤ x + g(c)⊤ g(c) (2.57)

(分配法則による)
= x⊤ x − 2x⊤ g(c) + g(c)⊤ g(c) (2.58)

(スカラー g(c)⊤ x とその転置は等しいことによる).

最初の項は c に依存しないため,最初の項を省略して再び関数を最小化できる.

c∗ = arg min −2x⊤ g(c) + g(c)⊤ g(c). (2.59)
c

さらに先に進むために,g(c) の定義を以下のように置き換える必要がある.

c∗ = arg min −2x⊤ Dc + c⊤ D ⊤ Dc (2.60)
c

= arg min −2x⊤ Dc + c⊤ Il c (2.61)
c

(D の直交性と単位ノルムの制約による)

= arg min −2x⊤ Dc + c⊤ c (2.62)
c

この最適化問題はベクトルの計算を使って次のように解ける(この解法が分からない場合
は4.3節を参照されたい).
∇c (−2x⊤ Dc + c⊤ c) = 0 (2.63)
45
第 2. 線形代数

− 2D ⊤ x + 2c = 0 (2.64)

c = D ⊤ x. (2.65)

これによってアルゴリズムが効率的になる.すなわち,行列とベクトルの演算を使うだけ
で,x の最適な符号化ができる.ベクトルを符号化するためには,次の符号化関数を適用
する.
f (x) = D ⊤ x. (2.66)

さらに行列の乗算を行って,次のように PCA の再構成演算も定義できる.

r(x) = g (f (x)) = DD ⊤ x. (2.67)

次に,符号化行列 D を選択する必要がある.そのために,入力と再構成の間の L2 距離を
最小化するという考えを再び用いる.すべての点の復号化に同じ行列 D を用いるので,もは
やそれらの点を別々なものと考えることはできない.その代わりに,すべての次元とすべて
の点について計算された,誤差の行列のフロベニウスノルムを最小化しなければならない.

!
"# (i)
$2

D = arg min xj − r(x(i) )j subject to D ⊤ D = Il (2.68)
D i,j

D ∗ を求めるアルゴリズムを導くために,l = 1 の場合を考えることから始めよう.この場
合,D は単一のベクトル d である.式2.67を式2.68に代入して,D を d に単純化すると,問
題は以下のように簡略化される.

"
d∗ = arg min ||x(i) − dd⊤ x(i) ||22 subject to ||d||2 = 1. (2.69)
d i

上の定式化は,代入を行う最も直接的な方法だが,書き方としては,この方程式を書くのに
最も好ましい方法とは言えない.ここではスカラー値 d⊤ x(i) がベクトル d の右に置かれて
いる.スカラー係数は,演算対象のベクトルの左に書かれるのが一般的である.したがって,
通常は次のような式となる.
"
d∗ = arg min ||x(i) − d⊤ x(i) d||22 subject to ||d||2 = 1, (2.70)
d i

または,スカラーがそれ自身の転置であるという事実を利用すると次のようになる.
"
d∗ = arg min ||x(i) − x(i)⊤ dd||22 subject to ||d||2 = 1. (2.71)
d i

46
第 2. 線形代数

読者は,このような形式的な再配置に慣れることを目指そう.

ここで,個々の事例のベクトルについての総和としてではなく,事例の単一の計画行列の観
点から問題を書き直すといいだろう.これによってさらに簡潔な表記が使える.X ∈ Rm×n

は,Xi,: = x(i) のような点を記述するベクトルを,すべて積み重ねて定義された行列とす
る.すると問題は次のように書き直せる.

d∗ = arg min ||X − Xdd⊤ ||2F subject to d⊤ d = 1. (2.72)
d

ここで一旦制約を無視すると,フロベニウスノルムの部分は以下のように単純化できる.

arg min ||X − Xdd⊤ ||2F (2.73)
d
!" #⊤ " #$
= arg min Tr X − Xdd⊤ X − Xdd⊤ (2.74)
d

(式2.49による)

= arg min Tr(X ⊤ X − X ⊤ Xdd⊤ − dd⊤ X ⊤ X + dd⊤ X ⊤ Xdd⊤ ) (2.75)
d

= arg min Tr(X ⊤ X) − Tr(X ⊤ Xdd⊤ ) − Tr(dd⊤ X ⊤ X) + Tr(dd⊤ X ⊤ Xdd⊤ ) (2.76)
d

= arg min − Tr(X ⊤ Xdd⊤ ) − Tr(dd⊤ X ⊤ X) + Tr(dd⊤ X ⊤ Xdd⊤ ) (2.77)
d

(d を含まない項は arg min に影響しないことによる)

= arg min −2 Tr(X ⊤ Xdd⊤ ) + Tr(dd⊤ X ⊤ Xdd⊤ ) (2.78)
d

(式2.52から,トレースの内部では行列の順序を巡回させてよいことによる)

= arg min −2 Tr(X ⊤ Xdd⊤ ) + Tr(X ⊤ Xdd⊤ dd⊤ ) (2.79)
d

(再び同じ性質を用いる)

ここで,再び制約を導入して,

arg min −2 Tr(X ⊤ Xdd⊤ ) + Tr(X ⊤ Xdd⊤ dd⊤ ) subject to d⊤ d = 1 (2.80)
d

= arg min −2 Tr(X ⊤ Xdd⊤ ) + Tr(X ⊤ Xdd⊤ ) subject to d⊤ d = 1 (2.81)
d

(制約による)
= arg min − Tr(X ⊤ Xdd⊤ ) subject to d⊤ d = 1 (2.82)
d

47
第 2. 線形代数

= arg max Tr(X ⊤ Xdd⊤ ) subject to d⊤ d = 1 (2.83)
d

= arg max Tr(d⊤ X ⊤ Xd) subject to d⊤ d = 1 (2.84)
d

この最適化問題は固有値分解を用いて解くことができる.具体的には,最適な d は最大の
固有値に対応する X ⊤ X の固有ベクトルから得られる.

この解法は,l = 1 の場合のみ有効で,第 1 主成分のみを再構成する.さらに一般的には,
主成分の基底を再構成したい場合,行列 D は最大固有値に対応する l 個の固有ベクトルで
与えられる.これは帰納法を使って証明できる.演習としてその証明を書いてみることを勧
める.

線形代数は,深層学習を理解するために必要な,基本的な数学の分野の 1 つである.機械学
習のさまざまな場面に現れる,もう一つの重要な数学の分野は確率論である.それを次節で
説明する.

48

Sign up to vote on this title
UsefulNot useful