AI產(chǎn)品:BP前饋神經(jīng)網(wǎng)絡與梯度問題

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