【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

醫工薈萃,不是蘿蔔開會,融合創新才是硬道理!

預計閱讀時間: 7 分鐘

這個系列,薈薈將帶大家一起實踐深度學習。畢竟網上講述深度學習理論的文章相當之多,而且水平、難度參差不齊,所以本系列的目標是通過講解實際代碼,提高實操能力,突出醫工薈的特色,即看完理解直接能用。這裡分享一點學習心得,由於機器學習涉及大量的數學原理(矩陣論、多變量微積分、概率論、凸優化等等,初學的時候相信很多朋友都妄圖把數學原理搞通搞透再實際進行操作,其實通過一段時間的學習,薈薈發現比較有效率的方式是動手操作解決問題,在解決問題的時候理解數學背景,實踐和理論相互促進,不斷提升。

薈薈將結合MIT 6.S191 Introduction to Deep Learning課程和Keras之父Francois Chollet的Keras經典範例,簡單講解理論,更多動手實踐,同時薈薈保證本系列的全部相關代碼均親自驗證成功。

作為開篇之作,薈薈先帶大家和人工神經網絡會個面

深度學習的本質是深度神經網絡,深度神經網絡的基本構建單元是感知機(perceptron),其實我比較喜歡稱之為神經元。感知機的基本計算過程為:將輸入向量進行線性加權,再通過一個非線性的激活函數後輸出。如圖1右側所示,式中的

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

代表輸入向量和權值向量的點乘即

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

一般我們將

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

單獨拿出,稱之為偏移項(bias)。激活函數對輸入加權運算的結果進行非線性的輸出,常見的激活函數比如Sigmoid函數、雙曲正切函數(Hyperbolic Tangent)、線性整流單元函數ReLU

等,其中ReLU對深度學習的貢獻非常之大,它克服了梯度消失問題,提高了訓練速度,這樣網絡才能足夠深,可以對更復雜的情況進行建模。網上有很多關於ReLU的介紹,在這裡不再贅述。這裡引入非線性激活函數的目的也很簡單,畢竟現實中的系統有很多是非線性的,比如兩類別的分類邊界就很有可能是個曲面而不是個線性的平面,非線性激活函數可以對這一類問題進行更好的逼近,如圖2所示。上面提及的基本激活函數及特性請見圖3。

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖1 感知機

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖2 非線性激活函數的意義

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖3 常見的激活函數

神經網絡的目的就是建立輸入和輸出的關係,即所謂的系統建模,使用多層類似感知機這樣的模型,通過調整權值的大小,來模擬輸入輸出間的關係,見圖4、圖5。圖4展示的是只有一個隱層(Hidden Layer, 中間層)的全連接(也稱密集連接)的神經網絡。而深度神經網絡故名思意,會有很多的中間層,比如著名的深度殘差網絡ResNet有152層之多,層與層的連接方式也可以選擇全連接以外的連接方式。

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖4 單隱層神經網絡

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖5 深度神經網絡

我們一開始可能不知道正確的權值應該是多大,所以通常情況下我們先隨機初始化一個權值向量,來看看這種隨機權值的模型,在獲得輸入時會得到什麼樣的輸出,和我們已知的正確輸出有多大的差異。當然差異越大,就說明現在的模型和真正的系統越不像,如果拿去進行實際預測的話,損失會是大大滴,所以我們需要一種衡量這種差異的函數,稱之為

損失函數(Loss Function)。比如說最簡單的一種損失函數就是真實輸出和現階段模型輸出的歐式距離(當然還有很多其他的損失函數,後面用到再說),數學公式為

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

從這個公式我們可以看出,這個函數是一個關於權值向量w的函數,我們的目標是在各種已知的輸入輸出對上讓這個損失降到最小,此時目標輸出和我們模型的輸出最接近,數學公式為

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

學過高等數學的同學們肯定知道,求極值點很簡單,求導數為0的點就好啦, 但是現實世界中直接求導然後計算使其等於0的w不那麼現實,所以通常採用一種最優化的數值計算方法。一開始我們隨機初始化一個w, 如圖6,對其求導,這一點的導數值即為其切線方向,是讓函數變大的方向,所以我們按照相反的方向走,即沿著導數的反方向指定一個步長,如圖7。然後一直搜索下去,直到滿足收斂條件(比如

J(w)小到一定值,或者梯度為0等等),如圖8。這種處理方法稱之為梯度下降法,算法的思路總結見圖9。

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

至於為什麼說求導然後直接計算使其等於0的w不那麼現實,看一下真實世界中的

J(w)長啥樣就清楚了(圖10),這是什麼鬼,先不說函數表達式極其複雜導數不好求,單說求導等於0的點就數不勝數(局部最小值+全局最小值)。可能有同學問,就算用梯度下降法求出來的也很有可能是局部最小值啊。沒錯,其實完全避免局部最小值是基本不可能的,但聰明的人們總會有很多處理方法比如加上慣性項啊,又如自適應梯度算法AdaGrad等等最優化的技巧,總之這是個很深的學問了,初學者瞭解這些已然足夠。

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖6 隨機初始化w

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖7 選擇和梯度相反的方向搜索

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖8 直到收斂為止

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖9 算法總結

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖10 現實中的損失函數

通常來說神經網絡都有多箇中間層,那每個中間層的權值又是如何影響最後總體的損失函數呢?這裡我們利用鏈式求導法則(高等數學裡學過),將梯度進行反向傳播,如圖11所示,要求中間層到輸出層的權值w2對損失函數的影響,先將損失函數對輸出進行求導(損失函數對於輸出y求導)再乘以對w2求導(非線性激活函數對於中間層權值向量求導)。同理w

1對損失函數的影響可以通過繼續往下傳遞, 如圖12所示。這樣我們就可以求出損失函數對所有權值的梯度了,再利用求出的梯度找到使損失函數較小的權值自然也不是什麼難事。鏈式求導法則雖然非常好用,但對激活函數的導數有一定的要求,有的激活函數每求一次導梯度幅值就減小一次,求著求著就消失了,這就是前面說的梯度消失,而ReLU函數大於0的部分梯度固定,很好的克服了這一問題,ReLU同志對今天深度學習的成功可以說是功不可沒。

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖11 反向傳播第一步

【AI學習篇】實戰深度學習(1):初識神經網絡(理論篇)

圖12 反向傳播第二步

以上我們瞭解了神經網絡建模的基本流程,即通過不斷調整網絡連接權值,使得我們建立的神經網絡模型在已知輸入的情況下能夠獲得和真實情況一樣的已知輸出(損失函數最小),這種調整權值的過程就是我們經常聽到的監督學習

的訓練過程。當然還有很多其他學習方式,如非監督學習、半監督學習、遷移學習等等,我們後面再詳細論述。

薈薈在這裡總結一下本節我們應當瞭解的7個基本概念:感知機、權值、非線性激活函數、損失函數、梯度下降、鏈式法則、模型訓練。在瞭解了這些的基礎上,下一講薈薈將會結合手寫數字識別的實際案例,帶大家實際體驗一下如何使用Keras構建一個簡單的密集連接神經網絡識別手寫數字,上面的這些概念又在哪裡體現。


分享到:


相關文章: