當我們輸入的變量是一個比較大的向量(比如有4096項),函數是求返回輸入的最大值,要求的權重矩陣的梯度就是4096 * 4096的大小,而實際上我們的輸入往往都不只有一個向量,那如果向量有一百個的話,是否就意味著要求的矩陣達到了409600 * 409600的大小呢?其實不然,從梯度里求偏導的角度出發,求的第一個值的自變量實際上是輸出的第一個元素(即最大的那個元素),其他的元素都算做無關變量,可以當做是常數來對待,所以在實際的應用中的計算量依然只是4096 * 4096的計算量,也就是只需要寫出每個元素的偏導即可。
神經網絡
簡單來說,神經網絡是由簡單函數構成的一組函數,只是以層次化的方式將他們堆疊起來,從俄日選哪個策劃那個一個更復雜的非線性函數。以之前的分類函數為例,第一層是,第二層是
我們在第一層根據輸入的向量,得到了這張圖片在各個類別的初始得分,然后通過第二個我們根據梯度下降得到的權重矩陣加權后,選擇各個類別中最大的得分作為輸出,從而判斷輸入圖片的類別。這里只有簡單的兩層,在實際應用中可以根據需求堆疊多層網絡去迭代、優化輸出值。
從概念上來理解就是,我們想對一張圖片進行識別分類,為了讓模型可以理解它,用第一層線性層對圖片的數據進行降維,變成了向量,在第二層非線性層用激活函數(在這個例子里是max函數)來對值進行變換,使得整體函數形式變為任意的目標函數,例子中這種我們叫做單隱藏層神經網絡(在實際應用中我們通常比較關注的是有多少層隱藏層,而不是做了多少次矩陣乘法,即多少個線性層或全連接層)
學習來自斯坦福教程:Stanford University CS231n: Deep Learning for Computer Vision