1.3 神經網絡小概念

此文基于周莫煩大神@莫煩的視頻,文章以及自己的一些心得。

1.3.1 ?性能衡量 Evaluation

Training/Validation/Test data

圖1 訓練集和測試集?

為了檢驗,評價神經網絡, 避免和改善這些問題, 我們通常會把收集到的數據分為訓練數據和測試數據,有時候還會分為訓練數據,驗證數據以及測試數據。 一般用于訓練的數據可以是所有數據的70%, 剩下的30%可以拿來測試學習結果.如果你想問為什么要分開成兩批, 那就想想我們讀書時的日子, 考試題和作業(yè)題大部分都是不一樣的吧. 這也是同一個道理.驗證數據的作用就是你做完平常的作業(yè)題還不夠,有時候老師還會給你加一些小測,你只有在小測的時候也能做的很好你才能參加最后的期末考試,也就是測試數據。

誤差曲線

圖2 誤差曲線

接著, 對于神經網絡的評價基本上是基于這30%的測試數據. 想想期末考試雖然花的時間少, 但是占得總成績肯定要比你平時作業(yè)的分多吧. 所以說這30%雖然少, 但是很重要. 然后, 我們就可以開始畫圖啦! 評價機器學習可以從誤差這個值開始, 隨著訓練時間的變長, 優(yōu)秀的神經網絡能預測到更為精準的答案, 預測誤差也會越少 . 到最后能夠提升的空間變小, 曲線也趨于水平 . 班上的差生, 從不及格到80分已經不容易啦, 再往上沖刺100分, 就變成了更難的事了. 機器學習也一樣. 所以, 如果你的機器學習的誤差曲線是這樣一條曲線, 那就已經是很不錯的學習成果啦.

準確度曲線

圖3 準確度曲線

同樣, 除了誤差曲線, 我們可以看他的精確度曲線. 最好的精度是趨向于100%精確. 比如在神經網絡的分類問題中, 100個樣本中, 我有90張樣本分類正確, 那就是說我的預測精確度是90%. 不過, 不知道大家有沒有想過對于回歸的問題呢? 怎樣看預測值是連續(xù)數字的精確度? 這時, 我們可以引用 R2 分數在測量回歸問題的精度 . R2給出的最大精度也是100%, 所以分類和回歸就都有的統(tǒng)一的精度標準. 除了這些評分標準, 我們還有很多其他的標準, 比如 F1 分數 , 用于測量不均衡數據的精度.?

交叉驗證 Cross-Validation

圖4 交叉驗證

神經網絡也有很多參數, 我們怎么確定哪樣的參數能夠更有效的解決現有的問題呢? 這時, 交叉驗證 就是最好的途徑了. 交叉驗證不僅僅可以用于神經網絡的調參, 還能用于其他機器學習方法的調參. 同樣是選擇你想觀看的誤差值或者是精確度, 不過橫坐標不再是學習時間, 而是你要測試的某一參數 (比如說神經網絡層數) . 我們逐漸增加神經層, 然后對于每一個不同層結構的神經網絡求出最終的誤差或精度, 畫在圖中. 我們知道, 神經層越多, 計算機所需要消耗的時間和資源就越多, 所以我們只需要找到那個能滿足誤差要求, 有節(jié)約資源的層結構. 比如說誤差在0.005一下都能接受 , 那我們就可以采用30層的神經網絡結構 .

1.3.2 ?過擬合 Overfitting

Overfitting是什么

圖5 Underfitting,Normal,Overfitting

上面第三個圖就是 overfitting,就是過度準確地擬合了歷史數據,而對新數據預測時就會有很大誤差。換句話來說,就是把訓練集的數據學的太透徹了,以至于你在測試集上表現的很差。有時候, 意外是猝不及防的, 比如有時候我們明明每一道作業(yè)習題都會做, 可是考試分數為什么總是比作業(yè)分數低許多? 原來, 我們只復習了作業(yè)題,并沒有深入, 拓展研究作業(yè)反映出來的知識. 這件事情發(fā)生在機器學習中, 我們就叫做過擬合. 我們在回到誤差曲線, 不過這時我們也把訓練誤差畫出來. 紅色的是訓練誤差, 黑色的是測試誤差. 訓練時的誤差比測試的誤差小, 神經網絡雖然學習到了知識, 但是對于平時作業(yè)太過依賴, 到了考試的時候, 卻不能隨機應變, 沒有成功的把作業(yè)的知識擴展開來。

圖6 overfitting在error rate中的體現

