# Linear Algebra for Machine Learning and Data Science(Week3: Linear transformations) ###### tags: `coursera` `Linear Algebra` `math` [week3](https://www.coursera.org/learn/machine-learning-linear-algebra/home/week/3) ## Matrices as linear transformations [課程連結](https://www.coursera.org/learn/machine-learning-linear-algebra/lecture/tvNBW/matrices-as-linear-transformations) 課程說明矩陣的線性轉換,如何將資料從一個空間轉移至另一個空間 ### Matrices as linear transformations ![](https://hackmd.io/_uploads/rkDstrXQn.png) 假設我們有著一個水果矩陣,$\begin{matrix}3&2\\1&2\end{matrix}$,下面說明線性轉換(linear transformations)。想像我們有一個平面空間,x、y軸為蘋果與香蕉,我們要做的就是從左邊空間的點經過上面的水果矩陣轉到右邊的空間去。因為這是一個二維空間,所以每個點都會有兩個座標,這兩個座標就形成一個行向量(column vector): * 原點$(0, 0)$:經過轉換仍然會得到$(0, 0)$,這在線性轉換是很常見的情況 * $(1,0)$:經過轉換之後得到$(3, 1)$ * $(0, 1)$:經過轉換之後得到$(1, 2)$ * $(1, 1)$:經過轉換之後得到$(4, 3)$ 基本上這四個點就已經定義整個轉換了,從左邊的正方形轉到右邊的平行四邊行,左邊的正方形稱之為basis。 ### Matrices as linear transformations ![](https://hackmd.io/_uploads/BJ1E9HQ73.png) 會將左邊的小小正方形稱為basis是有原因的,事實上它是可以擴展成整個平面空間,右邊的平行四邊行也是一樣的。線性轉換做的就是定義座標的變化。 以座標$(-2,3)$為例,在左邊的原始空間來看就是左兩格再往上三格,在右邊的平行四邊形來看也是一樣,走的是一樣的路,但座標的定義已經是不一樣了。 ### Systems of equations as linear transformations ![](https://hackmd.io/_uploads/B1VFoHm7n.png) 假設我們連續兩天去買水果,第一天買3顆蘋果跟1根香蕉,第二天買1顆蘋果跟2根香蕉,兩個水果的價格分別以$a,b$來表示,那就可以得到上圖的矩陣表述。 如果兩種水果都是1元,那就可以得到一個轉換,這個轉換就是左邊的水果價格轉到右邊的每日支出,也就是$(4, 3)$。 ## Linear transformations as matrices [課程連結](https://www.coursera.org/learn/machine-learning-linear-algebra/lecture/kRqJQ/linear-transformations-as-matrices) 課程說明如何找出那個對應線性轉換的矩陣 ### Linear transformations as matrices ![](https://hackmd.io/_uploads/SJqhaHQXh.png) 現在情況不一樣了,那個用於線性轉換的矩陣對我們來說是未知的,所以香蕉水果你買幾個對你來說是忘記的。可能你知道的就剩下水果一個多少錢,然後每天花幾元。一樣的,從basis開始,從左邊的小小正方形轉換成右邊的平行四邊形。 ### Linear transformations as matrices ![](https://hackmd.io/_uploads/rJu00Hm7h.png) 事實上我們並不需要那麼多的資訊,從矩陣計算來看我們也就只需要兩個點。也就是: * $(0, 1) \to (2, 3)$ * $(1, 0) \to (3, -1)$ 這兩個點分別是我們的矩陣的column。 ## Matrix multiplication [課程連結](https://www.coursera.org/learn/machine-learning-linear-algebra/lecture/7yydj/matrix-multiplication) 課程說明如何做矩陣相乘,這看起來就像是線性轉換 ### Combing linear transformations ![](https://hackmd.io/_uploads/S1jp5kIXh.png) 這是我們已經看過的範例,有個轉換矩陣,然後將左邊的basis轉右邊的basis。 ### Combing linear transformations ![](https://hackmd.io/_uploads/rJdwokLQh.png) 現在我們把剛剛得到的右邊的basis再拿來跟另一個矩陣做個轉換。 ### Combing linear transformations ![](https://hackmd.io/_uploads/Skfis18X2.png) 總的來看,從最左邊的basis經過兩次轉換來到最右邊的basis。那是不是有存在一個介於第一、第三個basis之間的矩陣? ### Combing linear transformations ![](https://hackmd.io/_uploads/SkoshyLQ2.png) 當然是有的,我們稍早已經說提過,$(0,1),(1,0)$已經足夠讓我們找出這個矩陣。兩次的線性轉換讓我們得到一個對應的矩陣。 ### Combing linear transformations ![](https://hackmd.io/_uploads/Skc3ylLX3.png) 那我們有沒有什麼辦法從第一、第二個轉換矩陣中得到第三個,答案是可以的,也就是矩陣乘法。兩個矩陣相乘得到的答案就是第三個矩陣。不過要注意的是在矩陣相乘的時候順序有調整,這很重要。 主要是因為,線性轉換作用於左邊的向量,我們是要把最左邊的向量轉成最右邊,所以先乘上矩陣再乘上向量。你就想,我們是要把左邊的$\begin{matrix}3 & 1 \\ 1 & 2\end{matrix}$轉成$\begin{matrix}5 & 0 \\ 2 & 4\end{matrix}$,被轉換的是放在右邊。 ### Multiplying matrices ![](https://hackmd.io/_uploads/r1JxWeUXh.png) 這邊給出一個直觀的矩陣計算方式,所有的組合都要來一下就是了。最終得到的就是$\begin{matrix}5 & 0 \\ 2 & 4\end{matrix}$。 ## The identity matrix [課程連結](https://www.coursera.org/learn/machine-learning-linear-algebra/lecture/5tgI8/the-identity-matrix) 課程說明1是個非常特別的數值,任何數乘上它都是任何數,矩陣中也存在這種特別的矩陣,稱為identity matrix ### The identity matrix ![](https://hackmd.io/_uploads/rJhQfe8mn.png) identity matrix(單位矩陣、恆等矩陣)的構造很簡單,左上右下的對角線為1,其餘皆為0。如果你有興趣的話是可以手算一下上面的範例。 ### The identity matrix ![](https://hackmd.io/_uploads/B1g8GgLQ2.png) 上面給出一個直觀的範例說明單位矩陣怎麼轉換都是不變的。左、右兩個basis是一樣的。 ## Matrix inverse [課程連結](https://www.coursera.org/learn/machine-learning-linear-algebra/lecture/yQYqg/matrix-inverse) 課程說明矩陣的逆(inverse),原值與逆相乘會得到1,舉例來說,2與1/2 ### Matrix inverse ![](https://hackmd.io/_uploads/SJEpuPU7n.png) 上圖說明matrix iverse,從左到中間經過一個矩陣線性轉換,那是否存在一個矩陣可以從中間再轉回右邊的形態? ### Multiplying matrices ![](https://hackmd.io/_uploads/SJjwtv8Qn.png) 矩陣與矩陣的逆相乘之後會得到單位矩陣(identity matrix),這個inverse就像是矩陣去乘上一個$-1$次方。 ### How to find an inverse? ![](https://hackmd.io/_uploads/ryVX5wIX3.png) 我們可以利用線性計算來取得矩陣的逆,上面給出一個範例,以點積來看可以得到四個線性方程式,並且裡面有四個未知數。這只需要套用課程一開始教過的求解流程就可以得到這四個未知數,以此得到矩陣的逆。 ### Matrix inverse ![](https://hackmd.io/_uploads/Sy0SoP872.png) 當然也會有那種不存在逆的矩陣,像上面範例中的矩陣就是一個矛盾,因此不存在逆。 ## Which matrices have an inverse? [課程連結](https://www.coursera.org/learn/machine-learning-linear-algebra/lecture/16RRm/which-matrices-have-an-inverse) 課程說明那些矩陣是存在逆 ### Which matrices have an inverse? ![](https://hackmd.io/_uploads/rkjI2vI73.png) 基本上,只要矩陣是non-singular matrix就存在inverse,也因此non-singular matrix又稱為invertible(可逆矩陣)。另外我們也可以從determinant來判斷,只要是非0,那就存在inverse。 結論來看: 1. non-singular matrix 2. determinant $\neq 0$ ## Neural networks and matrices [課程連結](https://www.coursera.org/learn/machine-learning-linear-algebra/lecture/eRHRX/neural-networks-and-matrices) 課程說明神經網路與矩陣的關係 ### Quiz: Natural language processing ![](https://hackmd.io/_uploads/ryqt64P72.png) 神經網路中有很多的觀念都是基於矩陣與矩陣乘法,這邊利用案例說明。 假設,你在做垃圾郵件的偵測,你發現到Lottery與Win這兩個token出現的時候,屬於垃圾郵件的機率好像還蠻高的,依此做個整理如上圖表。 這個範例是屬於分類器(classifier),要檢查看看是不是屬於垃圾郵件。舉例來說,也許我們給Lottery這個token的權重分數是3,Win的權重分數是2,如果有封郵件的內容是Win, win the lottery!,那這句話得到的分數就是7分。或許我們還有定義一個閥值(threshold),當郵件內容超過閥值就把它視為垃圾郵件。 我們的目標就是找出一組最好的組合,關於兩個token的權重分數以及閥值。 ### Quiz: Natural language processing ![](https://hackmd.io/_uploads/SJKOREDQn.png) 結果來看,最佳組合就是兩個權重分數為1,閥值為1.5。當權重分數為1的時候,我們所計算的其實也就是兩個token出現的次數。上面表格可以看的出來,在這個組合的情況下,我們是可以完美的過濾出垃圾郵件的(不過要注意的是範圍僅限於給定的資料)。 這邊的處理稱之為自然語言,因為輸入的是語言。 ### Graphical natural language processing ![](https://hackmd.io/_uploads/rJZa1HPQ2.png) 如果我們把這個結果畫出來,就是上圖那樣,x軸為Lottery的出現次數,y軸為Win的出現次數,把我們剛剛所找到的那個組合,也就是Lottery=1、Win=1的線,$1\cdot \text{Win}+1\cdot\text{Lottery}=1.5$,畫出來可以發現到,Yes、No是被完美的切割。這條線把空間切成兩個區域,線的右邊,也就是超過閥值1.5的區域就是Positive zone。線的左邊,也就是低於閥值1.5的區域就是Negative zone。這個分類器是一種線性分類器,可以將之視為最簡單,只有一層的神經網路。 ### Graphical natural language processing ![](https://hackmd.io/_uploads/BkMDgBvm2.png) 一層的神經網路可以視為矩陣的乘法,相乘之後得到的結果再檢查是否超過閥值。延續範例說明,我們已經知道我們的模型是兩個token的權重都是1,也就是我們的模型就是$\begin{matrix}\text{Model}\\1\\1\end{matrix}$。 拿第二筆資料來做範例計算,經過矩陣相乘之後可以得到結果為3,超過閥值1.5,是垃圾郵件沒錯。 ### Matrix multiplication ![](https://hackmd.io/_uploads/SygyfBwXh.png) 如果把整個資料表視為矩陣直接跟我們的模型做乘法計算,那就可以得到全部的結果。 ### Perceptrons ![](https://hackmd.io/_uploads/SkMIzrDX2.png) 如果我們做為垃圾郵件分類依據的token(單詞)愈來愈多,多到有$N$個,那也只是你的資料矩陣愈來愈寬,Model的維度會跟著你的token變化,也就是$N$維,一樣做矩陣乘法計算,一樣的後續處理。 ### Threshold and bias ![](https://hackmd.io/_uploads/rk3L7HP73.png) 回頭看只有兩個token的範例,我們知道$1\cdot \text{Win}+1\cdot\text{Lottery}>1.5$就是垃圾郵件,把這個$1.5$往左邊移過去,那就變成是bias。移過去左邊的同時,我們多了一個bias,給它一個基本權重1,那模型就多了一個$-1.5$,這在神經網路中是很常見的作法。做的事情完全一樣,只是說模型最終只需要判斷是正還是負就行。 ### The And operator ![](https://hackmd.io/_uploads/HJUXNrDX2.png) 以邏輯計算來看,上圖給出一個AND的範例。我們把兩個元素相乘跟模型做個點積計算,可以發現得到的結果是跟AND一樣的。所以說,AND的資料集是可以拿來構建成一個感知器(perceptron),做為一層的神經網路。 ### The And operator ![](https://hackmd.io/_uploads/Sk6INrDXn.png) 以圖形來看的話就會像是上圖右那樣的分割整個空間。這結果跟我們先前的範例是一樣的。 ### The perceptron ![](https://hackmd.io/_uploads/rkoGHBvQ3.png) 我們可以以圖的方式來表述剛剛的AND範例。$x, y$是我們的input,$-1.5$則是bias,它們各自都有自己的權重$1$(edge上的值),輸入跟權重相乘之後相加得到結果,然後判斷是Yes還是No,判斷Yes、No的可以是一個activation function。 ### The perceptron ![](https://hackmd.io/_uploads/rJa6rHDm3.png) 如果我們把剛剛說明的一切都用變數來表示的話,那輸入就是$x_1, x_2, b$,這是資料集的資料,然後各自有權重$w_1, w_2$,經過點積計算$z=Wx+b$(其中$W$是權重矩陣),然後最後再通過activation function來判斷是1還是0。