2020-5-22 吳恩達-改善深層NN-w1 深度學習的實用層面(1.9 歸一化輸入(特徵)-加速訓練,優化J簡單-因爲任何位置都可以快速下降,步長大)

1.視頻網站:mooc慕課https://mooc.study.163.com/university/deeplearning_ai#/c
2.詳細筆記網站(中文):http://www.ai-start.com/dl2017/
3.github課件+作業+答案:https://github.com/stormstone/deeplearning.ai

1.9 歸一化輸入 Normalizing inputs

訓練NN,其中一個加速訓練的方法就是歸一化輸入。
在這裏插入圖片描述

如上圖,數據集的散點圖。
假設一個訓練集有兩個特徵,輸入特徵爲2維,歸一化需要兩個步驟:

  • step1:零均值

μ=1mi=1mx(i)\mu =\frac 1m\sum_{i=1}^mx^{(i)}
向量X等於每個訓練數據 x 減去μ\mu,即X := x-μ,意思是移動訓練集,直到它完成零均值化。如下圖。
在這裏插入圖片描述

  • step2:歸一化方差

注意:上圖中特徵x1x_1的方差比特徵x2x_2的方差要大得多
在這裏插入圖片描述

我們要做的是給σ\sigma賦值。
σ2=1mi=1m(x(i))2\sigma^2=\frac 1m\sum_{i=1}^m(x^{(i)})^2
這是元素yy的平方。σ2\sigma^2是一個向量,它的每個特徵都有方差。

到此,我們已經完成零值均化,(x(i))2(x^{(i)})^2或者說元素y2y^2就是方差。我們把向量X所有數據除以向量σ2\sigma^2,即X /=σ**2,最後變成下圖形式。
在這裏插入圖片描述

此時x1x_1x2x_2的方差都等於1,如下圖。
在這裏插入圖片描述

提示一下,如果你用它來調整訓練數據,那麼也用相同的μ\muσ2\sigma^2來歸一化測試集。尤其是,你不希望訓練集和測試集的歸一化有所不同。所以你要用同樣的方法調整測試集,而不是在訓練集和測試集上分別預估μ\muσ2\sigma^2

訓練數據和測試數據都是通過相同μ\muσ2\sigma^2定義的相同數據轉換,其中μ\muσ2\sigma^2是由訓練集數據計算得來的。

爲什麼我們想要歸一化輸入特徵?

J(w,b)=1mi=1mL(y^(i),y(i))J(w,b)=\frac 1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)})
上面是代價函數J公式。

我們來對比一下非歸一化和歸一化代價函數有什麼不同。

  • 非歸一化的輸入特徵

如果你使用非歸一化的輸入特徵,代價函數會像這樣
在這裏插入圖片描述

這是一個非常細長狹窄的代價函數,最小值應該在原點。
但如果特徵值在不同範圍,假如x1x_1取值範圍從1到1000,特徵x2x_2的取值範圍從0到1,結果是參數w1w_1w2w_2值的範圍或比率將會非常不同。

上圖數據軸應該是w1w_1w2w_2,但爲了便於直觀理解,圖中標記爲w和b。代價函數就有點像狹長的碗一樣,如果你能畫出該函數的部分輪廓,它會是這樣一個狹長的函數,如下圖。
在這裏插入圖片描述

如果你在上圖這樣的代價函數上運行梯度下降法,你必須使用一個非常小的學習率。
在這裏插入圖片描述

如上圖,梯度下降法可能從圖中左下方開始,需要多次迭代過程,直到最後找到最小值。

  • 歸一化特徵

然而如果你歸一化特徵,代價函數平均起來看更對稱。
在這裏插入圖片描述
在這裏插入圖片描述

此時代價函數是一個更圓的球形輪廓。如上圖,不論從哪個位置開始,梯度下降法都能夠更直接地找到最小值,你可以在梯度下降法中使用較大步長,而不需要像在非歸一化狹長圖中那樣反覆執行。

當然,實際上w是一個高維向量,因此用二維繪製並不能正確地傳達並直觀理解。但總得來說,代價函數更圓一些,就更容易優化。前提是特徵都在相似範圍內,而不是一個特徵從1到1000,另外特徵從0到1的範圍,而是特徵都在-1到1範圍內或相似偏差,這使得代價函數優化起來更簡單快速。

實際上如果假設特徵x1x_1範圍在0-1之間,x2x_2的範圍在-1到1之間,x3x_3範圍在1-2之間,它們是相似範圍,所以算法運行會表現得很好。

當它們在非常不同的取值範圍內,如其中一個從1到1000,另一個從0到1,這對優化算法非常不利。但是僅將它們設置爲均化零值,假設方差爲1,確保所有特徵都在相似範圍內,通常可以幫助學習算法運行得更快。

所以如果輸入特徵處於不同範圍內,可能有些特徵值從0到1,有些從1到1000,那麼歸一化特徵值就非常重要了。如果特徵值處於相似範圍內,那麼歸一化就不是很重要了。執行這類歸一化並不會產生什麼危害,我通常會做歸一化處理,雖然我不確定它能否提高訓練或算法速度。

總結

  • 輸入特徵處於相似範圍內,不一定要歸一化。
  • 輸入特徵處於不同範圍內,一定要歸一化。

執行這類歸一化並不會產生什麼危害,所以別管範圍,都做吧。

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