(1)過擬合在回歸問題中的體現。這里是一些數據. 如果要你畫一條線來描述這些數據, 大多數人都會這么畫. 對, 這條線也是我們希望機器也能學出來的一條用來總結這些數據的線. 這時藍線與數據的總誤差可能是10. 可是有時候, 機器過于糾結這誤差值, 他想把誤差減到更小, 來完成他對這一批數據的學習使命. 所以, 他學到的可能會變成這樣 . 它幾乎經過了每一個數據點, 這樣, 誤差值會更小 . 可是誤差越小就真的好嗎? 看來我們的模型還是太天真了. 當我拿這個模型運用在現實中的時候, 他的自負就體現出來. 小二, 來一打現實數據 . 這時, 之前誤差大的藍線誤差基本保持不變 .誤差小的 紅線誤差值突然飆高 , 自負的紅線再也驕傲不起來, 因為他不能成功的表達除了訓練數據以外的其他數據. 這就叫做過擬合. Overfitting.

圖7 回歸Overfitting

(2)過擬合在分類問題中的體現。在分類問題當中 . 過擬合的分割線可能是這樣 , 小二, 再上一打數據 . 我們明顯看出, 有兩個黃色的數據并沒有被很好的分隔開來. 這也是過擬合在作怪。

圖8 分類Overfitting

解決Overfitting的方法

1.增加數據量

大部分過擬合產生的原因是因為數據量太少了. 如果我們有成千上萬的數據, 紅線也會慢慢被拉直, 變得沒那么扭曲。

圖9 增加數據量能減小Overfitting

2.L1&L2正則化(Regularisation)

運用正規(guī)化. L1, l2 regularization等等, 這些方法適用于大多數的機器學習, 包括神經網絡. 他們的做法大同小異, 我們簡化機器學習的關鍵公式為 y=Wx . W為機器需要學習到的各種參數. 在過擬合中, W 往往變化率比較大. 為了不讓W一次性變化太大, 我們在計算誤差上做些手腳. 原始的 cost 誤差是這樣計算 , cost = 預測值-真實值的平方. 如果 W 變得太大, 我們就讓 cost 也跟著變大, 變成一種懲罰機制. 所以我們把 W 自己考慮進來 . 這里 abs 是絕對值. 這一種形式的 正規(guī)化, 叫做 l1 正規(guī)化. L2 正規(guī)化和l1 類似, , 只是絕對值換成了平方. 其他的l3.l4 也都是換成了立方和4次方等等. 形式類似. 用這些方法,我們就能保證讓學出來的線條不會過于扭曲.

圖10 L1&L2正則化

3. Dropout

還有一種專門用在神經網絡的正規(guī)化的方法, 叫作 dropout. 在訓練的時候, 我們隨機忽略掉一些神經元和神經聯結 , 是這個神經網絡變得”不完整”. 用一個不完整的神經網絡訓練一次.到第二次再隨機忽略另一些 , 變成另一個不完整的神經網絡. 有了這些隨機 drop 掉的規(guī)則, 我們可以想象其實每次訓練的時候, 我們都讓每一次預測結果都不會依賴于其中某部分特定的神經元. 像l1, l2正規(guī)化一樣, 過度依賴的 W , 也就是訓練參數的數值會很大, L1, L2會懲罰這些大的參數。Dropout 的做法是從根本上讓神經網絡沒機會過度依賴。

圖11 Dropout

1.3.3 特征標準化 (Feature Normalization)

什么是特征標準化

圖12 房價預測例子

在說特征標準化之前, 我們先來說說現實生活中, 我們的數據是什么樣的. 它們很可能來自不同的地方, 被不同的人采集, 有著不同的規(guī)格. 用最經典的房價預測例子來和大家說說. 我們用機器學習從房屋的各個層面來預測房價, 房屋的特征可能包括, 離市中心的距離, 房屋樓層, 房屋面積, 所在城市, 幾室?guī)讖d等等. 這些數據的取值范圍往往差距懸殊, 比如樓層一般在2-30層以內, 面積可能上百, 離市中心距離可以以千來記.

回到機器學習中, 如果我們以一個簡單的線性回歸方程來預測房屋的價格, 那方程可能會是這樣 . 價格= a* 離市中心 + b * 樓層 + c * 面積. 其中的 a b c 就是機器學習需要努力努力再努力 來優(yōu)化的參數.我們說的在具體一點, 用 abc 算出來的價格是預測價格 . 機器學習需要計算預測值和實際值的差別, 然后對這個誤差進行一些數學上的處理, 使之變成進步的階梯, 然后反向地傳遞回參數 a b c 來提升下次的預測準確度.

