AIやるうえで知っといた方がよい線形代数の知識

## はじめに

これは私がAIを学んでいくうえで調べた線形代数の知識を纏めたものです。
万人に分かりづらい箇所を纏めたものではありませんが、多くの方が難しいと感じるところでもあると思います。
基本的には諸々のページから引っ張っていた情報を纏めただけですが、よろしければ参考にしてください。

もっと体系的に基本から学びたい！というかたはには[ヨビノリたくみ先生のYoutube](https://www.youtube.com/watch?v=svm8hlhF8PA&list=PLDJfzGjtVLHnc1vTpBaCNKMUl6HauQv1a&index=1)をおすすめします。



## 行基本変形

これは連立方程式を解くときにやっていい操作、と言い換えることができる。

以下の３つ

操作1：ある行を定数倍する
操作2：二つの行を交換する
操作3：ある行の定数倍を別の行に加える

この操作を繰り返すことで連立方程式を解くことができる。



## 階数（rank）の定義

任意の行列Aは行基本変形を繰り返すことによって階段行列にすることができる。このとき、この階段行列のなかの少なくとも１つは０でない成分をもつ行の個数rを行列Aの階数といい、rank(A)=rと表す。

ヨビノリたくみ先生いわく、

> rankは本質的な方程式の個数

と仰っていた。



## 余因子

[こちら](余因子・余因子行列の求め方と例題 | AVILEN AI Trend https://ai-trend.jp/basic-study/linear-algebra/cofactor/) がわかりやすい。

> 正方行列Aに対して、Aの第i行と第j列を取り除いた行列をAijとすると、

$$
\tilde{a} = (-1)^{i+j}|A_{ij}|
$$

>  となる。ことのきa~をAの(i,j)余因子とよぶ。

以下のイメージがとてもわかりやすいので引用。

![余因子のイメージ](https://file.to-kei.net/uploads/2017/08/c376315755aad2f7d76b5013f98bb9e9.png)



## 余因子行列

> 正方行列Aの(i,j)余因子をすべて求め、行列にした後、転置した行列が余因子行列である。

これも図画わかりやすいので引用。

![余因子行列](https://file.to-kei.net/uploads/2017/08/ad7f69d2978d935626df71b335dcdaae.png)



## 余因子から逆行列を求める方法

各成分の余因子を求めてその求めた行列を行列式で割ればよい。

※正方行列しか逆行列は存在しないことに注意



## 固有値と固有ベクトル

> 線形代数には、あるベクトルxに対して”正方”行列Aを左から掛けることで、別のベクトルに変換する方法がよく使われます。
> $$
> x^{'} = Ax
> $$
> これを**行列Aによる線形変換**と呼びます。（記事の下部で具体例を挙げています）
>
> 線形変換をすると、ほとんどのベクトルは行列Aとの掛け算に基づいて別のベクトルに変化しちゃいます。しかし、中には、ベクトルの大きさこそ変わるけど、向きに一切の変化が生じないベクトルが存在する場合があります。つまり、ベクトルAxが、xのスカラー倍の形で書けちゃうことがあるんです。
> $$
> Ax = λx
> $$
> ここで、**向きが変わらない特別なベクトルxのことを固有ベクトル**と呼び、変換後における**ベクトルの大きさの変化率λのことを固有値**と呼びます。固有値と固有ベクトルはセットになっていて、ある行列Aに対していくつかのセットがある場合がほとんどです。
> ちなみに、上の式において、xが零ベクトルならばどんな場合でも成り立ちますが、零ベクトルは固有ベクトルと見なしません。

ちなみに、固有値が全て正の行列は正定値行列という。



## いろいろな行列

私がひさびさに見て定義を忘れていたものだけ。

> ### 対称行列
>
> 対称行列とは、元となる行列と、その行列を転置した行列が等しく行列のことを言います。
> 転置した結果が同じくなるので、対称行列は「行の数と列の数が等しい」、つまり「正方行列」であることに注意します。
> 対角行列も対称行列の一つです。以下に例を上げておきます。

> ### 直行行列
>
> ※間違った記載があったので、以下修正いたしました！
>
> 転置行列と逆行列が等しくなる正方行列が直交行列です。

> ```math
> {\begin{pmatrix}
> 1\sqrt {3} & 1\sqrt {2} & -1\sqrt {6} \\
> -1\sqrt {3} & 1\sqrt {2} & 1\sqrt {6} \\
> 1\sqrt {3} & 0 & 2\sqrt {6}
> \end{pmatrix}
> }
> ```
> またこの行列の各列を表現する以下のようなベクトルu1,u2,u3u1,u2,u3があるとすると、
> いづれのベクトルも直交(内積がゼロ)する。

> ```math
> {u_{1}=
> \begin{pmatrix}
> 1\sqrt {3} \\
> -1\sqrt {3} \\
> 1\sqrt {3}
> \end{pmatrix}}
> u_{2}=
> {\begin{pmatrix}
> 1\sqrt {2} \\
> 1\sqrt {2} \\
> 0
> \end{pmatrix}}
> u_{3}=
> {\begin{pmatrix}
> -1\sqrt {6} \\
> 1\sqrt {6} \\
> 2\sqrt {6}
> \end{pmatrix}
> }
> ```

### ユニタリ行列

直行行列を複素数体に拡張したものを**ユニタリ行列**と言います。



### 随伴行列

*複素数を成分にもつ行列を転置し、虚部の符号を反転した行列を随伴行列*と言います。

以下に示す行列Aを例に挙げ随伴行列A∗を示します。(虚数単位をiiとおきます。)

```math
  A = \left(
    \begin{array}{ccc}
      a & b - i \\
      ci & d
    \end{array}
  \right)
```


まず転置します。

```math
  A^{T} = \left(
    \begin{array}{ccc}
      a & ci \\
      b - i & d
    \end{array}
  \right)
```


次に虚部の符号を反転すると随伴行列になります。

```math
A{*} = 
{\begin{pmatrix}
      a & -ci \\
      b + i & d
  \end{pmatrix}
}
```
虚部が存在しない場合には転置のみになるため、実行列の場合には直行行列と随伴行列は等しくなります。



### 対象行列

*行列とその転置行列が等しい場合に対称行列と言います。*
上記を満たすのは正方行列のみです。



## 逆行列の求め方

2x2の場合は覚えるのみ。

```math
A^{-1}=\dfrac{1}{ad-bc}\begin{pmatrix}d&-b\\-c&a\end{pmatrix}
```

他は2つの方法がある。

1. 掃き出し法

   ### 例題

   ```math
   A=\begin{pmatrix}1&1&-1\\-2&0&1\\0&2&1\end{pmatrix}
   ```

   

   の逆行列を求めよ。


   ```math
   (A\:I)=\begin{pmatrix}1&1&-1&1&0&0\\-2&0&1&0&1&0\\0&2&1&0&0&1\end{pmatrix}
   ```

   行基本変形を適用して左半分を I にするのが目標。まず一列目を見て，1行目の2倍を2行目に加える：

```math
   \begin{pmatrix}1&1&-1&1&0&0\\0&2&-1&2&1&0\\0&2&1&0&0&1\end{pmatrix}
```

   次に，二列目（の第2成分以外）に 00 を並べるように操作3を行う：
   
   ```math
   \begin{pmatrix}1&0&-\frac{1}{2}&0&-\frac{1}{2}&0\\0&2&-1&2&1&0\\0&0&2&-2&-1&1\end{pmatrix}
   ```

   同様に，三列目（の第3成分以外）に 00 を並べるように操作3を行う：
   
```math
   \begin{pmatrix}1&0&0&-\frac{1}{2}&-\frac{3}{4}&\frac{1}{4}\\0&2&0&1&\frac{1}{2}&\frac{1}{2}\\0&0&2&-2&-1&1\end{pmatrix}
``` 

   最後に操作1を二行目と三行目に適用して左側を単位行列にする：
   
```math
   \begin{pmatrix}1&0&0&-\frac{1}{2}&-\frac{3}{4}&\frac{1}{4}\\0&1&0&\frac{1}{2}&\frac{1}{4}&\frac{1}{4}\\0&0&1&-1&-\frac{1}{2}&\frac{1}{2}\end{pmatrix}
```


   この右半分が Aの逆行列である。

   

2. 余因子を用いる

   各成分の余因子を求めてその求めた行列を行列式で割る

   詳しくは[こちら](逆行列を求める２通りの方法と例題 | 高校数学の美しい物語 https://mathtrain.jp/inversematrix)を参考にどうぞ。



## 行列の正負

> n行n列の対称行列Aが正定値であるとは、(全ての成分が0のものを除く)任意(「どのような」という意味)のn行1列の行列xに対しても
> <x, Ax> > 0
> が成り立つことである。

詳しくは[こちら](https://techblog.nhn-techorus.com/archives/2084)がわかりやすかった。



##  正値対称行列(または正定値対称行列)

> 固有値がすべて正の対称行列のことを正値対称行列という。
> また、以下の行列も同時に覚えておこう。

|               特徴               |                 行列名                 |
| :------------------------------: | :------------------------------------: |
|    固有値がすべて正の対称行列    |   正値対称行列(または正定値対称行列)   |
| 固有値がすべてゼロ以上の対称行列 | 半正値対称行列(または半正定値対称行列) |
|    固有値がすべて負の対称行列    |   負値対称行列(または負定値対称行列)   |
| 固有値がすべてゼロ以下の対称行列 | 半負値対称行列(または半負定値対称行列) |
| 正値対称行列または半負値対称行列 |              定値対称行列              |



## 特異値分解

固有値と固有ベクトルを用いて行列を分解する固有値分解は正方行列に対応していました。じゃあ正方行列じゃないと固有値分解できない？となるのですが、それに対応したのが特異値分解だと思っていただければいいかと思います。

[こちら](特異値分解を詳しく解説 - Qiita https://qiita.com/kidaufo/items/0f3da4ca4e19dc0e987e#%E8%A1%A8%E8%A8%98%E6%B3%95)がわかりやすいです。

[こちら](特異値分解PART1：固有値分解 - YouTube https://www.youtube.com/watch?v=p1dtgAz7W_k)もすごくわかりやすいのであわせて御覧ください。（具体的な特異値の求め方は7:40あたりから）



## 参考

- 余因子行列を用いた逆行列の求め方と例題 | AVILEN AI Trend https://ai-trend.jp/basic-study/linear-algebra/inverse-matrix-by-cofactor-matrix/
- 基礎数学演習Ｉ http://racco.mikeneko.jp/Kougi/98s/Kisoenshuu1/6-25.html#:~:text=%EF%BC%92%E3%81%A4%E3%81%AE%E8%A1%8C%E3%82%92%E5%85%A5%E3%82%8C%E3%81%8B%E3%81%88%E3%82%8B,%E4%BD%95%E5%80%8D%E3%81%8B%E3%82%92%E5%8A%A0%E3%81%88%E3%82%8B
- 機械学習を学ぶための準備 その5（行列のいろいろ) | NHN テコラス Tech Blog | AWS、機械学習、IoTなどの技術ブログ https://techblog.nhn-techorus.com/archives/2084
- 機械学習勉強するとき、「なんちゃら行列」が多すぎて、毎回忘れるのでまとめた - Qiita https://qiita.com/kakiuchis/items/5243b6370dcb45c8000d