"從零開始"系列之前已經給大家分享了線性回歸和邏輯回歸模型,本期我們來談談現在大火的深度學習。
本篇為深度學習的上篇,主要講解理論,下週我們會講講如何為深度學習(特指多層感知器)模型選擇合適的參數來加速模型的學習過程。
摘要
深度學習可以看作是機器學習領域中的一個前沿分支。現如今,深度學習在圖像處理、自然語言處理、搜索技術、數據挖掘等領域都取得了不菲的成果。
簡單來說,目前幾乎所有的深度學習模型都可以用下圖的模式總結。模型的最前面一層是輸入層,代表了模型的輸入(自變量)數據。模式的最後是一個輸出層,代表了模型的輸出(因變量)數據。中間包含一個或多個隱藏層,代表了模型中間訓練過程的每一步的逐步結果。
筆者根據實用案例,粗略的將深度學習分為五類:
- 前饋網絡:最簡單,也是目前應用最廣泛的一種人工神經網絡,常見於面部識別案例;
- RBF網絡:一種三層的神經網絡,常用於電力恢復系統領域;
- 多層感知器:前饋網絡的一種,隱藏層可包含多層網絡,常用於多種機器學習案例;
- 卷積網絡:常用於圖像處理和模式識別;
- 循環網絡:常用於自然語言處理。
本篇我們將主要討論多層感知器的相關細節。後續我們也會陸續推出卷積網絡,循環網絡等相關文章,歡迎持續關注Altair微信公眾號(AltairChina)。
必要的前情介紹
2.1深度學習伊始
深度學習的模型框架其實要歸結到人腦的決策過程。
人在做決策的時候,從外界接收到的影像,聲音或觸感等信息,通常會被轉換成生物電的形式,流入不同的神經元,經過不同神經元的處理後,會有相應的生物電產生並流出當前的神經元,然後再準備流入下一個神經元。經過若干次處理後,最後的生物電會抵達大腦皮層,人也在那個時候做出相應的決策。
通過模擬人腦的運作機制,研究人員探索出了現如今這套深度學習的模型架構。
2.2什麼是感知機
多層感知器中最重要的組成元素就是單層感知機。簡單來說,單層感知機就是一次線性權重相加和一次非線性分類。
如下圖所示,我們將輸入自變量數據x1, x2,…,xn通過一定的權重相加,隨後將對應的計算值帶入一個非線性分類的計算中,最終我們可以得到一個因變量的相應取值。這裡的非線性分類計算有個專有稱呼,叫做激活函數。
讀到這裡,大家是不是回想到了上兩篇文章。沒錯,線性權重相加其實就很類似於線性回歸,而非線性分類則相似於邏輯回歸。
簡單來說,多層感知器就是多個單層感知機疊加在一起的深度學習模型,每一層運算的輸出值都會作為下一層運算的輸入值。而訓練多層感知器的實質其實就是找到每一層最適當的權重佔比,激活函數和神經元個數的過程。
2.3隨機梯度下降
當我們需要優化一個函數時,或者說我們需要找到某個函數的最大/小值時,我們通常會用到隨機梯度下降這個方法。
在機器學習領域中,待優化的函數我們稱為損失函數。損失函數是用來估量模型預測值和真實值之間不一樣程度的非負值函數。該函數通常與模型的參數息息相關。
如下圖例子所示,我們假設模型的只包含兩個參數θ=(θ1,θ2)。在一個三維空間中,模型的損失函數L(θ)可以視為隨θ值變化而變化的曲面。我們的目標是一步步調整參數θ的取值,使得我們的損失函數達到最小值。
為達到最優值,隨機梯度下降方法遵循了下面的步驟:
- 隨機初始化或自定義初始參數值,得出起始模型
- 進入循環:
- 隨機抽取若干輸入值樣本,基於損失函數計算梯度
- 根據下圖迭代規則更新參數值
- 重複步驟,直至停止條件滿足
這裡的α,也叫做學習率。它調控著每一次參數更新中的步長。能否找到一個合適的學習率決定了當前神經網絡收斂速度的快慢以及該模型能否收斂到局部最小值。
多層感知器
3.1預設模型
接下來,我們將通過一個三層感知器的案例來詳細了解多層感知器的建模過程。如下圖所示:
- 輸入層是模型的輸入數據,用x來表示;
- 中間是四層隱藏層,其中的:
- 線性權重相加分別由g1,g2,w1,w2表示其權重;
- 激活函數用f來表示;這裡需要注意的是,每一層的激活函數都可以是不相同的,但是為了演示,這個例子中的激活函數都是一樣的;
- 中間的三層步驟結果由a1,a2,a3來分別表示;
- 輸出層則為模型的預測結果,由ŷ來表示。
模型的最後是真實結果,由y來表示。整個模型訓練的過程就是,我們通過調節各個權重g1,g2,w1,w2以及各個激活函數f,來使得模型的預測結果ŷ能夠盡可能的接近真實結果y。
這裡我們需要注意的是,模型的訓練一般是從前往後的,即我們從x到a1,到a2,再一直到ŷ。而參數的優化則是從後往前的,既我們先調節w2,再調節w1,再g2,最後是g1。
3.2權重調節的數學細節
將上面的預設模型,用公式的方法抽像出來的話,我們可以得到以下幾行模型訓練公式:
- a1 = f(g1(x))
- a2 = f(g2(a1))
- a3 = f(w1(a2))
- ŷ = f(w2(a3))
我們選取一種較常見的目標函數作為損失函數:
隨後,我們就可以根據2.3章節中提到的隨機梯度下降方法優化調節我們的四個權重參數了。
我們從w2開始,根據微積分中的鍊式法則,我們可以知道:
隨後,根據不同模型預先設定好的,不同激活函數與權重相加公式,我們可以分別求出
和
的相關公式。
最後,我們將得到梯度結果
重新帶入回參數更新公式中:
我們便完成了一次w2權重的更新。
我們隨後再更新w1,根據鍊式法則,我們可以得出:
以及相應的參數更新公式:
類似的,我們接下來繼續更新g2與給g1。
當四個的權重參數都更新過一次之後,我們就完成了一次循環的參數更新。
通常來說,一個深度學習模型都會跑成百上千次的循環或者是參數達成收斂條件。
因為深度學習的數據量和計算複雜度的原因,每一次循環都會花費不少的計算時間和資源。所以如何優化一個深度學習模型變得極為重要。
下週的深度學習下篇,我們就來聊聊如何為深度學習(特指多層感知器)模型選擇合適的參數來加速模型的學習過程,歡迎關注Altair。
留言列表