為了好理解, 我們把 b 先排除掉. 再把房價問題也簡化一下, 留下兩個特征. 因為面積的跨度一般可以從0 到 2-300, 而離市中心的距離跨度一般在10以內. 所以在這個公式中, c 只要稍稍變化一點, 他乘以面積的變化就會很大, 因為面積的值可以很大, 但是當a也變化那一點點時, 他對預測價格的影響力不會像 c 那樣巨大. 這樣的差別就會影響最終的工作效率. 所以, 我們要提高效率, 特征的標準化就可以幫上忙. 我們在機器學習訓練之前, 先對數據預先處理一下, 取值跨度大的特征數據, 我們濃縮一下, 跨度小的括展一下, 使得他們的跨度盡量統(tǒng)一.

特征標準化的方法

圖13 特征標準化方法

通常用于特征標準化的途徑有兩種, 一種叫做 min max normalization, 他會將所有特征數據按比例縮放到0-1的這個取值區(qū)間. 有時也可以是-1到1的區(qū)間. 還有一種叫做 standard deviation normalization, 他會將所有特征數據縮放成 平均值為0, 方差為1. 使用這些標準化手段. 我們不僅可以快速推進機器學習的學習速度, 還可以避免機器學習學得特扭曲.

1.3.4 特征選取(Feature Selection)

為什么要進行特征選取

我們假設世界上的金毛和吉娃娃只有兩種顏色, 偏黃, 偏白 . 然后我們用藍色和紅色分別代表吉娃娃和金毛所占的比例 . 如果在偏黃這邊, 比例是這樣 ,就可以說明, 在偏黃的方面, 吉娃娃和金毛所占的比例基本相同, 同樣 , 如果偏白色的吉娃娃和金毛數量也基本相同. 這組數據就說明, 如果給你一個毛色是偏黃色的特征, 你是沒有辦法大概判斷這只狗是吉娃娃還是金毛的. 這意味著. 通過毛色來觀察這兩種品種, 是不恰當的, 這個特征在區(qū)分品種上沒有起到作用 . 那我們再換一個特征看看, 吉娃娃和金毛能不能用身高來分類呢?

圖14 無意義的特征

我們拿這張圖具體說說, 圖里面有很多數據, 我們先舉一這條來說明 , 可以看出, 在這組數據中, 如果給出高度50cm, 基本上我們就能夠判定這只狗是金毛啦, 同樣, 大于50cm 的, 都將是金毛. 當我們看到這一條數據 , 我們也可以有相當大的信心說, 在這個高度范圍的, 很可能是只吉娃娃, 不過, 當我們再切換到這組數據 , 我們還能不能那么肯定地說這是那種狗呢? 這個高度范圍, 因為兩種狗都存在, 而且每種狗的數量都差不多, 所以在這個高度區(qū)間的狗狗我們就沒辦法判斷. 所以高度是一個很有用的特征, 但是并不完美, 這就是我們?yōu)槭裁葱枰细嗟奶卣鱽硖幚頇C器學習中的問題.

圖15 有意義的特征

如何進行特征選取

避免無意義的信息

避免重復性的信息

避免復雜的信息

1.3.5 激勵函數

為什么需要激勵函數

激活函數的作用就是轉換你的輸入到不同的域使得其線性可分。

假設訓練一個沒有激活函數的多層神經網絡,如下圖:

圖16 沒有激活函數的多層神經網絡

由式子可以看出,如果沒有使用激活函數,那么多層神經網絡只是單純的線性組合而已。

另外一個角度,盡管看起來似乎會太過瑣碎,但我還是想先從「最初的地方」開始:線性回歸(Linear regression)。

(常規(guī)的最小二乘法)線性回歸的目的是找到最優(yōu)權重——與輸入線性組合——可得出一個能夠最小化目標與解釋變量之間垂直偏移的模型,但是在此我們并不會討論模型擬合,因為這是另一個話題。

因此,在線性回歸中,我們會計算權重與輸入的線性組合(讓我們把這個函數稱為「凈輸入函數(net input function)」)。

net(x)=b+x1w1+x2w2+...xnwn= z

接下來,我們來講邏輯回歸(logistic regression)。我們讓凈輸入量z通過一個非線性「激活函數(activation function)」——即邏輯S型函數(logistic sigmoid function)。

圖17 Sigmoid函數

