前面已經提到了矩陣和向量的乘法運算,這裡再對矩陣相乘的概念進行重述。矩陣相乘是基本且常用的運算之一。這裡定義矩陣X和矩陣A相乘得到矩陣Y。在定義乘法運算的過程中,需要使X的列數與A的行數相等。将乘法運算寫為如下形式。
Y=AX或Y=A.X (1.17)
式(1.17)展示了兩種矩陣乘法的書寫習慣,前一種是線性代數裡常用的矩陣乘法書寫形式,後一種在張量分析中常用,代表向量的點乘運算。式(1.18)為寫1成分量的形式。
(1.18)
這裡有兩點需要解釋,有時會用字母加下标的方式來表示矩陣元素。而矩陣相乘的過程中,在一部分文獻中會寫成約定求和的方式,即省略求和符号而用相同的指标/代表求和。對于矩陣的乘法來說,還有其他的乘法形式,如矩陣的哈達瑪積( Hadamard Product ) ,就是矩陣的對應元素相乘,其形式如下。
(1.19)
這裡需要注意的是,式(1.19)中相同指标并不代表求和,而僅是元素相乘。與之相類似的是矩陣的加法運算,其代表着矩陣對應元素相加。
(1.20)
矩陣運算本身也有着類似于數字運算的法則。
(1)分配率
A(B C)=AB AC
(2)結合律:
(AB)C=A(BC)
(3) 交換律:矩陣運算無交換律。
1 矩陣分塊運算和線性變換
回顧如下一種簡單的等式。
(1.21)
Y=ax b
這是一種簡單的表示形式,它代表x和y之間存在某種關系。如果将x與y看成二維空間中的坐标,那麼式(1.21)則代表了空間中的某一條直線。寫成矩陣的乘法與加法,則形式如下。
(1.22)
Y=AX B
式(1.22)實際上代表對矩陣X進行線性變換後得到Y的過程。因此矩陣的線性變換實際上就是對式(1.21)的擴展。這代表X與Y之間存在某種簡單的關系。取Y,X, B的某一列向量r,y,b,則公式如下。
(1.23)
y=Ax b
這代表着對向量 進行線性變換。在給出式(1.22)的過程中,我們需要解釋一個細節,就是矩陣的分塊運算。對于矩陣的乘法及加法運算,都可以分解為對子矩陣進行相乘運算。例如将式(1.22)中矩陣的每一列看作一個子矩陣(向量) ,那麼 可以寫成分塊形式。式(1.23)中X就來自于x1~xn。
(1.24)
X=[x1,...,xn]
将Y,B均寫成類似的形式,那麼X與A的乘法可以寫成如下形式。
(1.25)
這就是矩陣的分塊運算。當然,分塊運算還有其他劃分形式,讀者可參考線性代數的相關内容。如果令y=0,那麼式(1.23)就變成了如下形式。
(1.26)
Ax=-6
式(1.26)是一個标準的線性方程組。從矩陣分塊運算的角度來看,将n個未知數的m組方程寫成了式(1.23)所示的緊湊形式。矩陣可以簡化公式的書寫。假設.4矩陣是m行n列的,則嚴格來說還需要Rank (A) =min(m, n)
(1) 如果m=n,那麼代表未知數個數與方程個數是相等的,這是一個适定方程。
(2)如果m<n,那麼代表未知數個數大于方程個數,這是一個欠定方程。
(3)如果m >n,那麼代表未知數個數小于方程個數,這是一個超定方程。
這就有了3種典型問題。對于适定問題,如果矩陣行列式不等于0,那麼方程有唯一解(空間中的一個點) ;對于欠定方程,方程具有無窮多個解(一個空間曲面) ;對于超定方程,僅有近似解。機器學習問題應當都是超定問題,也就是方程個數是多于未知數個數的。但是也有些情況例外,比如深度學習模型,未知數個數可能是大于方程個數的。
現在列舉一個簡單的例子。假設在二維空間中有(1.0, 1.1) (2.0, 1.9) (3.0,3.1) (4.0, 4.0)共4個點,求解這4個點所在的直線。如果直線方程為y=ax b ,那麼将4個數據點代入後會得到4個方程,而未知數有a.6兩個,因此這就是一個典型的超定問題。此時,對于a、6取得任何值都無法很好地描述通過4個點的直線。但若取a=1,b=0,此時雖然無法精确地描述z和y的關系,但是通過這種方式可以得到(1.0, 1.0),與數據點相比(1.0, 1.1)十分接近,因此得到了近似意義(最小二乘)上的解。這是一個非常典型的機器學習問題。從這個例子可以看到,實際上機器學習就是一個從數據中尋找規律的過程。而假設數據符合直線分布就是我們給定的模型,求解給定模型參數的過程稱為優化。這裡不需要讀者對機器學習問題進行更多的思考,我們在之後還會進行更詳細的闡釋。這裡隻是說明機器學習問題大部分情況下是一個超定問題,但由于可訓練參數(也就是未知數)較多,在訓練樣本(每個訓練數據都是一個方程)不足的情況下深度學習模型可能并非超定問題,此時會面臨過拟合風險,因此對于機器學習尤其是深度學習需要海量(數量遠超未知數的個數,未知數也就是可訓練參數的個數)的樣本才能學習到有價值的知識。
1.2矩陣分解
上面提到空間中某一坐标向量可以寫成多個向量相加的形式。
(1.27)
對于一組不全為0的向量而言,如果其中的任意一個向量都不能由其他向量以式(1.27)的方式表示,那就代表這組向量線性無關或這組向量是線性獨立的。
線性獨立的概念很重要。如果幾個向量線性不獨立,即某個向量可以用其他向量表示,那麼這個向量就沒有存儲的必要。舉個簡單的例子。
(1.28)
式(1.28)代表向量
仍是線性相關的,也就是說,我們僅需存儲3個向量其中的兩個就可以恢複第3個向量。這種恢複是無損的,是信息壓縮最原始的思想。這裡加強約束,式(1.27)中等式右邊各個向量
之間的關系如下。
(1.29)
式(1.29)中描述的向量是互相正交的關系,并且是單位向量。
(1.30)
單位向量:長度為1的向量。
向量正交:兩個向量内積為0。
坐标基向量是最簡單的單位向量。
因此,實際上式(1.27)就是對坐标向量進行的坐标基展開,這是在空間中所用到的概念。當然,并不是所有坐标基向量都是正交的,同樣也未必是單位向量。
對于一組矩陣的向量
來說,其中的每個向量都可以用其他多個向量以加權求和的方式表示。
(1.31)
其中,
代表第j個單位向量的第i個元素。同樣地
代表第k個向量的第i個元素。此時式(1.31)實際上可以表示為矩陣相乘的形式。
(1.32)
式(1.32)中由向量
組成的矩陣V可以分解為兩個矩陣A,E的乘積表示。如果m >k,也就是說,我們可以用少于m個數字來表示向量V,這是一個标準的數據壓縮過程。此時, A可以代表矩陣V的特征,如果要恢複V的話,還需要保存E。但是機器學習中通常隻需A即可,因為其帶有V的信息。
從前面的内容可以知道,式(1.32)是對矩陣進行的線性變換,這個變換的目的在于信息壓縮。這個過程中需要的是求解矩陣E。如果W=E^T,則信息壓縮方式可以寫為如下形式。
W稱為變換矩陣。這是通過矩陣的線性變換來完成數據壓縮的過程。
1.3方陣的線性變換:特征值分解
特征值分解是最簡單的一種矩陣分解形式,也是矩陣算法中最常用的。特征值分解是對方陣而言的。下面将某個矩陣A分解成3個矩陣相乘的形式。
(1.34)
這是一個矩陣相乘的逆運算,也是一個典型的欠定問題,因為矩陣分解并不是唯一的。為了解決這種非唯一性問題,我們對分解後的矩陣加入約束條件。第一個約束就是特征值分解中E矩陣是正交矩陣。
(1.35)
此時,式(1.33)中的變換矩陣W即為E。另外一個約束就是對角矩陣A ,對角線上的元素稱為特征值。E中的向量則稱為特征向量。
對于特征值分解而言,其本身具有明确的幾何意義。如果将矩陣A當作1.1.2節中的仿射變換矩陣,那麼前面提到的坐标與矩陣.4相乘實際上代表了對空間的旋轉拉伸變換。由此仿射變換本身可以分解為旋轉與拉伸。因此式(1.34)中所得到的矩陣,E代表了對空間的旋轉變換, A則代表了對空間的拉伸變換。在此,以二維情況進行簡單闡述,如圖1.9所示。
圖1.9 仿射變換圖示
1.4非方陣線性變換:奇異值分解
作為矩陣的分解算法,特征值分解最主要的缺陷在于它隻能應用于方陣。非方陣情況下的矩陣分解算法,比較有代表性的是奇異值分解(SVD)。
(1.36)
SVD的求解過程可以用特征值分解進行,這就需要将矩陣轉換為方陣。
(1.37)
對B進行特征值分解,利用對應元素相等可以得到如下關系。
(1.38)
根據式(1.36)可以得到M的值如下。
(1.39)
由此3個矩陣已經完全确定。因此,有人說矩陣的特征值分解是SVD的基礎。同時可以看到,矩陣A在變換為矩陣M的過程中,相當于對矩陣A進行一次線性變換。
1.5其他線性變換:字典學習
對于SVD分解而言,有一個非常大的問題就是約束過于嚴格,如矩陣與V為正交矩陣,這就導緻在計算的過程中,為了滿足分解條件,信息壓縮的質量可能會降低。因此,産生了另外一個更加寬泛的約束方式.
(1.40)
假設條件N足夠稀疏,此時M就稱為字典。在這種情況下弱化了正交性假設,所得到的信息壓縮效果會更加出色。
本文節選自《深度學習算法與實踐》
本書旨在為讀者建立完整的深度學習知識體系。全書内容包含3個部分,第一部分為與深度學習相關的數學基礎;第二部分為深度學習的算法基礎以及相關實現;第三部分為深度學習的實際應用。通過閱讀本書,讀者可加深對深度學習算法的理解,并将其應用到實際工作中。 本書适用于對深度學習感興趣并希望從事相關工作的讀者,也可作為高校相關專業的教學參考書。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!