CS231Training Net

單個神經元

1. Sigmoid:
    1. 飽和使梯度消失--初始化權重選擇難
    2. 輸出非零中心--影響梯度下降
2. Tanh
3. ReLU(主要利用)(max(0,x))
    1. 容易死亡
4.Leak ReLU
5. Maxout

神經網絡結構

1. 層組織
    1. 不能循環
    2. 分層,最普通的爲全連接層(fully-connected         layer)--與其前後兩層是完全成對連接的,但是同一個全連接層內的神經元之間沒有連接
    3. 命名規則:當我們說N層神經網絡的時候,我們沒有把輸入層算入。
    4. 輸出層無激活函數
    5.      E. 網絡尺寸:神經元個數與參數個數(輸入層不算) Net1:6個神經元,26個參數
    6.      F. 權重矩陣:以網絡1爲例,對第一層W1爲[該層神經元個數4,上層神經元個數3] 當上層給出的輸入爲x[3,1]時,輸出就直接爲np.dot(W1,x)
2. 表達能力
    1.  有證明:
    給出任意連續函數f(x)和任意ε>0均存在一個至少含1個隱層的神經網絡g(x)(並且網絡中有合理選擇的非線性激活函數,比如sigmoid),對於∀x,使得$|f(x)-g(x)| < ε$
    換句話說,神經網絡可以近似任何連續函數。

但神經網絡,特別是卷積神經網絡,層的深度很重要(一種解釋是圖像擁有層次化結構)
3. 設置層的數量與尺寸
1. 防止過擬合,L2正則化,dropout,輸入噪聲等方法,比減少神經元數量要好得多

設置數據和模型

1. 數據預處理
    1.  均值減法(Mean subtraction)數據中每個獨立特徵減去平均值.X -=np.mean(X,axis=0) 或 X -= np.mean(X)
    2. 歸一化(Normalization):只有在確信不同的輸入特徵有不同的輸入範圍時纔有意義
        1.  做零中心化(zero-centered)再每個維度除其標準差 X /= np.std(X,axis=0)
        2. 對每個維度做歸一化,是的每個維度的最大值和最小值爲1和-1
        3. 圖像由於在[0:255]之間,所有並不是很必
    3. PCA與白化(Whitening)
2. 權重初始化
    1. 小隨機數初始化: `W= 0.01*np.random.radn(D,H)//返回D*H大小矩陣,元素爲均值爲0,方差爲1的標準高斯分佈` 
    2. 使用`1/sqrt(n)`校準方差: 小隨機數初始化隨着輸入數據增長,隨機初始化後輸出分佈中方差也增大,根據輸入數據量的平方根來調整其數值範圍即`W = np.random.randn(n)/sqrt(n)`
    代碼爲`w = np.random.randn(n) * sqrt(2.0/n)`。這個形式是神經網絡算法使用ReLU神經元時的當前最佳推薦。
    3. 稀疏初始化(Sparse initialization)另一個處理非標定方差的方法是將所有權重矩陣設爲0,但是爲了打破對稱性,每個神經元都同下一層固定數目的神經元隨機連接(其權重數值由一個小的高斯分佈生成)。一個比較典型的連接數目是10個。
    4. 偏置(biases)的初始化。通常將偏置初始化爲0,這是因爲隨機小數值權重矩陣已經打破了對稱性。對於ReLU非線性激活函數,有研究人員喜歡使用如0.01這樣的小數值常量作爲所有偏置的初始值,這是因爲他們認爲這樣做能讓所有的ReLU單元一開始就激活,這樣就能保存並傳播一些梯度。然而,這樣做是不是總是能提高算法性能並不清楚(有時候實驗結果反而顯示性能更差),所以通常還是使用0來初始化偏置參數。
    5. 批量歸一化(Batch Normalization)。[批量歸一化](https://arxiv.org/abs/1502.03167)是loffe和Szegedy最近才提出的方法,該方法減輕瞭如何合理初始化神經網絡這個棘手問題帶來的頭痛:),其做法是讓激活數據在訓練開始前通過一個網絡,網絡處理數據使其服從標準高斯分佈。因爲歸一化是一個簡單可求導的操作,所以上述思路是可行的。在實現層面,應用這個技巧通常意味着全連接層(或者是卷積層,後續會講)與激活函數之間添加一個BatchNorm層。在實踐中,使用了批量歸一化的網絡對於不好的初始值有更強的魯棒性。最後一句話總結:批量歸一化可以理解爲在網絡的每一層之前都做預處理,只是這種操作以另一種方式與網絡集成在了一起。
3. 正則化 Regularization
    1. L2正則:損失函數加上$\frac{1}{2}\lambda w^2 $.L2正則化可以直觀理解爲它對於大數值的權重向量進行嚴厲懲罰,傾向於更加分散的權重向量.使網絡更傾向於使用所有輸入特徵,而不是嚴重依賴輸入特徵中某些小部分特徵。最後需要注意在梯度下降和參數更新的時候,使用L2正則化意味着所有的權重都以$W += -\lambda * W$向着0線性下降。
    2. L1正則化:損失函數加上$\lambda |w $它會讓權重向量在最優化的過程中變得稀疏(即非常接近0)。也就是說,使用L1正則化的神經元最後使用的是它們最重要的輸入數據的稀疏子集.如果不是特別關注某些明確的特徵選擇,一般說來L2正則化都會比L1正則化效果好。
發佈了56 篇原創文章 · 獲贊 18 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章