把它想象成線性的凈輸入量被「擠壓」入一個擁有良好特性的非線性方程,可以返回條件概率P(y=1 | x)(即樣本x隸屬于類別1的概率)?,F在,如果我們添加一個階躍函數,例如:

如果S型函數輸出大于或等于0.5預測為類別1,反之為類別0;

這樣就可以得到如圖所示的邏輯回歸分類器:

圖18 邏輯回歸分類器

但邏輯回歸(一種泛化的線性模型)其決策面(decision surface)是線性的,從這個層面上來看它仍然是一種線性分類器:

圖19 邏輯回歸決策面

如果數據類別可以線性劃分,邏輯回歸分類器對此可以工作的很好,但我們考慮一個棘手的例子

圖20 線性不可分的情況

數據類別非線性可分。對于此處這個例子,一個非線性的分類器可能會是更好的選擇,如一個多層神經網絡。接下來,我訓練了一個簡單的多層感知器,其有一個包含200個這種邏輯S型激活函數的隱藏層。讓我們從下圖看一下現在決策面看起來是怎樣的:

圖21 線性不可分決策面

全連接的前饋神經網絡,看起來基本如下圖這樣:

圖22 前饋神經網絡

在這個特例中,我們的輸入層只有3個單元(分別為x0= 1作為偏置單元,x1和x2作為兩個特征);隱藏層有200個這樣的S型激活函數(am),而輸出層有一個S型函數。其之后被送入一個單位階躍函數(圖中沒有展示)產生預測的輸出類別標簽y^

總結一下,邏輯回歸分類器有一個非線性激活函數,但是該模型的權重系數本質上是一個線性組合,也因此邏輯回歸是一個泛化的線性模型。現在可以得到,激活函數在神經網絡中的功能即通過對加權的輸入進行非線性組合產生非線性決策邊界(non-linear decision boundary)。

激活函數

圖23 激活函數

這里的 AF 就是指的激勵函數. 激勵函數拿出自己最擅長的”掰彎利器”, 套在了原函數上 用力一扭, 原來的 Wx 結果就被扭彎了.

其實這個 AF, 掰彎利器, 也不是什么觸不可及的東西. 它其實就是另外一個非線性函數. 比如說relu, sigmoid, tanh. 將這些掰彎利器嵌套在原有的結果之上, 強行把原有的線性結果給扭曲了. 使得輸出結果 y 也有了非線性的特征. 舉個例子, 比如我使用了 relu 這個掰彎利器, 如果此時 Wx 的結果是1, y 還將是1, 不過 Wx 為-1的時候, y 不再是-1, 而會是0.

你甚至可以創(chuàng)造自己的激勵函數來處理自己的問題, 不過要確保的是這些激勵函數必須是可以微分的, 因為在 backpropagation 誤差反向傳遞的時候, 只有這些可微分的激勵函數才能把誤差傳遞回去.

常用選擇

圖24 常用選擇

想要恰當使用這些激勵函數, 還是有竅門的. 比如當你的神經網絡層只有兩三層, 不是很多的時候, 對于隱藏層, 使用任意的激勵函數, 隨便掰彎是可以的, 不會有特別大的影響. 不過, 當你使用特別多層的神經網絡, 在掰彎的時候, 玩玩不得隨意選擇利器. 因為這會涉及到梯度爆炸, 梯度消失的問題.?

最后我們說說, 在具體的例子中, 我們默認首選的激勵函數是哪些. 在少量層結構中, 我們可以嘗試很多種不同的激勵函數. 在卷積神經網絡 Convolutional neural networks 的卷積層中, 推薦的激勵函數是 relu. 在循環(huán)神經網絡中 recurrent neural networks, 推薦的是 tanh 或者是 relu。

1.3.6 加速神經網絡訓練 (Speed Up Training)

Stochastic Gradient Descent

圖25 隨機梯度下降

所以, 最基礎的方法就是 SGD 啦, 想像紅色方塊是我們要訓練的 data, 如果用普通的訓練方法, 就需要重復不斷的把整套數據放入神經網絡 NN訓練, 這樣消耗的計算資源會很大.

我們換一種思路, 如果把這些數據拆分成小批小批的, 然后再分批不斷放入 NN 中計算, 這就是我們常說的 SGD 的正確打開方式了. 每次使用批數據, 雖然不能反映整體數據的情況, 不過卻很大程度上加速了 NN 的訓練過程, 而且也不會丟失太多準確率.

Momentum

圖26 慣性法

