摘要:深度神經網絡是創建在微積分和一些統計學的基礎之上的。
深度神經網絡(Deep neural network,DNN)本質上是由具備多個鏈接的感知器造成的,其中一個感知器是單個神經元。咱們能夠將人工神經網絡(Artificial neural network,ANN)看做一個包含一組沿着加權路徑饋送的輸入系統。而後對這些輸入進行處理,併產生一個輸出來執行某些任務。隨着時間的推移,人工神經網絡將會「學習」,並發展出不一樣的路徑。各類路徑能夠具備不一樣的權重,而且被認爲更重要(或產生更理想結果)的路徑在模型內被分配的權重比那些產生較少理想結果的路徑更高。網絡
在深度神經網絡中,若是全部的輸入都密集地鏈接到全部的輸出,那麼這些層就稱爲 密集層(Dense layers)。此外,深度神經網絡能夠包含多個 隱藏層(Hidden layer)。隱藏層基本上是神經網絡輸入和輸出之間的點,激活函數在這裏對輸入的信息進行轉換。它之因此被稱爲隱藏層,是由於它不能直接從系統的輸入和輸出中觀察到。神經網絡的深度越深,網絡能從數據中識別的信息就越多。併發
然而,儘管從數據中學習儘量多的信息是咱們的目標,但深度學習模型可能會受到過擬合的影響。當模型從訓練數據中學習了太多的信息,包括隨機噪聲時,就會出現這種狀況。函數
模型可以肯定數據中很是複雜的模式,但這會對新數據的性能產生負面影響。訓練數據中接收到的噪聲並不適用於新的或未見過的數據,而且模型沒法對所發現的模式進行泛化。非線性在深度學習模型中也是很是重要的。雖然模型會由於擁有多個隱藏層而學到不少信息,但將線性形式應用於非線性問題會致使性能低下。工具
如今,問題來了,「這些層是如何學習的?」那麼,讓咱們將人工神經網絡應用到一個真實的場景中去解決問題,以瞭解如何訓練模型來完成目標。在目前全球新冠肺炎疫情之下,不少學校都過渡到了虛擬學習,這使得一些學生擔憂他們經過課程的機會。任何人工智能系統都應該可以解決「我可否經過這門課程」這種問題。性能
爲簡單起見,讓咱們設想此模型只有 3 個輸入:學生聽課次數、花在做業上的時間,以及在整個授課過程當中網絡掉線的次數。這個模型的輸出將是一個二元分類;學生要麼經過課程,要麼沒經過課程。如今是學期末,學生 A 聽了 21 堂課,花了 90 個小時完成做業,而且在這個學期中,網絡掉線 7 次。這些輸入被輸入到模型中,輸出預測學生有 5% 的機會經過課程。一個星期後,期末成績公佈,學生 A 經過了這門課程。那麼,這個模型的預測出了什麼問題呢?學習
從技術上來講,並無出問題。該模型原本能夠按照目前開發的模型工做。但問題是,模型並不知道發生了什麼。咱們原本只是在路徑上對一些權重進行了初始化,但模型目前並不知道什麼是對的,什麼是錯的;所以,權重是不正確的。這就是學習的意義所在。咱們的想法是,模型須要瞭解何時是錯誤的,咱們經過計算某種形式的 "損失 "來實現這一點。計算的損失取決於當前的問題,但它一般涉及最小化預測輸出和實際輸出之間的差別。優化
在上面的場景中,只有一個學生和一個偏差點須要最小化。然而,一般狀況卻並不是如此。如今,考慮到有多個學生和多個差別最小化。所以,總損失一般計算爲全部預測值與實際觀測值之差的平均值。人工智能
回想一下,我在前面提到的被計算的損失取決於當前的問題。所以,因爲咱們當前的問題是二元分類,適當的損失計算將是 交叉熵損失。這個函數背後的想法是,它將學生是否會經過課程的預測分佈與實際分佈進行比較,並試圖將這些分佈之間的差別最小化。orm
假設咱們再也不想預測學生是否能經過這門課程,而是如今想預測他們這門課的成績。交叉熵損失將再也不是一個合適的方法,相反,均方偏差損失 將更合適。相反,均方偏差損失會更合適。這種方法適用於迴歸問題,其想法是它將嘗試最小化實際值和預測值之間的平方差。blog
如今,咱們瞭解了一些損失函數,就能夠進入損失優化和模型訓練了。擁有良好的深度神經網絡的一個關鍵因素是擁有合適的權重。損失優化應該是土找到一組權重 $W$,它將使計算的損失最小化。若是隻有一個權重份量,則能夠在二維圖上繪製權重和損失,而後選擇使損失最小的權重。然而,大多數深度神經網絡具備多個權重份量,將一個 $n$ 維圖進行可視化是很是困難的。
取而代之的是,計算損失函數相對於全部權重的導數來肯定最大上升方向。既然模型如今已經理解上行和下行的方向,它就會向下行進,直到在局部最小值處到達收斂點。一旦這個降低點完成,就會返回一組最優權重,這就是深度神經網絡應該使用的權重(假設模型開發得很好)。
計算這個導數的過程被稱爲 反向傳播(Back propagation),它本質上是微積分的鏈式法則。考慮到上面顯示的神經網絡,第一組權重的微小變化是如何影響最終損失的?這就是導數或梯度試圖解釋的內容。可是,第一組權值被輸入到一個隱藏層,而後隱藏層有另外一組權值致使預測的輸出和損失。所以,也應該考慮權重變化對隱藏層的影響。這是網絡中僅有的兩個部分。可是,若是有更多的權重須要考慮,這個過程能夠經過將鏈式規則從輸出應用到輸入來繼續這一過程。
訓練深度神經網絡時要考慮的另外一個重要因素是學習率。當模型在尋找一個最優的權值集時,它須要經過一些因子來更新它的權重。雖然這看起來微不足道,可是決定模型應該移動的因子是至關困難的。若是因子過小,那麼模型可能會運行一段指數級的時間,或者陷入某個不是全局最小值的地方。若是因子太大,那麼模型可能會徹底偏離目標點,進而發散。
雖然固定的學習率多是理想的,但 自適應學習率(Adaptive learning rate)會減小出現前文所提到的問題的機會。也就是說,因子將根據當前梯度、當前權重的大小或可能影響模型下一步查找最佳權重的位置的某些其餘因素而發生變化。
能夠看出,深度神經網絡是創建在微積分和一些統計學的基礎之上的。評估這些過程背後的數學很是有用,由於它能夠幫助人們瞭解模型內部真正發生的事情,這能夠致使開發更好的總體模型。可是,即便這些概念不容易理解,大多數程序都附帶了自動微分等工具,因此不用擔憂。