簡介
相比於線性分類中的s = w×x,其中w是乙個矩陣,x是乙個列向量,包含影象的全部畫素資訊。它們相乘的直接結果就是得到乙個得分向量。
像資料庫cifar-10的案例中w是乙個10×3072的矩陣,x是乙個3072×1的向量,他們的結果就是得到10×1的得分向量》
神經元則不同,它的計算法則是
其中的w1可以是100×3072的矩陣與x相乘的到乙個100×1的過度向量,max()函式是非線性的,這種非線性的函式有多種選擇。w2是10×100的向量最終的到10×1的得分向量。注意非線性函式在計算上是至關重要的,如果略去這一步,那麼兩個矩陣將會合二為一。
前向傳播計算舉例
不斷重複的矩陣乘法與啟用函式交織。將神經網路組織成層狀的乙個主要原因,就是這個結構讓神經網路演算法使用矩陣向量操作變得簡單和高效。用上面那個3層神經網路舉例,輸入是[3x1]的向量。乙個層所有連線的強度可以存在乙個單獨的矩陣中。比如第乙個隱層的權重w1是[4x3],所有單元的偏置儲存在b1中,尺寸[4x1]。這樣,每個神經元的權重都在w1的乙個行中,於是矩陣乘法np.dot(w1, x)就能計算該層中所有神經元的啟用資料。類似的,w2將會是[4x4]矩陣,儲存著第二個隱層的連線,w3是[1x4]的矩陣,用於輸出層。完整的3層神經網路的前向傳播就是簡單的3次矩陣乘法,其中交織著啟用函式的應用。
# 乙個3層神經網路的前向傳播:
f =lambda x:
1.0/
(1.0
+ np.exp(
-x))
# 啟用函式(用的sigmoid)
x = np.random.randn(3,
1)# 含3個數字的隨機輸入向量(3x1)
h1 = f(np.dot(w1, x)
+ b1)
# 計算第乙個隱層的啟用資料(4x1)
h2 = f(np.dot(w2, h1)
+ b2)
# 計算第二個隱層的啟用資料(4x1)
out = np.dot(w3, h2)
+ b3 # 神經元輸出(1x1)
在上面的**中,w1,w2,w3,b1,b2,b3都是網路中可以學習的引數。注意x並不是乙個單獨的列向量,而可以是乙個批量的訓練資料(其中每個輸入樣本將會是x中的一列),所有的樣本將會被並行化的高效計算出來。注意神經網路最後一層通常是沒有啟用函式的(例如,在分類任務中它給出乙個實數值的分類評分)。
更大的神經網路可以表達更複雜的函式。資料是用不同顏色的圓點表示他們的不同類別,決策邊界是由訓練過的神經網路做出的。
正則化強度是控制神經網路過擬合的好方法。看下圖結果:
不同正則化強度的效果:每個神經網路都有20個隱層神經元,但是隨著正則化強度增加,它的決策邊界變得更加平滑。
需要記住的是:不應該因為害怕出現過擬合而使用小網路。相反,應該進盡可能使用大網路,然後使用正則化技巧來控制過擬合。
cs231 學習筆記(一)
訓練過程就是記錄所有的資料點,在 階段對每一條記錄 乙個影象 與原有資料集進行比較,得出與之最相近的一條記錄,其label就是最後的 值。通常使用的 distance metric 來比較影象 l1依賴於座標系,當座標軸轉動時l1值隨之改變,而l2不會。knn選擇k個最近的鄰居,隨著k的值越大,你的...
cs231線性分類筆記
最簡單的線性分類器 公式每個影象由32 32 3個畫素,上述公式中把影象拉伸為乙個3072 1的向量。w和b是引數,其中w是乙個k 3072的矩陣 k表示類別數 被稱為權重,b是乙個k 1的偏執向量。1,乙個單獨的矩陣乘法 2,其中的引數是可以控制的,目的就是找到最合適的引數使得準確率做高。3,資料...
cs231以及遷移學習
以這個2元分類為例,不normalization的話,loss非常敏感,分類器稍微改變一下,對loss的影響很大。normalization後問題得到解決。在cnn中我們希望每層都normalization,可以用batch normalization velocity初始值是0 逐引數調節學習率,...