大多數其他途徑是在更新神經網絡參數那一步上動動手腳. 傳統(tǒng)的參數 W 的更新是把原始的 W 累加上一個負的學習率(learning rate) 乘以校正值 (dx). 這種方法可能會讓學習過程曲折無比, 看起來像 喝醉的人回家時, 搖搖晃晃走了很多彎路.所以我們把這個人從平地上放到了一個斜坡上, 只要他往下坡的方向走一點點, 由于向下的慣性, 他不自覺地就一直往下走, 走的彎路也變少了. 這就是 Momentum 參數更新.

AdaGrad

圖27 AdaGrad

這種方法是在學習率上面動手腳, 使得每一個參數更新都會有自己與眾不同的學習率, 他的作用和 momentum 類似, 不過不是給喝醉酒的人安排另一個下坡, 而是給他一雙不好走路的鞋子, 使得他一搖晃著走路就腳疼, 鞋子成為了走彎路的阻力, 逼著他往前直著走. 他的數學形式是這樣的.?

RMSProp

圖28 RMSProp

如果把下坡和不好走路的鞋子合并起來, 是不是更好呢?沒錯,這就是RMSProp.有了 momentum 的慣性原則 , 加上 adagrad 的對錯誤方向的阻力, 我們就能合并成這樣. 讓 RMSProp同時具備他們兩種方法的優(yōu)勢. 不過細心的同學們肯定看出來了, 似乎在 RMSProp 中少了些什么. 原來是我們還沒把 Momentum合并完全, RMSProp 還缺少了 momentum 中的 這一部分. 所以, 我們在 Adam 方法中補上了這種想法.

Adam

圖29 Adam

計算m 時有 momentum 下坡的屬性, 計算 v 時有 adagrad 阻力的屬性, 然后再更新參數時 把 m 和 V 都考慮進去. 實驗證明, 大多數時候, 使用 adam 都能又快又好的達到目標, 迅速收斂. 所以說, 在加速神經網絡訓練的時候, 一個下坡, 一雙破鞋子, 功不可沒.

1.3.7 不均衡數據(Imbalanced data)

為什么不均衡數據會影響結果

不均衡數據的形式很簡單. 這里有1個蘋果和9個梨, 當你發(fā)現你手中的數據對你說, 幾乎全世界的人都只吃梨, 如果隨便抓一個路人甲, 讓你猜他吃蘋果還是梨, 正常人都會猜測梨.

圖30 不均衡數據

不均衡的數據預測起來很簡單. 永遠都猜多的那一方面準沒錯. 特別是紅色多的那一方占了90%. 只需要每一次預測的時候都猜紅色, 預測準確率就已經達到了相當高的90%了. 沒錯, 機器也懂這個小伎倆. 所以機器學到最后, 學乖了, 每次都預測多數派.

解決不均衡數據的方法

1.獲取更多數據

圖31 獲取更多數據

首先, 我們要想想, 自己還能不能獲取到更多的數據. 有時候只是因為前段時期的數據多半呈現的是一種趨勢, 等到后半時期趨勢又不一樣了. 如果沒有獲取后半時期的數據, 整體的預測可能就沒有那么準確了.

2.更換評判方式

圖32 更換評判方式

通常, 我們會用到 準確率 accuracy, 或者誤差 cost來判斷機器學習的成果. 可是這些評判方法在不均衡數據面前, 高的準確率和低的誤差變得沒那么重要. 所以我們得換一種方式評判. 通過 confusion matrix 來計算 precision 和 recall, 然后通過 precision 和 recall 再計算f1 分數.這種方式能成功地區(qū)分不均衡數據, 給出更好的評判分數.?

3.重組數據

圖33 重組數據

第三種方法是最簡單粗暴的方法之一. 重新組合不均衡數據, 使之均衡. 方式一: 復制或者合成少數部分的樣本, 使之和多數部分差不多數量. 方式二: 砍掉一些多數部分, 使兩者數量差不多.

4.使用其他機器學習方法

圖34 使用其它機器學習方法

如果使用的機器學習方法像神經網絡等, 在面對不均衡數據時, 通常是束手無策. 不過有些機器學習方法, 像決策樹, decision trees 就不會受到不均很數據的影響.

5.修改算法

圖35 ?修改算法

嘗試修改算法. 如果你用的是 Sigmoid 的激勵函數, activation function, 他會有一個預測門檻, 一般如果輸出結果落在門檻的這一段,預測結果為梨, 如果落在這一段, 預測結果為蘋果, 不過因為現在的梨是多數派, 我們得調整一下門檻的位置, 使得門檻偏向蘋果這邊, 只有很自信的時候, 模型才會預測這是蘋果. 讓機器學習,學習到更好的效果.

