深度學習知識點整理(更新中)

1. 反向傳播會用到前向傳播時計算的值,以及cost的公式;但不會用到cost值,cost值只是用來評估當前網絡是否收斂。

2.如何實現從全鏈接層(n)映射到softmax層(k)?

需要在最後將 3D 輸出展平爲 1D,然後在上面添加幾個 Dense 層。

model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

                            

對於單標籤、多分類問題,網絡的最後一層應該使用 softmax 激活,這樣可以輸出在 N個輸出類別上的概率分佈(相加得1)。
這種問題的損失函數幾乎總是應該使用分類交叉熵。它將網絡輸出的概率分佈與目標的真實分佈之間的距離最小化。

3.用於測試數據標準化的均值和標準差都是在訓練數據上計算得到的。在工作流程中,你不能使用在測試數據上計算得到的任何結果,即使是像數據標準化這麼簡單的事情也不行。

4.K 折交叉驗證

爲了在調節網絡參數的同時對網絡進行評估,你可以將數據劃分爲訓練集和驗證集,但由於數據點很少,驗證集會非常小(比如大約100 個樣本)。因此,驗證分數可能會有很大波動,這取決於你所選擇的驗證集和訓練集。也就是說,驗證集的劃分方式可能會造成驗證分數上有很大的方差,這樣就無法對模型進行可靠的評估。
在這種情況下,最佳做法是使用 K 折交叉驗證。這種方法將可用數據劃分爲 K個分區(K 通常取 4 或 5),實例化 K 個相同的模型,將每個模型在 K - 1 個分區上訓練,並在剩下的一個分區上進行評估。模型的驗證分數等於 K 個驗證分數的平均值。平均分數是比單一分數更可靠的指標——這就是 K 折交叉驗證的關鍵。

                        

 5.爲什麼不是兩個集合:一個訓練集和一個測試集?在訓練集上訓練模型,然後在測試集上評估模型。這樣不是更簡單嗎?
原因在於開發模型時總是需要調節模型配置,比如選擇層數或每層大小[這叫作模型的超參數(hyperparameter),以便與模型參數(即權重)區分開]。這個調節過程需要使用模型在驗證數據上的性能作爲反饋信號。這個調節過程本質上就是一種學習:在某個參數空間中尋找良好的模型配置。因此,如果基於模型在驗證集上的性能來調節模型配置,會很快導致模型在驗證集上過擬合,即使你並沒有在驗證集上直接訓練模型也會如此

最後,你得到的模型在驗證集上的性能非常好(人爲造成的),因爲這正是你優化的目的。你關心的是模型在全新數據上的性能,而不是在驗證數據上的性能,因此你需要使用一個完全不同的、前所未見的數據集來評估模型,它就是測試集。

6.防止神經網絡過擬合的常用方法包括:
   獲取更多的訓練數據
   減小網絡容量
   添加權重正則化
   添加 dropout

7.爲什麼需要pooling?

一是減少需要處理的特徵圖的元素個數,減少參數;二是通過讓連續卷積層的觀察窗口越來越大(即窗口覆蓋原始輸入的比例越來越大),從而引入空間過濾器的層級結構。

8.爲什麼max pooling比mean pooling好?

特徵中往往編碼了某種模式或概念在特徵圖的不同位置是否存在,而觀察不同特徵的最大值而不是平均值能夠給出更多的信息。因此,最合理的子採樣策略是首先生成密集的特徵圖(通過無步進的卷積),然後觀察特徵每個小圖塊上的最大激活,而不是查看輸入的稀疏窗口(通過步進卷積)或對輸入圖塊取平均,因爲後兩種方法可能導致錯過或淡化特徵是否存在的信息

9.預訓練網絡

使用預訓練網絡有兩種方法:特徵提取(feature extraction)和微調模型(fine-tuning)

10.反捲積

反捲積就是轉置卷積,也是一種卷積,可以看到圖7,這個就是轉置卷積,由小尺寸到大尺寸的過程。也就是說反捲積也可以表示爲兩個矩陣乘積,很顯然轉置卷積的反向傳播就是也是可進行的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章