cs231神經網路學習筆記

2021-10-07 16:55:09 字數 1664 閱讀 9821

簡介

相比於線性分類中的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 逐引數調節學習率,...