① 【神經網路原理】如何利用梯度下降法更新權重與偏置
損失函數的值減小,意味著神經網路的預測值(實際輸出)和標簽值(預期的輸出)越接近。
損失函數通常為 多元函數 ,其自變數包括網路中包含的所有的權重w、以及所有的偏置b,有的地方也將其稱作代價函數(Cost function)或價值函數(Value function),這里只介紹均方誤差損失函數(MSE):
多元函數的梯度類似於一元函數導數 :對多元函數各變數依次求一階偏導,然後將各偏導值組合成一個一維列向量,就得到了該多元函數梯度。損失函數通常為 多元函數 ,其梯度如下:
對於神經網路結構 & 符號約定有疑惑的可以參考我的這篇文章—— 【神經網路原理】神經網路結構 & 符號約定
梯度的負方向 :因為梯度是一個向量,具有方向性。這里的 下降 是指損失函數值的減小。
那麼為什麼沿梯度的負方向損失函數值減小最快呢?這里主要利用 多元函數的一階泰勒展開 (一階形式還是比較簡單的)和 向量點積公式 來證明:
這里只給出了第 l 層的網路參數——權重(矩陣)與偏置(向量)的梯度下降更新公式,其他層網路參數的更新公式同理可得,對符號有疑惑的請參考: 【神經網路原理】神經網路結構 & 符號約定 。
有了各層網路參數(向量/矩陣)的更新公式,其中損失函數對各參數的梯度又該如何求解呢?事實上由於神經網路中參數(權重W和偏置b)通常較多,要想直接求解損失函數對這些參數的梯度,難度極大,所以在實際訓練網路時,我們通常採用 反向誤差傳播,即BP演算法 ,巧妙地利用預測值與標簽值的殘差,從輸出層到輸入層反向地求解出損失函數對各層網路參數的梯度。
② 一文讀懂神經網路
要說近幾年最引人注目的技術,無疑的,非人工智慧莫屬。無論你是否身處科技互聯網行業,隨處可見人工智慧的身影:從 AlphaGo 擊敗世界圍棋冠軍,到無人駕駛概念的興起,再到科技巨頭 All in AI,以及各大高校向社會輸送海量的人工智慧專業的畢業生。以至於人們開始萌生一個想法:新的革命就要來了,我們的世界將再次發生一次巨變;而後開始焦慮:我的工作是否會被機器取代?我該如何才能抓住這次革命?
人工智慧背後的核心技術是深度神經網路(Deep Neural Network),大概是一年前這個時候,我正在回老家的高鐵上學習 3Blue1Brown 的 Neural Network 系列視頻課程,短短 4 集 60 多分鍾的時間,就把神經網路從 High Level 到推導細節說得清清楚楚,當時的我除了獲得新知的興奮之外,還有一點新的認知,算是給頭腦中的革命性的技術潑了盆冷水:神經網路可以解決一些復雜的、以前很難通過寫程序來完成的任務——例如圖像、語音識別等,但它的實現機制告訴我,神經網路依然沒有達到生物級別的智能,短期內期待它來取代人也是不可能的。
一年後的今天,依然在這個春運的時間點,將我對神經網路的理解寫下來,算是對這部分知識的一個學習筆記,運氣好的話,還可以讓不了解神經網路的同學了解起來。
維基網路這樣解釋 神經網路 :
這個定義比較寬泛,你甚至還可以用它來定義其它的機器學習演算法,例如之前我們一起學習的邏輯回歸和 GBDT 決策樹。下面我們具體一點,下圖是一個邏輯回歸的示意圖:
其中 x1 和 x2 表示輸入,w1 和 w2 是模型的參數,z 是一個線性函數:
接著我們對 z 做一個 sigmod 變換(圖中藍色圓),得到輸出 y:
其實,上面的邏輯回歸就可以看成是一個只有 1 層 輸入層 , 1 層 輸出層 的神經網路,圖中容納數字的圈兒被稱作 神經元 ;其中,層與層之間的連接 w1、w2 以及 b,是這個 神經網路的參數 ,層之間如果每個神經元之間都保持著連接,這樣的層被稱為 全連接層 (Full Connection Layer),或 稠密層 (Dense Layer);此外,sigmoid 函數又被稱作 激活函數 (Activation Function),除了 sigmoid 外,常用的激活函數還有 ReLU、tanh 函數等,這些函數都起到將線性函數進行非線性變換的作用。我們還剩下一個重要的概念: 隱藏層 ,它需要把 2 個以上的邏輯回歸疊加起來加以說明:
如上圖所示,除輸入層和輸出層以外,其他的層都叫做 隱藏層 。如果我們多疊加幾層,這個神經網路又可以被稱作 深度神經網路 (Deep Neural Network),有同學可能會問多少層才算「深」呢?這個沒有絕對的定論,個人認為 3 層以上就算吧:)
以上,便是神經網路,以及神經網路中包含的概念,可見,神經網路並不特別,廣義上講,它就是
可見,神經網路和人腦神經也沒有任何關聯,如果我們說起它的另一個名字—— 多層感知機(Mutilayer Perceptron) ,就更不會覺得有多麼玄乎了,多層感知機創造於 80 年代,可為什麼直到 30 年後的今天才爆發呢?你想得沒錯,因為改了個名字……開個玩笑;實際上深度學習這項技術也經歷過很長一段時間的黑暗低谷期,直到人們開始利用 GPU 來極大的提升訓練模型的速度,以及幾個標志性的事件:如 AlphaGo戰勝李世石、Google 開源 TensorFlow 框架等等,感興趣的同學可以翻一下這里的歷史。
就拿上圖中的 3 個邏輯回歸組成的神經網路作為例子,它和普通的邏輯回歸比起來,有什麼優勢呢?我們先來看下單邏輯回歸有什麼劣勢,對於某些情況來說,邏輯回歸可能永遠無法使其分類,如下面數據:
這 4 個樣本畫在坐標系中如下圖所示
因為邏輯回歸的決策邊界(Decision Boundary)是一條直線,所以上圖中的兩個分類,無論你怎麼做,都無法找到一條直線將它們分開,但如果藉助神經網路,就可以做到這一點。
由 3 個邏輯回歸組成的網路(這里先忽略 bias)如下:
觀察整個網路的計算過程,在進入輸出層之前,該網路所做的計算實際上是:
即把輸入先做了一次線性變換(Linear Transformation),得到 [z1, z2] ,再把 [z1, z2] 做了一個非線性變換(sigmoid),得到 [x1', x2'] ,(線性變換的概念可以參考 這個視頻 )。從這里開始,後面的操作就和一個普通的邏輯回歸沒有任何差別了,所以它們的差異在於: 我們的數據在輸入到模型之前,先做了一層特徵變換處理(Feature Transformation,有時又叫做特徵抽取 Feature Extraction),使之前不可能被分類的數據變得可以分類了 。
我們繼續來看下特徵變換的效果,假設 為 ,帶入上述公式,算出 4 個樣本對應的 [x1', x2'] 如下:
再將變換後的 4 個點繪制在坐標系中:
顯然,在做了特徵變換之後,這兩個分類就可以很容易的被一條決策邊界分開了。
所以, 神經網路的優勢在於,它可以幫助我們自動的完成特徵變換或特徵提取 ,尤其對於聲音、圖像等復雜問題,因為在面對這些問題時,人們很難清晰明確的告訴你,哪些特徵是有用的。
在解決特徵變換的同時,神經網路也引入了新的問題,就是我們需要設計各式各樣的網路結構來針對性的應對不同的場景,例如使用卷積神經網路(CNN)來處理圖像、使用長短期記憶網路(LSTM)來處理序列問題、使用生成式對抗網路(GAN)來寫詩和作圖等,就連去年自然語言處理(NLP)中取得突破性進展的 Transformer/Bert 也是一種特定的網路結構。所以, 學好神經網路,對理解其他更高級的網路結構也是有幫助的 。
上面說了,神經網路可以看作一個非線性函數,該函數的參數是連接神經元的所有的 Weights 和 Biases,該函數可以簡寫為 f(W, B) ,以手寫數字識別的任務作為例子:識別 MNIST 數據集 中的數字,數據集(MNIST 數據集是深度學習中的 HelloWorld)包含上萬張不同的人寫的數字圖片,共有 0-9 十種數字,每張圖片為 28*28=784 個像素,我們設計一個這樣的網路來完成該任務:
把該網路函數所具備的屬性補齊:
接下來的問題是,這個函數是如何產生的?這個問題本質上問的是這些參數的值是怎麼確定的。
在機器學習中,有另一個函數 c 來衡量 f 的好壞,c 的參數是一堆數據集,你輸入給 c 一批 Weights 和 Biases,c 輸出 Bad 或 Good,當結果是 Bad 時,你需要繼續調整 f 的 Weights 和 Biases,再次輸入給 c,如此往復,直到 c 給出 Good 為止,這個 c 就是損失函數 Cost Function(或 Loss Function)。在手寫數字識別的列子中,c 可以描述如下:
可見,要完成手寫數字識別任務,只需要調整這 12730 個參數,讓損失函數輸出一個足夠小的值即可,推而廣之,絕大部分神經網路、機器學習的問題,都可以看成是定義損失函數、以及參數調優的問題。
在手寫識別任務中,我們既可以使用交叉熵(Cross Entropy)損失函數,也可以使用 MSE(Mean Squared Error)作為損失函數,接下來,就剩下如何調優參數了。
神經網路的參數調優也沒有使用特別的技術,依然是大家剛接觸機器學習,就學到的梯度下降演算法,梯度下降解決了上面迭代過程中的遺留問題——當損失函數給出 Bad 結果時,如何調整參數,能讓 Loss 減少得最快。
梯度可以理解為:
把 Loss 對應到 H,12730 個參數對應到 (x,y),則 Loss 對所有參數的梯度可以表示為下面向量,該向量的長度為 12730:
$$
abla L(w,b) = left[
frac{partial L}{partial w_1},
frac{partial L}{partial w_2},...,
frac{partial L}{partial b_{26}}
ight] ^ op
$$
所以,每次迭代過程可以概括為
用梯度來調整參數的式子如下(為了簡化,這里省略了 bias):
上式中, 是學習率,意為每次朝下降最快的方向前進一小步,避免優化過頭(Overshoot)。
由於神經網路參數繁多,所以需要更高效的計算梯度的演算法,於是,反向傳播演算法(Backpropagation)呼之欲出。
在學習反向傳播演算法之前,我們先復習一下微積分中的鏈式法則(Chain Rule):設 g = u(h) , h = f(x) 是兩個可導函數,x 的一個很小的變化 △x 會使 h 產生一個很小的變化 △h,從而 g 也產生一個較小的變化 △g,現要求 △g/△x,可以使用鏈式法則:
有了以上基礎,理解反向傳播演算法就簡單了。
假設我們的演示網路只有 2 層,輸入輸出都只有 2 個神經元,如下圖所示:
其中 是輸入, 是輸出, 是樣本的目標值,這里使用的損失函數 L 為 MSE;圖中的上標 (1) 或 (2) 分別表示參數屬於第 (1) 層或第 (2) 層,下標 1 或 2 分別表示該層的第 1 或 第 2 個神經元。
現在我們來計算 和 ,掌握了這 2 個參數的偏導數計算之後,整個梯度的計算就掌握了。
所謂反向傳播演算法,指的是從右向左來計算每個參數的偏導數,先計算 ,根據鏈式法則
對左邊項用鏈式法則展開
又 是輸出值, 可以直接通過 MSE 的導數算出:
而 ,則 就是 sigmoid 函數的導數在 處的值,即
於是 就算出來了:
再來看 這一項,因為
所以
注意:上面式子對於所有的 和 都成立,且結果非常直觀,即 對 的偏導為左邊的輸入 的大小;同時,這里還隱含著另一層意思:需要調整哪個 來影響 ,才能使 Loss 下降得最快,從該式子可以看出,當然是先調整較大的 值所對應的 ,效果才最顯著 。
於是,最後一層參數 的偏導數就算出來了
我們再來算上一層的 ,根據鏈式法則 :
繼續展開左邊這一項
你發現沒有,這幾乎和計算最後一層一摸一樣,但需要注意的是,這里的 對 Loss 造成的影響有多條路徑,於是對於只有 2 個輸出的本例來說:
上式中, 都已經在最後一層算出,下面我們來看下 ,因為
於是
同理
注意:這里也引申出梯度下降的調參直覺:即要使 Loss 下降得最快,優先調整 weight 值比較大的 weight。
至此, 也算出來了
觀察上式, 所謂每個參數的偏導數,通過反向傳播演算法,都可以轉換成線性加權(Weighted Sum)計算 ,歸納如下:
式子中 n 代表分類數,(l) 表示第 l 層,i 表示第 l 層的第 i 個神經元。 既然反向傳播就是一個線性加權,那整個神經網路就可以藉助於 GPU 的矩陣並行計算了 。
最後,當你明白了神經網路的原理,是不是越發的認為,它就是在做一堆的微積分運算,當然,作為能證明一個人是否學過微積分,神經網路還是值得學一下的。Just kidding ..
本文我們通過
這四點,全面的學習了神經網路這個知識點,希望本文能給你帶來幫助。
參考:
③ 神經網路相關名詞解釋
很多人認為深度學習很枯燥,大部分情況是因為對深度學習的學術詞語,特別是專有名詞很困惑,即便對相關從業者,亦很難深入淺出地解釋這些詞語的含義。
相信讀過此文的圈友,會對深度學習有個全新的認識,機器人圈希望可以為圈友的深度學習之路起到一些輔助作用。
人工智慧,深度學習,機器學習—無論你在做什麼,如果你對它不是很了解的話—去學習它。否則的話不用三年你就跟不上時代的潮流了。——馬克.庫班
馬克.庫班的這個觀點可能聽起來很極端——但是它所傳達的信息是完全正確的! 我們正處於一場革命的旋渦之中——一場由大數據和計算能力引起的革命。
只需要一分鍾,我們來想像一下,在20世紀初,如果一個人不了解電力,他/她會覺得如何?你會習慣於以某種特定的方式來做事情,日復一日,年復一年,而你周圍的一切事情都在發生變化,一件需要很多人才能完成的事情僅依靠一個人和電力就可以輕松搞定,而我們今天正以機器學習和深度學習的方式在經歷一場相似的旅程。
所以,如果你還沒有探索或理解深度學習的神奇力量——那你應該從今天就開始進入這一領域。
與主題相關的術語
為了幫助你了解各種術語,我已經將它們分成3組。如果你正在尋找特定術語,你可以跳到該部分。如果你是這個領域的新手,那我建議你按照我寫的順序來通讀它們。
1.神經網路基礎(Basics of Neural Networks) ——常用激活函數(Common Activation Functions)
2.卷積神經網路(Convolutional Neural Networks)
3.循環神經網路(Recurrent Neural Networks)
神經網路基礎
1)神經元(Neuron) ——就像形成我們大腦基本元素的神經元一樣,神經元形成神經網路的基本結構。想像一下,當我們得到新信息時我們該怎麼做。當我們獲取信息時,我們一般會處理它,然後生成一個輸出。類似地,在神經網路的情況下,神經元接收輸入,處理它並產生輸出,而這個輸出被發送到其他神經元用於進一步處理,或者作為最終輸出進行輸出。
2)權重(Weights) ——當輸入進入神經元時,它會乘以一個權重。例如,如果一個神經元有兩個輸入,則每個輸入將具有分配給它的一個關聯權重。我們隨機初始化權重,並在模型訓練過程中更新這些權重。訓練後的神經網路對其輸入賦予較高的權重,這是它認為與不那麼重要的輸入相比更為重要的輸入。為零的權重則表示特定的特徵是微不足道的。
讓我們假設輸入為a,並且與其相關聯的權重為W1,那麼在通過節點之後,輸入變為a * W1
3)偏差(Bias) ——除了權重之外,另一個被應用於輸入的線性分量被稱為偏差。它被加到權重與輸入相乘的結果中。基本上添加偏差的目的是來改變權重與輸入相乘所得結果的范圍的。添加偏差後,結果將看起來像a* W1 +偏差。這是輸入變換的最終線性分量。
4)激活函數(Activation Function) ——一旦將線性分量應用於輸入,將會需要應用一個非線性函數。這通過將激活函數應用於線性組合來完成。激活函數將輸入信號轉換為輸出信號。應用激活函數後的輸出看起來像f(a * W1 + b),其中f()就是激活函數。
在下圖中,我們將「n」個輸入給定為X1到Xn而與其相應的權重為Wk1到Wkn。我們有一個給定值為bk的偏差。權重首先乘以與其對應的輸入,然後與偏差加在一起。而這個值叫做u。
U =ΣW* X+ b
激活函數被應用於u,即 f(u),並且我們會從神經元接收最終輸出,如yk = f(u)。
常用的激活函數
最常用的激活函數就是Sigmoid,ReLU和softmax
a)Sigmoid ——最常用的激活函數之一是Sigmoid,它被定義為:
Sigmoid變換產生一個值為0到1之間更平滑的范圍。我們可能需要觀察在輸入值略有變化時輸出值中發生的變化。光滑的曲線使我們能夠做到這一點,因此優於階躍函數。
b)ReLU(整流線性單位) ——與Sigmoid函數不同的是,最近的網路更喜歡使用ReLu激活函數來處理隱藏層。該函數定義為:
當X>0時,函數的輸出值為X;當X<=0時,輸出值為0。函數圖如下圖所示:
使用ReLU函數的最主要的好處是對於大於0的所有輸入來說,它都有一個不變的導數值。常數導數值有助於網路訓練進行得更快。
c) Softmax ——Softmax激活函數通常用於輸出層,用於分類問題。它與sigmoid函數是很類似的,唯一的區別就是輸出被歸一化為總和為1。Sigmoid函數將發揮作用以防我們有一個二進制輸出,但是如果我們有一個多類分類問題,softmax函數使為每個類分配值這種操作變得相當簡單,而這可以將其解釋為概率。
以這種方式來操作的話,我們很容易看到——假設你正在嘗試識別一個可能看起來像8的6。該函數將為每個數字分配值如下。我們可以很容易地看出,最高概率被分配給6,而下一個最高概率分配給8,依此類推……
5)神經網路(Neural Network) ——神經網路構成了深度學習的支柱。神經網路的目標是找到一個未知函數的近似值。它由相互聯系的神經元形成。這些神經元具有權重和在網路訓練期間根據錯誤來進行更新的偏差。激活函數將非線性變換置於線性組合,而這個線性組合稍後會生成輸出。激活的神經元的組合會給出輸出值。
一個很好的神經網路定義——
「神經網路由許多相互關聯的概念化的人造神經元組成,它們之間傳遞相互數據,並且具有根據網路」經驗「調整的相關權重。神經元具有激活閾值,如果通過其相關權重的組合和傳遞給他們的數據滿足這個閾值的話,其將被解僱;發射神經元的組合導致「學習」。
6)輸入/輸出/隱藏層(Input / Output / Hidden Layer) ——正如它們名字所代表的那樣,輸入層是接收輸入那一層,本質上是網路的第一層。而輸出層是生成輸出的那一層,也可以說是網路的最終層。處理層是網路中的隱藏層。這些隱藏層是對傳入數據執行特定任務並將其生成的輸出傳遞到下一層的那些層。輸入和輸出層是我們可見的,而中間層則是隱藏的。
7)MLP(多層感知器) ——單個神經元將無法執行高度復雜的任務。因此,我們使用堆棧的神經元來生成我們所需要的輸出。在最簡單的網路中,我們將有一個輸入層、一個隱藏層和一個輸出層。每個層都有多個神經元,並且每個層中的所有神經元都連接到下一層的所有神經元。這些網路也可以被稱為完全連接的網路。
8)正向傳播(Forward Propagation) ——正向傳播是指輸入通過隱藏層到輸出層的運動。在正向傳播中,信息沿著一個單一方向前進。輸入層將輸入提供給隱藏層,然後生成輸出。這過程中是沒有反向運動的。
9)成本函數(Cost Function) ——當我們建立一個網路時,網路試圖將輸出預測得盡可能靠近實際值。我們使用成本/損失函數來衡量網路的准確性。而成本或損失函數會在發生錯誤時嘗試懲罰網路。
我們在運行網路時的目標是提高我們的預測精度並減少誤差,從而最大限度地降低成本。最優化的輸出是那些成本或損失函數值最小的輸出。
如果我將成本函數定義為均方誤差,則可以寫為:
C= 1/m ∑(y–a)^2,
其中m是訓練輸入的數量,a是預測值,y是該特定示例的實際值。
學習過程圍繞最小化成本來進行。
10)梯度下降(Gradient Descent) ——梯度下降是一種最小化成本的優化演算法。要直觀地想一想,在爬山的時候,你應該會採取小步驟,一步一步走下來,而不是一下子跳下來。因此,我們所做的就是,如果我們從一個點x開始,我們向下移動一點,即Δh,並將我們的位置更新為x-Δh,並且我們繼續保持一致,直到達到底部。考慮最低成本點。
在數學上,為了找到函數的局部最小值,我們通常採取與函數梯度的負數成比例的步長。
11)學習率(Learning Rate) ——學習率被定義為每次迭代中成本函數中最小化的量。簡單來說,我們下降到成本函數的最小值的速率是學習率。我們應該非常仔細地選擇學習率,因為它不應該是非常大的,以至於最佳解決方案被錯過,也不應該非常低,以至於網路需要融合。
12)反向傳播(Backpropagation) ——當我們定義神經網路時,我們為我們的節點分配隨機權重和偏差值。一旦我們收到單次迭代的輸出,我們就可以計算出網路的錯誤。然後將該錯誤與成本函數的梯度一起反饋給網路以更新網路的權重。 最後更新這些權重,以便減少後續迭代中的錯誤。使用成本函數的梯度的權重的更新被稱為反向傳播。
在反向傳播中,網路的運動是向後的,錯誤隨著梯度從外層通過隱藏層流回,權重被更新。
13)批次(Batches) ——在訓練神經網路的同時,不用一次發送整個輸入,我們將輸入分成幾個隨機大小相等的塊。與整個數據集一次性饋送到網路時建立的模型相比,批量訓練數據使得模型更加廣義化。
14)周期(Epochs) ——周期被定義為向前和向後傳播中所有批次的單次訓練迭代。這意味著1個周期是整個輸入數據的單次向前和向後傳遞。
你可以選擇你用來訓練網路的周期數量,更多的周期將顯示出更高的網路准確性,然而,網路融合也需要更長的時間。另外,你必須注意,如果周期數太高,網路可能會過度擬合。
15)丟棄(Dropout) ——Dropout是一種正則化技術,可防止網路過度擬合套。顧名思義,在訓練期間,隱藏層中的一定數量的神經元被隨機地丟棄。這意味著訓練發生在神經網路的不同組合的神經網路的幾個架構上。你可以將Dropout視為一種綜合技術,然後將多個網路的輸出用於產生最終輸出。
16)批量歸一化(Batch Normalization) ——作為一個概念,批量歸一化可以被認為是我們在河流中設定為特定檢查點的水壩。這樣做是為了確保數據的分發與希望獲得的下一層相同。當我們訓練神經網路時,權重在梯度下降的每個步驟之後都會改變,這會改變數據的形狀如何發送到下一層。
但是下一層預期分布類似於之前所看到的分布。 所以我們在將數據發送到下一層之前明確規范化數據。
17)濾波器(Filters) ——CNN中的濾波器與加權矩陣一樣,它與輸入圖像的一部分相乘以產生一個迴旋輸出。我們假設有一個大小為28 * 28的圖像,我們隨機分配一個大小為3 * 3的濾波器,然後與圖像不同的3 * 3部分相乘,形成所謂的卷積輸出。濾波器尺寸通常小於原始圖像尺寸。在成本最小化的反向傳播期間,濾波器值被更新為重量值。
參考一下下圖,這里filter是一個3 * 3矩陣:
與圖像的每個3 * 3部分相乘以形成卷積特徵。
18)卷積神經網路(CNN) ——卷積神經網路基本上應用於圖像數據。假設我們有一個輸入的大小(28 * 28 * 3),如果我們使用正常的神經網路,將有2352(28 * 28 * 3)參數。並且隨著圖像的大小增加參數的數量變得非常大。我們「卷積」圖像以減少參數數量(如上面濾波器定義所示)。當我們將濾波器滑動到輸入體積的寬度和高度時,將產生一個二維激活圖,給出該濾波器在每個位置的輸出。我們將沿深度尺寸堆疊這些激活圖,並產生輸出量。
你可以看到下面的圖,以獲得更清晰的印象。
19)池化(Pooling) ——通常在卷積層之間定期引入池層。這基本上是為了減少一些參數,並防止過度擬合。最常見的池化類型是使用MAX操作的濾波器尺寸(2,2)的池層。它會做的是,它將佔用原始圖像的每個4 * 4矩陣的最大值。
你還可以使用其他操作(如平均池)進行池化,但是最大池數量在實踐中表現更好。
20)填充(Padding) ——填充是指在圖像之間添加額外的零層,以使輸出圖像的大小與輸入相同。這被稱為相同的填充。
在應用濾波器之後,在相同填充的情況下,卷積層具有等於實際圖像的大小。
有效填充是指將圖像保持為具有實際或「有效」的圖像的所有像素。在這種情況下,在應用濾波器之後,輸出的長度和寬度的大小在每個卷積層處不斷減小。
21)數據增強(Data Augmentation) ——數據增強是指從給定數據導出的新數據的添加,這可能被證明對預測有益。例如,如果你使光線變亮,可能更容易在較暗的圖像中看到貓,或者例如,數字識別中的9可能會稍微傾斜或旋轉。在這種情況下,旋轉將解決問題並提高我們的模型的准確性。通過旋轉或增亮,我們正在提高數據的質量。這被稱為數據增強。
循環神經網路
22)循環神經元(Recurrent Neuron) ——循環神經元是在T時間內將神經元的輸出發送回給它。如果你看圖,輸出將返回輸入t次。展開的神經元看起來像連接在一起的t個不同的神經元。這個神經元的基本優點是它給出了更廣義的輸出。
23)循環神經網路(RNN) ——循環神經網路特別用於順序數據,其中先前的輸出用於預測下一個輸出。在這種情況下,網路中有循環。隱藏神經元內的循環使他們能夠存儲有關前一個單詞的信息一段時間,以便能夠預測輸出。隱藏層的輸出在t時間戳內再次發送到隱藏層。展開的神經元看起來像上圖。只有在完成所有的時間戳後,循環神經元的輸出才能進入下一層。發送的輸出更廣泛,以前的信息保留的時間也較長。
然後根據展開的網路將錯誤反向傳播以更新權重。這被稱為通過時間的反向傳播(BPTT)。
24)消失梯度問題(Vanishing Gradient Problem) ——激活函數的梯度非常小的情況下會出現消失梯度問題。在權重乘以這些低梯度時的反向傳播過程中,它們往往變得非常小,並且隨著網路進一步深入而「消失」。這使得神經網路忘記了長距離依賴。這對循環神經網路來說是一個問題,長期依賴對於網路來說是非常重要的。
這可以通過使用不具有小梯度的激活函數ReLu來解決。
25)激增梯度問題(Exploding Gradient Problem) ——這與消失的梯度問題完全相反,激活函數的梯度過大。在反向傳播期間,它使特定節點的權重相對於其他節點的權重非常高,這使得它們不重要。這可以通過剪切梯度來輕松解決,使其不超過一定值。