1.3.8 不均衡數據(Imbalanced data)

Batch Normalization, 批標準化, 和普通的數據標準化類似, 是將分散的數據統(tǒng)一的一種做法, 也是優(yōu)化神經網絡的一種方法. 具有統(tǒng)一規(guī)格的數據, 能讓機器學習更容易學習到數據之中的規(guī)律.

每層都做標準化

在神經網絡中, 數據分布對訓練會產生影響. 比如某個神經元 x 的值為1, 某個 Weights 的初始值為 0.1, 這樣后一層神經元計算結果就是 Wx = 0.1; 又或者 x = 20, 這樣 Wx 的結果就為 2. 現在還不能看出什么問題, 但是, 當我們加上一層激勵函數, 激活這個 Wx 值的時候, 問題就來了. 如果使用 像 tanh 的激勵函數, Wx 的激活值就變成了 ~0.1 和 ~1, 接近于 1 的部已經處在了 激勵函數的飽和階段, 也就是如果 x 無論再怎么擴大, tanh 激勵函數輸出值也還是 接近1. 換句話說, 神經網絡在初始階段已經不對那些比較大的 x 特征范圍 敏感了. 這樣很糟糕, 想象我輕輕拍自己的感覺和重重打自己的感覺居然沒什么差別, 這就證明我的感官系統(tǒng)失效了. 當然我們是可以用之前提到的對數據做 normalization 預處理, 使得輸入的 x 變化范圍不會太大, 讓輸入值經過激勵函數的敏感部分. 但剛剛這個不敏感問題不僅僅發(fā)生在神經網絡的輸入層, 而且在隱藏層中也經常會發(fā)生.

只是時候 x 換到了隱藏層當中, 我們能不能對隱藏層的輸入結果進行像之前那樣的normalization 處理呢? 答案是可以的, 因為大牛們發(fā)明了一種技術, 叫做 batch normalization, 正是處理這種情況.

BN 添加位置

Batch normalization 的 batch 是批數據, 把數據分成小批小批進行 stochastic gradient descent. 而且在每批數據進行前向傳遞 forward propagation 的時候, 對每一層都進行 normalization 的處理。

BN 效果

Batch normalization 也可以被看做一個層面. 在一層層的添加神經網絡的時候, 我們先有數據 X, 再添加全連接層, 全連接層的計算結果會經過 激勵函數 成為下一層的輸入, 接著重復之前的操作. Batch Normalization (BN) 就被添加在每一個全連接和激勵函數之間。

之前說過, 計算結果在進入激勵函數前的值很重要, 如果我們不單單看一個值, 我們可以說, 計算結果值的分布對于激勵函數很重要. 對于數據值大多分布在這個區(qū)間的數據, 才能進行更有效的傳遞. 對比這兩個在激活之前的值的分布. 上者沒有進行 normalization, 下者進行了 normalization, 這樣當然是下者能夠更有效地利用 tanh 進行非線性化的過程。

沒有 normalize 的數據 使用 tanh 激活以后, 激活值大部分都分布到了飽和階段, 也就是大部分的激活值不是-1, 就是1, 而 normalize 以后, 大部分的激活值在每個分布區(qū)間都還有存在. 再將這個激活后的分布傳遞到下一層神經網絡進行后續(xù)計算, 每個區(qū)間都有分布的這一種對于神經網絡就會更加有價值. Batch normalization 不僅僅 normalize 了一下數據, 他還進行了反 normalize 的手續(xù). 為什么要這樣呢?

BN 算法

我們引入一些 batch normalization 的公式. 這三步就是我們在剛剛一直說的 normalization 工序, 但是公式的后面還有一個反向操作, 將 normalize 后的數據再擴展和平移. 原來這是為了讓神經網絡自己去學著使用和修改這個擴展參數 gamma, 和 平移參數 β, 這樣神經網絡就能自己慢慢琢磨出前面的 normalization 操作到底有沒有起到優(yōu)化的作用, 如果沒有起到作用, 我就使用 gamma 和 belt 來抵消一些 normalization 的操作.

最后我們來看看一張神經網絡訓練到最后, 代表了每層輸出值的結果的分布圖. 這樣我們就能一眼看出 Batch normalization 的功效啦. 讓每一層的值在有效的范圍內傳遞下去.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容