深度學習中的線性代數知識詳解

注: 本文總結得內容來源比較雜, 主要方便我的對知識的深度理解, 基本上看<深度學習>這本書中遇到的線性代數方面比較模糊的概念都會隨時掌握並補充到下文中.python

1. 基礎概念

標量(scalar)

一個標量就是一個單獨的數,通常用小寫的的變量名稱表示。算法

向量(vector)

一個向量就是一列數,這些數是有序排列的:數組

$$ \begin{bmatrix} x_1\\ x_2\\ ...\\ x_5 \end{bmatrix} $$網絡

矩陣(matrices)

矩陣是二維數組:框架

$$ \begin{bmatrix} a_{11}& a_{12}& ...& a_{1n}& \\ a_{21}& a_{22}& ...& a_{2n}& \\ ...& ...& & ...& \\ a_{m1}& a_{m2}& ...& a_{mn}& \end{bmatrix} $$機器學習

張量(tensor)

多維數組中元素分佈在若干位座標的規則網絡中, 稱之爲張量. 幾何代數中定義的張量是基於向量和矩陣的推廣,通俗一點理解的話,咱們能夠將標量視爲零階張量,矢量視爲一階張量,那麼矩陣就是**ide

二階張量

張量在深度學習中是一個很重要的概念,由於它是一個深度學習框架中的一個核心組件,後續的全部運算和優化算法幾乎都是基於張量進行的。函數

2. 矩陣相關

轉置(transpose)

主對角線: 矩陣從左上角到右下角的對角線稱爲主對角線.矩陣的轉置是指以主對角線爲軸的鏡像.
令矩陣$\mathbf{A}$的轉置表示爲$\mathbf{A}^T$, 則定義以下:
$$(\mathbf(A)^T)_{i,j}=A_{i,j}$$
Tips:
向量是單列矩陣, 向量的轉置是單行矩陣. 標量可看作單元素矩陣, 所以標量的轉置是它自己: $a=a^T$.工具

矩陣加法和廣播:

矩陣加法定義: $\mathbf{C}=\mathbf{A}+\mathbf{B}$學習

在深度學習中, 容許矩陣和向量相加, 產生一個新的矩陣, 簡寫爲:$\mathbf{C}=\mathbf{A}+\mathbf{b}$, 表示向量$\mathbf{b}$和矩陣$\mathbf{A}$的每一行都相加. 這種隱式地幅值向量$\mathbf{b}$到不少位置的方式成爲廣播.

矩陣乘法

分配律: $\mathbf{A(B+C)}$
結合律: $\mathbf{A(BC)=(AB)C}$
矩陣乘積不知足交換律: $\mathbf{AB\neq{BA}}$
向量點積知足交換律: $\mathbf{x^Ty=y^Tx}$
乘積的轉置: $\mathbf{(AB)^T=B^TA^T}$

單位矩陣

主對角線元素都是1, 其他位置全部元素都是0的矩陣:

$$ \begin{pmatrix} 1& 0& 0 \\ 0& 1& 0 \\ 0& 0& 1 \end{pmatrix} $$

咱們將n維向量不變的單位矩陣即爲$\mathbf{I_n}$:
$$\forall \mathbf{x} \in R^n, \mathbf{I_nx = x}, 其中\mathbf{I_n \in R^{nxn}}$$

逆矩陣

矩陣逆是強大的工具, 對於大多數矩陣, 均可以經過矩陣逆解析求$\mathbf{Ax=b}$的解.
矩陣$\mathbf{A}$的矩陣逆記做: $\mathbf{A^{-1}}$, 矩陣逆知足以下條件:
$$\mathbf{A^{-1}A=I_n}$$

矩陣特徵值

設A是n階方陣,若是存在數$\lambda$和非零n維列向量$\vec x$,使得 $A\vec x=\lambda \vec x$ 成立,則稱$\lambda$ 是矩陣A的一個特徵值, $\vec x$稱爲矩陣A的特徵向量.
$Ax=λx$也能夠寫成: $(A-λE)X=0$, 這是n個未知數n個方程的齊次線性方程組,它有非零解的充分必要條件是係數行列式$|A-λE|=0$:

clipboard.png

$|A-λE|=0$是一個n次代數方程,稱爲A的特徵方程, |λE-A|=0的根稱爲A的特徵根(或特徵值)
以A的特徵值$λ_0$代入$(λE-A)X=θ$,得方程組($λ_0E-A)X=θ$,是一個齊次方程組,稱爲A的關於$λ_0$的特徵方程組.

