這周老師讓把深度學習的名詞過一遍,小瑪同學準備在過一遍Deep Learning名詞的同時把基本的模型也過一遍。
感謝傑哥發我深度學習入門系列能讓我有機會快速入門。
下面就來doc一些學到的東西
感知器(線性單元)有個問題就是當面對的資料集不是線性可分的時候,「感知器規則」可能無法收斂,這意味著我們永遠無法完成一個感知器的訓練。(即如果我們需要用感知器(神經元)擬合的對映不是線性的,那麼需要用在擬閤中新增非線性的函數)
SGD: Stochastic Gradient Descent
BGD: Batch Gradient Descent
SGD 和 BGD 之間的主要區別在於每次迭代的更新步驟。BGD 在每一步都使用整個資料集計算梯度,而 SGD 在每一步都使用單個樣本或一小批樣本計算梯度。這使得 SGD 比 BGD 更快,計算成本更低。
然而,在凸集中,由於其隨機性質,SGD 可能永遠無法達到全域性最小值,而是不斷在接近全域性最小值的區域內遊蕩。另一方面,BGD 只要有足夠的時間和合適的學習率,就能保證找到全域性最小值。
但是在非凸集中,隨機性有助於我們逃離一些糟糕的區域性最小值。
一般情況下,說感知器的時候,它的啟用函數是階躍函數;當我們說神經元的時候,啟用函數往往選擇為sigmoid函數或者是tanh函數。
sigmoid函數的導數非常有趣,它可以用sigmoid函數自身來表示。這樣,一旦計算出sigmoid函數的值,計算它的導數的值就非常方便。
令 \(y = sigmoid(x)\) , 則 \(y^{\prime} = y(1 − y)\)
下面是梯度檢查的程式碼。如果我們想檢查引數 的梯度是否正確,我們需要以下幾個步驟:
當然,我們可以重複上面的過程,對每個權重 \(w_{ji}\) 都進行檢查。也可以使用多個樣本重複檢查。
CNN 更適合影象,語音識別任務,它兒孫輩的人才包括谷歌的GoogleNet、微軟的ResNet。
減輕梯度消失問題 回憶一下計算梯度的公式 \(\nabla = \sigma^{\prime}\delta x\) 。其中,\(\sigma^{\prime}\) 是sigmoid函數的導數。在使用反向傳播演演算法進行梯度計算時,每經過一層
sigmoid神經元,梯度就要乘上一個 \(\sigma^{\prime}\) 。從下圖可以看出,\(\sigma^{\prime}\) 函數最大值是1/4。因此,乘一個 \(\sigma^{\prime}\) 會導致梯度越來越小,這對於深層網路的訓練是個很大的問題。
Relu函數作為啟用函數,有下面幾大優勢: