【深度學習入門—2015MLDS】2. Neural Network(Basic Ideas)

神經網絡基礎


(預警:本節開始涉及數學符號及必要的微積分、線性代數運算)

本節概要

在上一講中已經提到,“學習”就是要讓計算機自動去實現一個複雜函數,完成從輸入X到輸出Y的映射。機器學習的基本框架如下圖所示。

機器學習框架

本節將從神經網絡的角度,應用這個框架。

首先要定義假設函數集合(function hypothesis set),又稱模型(model),然後根據輸入數據做訓練,去找到一個“最好”的函數f 。最後用它對測試數據做測試。

要解決的三個問題:
1. What is the model?(這個模型是什麼樣子的)
2. What is the “best” function?(如何定義“最好”)
3. How to pick the “best” function?(如何找到這個目標函數)

本節應用的任務的是分類(classification)問題,即預測輸入是已知類別中的哪一類,對應的是離散的輸出變量。

分類問題

  • 二分類問題(Binary Classification)
    • 垃圾郵件過濾(是不是垃圾郵件)
    • 推薦系統(該商品需不需要推薦給該用戶)
    • 惡意軟件檢測(該軟件是否存在惡意操作)
    • 股票預測(股票是漲還是跌)
  • 多分類問題(Multi-class Classification)
    • 手寫數字識別(圖片寫的是哪一個數字)
    • 圖像識別(圖片裏的物體是什麼)

一. What is the model(function hypothesis set)?

換句話說,網絡結構長什麼樣?

對於分類問題,我們要找到這樣的y=f(x) ,其中x是待分類的對象,y是該對象所屬類別,並假設x和y各自都是固定長度的向量(fixed-size vector),即xRN,yRM .

以手寫數字識別爲例,二值圖像可以統一調整成16*16的大小。輸入向量的每一維表示每個像素是0還是1;輸出向量用one-hot 表示,即對應類別的那一維標記爲1,其餘類別標記爲0。

回到我們要解決的問題,如果只用單層神經元,那麼連異或這種簡單的邏輯操作都很難完成,此處省略證明過程,所以引入多個隱藏層的神經網絡。

神經網絡作爲模型

NN

全連接前饋網絡

最常用的神經網絡架構——全連接前饋網絡(Fully Connected feedforward network)如上圖所示,通常又稱深度神經網絡(Deep Neural Network,因其隱層數目多而冠上“Deep”)。

每一層的每一個節點都用前一層所有節點的輸出做權重和(weighted sum)後作爲輸入,經自身的激勵函數加工後,產生輸出給下一層。

神經網絡的數學標記

規定以下標記用於描述DNN(非常重要!):

  • l 層神經元的數目Nl ,除權重外,上標l 代表該神經元所在的層次,下標i 代表是該層的第幾個神經元。
  • 兩個神經元之間的權重wlij下標ij 代表從第l1 層的第j 個神經元通向第l 層的第i 個神經元,上標l 代表後者所在層次。
    • 這樣定義看上去很奇怪,但其實是爲了賦予權重矩陣Wl 和向量x 所做的乘法的意義,很巧妙。
  • 神經元的偏置biasbli,第l 層神經元的所有bias構成向量bl
  • 神經元的輸入zli。第l 層神經元的所有輸入構成向量zl 。定義
    zli=j=1Ni1wlijal1j+bli
    • 神經元的輸出ali,第l 層神經元的所有輸出構成向量al 。定義ali=σ(zli) ,其中σ(·)爲激勵函數。

注意仔細觀察下面幾張圖!

單個神經元涉及的標記。
notation

相鄰層次涉及的標記(前)。
between1

相鄰層次涉及的標記(後)。
between2

函數總覽
function overview

至此,我們就定義好了我們的model的樣子,即DNN式的網絡結構。

但是大量參數就意味着無窮大的假設函數空間,那麼我們怎麼從假設函數空間裏找到我們所需要的那個函數呢?接下來就要解決這個問題。


二. What is the “best” function?

由於不同的參數Wb 決定了我們最終不同的函數,因此要找最好的函數<=>找最優的參數集合

定義函數f(x;θ) , 其中x是函數的輸入,θ是函數中涉及的所有參數Wb 的集合,隨着參數值的變化,這樣的函數構成了我們的假設函數空間,因此學習f <=>學習θ

代價函數

定義代價函數(Cost Function)C(θ) ,它以參數集合θ作爲輸入,輸出的實數值衡量這組參數“不好”的程度,值越大意味着參數越糟糕。又稱爲損失函數(loss function)、誤差函數(error function)。

那麼我們的問題就轉化爲搜索所有的參數θ,找到一組θ ,滿足

θ=argminC(θ)

實際上,代價函數的真正數學定義與我們的任務高度相關(task-dependant),不同的任務應當採取對應的代價函數。

多分類問題中常用的代價函數形式如下圖所示。

cost function

在這裏,代價函數衡量的就是對於所有樣本,模型的輸出f(xr;θ) 和真實的標記y^r 的距離之和。


三. How to pick the “best” function?

梯度下降

定義完衡量參數的指標,接下來就是對參數調整來尋找最佳參數,那要如何進行調整呢?

如果用暴力搜索,那麼需要窮舉所有可能的θ,但是這樣做要計算到猴年馬月,所以顯然是不可能完成的任務。

實際的解決方法就是著名的梯度下降(Gradient Descend)

先以單變量爲例來看梯度下降的概念。

這裏寫圖片描述

直觀地理解:將一枚小球放在曲線的初始位置,那麼小球收到重力的影響就會沿着當前最陡峭的下降方向往下滾,直到穩定在一個“坑”裏。其中曲線相當於受自變量θ影響的函數值C(θ),最陡峭的下降方向就稱爲梯度(gradient),穩定的“坑”就稱爲局部最小值(local minima)。高等數學裏的知識告訴我們,讓函數曲線對該單變量求導,就可以算出斜率,就是我們要找的梯度。

對於參數優化問題,首先隨機選擇一組θ0 ,找到(θ0,C(θ0)) ,然後計算dC(θ0)dθ 。第一次更新時,讓θ0ηdC(θ0)dθ 成爲新的θ1 。重複上述迭代的步驟,直到θ 不再發生變化。

對於多變量的情況,只是把求導換成了對各個變量依次求偏導,再同時更新參數。
這裏寫圖片描述

上面提到的η 叫做學習率(learning rate),即用梯度更新參數時的幅度,η 越大則更新時邁出的步伐越大。(非常重要的參數!!!)

接着是用泰勒展開來證明梯度下降的嚴格推導,這裏就不再展開。

總之,在我們搭建的神經網絡裏,我們要更新的θ就是所有參數Wb 的集合。
這裏寫圖片描述

由於涉及大量的參數,要實現高效的計算梯度並更新,就要使用反向傳播算法(backpropagation,BP)。(在之後會詳細解釋)

這裏留下了一個問題,當C(θ)的值卡在極小值點處,或者鞍點(saddle point)時,該點的導數值爲0,不對參數進行更新,但實際上並沒有達到我們的目標。關於這個問題的討論留到後面的幾節裏。

訓練時的實戰技巧

參數初始化

參數的初始化(parameter initialization)確實會影響梯度下降的性能,但目前入門階段,我們只要隨機賦值即可,但不要把全部參數都初始化成一模一樣的值。

學習率的調整

上面提到,學習率是決定模型能否正常收斂,以及最終模型好壞的非常重要的因素。

比較理想的情況是,學習率能隨着迭代次數的遞進而變化。但是對於入門階段,李老師的建議是,用嘗試的方法仔細調整這個超參數。

這裏寫圖片描述

從左邊這張圖上我們看到,隨着迭代的進行:

  • η 過大時,更新太劇烈,代價函數的值直接越過我們期望的最小值(error surface上的谷底),代價只會越來越大;
  • η 偏大時,代價函數的值雖然會很接近最小值,但是依然在“谷底”兩側震盪,進入不了谷底。
  • η 偏小時,更新太緩慢,代價函數呈遞減趨勢,雖然會不斷逼近且成功到達最小值,但是需要大量的迭代計算,收斂速度較慢。
  • η 合適時,更新幅度比較理想,既保證了能順利收斂,而且收斂速度也比較快。

舉例:雙變量代價函數在不同學習率下的梯度下降圖示:
這裏寫圖片描述

這裏寫圖片描述

隨機梯度下降和mini-batch

優化的萬能藥

未完待續。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章