由於$|λ_0E-A|=0$,$(λ_0E-A)X=θ$必存在非零解$X^{(0)}$,$X^{(0)}$稱爲A的屬於$λ_0$的特徵向量。

舉例, 求矩陣$\begin{pmatrix} 1 & -3 & 3 \\ 3 & -5 & 3 \\6 & -6 & 4 \end{pmatrix}$的特徵值與特徵向量.
解:

clipboard.png

clipboard.png

特徵向量的性質:

clipboard.png

奇異矩陣

矩陣X只有是方陣, 若列向量線性相關, 則成該方陣X是奇異的.

對角矩陣

對角矩陣是一個主對角線以外的元素皆爲0的矩陣:

$$ \begin{pmatrix} \lambda_1 & & &\\ & \lambda_2 & &\\ & & \ddots &\\ & & & \lambda_n \end{pmatrix} $$

對角矩陣能夠記做: $A=diag(\lambda_1,\lambda_2,...,\lambda_n)$

若n階方陣A與對角矩陣類似,則稱A爲可對角化矩陣, 即, 對於n階方陣A,若存在可逆矩陣P, 使其爲對角陣,則稱方陣A可對角化

若矩陣可對角化,則可按下列步驟來實現:
(1) 求出的所有特徵值
(2)對每個特徵值,設其重數爲k,則對應齊次方程組的基礎解系由k個向量構成,即爲對應的線性無關的特徵向量;
(3)上面求出的特徵向量剛好爲矩陣的各個線性無關的特徵向量。

推論:

  • 若n階矩陣A有n個相異的特徵值,則A與對角矩陣類似。
  • n階矩陣A可對角化的充要條件是對應於A的每一個特徵值的線性無關的特徵向量的個數剛好等於該特徵值的重數。

判斷兩個矩陣是否類似的輔助方法(必要條件非充要條件):

  • 判斷特徵值是否相等;
  • 判斷行列式是否相等
  • 判斷跡是否相等
  • 判斷秩是否相等

正交矩陣

若是$AA^T=E$(E爲單位矩陣,$A^T$表示「矩陣A的轉置矩陣」),則n階實矩陣A稱爲正交矩陣。
若是A爲正交陣, 則:

  • $A^T$也是正交矩陣
  • $AA^T=A^TA=E$
  • A的各行是單位向量且兩兩正交
  • A的各列是單位向量且兩兩正交
  • $|A|$ = 1或-1
  • $A^T=A^{-1}$

問:
爲何實對稱矩陣的類似對角化要用正交矩陣?

答: 對稱矩陣也能夠用通常的由特徵向量組成的非奇異陣作對角化,只不過它有特殊的性質(對稱),所以咱們就能夠考慮特殊的對角化,也就是正交類似對角化。這麼作有好處:正交矩陣的逆矩陣很容易求,就是它的轉置,不像通常的可逆陣須要半天才能求出來。你想一想,若是是一個1000*1000的矩陣求逆,那要多長時間才能作完?但正交矩陣就太容易了,只要轉置一下就好了。

類似矩陣

設A,B爲n階矩陣,若是有n階可逆矩陣P存在,使得$P^{-1}AP=B$, 則稱矩陣A與B類似,記爲$A\sim B$。
性質:

  • 若A與對角矩陣類似,則稱A爲可對角化矩陣, 即:若是存在一個可逆矩陣 P 使得 $P^{−1}AP$ 是對角矩陣,則它就被稱爲可對角化的
  • 類似矩陣具備相同的可逆性,當它們可逆時,則它們的逆矩陣也類似
  • 若A~ B,則A與B二者的秩,行列式,跡,特徵值,特徵多項式,初等因子均相等

定理:

  • n階矩陣A與對角矩陣類似的充分必要條件爲矩陣A有n個線性無關的特徵向量。

實對稱矩陣

對稱矩陣轉置後與原矩陣相等, 對稱元素都相等,也就是$A(x,y)=A(y,x)$, 所以不難看出其中一個必要條件是矩陣必須知足是n階方陣.
實對稱矩陣的特性:

  • 實對稱矩陣A的不一樣特徵值對應的特徵向量是正交的。
  • 實對稱矩陣A的特徵值都是實數,特徵向量都是實向量
  • n階實對稱矩陣A必可對角化,且類似對角陣上的元素即爲矩陣自己特徵值
  • 若實對稱矩陣A具備k重特徵值, 必有k個線性無關的特徵向量。

實對稱矩陣對角化爲何要作正交化單位化?

clipboard.png

clipboard.png

結論:若是不作正交單位話,咱們同樣能夠經過U(把特徵向量按照列寫成的矩陣),把一個實對稱矩陣對角化爲以它的特徵值爲對角元的對角矩陣。

