AI產品:BP前饋神經網絡與梯度問題
通過上一章《神經元與神經網絡》,我們大概了解了單個神經元的工作模式和簡單神經網絡的基本結構。接下來就要正式進入關于“神經網絡”這個重頭戲的學習了,神經網絡分為“淺層”和“深層”,今天我們來探討一下“淺層學習”中最經典的BP前饋神經網絡,只要把它的工作原理搞清楚,其實后面的深度神經網絡、卷積神經網絡和循環神經網絡都是在它基礎上的變體。
一. BP前饋神經網絡
1. BP前饋神經網絡核心理念
BP前饋神經網絡的英文全稱為 Back Propagation Networks(反響傳播網絡),怎么理解這個“反響傳播”呢,我們已經了解其實DL的核心理念就在于找到全局性誤差函數Loss符合要求的,對應的權值“w”與“b”,也知道數據是從神經網絡的輸入層,進入隱含層,最后通過輸出層輸出的工作流程。
那么問題就來了,當得到的誤差Loss不符合要求(即誤差過大),就可以通過“反響傳播”的方式,把輸出層得到的誤差反過來傳到隱含層,并分配給不同的神經元,以此調整每個神經元的“權值”,最終調整至Loss符合要求為止,這就是“誤差反響傳播”的核心理念
2. 從“找關系”到“求誤差”
前面我們已經多次提到”y=wx+b”,現在我給這個函數加一個“e”代表誤差,其他的含義均不變
下面的轉換,別被它嚇到,其實很好理解,e的誤差等于“真實數據y”減去“擬合值”,i代表數據的個數(簡單理解為1、2、3……)
接下來點更好玩的(其實已經省略了一些步驟),我們一步一步來解釋,Loss相信大家很熟悉了,就是所謂“全局性誤差函數”,我們的最終目的,不就是讓Loss等于“0”最好嘛,這就相當于是“現實的值”與“擬合值”完全吻合,也就是找到了數據與某種特征的現實“對應關系”。
前面那個怪怪的圖形,表示所有數據的“加和”(不然海量數據是咋來的呢),為什么要把誤差“e”平方呢?其實是做了個“非負化”的處理,這樣更方便運算嘛,正負不重要,重要的是“絕對值”。
最后,讓我們看看我們得到了個什么東西:
請各位不要慌,它就是一個“二次函數”,簡化理解它的圖像如下:
一切就到這里,通過上述過程的轉換,讓Loss這個全局性誤差等于“0”,不就是轉換成了求得這個函數“極小值”的問題了么!
理解到這一層,我想是時候對機器學習其中的一個本質做個總結:我們通過對數據進行“標簽化”、提取特征“向量化”,將現實客觀世界的“關系問題”,描述轉換成數學函數中求“誤差”的問題,又通過函數性質轉換成求“極值”問題。換句話說,找到了這個數學的“解”,也就找到了現實世界的“關系描述”。情不自禁感嘆“數學之美”!
二. 梯度下降與梯度消失/爆炸
1. 迭代法
我們已經理解到“求極值”這一層面,但還有問題等待解決。在一個算法模型訓練最開始,權值w和偏置b都是隨機賦予的,理論上它可能是出現在整個函數圖像中的任何位置,那如何讓他去找到我們所要求的那個值呢。
這里就要引入“迭代”的思想:我們可以通過代入左右不同的點去嘗試,假設代入當前x左面的一個點比比右面的更小,那么不就可以讓x變為左面的點,然后繼續嘗試,直到找到“極小值”么。這也是為什么算法模型需要時間去不斷迭代很訓練的原因
2. 梯度下降
使用迭代法,那么隨之而來另外一個問題,這樣一個一個嘗試,雖然最終結果是一定會找到我們所需要的值,但有沒有什么方法可以讓它離“極值”遠的時候,挪動的步子更大,離“極值”近的時候,挪動的步子變?。ǚ乐乖竭^極值),實現更快更準確地“收斂”
請觀察上面那個“二次函數”的圖像,如果取得點越接近“極小值”,是不是在這個點的函數“偏導”越小呢?(偏導即“在那個點的函數斜率”),接下來引出下面這個方法:
梯度下降核心思想:Xn代表的就是挪動的“步長”,后面的表示當前這個點在函數的“偏導”,這樣也就代表當點越接近極值點,那么“偏導”越小,所以挪動的“步長”就短;反之如果離極值點很遠,則下一次挪動的“步長”越大。
把這個公式換到我們的算法模型,就找到了“挪動步長”與Loss和(w,b)之間的關系,實現快速“收斂”:
通過“迭代法”和“梯度下降法”的配合,我們實現了一輪一輪地迭代,每次更新都會越來越接近極值點,直到更新的值非常小或已經滿足我們的誤差范圍內,訓練結束,此時得到的(w,b)就是我們尋找的模型。
怎么樣,現在是不是開始覺得對ML的本質理解的越來越深入,一旦轉換成數學問題,我們就有很多方法可以實現我們的目標
3. 梯度消失
梯度消失,即在反響傳播的過程中,因為層數太多或神經元激勵函數作用,導致網絡前端的w幾乎沒有變化,越往前的隱含層這種情況就越嚴重。
解決方式:目前常用的解決方式是選取合適的激勵函數,如把Sigmoid函數換位ReLU函數,原理在這里就不過多解釋了
4. 梯度爆炸
梯度爆炸,可以理解為梯度消失的“反向概念”,梯度消失本質是網絡前層w權值變化太小,導致無法收斂,而梯度爆炸則是w權值一次的變化量太大,這樣可能會導致直接挪動越過“極值點”。
最后
到這里已經基本介紹完神經網絡BP前饋的基本原理,有沒有覺得其實并沒有想象中的那么難?而深度學習中的DNN(深度神經網絡),如果不嚴格細糾的話,是可以簡單理解為“隱含層層數”的增加的,基本的訓練方法和工作原理也是一樣通過誤差反響傳播,當然也做了很多優化來解決BP前饋網絡的“缺陷”,這個我們在后面還會講到~
相關閱讀
本文由 @?Free 原創發布于人人都是產品經理。未經許可,禁止轉載。
題圖來自unsplash,基于CC0協議
純算法小白特地注冊來感謝作者的講解,確實從字里行間都能感受到作者對于小白的照顧,不知道作者5年后已經進步成什么樣子了,作為一個從事剛產品兩年的小白很想有機會能認識大佬,很多問題想請教溝通啊!