矩陣與張量的區別

摘要: 關於矩陣和張量的區別有些人可能不太清楚,看了這篇文章相信你會很明白了網絡

這個問題有一個簡短的答案,讓咱們從那裏開始吧。而後,咱們能夠查看一個應用程序以得到更深刻的瞭解。函數

矩陣是由括號括起的n×m(例如,3×3)個數字的網格。咱們能夠加上和減去相同大小的矩陣,只要大小兼容((n×m)×(m×p)= n×p),就將一個矩陣與另外一個矩陣相乘,以及能夠將整個矩陣乘以常數。向量是一個只有一行或一列的矩陣(但見下文)。所以,咱們能夠對任何矩陣進行一系列數學運算。學習

不過,基本的思想是,矩陣只是一個二維的數字網格。spa

張量一般被認爲是一個廣義矩陣。也就是說,它能夠是1-D矩陣(一個向量實際上就是一個張量),3-D矩陣(相似於一個數字的立方),甚至是0-D矩陣(單個數字),或者一個更難形象化的高維結構。張量的維數叫作它的秩。3d

可是這個描述忽略了張量最重要的性質!對象

張量是一個數學實體,它存在於一個結構中並與其餘數學實體相互做用。若是以常規方式轉換結構中的其餘實體,那麼張量必須服從一個相關的變換規則。blog

張量的這種「動態」特性是將其與單純矩陣區分開來的關鍵。它是一個團隊成員,當一個影響到全部成員的轉換被引入時,它的數值會隨着隊友的數值而變化。get

任何秩-2張量均可以表示爲一個矩陣,但並非每一個矩陣都是秩-2張量。張量矩陣表示的數值取決於整個系統應用了什麼變換規則。深度學習

對於您的目的,這個答案可能已經足夠了,可是咱們能夠經過一個小例子來講明它是如何工做的。這個問題是在一個深度學習研討會上提出的,因此讓咱們看一下該領域的一個簡單例子。數學

假設我在神經網絡中有一個隱藏的3個節點層。數據流入它們,經過它們的ReLU函數,而後彈出一些值。對於肯定性,咱們分別獲得2.5,4和1.2。 (別擔憂,圖表即將出現。)咱們能夠將這些節點的輸出表示爲向量,

假設有另一層3個節點。第一層的3個節點中的每一個節點都有一個權重,該權重與其對接下來3個節點的輸入相關聯。那麼,將這些權重寫爲3×3矩陣的條目將是很是方便的。假設咱們已經對網絡進行了屢次更新,並獲得了權重(本例中半隨機選擇)。

在這裏,一行的權值都到下一層的同一個節點,而某一列的權值都來自第一層的同一個節點。例如,輸入節點1對輸出節點3的權值是0.2(第3行,第1列)。 咱們能夠經過將權重矩陣乘以輸入向量來計算饋入下一層節點的總值,

不喜歡矩陣?這裏有一個圖。數據從左到右流動。

太棒了!到目前爲止,咱們所看到的只是矩陣和向量的一些簡單操做。

可是,假設我想對每一個神經元進行干預並使用自定義激活函數。一種簡單的方法是從第一層從新縮放每一個ReLU函數。在本例中,假設我將第一個節點向上擴展2倍,保留第二個節點,將第三個節點向下擴展1/5。這將改變這些函數的圖形以下圖所示:

這種修改的效果是將第一層生成的值分別乘以二、1和1/5。等於L1乘以一個矩陣A,

如今,若是這些新值經過原來的權值網絡被輸入,咱們獲得徹底不一樣的輸出值,如圖所示:

若是神經網絡以前運做正常,咱們如今就把它破壞了。咱們必須從新進行訓練以恢復正確的重量。

或者咱們會嗎?

第一個節點的值是以前的兩倍。 若是咱們將全部輸出權值減小1/2,則它對下一層的淨貢獻不變。咱們沒有對第二個節點作任何處理,因此咱們能夠不考慮它的權值。最後,咱們須要將最後一組權值乘以5,以補償該節點上的1/5因子。從數學上講,這至關於使用一組新的權值,咱們經過將原權矩陣乘以A的逆矩陣獲得:

若是咱們將第一層的修改後的輸出與修改後的權值結合起來,咱們最終會獲得到達第二層的正確值:

太好了!儘管咱們作出了最大努力,但網絡仍在從新運做!

好了,咱們已經學了不少數學了,讓咱們回顧一下。

當咱們把節點的輸入,輸出和權值看做固定的量時,咱們稱它們爲向量和矩陣,並用它完成。

可是,一旦咱們開始用其中一個向量進行修復,以常規方式對其進行轉換,咱們就必須經過相反的方式轉換權值來進行補償。這個附加的、集成的結構將單純的數字矩陣提高爲一個真正的張量對象。

事實上,咱們能夠進一步描述它的張量性質。若是咱們把對節點的變化稱爲協變(即,隨着節點的變化而乘以A),那麼權值就變成了一個逆變張量(具體來講,對節點變化,乘以A的倒數而不是A自己)。張量能夠在一個維度上是協變的,在另外一個維度上是逆變的,但那是另外的事了。

如今你知道了矩陣和張量之間的區別了吧。

原文連接 

相關文章
相關標籤/搜索