咱們知道,對應一個特徵值的特徵向量乘以任何一個非零的係數,仍然仍是對應着這個特徵值的特徵向量,若是一個特徵值對應多個特徵向量,那在它們張成的空間裏找出一樣數量的線性不相關的向量,也都是這個特徵值的特徵向量,因此說特徵向量並不惟一,也就是說這裏的U是不惟一的。

而對於一個實對稱矩陣,它的屬於不一樣特徵值的特徵向量天生就是正交的,這使得咱們只要在每一個特徵值內部選取合適的互相正交的特徵向量,就能保證全部的特徵向量都正交。而咱們剛剛說過,特徵向量乘以一個係數,仍然仍是特徵向量。因此,對於實對稱矩陣來講,咱們徹底能夠在諸多的U中選出一個特殊的Q,讓Q的每個列向量都互相正交併且長度爲1。這時咱們就驚喜的發現,這樣的至關於由一組標準正交基當作列向量組成的矩陣Q,正是一個正交矩陣。

因而,咱們就清楚的知道了,對實對稱矩陣對角化的時候,正交單位化不是必須的,只有當咱們想在實對稱矩陣的諸多U裏選取一個正交矩陣Q時,才須要作。正交矩陣有不少很好的性質,因而乎想從U裏找到一個Q也變得情有可原了不是?

3. 行列式計算

clipboard.png

3. 線性相關

線性方程

$$X\cdot \vec{b} = \vec{y}$$

線性組合

X 中各個列向量乘以對應的係數之和: $$\sum_{i}b_i x^{(i)}$$

生成空間

X中的原始向量線性組合後能抵達的點的集合. 肯定上述方程是否有解至關於肯定向量$\vec{y}$ 是否在X 的列向量的生成子空間中.

矩陣X可逆時解爲$\vec b = X^{-1}\cdot y$ , 然而矩陣可逆是一個十分苛刻的條件,X 的列空間構成整個m維歐式空間$R^m$, 若$X\cdot \vec{b} = \vec{y}$對於每個y值最多有一個解, 則X矩陣至多有m個列向量.

所以, 矩陣X只有是方陣且全部列向量都是線性無關的時候才知足要求, 若列向量線性相關, 則成該方陣X是奇異的.

這裏引出了線性模型的基本模型: $$X\cdot \vec{b} = \vec{y}$$

X可逆時 ,咱們能夠直接對兩邊求逆, 獲得線性模型的惟一解:
$$\vec b = X^{-1}\cdot y$$

然而,樣本特徵組成的矩陣X每每是不可逆的, 即X每每不是方陣, 或者是奇異的方陣.

正由於在現實世界裏, 直接對矩陣求逆來獲得惟一解 $\vec{b}$ 幾乎是不可能的, 因此咱們纔會退而求其次, 用最小化偏差來逼近惟一解, 這叫作鬆弛求解.

求最小化偏差的通常方法是求殘差的平方和最小化, 這也就是所謂的線性最小二乘法.

4. 範數(norm)

在機器學習中, 一般用範數來衡量一個矩陣的大小, $L^p$範數公式: $$||x||_p = \left( \sum_i|x_i|^p \right)^\frac 1 p$$

注意抓重點: 範數在機器學習中是用來衡量一個向量的大小.

範數

是將向量映射到非負值的函數. 簡單來說, 向量$\vec x$的範數是原點到$\vec x$的距離. 這裏之因此介紹範數, 是由於它涉及到機器學習中很是重要的正則化技術.

$p = 2$時, $L^2$稱爲歐幾里得範數(Euclidean norm), 表示原點到向量$\vec x$的歐氏距離, $L^2$範數一般簡寫爲$||x||$ , 它很是頻繁地出如今機器學習中. 此外, 平方$L^2$範數$\left(||x||\right)^2$也常常用來衡量向量的大小, 能夠簡單地用點積$\left( \vec x \right)^\top \cdot \vec x$計算.

$L^2$範數: $$||x||_2 = (\sum_i|x_i|^2)^\frac 1 2 $$
平方$L^2$範數: $$ ||x|| = \sum_i|x_i|^2$$
$L^1$範數: $$ ||x||_1 = \sum_i|x_i| $$
Frobenius範數: $$||A||_F=\sqrt{\sum_{i,j}{A_{i,j}}^{2}}$$

關於範數, 注意如下幾點:

  • 平方$L^2$ 範數對$\vec x$各元素導數只和對應元素相關, 而$L^2$範數對個元素的導數和整個向量相關, 所以平方$L^2$範數計算更方便.
  • 有時候平方$L^2$範數在原點附近增加緩慢, 在某些機器學習業務場景下, 區分元素值是否非零很重要, 此時更傾向於使用$L^1$範數.
  • $L^1$範數在各個位置斜率相同, 且數學形式較簡單, 每當$\vec x$中某元素從0增長了$\epsilon$ 時, 對應$L^1$範數也增長$\epsilon $, $L^1$範數一般被用在零和非零差別很是重要的機器學習問題中.
  • "$L^0$範數"一般用向量中非零元素個數來衡量向量大小, 可是這種說法不嚴謹, 由於從數學意義上講,對向量縮放$\alpha$倍, 向量大小會變, 可是機器學習中, 非零元素數目不變, 這和向量運算的數學意義相悖.
  • $L^\infty$範數稱爲最大範數(max norm), 表示最大幅值元素的絕對值: $||x||\infty=\max_i{|x_i|}$
  • Frobenius範數在機器學習中用來衡量矩陣大小.
  • 兩個點積能夠用範數來表示: $\vec{x}^T \cdot \vec{y} = ||\vec{x}||_2||\vec{y}||_2cos\theta $

在機器學習中, $L^2$和$L^1$範數分別對應$L^2$和$L^1$正則化, 詳情參考線性模型中的嶺迴歸(Ridge Regression)和套索迴歸(Lasso).

5. 僞逆(Moore-Penrose)

非方陣方程,其逆矩陣沒有意義. 假設要求解線性方程
$$\vec{A} \cdot x = \vec{y}$$

等式兩邊左乘左逆$\vec{B}$後: $$x = \vec{B}y$$

是否存在惟一映射, 將$\vec{A}$映射到$\vec{B}$取決於問題形式:

  1. 若矩陣A行數大於列數, 則可能無解;
  2. 若矩陣A行數小於列數, 則可能有多個解.

僞逆能夠解決上述問題. 矩陣A的僞逆定義爲:

$$\lim_{a \searrow 0}(\vec{A^T}\vec{A} + \alpha \vec{I})^{-1}\cdot\vec{A^T}$$

違逆計算的簡化公式爲:
$$\vec{A^+} = \vec{V}\vec{D^+}\vec{U^T}$$
其中, 矩陣U, D, V是矩陣A的奇異值分解後的特殊矩陣, 其中$\vec{U}$和$\vec{V}$都是正交矩陣, $\vec{D}$爲對角矩陣(不必定是方陣). 對角矩陣D的僞逆$\vec{D^+}$是非零元素取倒數後再轉置獲得的.奇異值分解稱爲SVD(Singular Value Decomposition).

  1. 矩陣A的列數多於行數時, 可能有多個解. 僞逆求解線性方程是衆多解法中的一種, 即: $\vec{x} = \vec{A^+}\vec{y}$是全部可行解中歐幾里得距離最小的一個
  2. 矩陣A列數小於行數時, 可能沒有解. 僞逆求解獲得的x是$\vec{A}x$和$\vec{y}$的歐幾里得距離$||\vec{A}x-\vec{y}||_2^2$最小的解, 這裏又回到了求解線性問題的通常思路上: 線性最小二乘法.

6. 經常使用的距離

一、曼哈頓距離

也稱爲城市街區距離,數學定義以下:

$$ d=\sum_{k=1}^n|x_{1k}-x_{2k}| $$

曼哈頓距離的Python實現:

from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print sum(abs(vector1-vector2))

2. 歐氏距離

前面提到過, 歐氏距離就是$L_2$範數, 定義以下:

$$ d = \sqrt{\sum_{k=1}^n(x_{1k}-x_{2k})^2} $$

歐氏距離的Python實現:

vector1 = np.mat([1,2,3])
vector2 = np.mat([4,5,6])
print np.sqrt((vector1-vector2)*(vector1-vector2).T)

3. 閔可夫斯基距離

上述兩種距離的更通常形式, 完整的定義以下:

$$ d = \sqrt[p]{\sum_{k=1}^n(x_{1k}-x_{2k})^p} $$

4. 切比雪夫距離

即前面提到過的無窮範數$L^\infty$範數, 數學表達式:

$$ d=max(|x_{1k}-x_{2k}|) $$

Python實現以下

from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print sqrt(abs(vector1-vector2).max)

5. 夾角餘弦

用來衡量兩個向量方向的差別, 夾角餘弦越大,表示兩個向量的夾角越小
機器學習中用這一律念來衡量樣本向量之間的差別,其數學表達式以下:
$$cos\theta=\frac{AB}{|A||B|}=\frac{\sum_{k=1}^{n}x_{1k} \cdot x_{2k}}{\sqrt{\sum_{k=1}^{n}x_{1k}^2}\cdot\sqrt{\sum_{k=1}^{n}x_{2k}^2}}$$
python實現:

from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2))

6. 漢明距離

表示兩個字符串中不相同位數的數目, 例如:字符串‘1111’與‘1001’之間的漢明距離爲2.
信息編碼中通常應使得編碼間的漢明距離儘量的小.
python實現:

from numpy import *
matV = mat([1,1,1,1],[1,0,0,1])
smstr = nonzero(matV[0]-matV[1])
print smstr

7. 傑卡德距離

傑卡德類似係數: 兩個集合A和B的交集元素在A和B的並集中所佔的比例稱爲兩個集合的傑卡德類似係數,用符號$J(A,B)$表示.
數學表達式:
$$J(A,B)=\frac{\left | A \bigcap B \right |}{\left | A \bigcup B \right |}$$

傑卡德距離: 用傑卡德類似係數來描述, 用符號$J_\sigma$表示.
數學表達式:
$$J_\sigma=1-J(A,B)=\frac{\left | A \bigcup B \right | - \left | A \bigcap B \right |}{\left | A \bigcup B \right |}$$
Python實現:

from numpy import *
import scipy.spatial.distance as dist
matV = mat([1,1,1,1],[1,0,0,1])
print dist.pdist(matV,'jaccard')

7. 特徵分解

許多數學對象能夠經過將它們分解成多個組成部分。特徵分解是使用最廣的矩陣分解之一,即將矩陣分解成一組特徵向量特徵值

方陣A的特徵向量是指與A相乘後至關於對該向量進行縮放的非零向量$\nu$

$$A\nu =\lambda \nu$$
標量$\lambda$被稱爲這個特徵向量對應的特徵值。

使用特徵分解去分析矩陣A時,獲得特徵向量構成的矩陣V和特徵值構成的向量$\lambda$,咱們能夠從新將A的特徵分解記做:

$$ A=Vdiag\left( \lambda \right) V^{-1} $$

每一個實對稱矩陣均可以分解成實特徵向量和實特徵值: $ A=Q \Lambda Q^T$
$Q$ 是$A$的特徵向量組成的正交矩陣,$Λ$ 是對角矩陣

任意一個實對稱矩陣 A 都有特徵分解,可是特徵分解可能並不惟一.
矩陣是奇異的當且僅當含 有零特徵值.

正定矩陣: 全部特徵值都是正數的矩陣.
負定矩陣: 全部特徵值都是負數的矩陣.
半正定矩陣: 全部特徵值都是非負數的矩陣.

下圖展現了特徵值和特徵向量的做用效果:

clipboard.png

在上圖中,矩陣 $A$ 有兩個標準正交的特徵向量,對應特徵值爲$λ_1$ 的 $v^(1)$ 以及對應特徵值爲 $λ2$ 的 $v^(2)$。(左) 我 們畫出了全部的單位向量 $u ∈ R2$ 的集合,構成一個單位圓。(右) 咱們畫出了全部的 $Au$ 點的集 合。經過觀察 $A$ 拉伸單位圓的方式,咱們能夠看到它將 $v^(i)$ 方向的空間拉伸了 $λ_i$ 倍.

8. 奇異值分解(SVD)

除了特徵分解,還有一種分解矩陣的方法,被稱爲奇異值分解(SVD)。將矩陣分解爲奇異向量和奇異值。經過奇異分解,咱們會獲得一些相似於特徵分解的信息。然而,奇異分解有更普遍的應用。

每一個實數矩陣都有一個奇異值分解,但不必定都有特徵分解。例如,非方陣的矩陣沒有特徵分解,這時咱們只能使用奇異值分解。
奇異分解與特徵分解相似,只不過這回咱們將矩陣A分解成三個矩陣的乘積:
$$A=UDV^{T}$$

假設A是一個 $m\times n$ 矩陣,那麼U是一個 $m\times m$ 矩陣,D是一個 $m\times n $矩陣,V是一個 $n\times n $ 矩陣。

這些矩陣每個都擁有特殊的結構,其中U和V都是正交矩陣,D是對角矩陣(注意,D不必定是方陣)。對角矩陣D對角線上的元素被稱爲矩陣A的奇異值。矩陣U的列向量被稱爲左奇異向量,矩陣V 的列向量被稱右奇異向量

SVD最有用的一個性質多是拓展矩陣求逆到非方矩陣上。另外,SVD可用於推薦系統中。

相關文章
相關標籤/搜索