深度學習、資訊理論與統計學

張鐵蕾發表於2017-01-11

去年最受矚目的科技詞彙莫過於“人工智慧”了,而前一段時間神祕旗手Master的連勝事件再一次把“人工智慧”這個話題推到了普通大眾面前。但是,作為一名技術人員,自然不能和普通人一樣只是看個熱鬧,我和你一樣,對於這項技術背後的運作原理深感興趣。

當前人工智慧的核心技術是深度學習。而深度學習到底為什麼能在現實世界中起作用?為什麼給它一堆資料它就能從中學到“知識”?它背後有沒有堅實的數學基礎甚至哲學基礎?這些問題我都很想知道答案。因此,我最近花了不少精力來研究,發現這項技術原來與資訊理論、概率和統計學,都有著密不可分的關係,很多看似散亂的概念其實相互之間都有關聯。

在這篇文章中,我會嘗試將這些相關的數學原理和概念進行總結,在必要時也會深入到一些細節,但更側重原理性的描述,希望沒有相關基礎的讀者也能讀懂大部分內容。

常見的幾個概念

我們在平常經常聽到一些概念,比如:人工智慧、機器學習、神經網路、深度學習。為了後面描述清晰,我們先用一張圖來表達這幾個概念之間的包含關係:

深度學習、資訊理論與統計學

其中神經網路和深度學習這兩個概念之間的關係,不同的人有不同的看法。有些人認為神經網路包含深度學習,深度學習就等同於多層的神經網路;另一些人則認為這兩個概念是交叉關係。我們不在這裡糾結這兩個概念,可暫且按前一種看法來理解,這不影響下文的討論。

注:如果你想對神經網路和深度學習有更直觀詳盡的瞭解,請先參見我的另一篇文章:你需要了解深度學習和神經網路這項技術嗎?

下文描述的一些數學原理,對於機器學習和深度學習大部分情況下都是適用的。

為什麼要用概率來描述?

我們在讀大學本科時一般都學過概率論,知道隨機現象可以用概率來表示。但我內心深處卻對於與隨機性相關的概念一直有一些疑問:隨機現象到底是事物本質上的隨機,還是由於我們對系統缺少足夠的資訊而造成的表面現象?

比如說,向空中拋一枚硬幣觀察正面還是反面,我們一般認為是一個隨機現象,用概率的語言來表述就是,我們觀察到正面或反面的概率都是1/2。但是,如果我們能對每一次拋硬幣出手的位置、速度、加速度、周圍的空氣密度以及風速等影響因素都能精確瞭解的話,那麼我們就能根據物理定律對硬幣出手後每一時刻的執行狀態進行精確地計算,這樣硬幣落地時是正面還是反面就是個確定性事件,而不是隨機事件了。因此,我們是不是可以說,拋硬幣帶來的隨機性,只不過是由於我們對硬幣的資訊瞭解不夠而造成的表面上的隨機呢?

再舉一個程式設計師經常碰到的例子。比如,我們的計算機是產生不了真正的隨機數的,我們平常呼叫的隨機數函式所產生的只不過是個“偽隨機數”。如果我們指定了隨機的種子(seed),那麼隨機函式輸出的整個序列都是確定的。有時候,偽隨機數所暗含的這種“確定性”的特性,甚至可以被用來實現某些應用特性(特別是在遊戲實現中)。

這有點像是哲學中決定論的論調。那麼世界上到底有沒有絕對的隨機現象呢?如果任何隨機現象都可以用更精確的確定性模型來描述,那麼我們還需要概率論這一學科嗎?《Deep Learning》[1]這本書的作者指出,機器學習經常需要處理兩類數量性質:隨機性(Stochasticity)和不確定性(Uncertainty),而它們都需要用概率進行描述。書中還總結了隨機性和不確定性的三種來源:

  • 內在的隨機性(Inherent stochasticity)。比如,量子力學認為微觀世界裡的現象是真正的隨機現象,而隨機性是事物固有的、內在的特性。那麼,有沒有可能存在一種比量子力學更本質的理論,卻是基於確定性的描述呢?這個問題我們恐怕暫時沒有能力回答,這屬於哲學或者科幻的範疇了。但是,根據主流科學家的觀點,我們可以暫且認為真正意義上的隨機是存在的,這並不妨礙我們基於概率對一些問題進行建模。
  • 不完全觀測(Incomplete observability)。比如我讓你猜硬幣在我的左手還是右手裡。對於我來說,我當然很確定地知道它在哪隻手裡,但在你看來,結果卻是不確定的。因為你沒有我瞭解的資訊多。
  • 不完全建模(Incomplete modeling)。指的是我們的模型(可能為了簡單實用)忽略了真實世界的一些資訊,所以造成了不確定性。

可見,除了事物內在的隨機性之外,即使我們只是本著簡單實用的原則,用概率的觀點來看世界也是一種“方便”的方式。

然而,我們平常在程式設計當中,每一個邏輯分支都是嚴密的、確定的。也正因為如此,傳統的程式設計方式就對解決那些帶有不確定性的、“模糊的”問題不太適用。在一些典型的機器學習任務中,比如影象識別,即使影象模糊一些,模型也應該能夠識別正確;再比如語音識別,即使有些噪音,也不應該影響模型的判斷。傳統的程式設計方式沒法完成這種模糊條件的判斷,它只能給出非對即錯的結果,而且輸入的微小變動就會造成結果的劇烈變動。

所以,神經網路和深度學習的模型建立在概率和統計學之上,也就是順理成章的了。

經典統計學的觀點

在深度學習領域,我們解決問題的思路不再是直接針對問題本身進行程式設計,而是先設計一個能自我學習的神經網路,然後把大量的資料輸入到這個網路中去,這個過程稱為訓練。在訓練過程中,這個神經網路能夠從資料集(dataset)中學習到資料的內在結構和規律,從而最終有能力對原問題中新出現的資料給出預測的解。這篇文章《你需要了解深度學習和神經網路這項技術嗎?》就給出了對於手寫體數字圖片進行識別這樣的一個具體的例子。

從統計學的觀點來看,神經網路用來訓練的資料集(dataset)相當於樣本,而學習過程相當於對總體資訊進行估計(屬於統計推斷問題)。

對於無監督學習(unsupervised learning)來說,每一個輸入樣本是一個向量:x={x1, x2, ..., xn}T,學習過程相當於要估計出總體的概率分佈p(x)。而對於監督學習(supervised learning)來說,每一個輸入樣本x還對應一個期望的輸出值y,稱為labeltarget,那麼學習的過程相當於要估計出總體的條件概率分佈p(y | x)。這樣,當系統遇到一個新的樣本x的時候,它就能對應地給出預測值y

下面我們以監督學習為例,把學習過程看作是統計推斷中的最大似然估計( Maximum Likelihood Estimation)[2]問題來進行討論。

假設:

  • m個樣本組成的資料集記為矩陣X={x(1), x(2), ..., x(m)},對應的mlabel組成的矩陣Y={y(1), y(2), ..., y(m)}。
  • pdata表示未知的真實的分佈(true distribution),即pdata(y | x)就是我們要估計的總體條件分佈。按照經典的統計學,上面m個樣本也都是隨機變數,它們與pdata(y | x)獨立同分布。
  • pmodel(y | x;θ)表示一個概率分佈族,是我們定義的模型,用於估計真實的概率分佈pdata(y | x)。它含有未知引數θ(在神經網路中,引數θ代表了權重w和偏置b),我們機器學習的任務就是估計合適的θ值,讓pmodel(y | x;θ)儘可能逼近真實的資料分佈pdata(y | x)。

那麼,似然函式可以記為pmodel(Y | X;θ),而機器學習的目標可以描述為計算引數θ的最大似然估計θML

深度學習、資訊理論與統計學

上面的公式中之所以乘法能改成加法,是因為增加了一個對數運算,這樣並不影響使似然函式最大化的引數θ的選取。

一般來說,上面公式的右邊還可以針對樣本數量m求平均值,最大似然估計的公式改寫為:

深度學習、資訊理論與統計學

在深度學習領域,我們一般不是通過使似然函式最大化來估計引數θ,而是通過定義一個Cost Function來使它最小化的方式進行。因此,上面公式右邊部分加上一個負號就能作為Cost Function。由於它的形式是取對數的負數,因此這種形式被稱為negative log-likelihood,簡稱NLL。如下:

深度學習、資訊理論與統計學

後面我們可以看到,深度學習相關的Cost Function基本都可以使用NLL推導得到。

與資訊理論的關係

前面我們從統計學的觀點分析了機器學習的目標本質,得到了最大似然估計和NLL的形式。它們為機器學習的模型設計和Cost Function的確定提供了理論依據。而資訊理論則提供了另外一個視角。

資訊理論由Claude Elwood Shannon在1948年所創立,它提供了一種將資訊進行量化的手段。根據這門理論我們可以得到資訊的最優編碼長度。

這裡我們首先借用一下"Visual Information Theory[3]"這篇blog所給出的一個具體例子來說明幾個概念。

假設現在我們要對一份詞彙表進行二進位制編碼。為了簡單起見,這份詞彙表只包含4個單詞,它們分別是:

  • dog
  • cat
  • fish
  • bird

顯然,每個單詞只需要用2個bit進行編碼。下面是一個編碼的例子:

深度學習、資訊理論與統計學


現在假設有一位叫Bob的同學,他使用這份詞彙表的時候每個單詞出現的頻率並不是均等的。再假設他比較喜歡狗,因此使用dog這個單詞的頻率比較高。Bob對於每個單詞的使用頻率(相當於單詞出現的概率分佈)如下:

深度學習、資訊理論與統計學


那麼,這時2bit的定長編碼就不是最優的了。看起來,我們應該對出現概率高的單詞采用較短的編碼,而對於出現概率低的單詞采用較長的編碼,這樣就得到了如下的一種變長編碼:

深度學習、資訊理論與統計學


這次,我們計算一下平均編碼長度為:1 1/2 + 2 1/4 + 3 1/8 + 3 1/8 = 1.75bit,少於2bit。

我們可以用資訊理論中的概念來解釋一下這裡的編碼問題。首先,第一個概念,是自資訊量self-information[4]):

I(x) = log (1/p(x)) = -log p(x)

它表明了一個隨機事件中所包含的資訊量的多少。其中p(x)表示事件x的出現概率。由這個定義可以看出,某事件發生的概率越低,那麼這個事件真正發生時它所攜帶的資訊量越大。在極端情況下,如果一個事件百分之百發生,即p(x)=1,那麼這個事件的資訊量為0;而一個小概率事件一旦發生,那麼它的資訊量是巨大的。

在I(x)的定義中,log對數操作既可以以2為底,也可以以e為底,但它們沒有本質區別,只差一個固定的倍數。當討論資訊編碼的時候,採用以2為底比較方便,這時候I(x)的單位是bit;而討論機器學習的時候,以e為底比較方便。

在前面單詞編碼的例子中,"dog"一詞出現的概率為1/2,因此它的自資訊量為:

I = -log2 (1/2) = 1bit

說明正好用1bit來編碼。同樣計算可以得到,“cat”, "fish", "bird"三個單詞的自資訊量分別為2bit, 3bit, 3bit。在前面給出的變長編碼中,各個單詞所使用的二進位制編碼長度正好等於各自的自資訊量的值。

如果I(x)量化了單個事件的資訊量,那麼計算整個分佈p(x)的平均資訊量(概率均值),就得到了資訊熵(Entropy)[5])的概念:

H(p) = Ex~p[I(x)] = -Ex~p[log p(x)] = -∑x p(x)*log(p(x))

H(p)可以解釋為:概率分佈p(x)所包含的平均資訊量。那麼,如果對p(x)的各個可能的隨機事件進行二進位制編碼,那麼平均至少也需要這麼多個bit。實際上,針對前面的詞彙表中各個單詞的概率分佈,計算H(p)的值恰好也是1.75bit,因此前面給出的這種變長編碼就是最優的一種編碼了,再也找不到另外一種編碼可以讓平均編碼長度比資訊熵還小。

現在假設又有一位叫Alice的同學,她也使用這份只有4個單詞的詞彙表,但是她不太喜歡狗,而是比較喜歡貓,因此她使用cat這個單詞的頻率比較高。Alice對於每個單詞的使用頻率如下圖中的右圖所示:

深度學習、資訊理論與統計學


如果Alice也採用前面給出的變長編碼,那麼她使用這同一份詞彙表的平均編碼的長度為:1 1/8 + 2 1/2 + 3 1/4 + 3 1/8 = 2.25bit。

資訊理論中有一個概念,叫做Cross-Entropy[6],正是表達了類似的含義。它的定義公式如下:

H(q,p) = -Ex~q[log p(x)] = -∑x q(x)*log(p(x))

H(q,p)可以理解為:對於符合概率分佈q(x)的詞彙表使用p(x)對應的最優編碼時所得到的平均編碼長度。當然,這時對於q(x)來講就肯定算不上最優編碼了。

如果運用前面Entropy的概念,可以算得Alice的最優編碼的平均長度為:

H(q) = -∑x q(x)log(q(x)) = -1/8 log(1/8) - 1/2 log(1/2) - 1/4 log(1/4) - 1/8 * log(1/8) = 1.75bit。

Cross-Entropy與Entropy的差,定義了另外一個概念,叫做Kullback-Leibler (KL) divergence[7]。

DKL(q||p) = H(q,p) - H(q) = -Ex~q[log p(x)] + Ex~q[log q(x)]

它表示符合概率分佈q(x)的詞彙表,如果使用p(x)對應的最優編碼,那麼比q(x)自身對應的最優編碼在平均編碼長度上要多出多少。從更抽象的意義上來講,KL divergence量化了從一個概率分佈到另一個概率分佈之間的距離。

具體到Bob和Alice的例子中,p(x)和q(x)分別是Bob和Alice的單詞使用概率分佈,那麼,DKL(q||p)就表示Alice使用Bob的編碼比她使用自己的最優編碼平均要多用幾個bit。這個具體的值可以計算出來:

DKL(q||p) = H(q,p) - H(q) = 2.25bit - 1.75bit = 0.5bit

回到機器學習的場景當中,KL divergence恰好可以用來表示我們定義的模型和樣本資料之間的差距。即:

DKL(p'data||pmodel) = -Ex~p'data[log pmodel(y|x;θ)] + Ex~p'data[log p'data]

注意,上面式子中pmodel(y|x;θ)是一個概率分佈族,也就是我們定義的模型。而p'data是由樣本得到的經驗分佈(empirical distribution),它與待求的真正的資料分佈pdata還有所不同,兩者之間的差異由樣本資料集的大小和質量決定。如果暫且不論樣本的質量,機器學習的目標就可以歸結為將pmodel(y|x;θ)和p'data之間的差異減小,也就是使DKL(p'data||pmodel)最小化。而這個最小化的過程,其實就是通過修改引數θ不斷優化pmodel(y|x;θ)的過程。

仔細觀察上面DKL(p'data||pmodel)的定義,可以看出,對於固定的樣本資料來說,第二項是固定的,而只有第一項才包含引數θ,因此上述第二項在將KL divergence最小化的過程中不起作用。

因此,將KL divergence最小化,就相當於將上面式子中的第一項(也就是Cross-Entropy)最小化。這個Cross-Entropy的值記為:

H(p'data, pmodel) = -Ex~p'data[log pmodel(y|x;θ)]

再對比上一節計算得到的NLL(θ)的值:

深度學習、資訊理論與統計學

可以看出,Cross-Entropy正好等同於NLL,即:

H(p'data, pmodel) = NLL(θ)

現在,經過了前面結合統計學和資訊理論的分析,我們可以得出結論:在指導機器學習的優化目標上,以下四種方式是等價的:

  • 最大似然估計
  • 使NLL最小化
  • 使KL divergence最小化
  • 使Cross-Entropy最小化

這裡還需要著重指出的一點是:Cross-Entropy是一個很容易讓人迷惑的概念。很多機器學習或深度學習的教程上都把Cross-Entropy當成了一種特定的Cost Function,這其中也包括著名的Michael Nielsen的《Neural Networks and Deep Learning》一書[8]。但根據上面的分析,Cross-Entropy其實應該是一個更基礎的資訊理論的概念,它指導我們在不同的情況下推匯出不同的Cost Function。我們不應該把Cross-Entropy當做一種特定的Cost Function來對待,這樣不利於知識的融會貫通。

貝葉斯統計的觀點

統計學有兩個流派:頻率學派和貝葉斯學派。兩個學派有很多不同點,比如:

  • 在貝葉斯統計中,任何未知的變數都能看成是隨機變數。
  • 貝葉斯統計有一個比較“主觀”的先驗分佈的概念。

在針對機器學習進行統計推斷時,前面在經典統計學中的模型p(x ; θ)被看做是包含了未知引數θ的一個概率分佈族。而在貝葉斯推斷中未知引數θ被看做是隨機變數,因此,模型可以寫為條件分佈的形式:p(x | θ)。

貝葉斯統計是要先計算出後驗分佈,即:

p(θ | x) = p(x | θ) * p(θ) / p(x)

兩邊求對數:

log p(θ | x) = log p(x | θ) + log p(θ) - log p(x)

按照最大後驗估計(Maximum A Posteriori Estimation, MAP)的思路,上面式子最後一項與θ無關,可以忽略掉。第一項相當於經典統計學中的最大似然估計,而第二項log p(θ)是一個先驗分佈。這個先驗分佈允許對學習過程施加一些人為的經驗的影響,這些經驗不依賴於訓練資料。在某些情況下,這個先驗分佈可以看成是Regularization的一種形式。

一些常見的Cost Function

這一小節會涉及神經網路的一些技術細節,如果你不想太過於深入細節,本節內容可以跳過。

神經網路的輸出層與模型pmodel分佈的選擇緊密相關,而pmodel確定之後,Cost Function也隨之基本確定了,因此,Cost Function與神經網路的輸出層之間緊密相關。

我們先把平常經常碰到的一些Cost Function的形式羅列一下,然後挨個看一下它們是否能由前面的最大似然估計來得到。

第一種,比較經典的,稱為mean squared error,簡稱MSE:

深度學習、資訊理論與統計學

其中,a表示網路的實際輸出值,而y(x)是輸入為x的時候,期望的輸出值,即label。y(x)是one-hot code vector的形式,表示一個0和1組成的向量,其中只有1位為1。

第二種,普遍被稱為Cross-Entropy Cost Function。前面我們已經提到過,這個概念與資訊理論裡的Cross-Entropy的概念有所衝突。它的定義形式如下:

深度學習、資訊理論與統計學

第三種,稱為log-likelihood:

深度學習、資訊理論與統計學

注意上面log-likelihood的表示式只是針對單個輸入樣本x的形式,最終計算的時候還應該針對x求均值。它的意思是:當網路的輸出層(即第L層)的第y個輸出是期望的輸出(即為1)時,Cost Function是上面公式所描述的形式。

上面第二和第三種Cost Function,在Michael Nielsen的《Neural Networks and Deep Learning》[8]一書的第三章都有提及過。

實際上,仔細計算的話,上面三種Cost Function的形式,都可以從最大似然估計得來,或者等價地從NLL、KL divergence或Cross-Entropy得來。

  • 如果將pmodel看成一個高斯分佈(即正態分佈)[9],而且輸出單元是線性輸出,就能推匯出MSE的形式。
  • 如果將輸出層的每一個輸出單元都看成是Bernoulli分佈(即0-1分佈)[10],就能推匯出所謂的"Cross-Entropy Cost Function"。這時輸出單元一般是Sigmoid神經元。
  • 如果將輸出層的多個輸出看成是Multinoulli分佈(也稱為Categorical分佈)[11],即典型的分類器場景,那麼就能推匯出log-likelihood形式的Cost Function。這時輸出單元一般採用softmax形式。

這裡面有一些細節值得注意,比如[12]這篇文章基於資訊理論的Cross-Entropy概念給出了這樣一種Cost Function:

深度學習、資訊理論與統計學

首先,這個式子也只是針對單個輸入樣本x的形式。在這個式子中,y'是網路期望的輸出值,即label,而且是one-hot code vector的形式。因此,上面這個式子其實和log-likelihood是一樣的。但如果y'不是one-hot code vector的形式了,那麼它在某些場景應該還是能這樣計算的,只要仍是輸出一個Multinoulli分佈。比如,《Deep Learning》[1]一書的第7章提到的label smoothing機制,在這種情況下,仍然可以利用上面這個式子計算Cross-Entropy。但要注意,這時就不是像本文前面章節所講的是最小化p'datapmodel之間的Cross-Entropy,而是在固定一個輸入樣本的前提下,最小化由多個輸出單元組成的實際輸出和期望輸出之間的Cross-Entropy了。

在實際中,由最大似然估計得來的Cost Function,通常帶有NLL的形式(包含對數),因此它在很多情況下恰好可以與輸出單元啟用函式(activation function)中的指數形式抵消,從而避免網路單元達到saturation的狀態。

小結

本文以統計學和資訊理論的視角總結了機器學習和深度學習與各學科之間的關係,並說明了它們如何指導優化的目標。

在討論的過程中,我們會發現,如果將機器學習和深度學習比作一座巨集偉的大廈的話,統計學和資訊理論基礎只是這個大廈的基座。而且這個基礎可能還存在一些薄弱的地方,比如說:

  • 這個基礎告訴我們應該盡力優化p'datapmodel之間的差異,但p'data和真正的pdata之間的差異卻不是這個基礎能決定的。這取決於樣本資料的質量。
  • pmodel本身的設計只能憑人的經驗,而沒有堅實的理論支援來指導我們如何確定它。
  • 貝葉斯推斷引入的對於未知引數的先驗分佈,仍然主要依賴人的經驗。

所以,構建一個自底層到上層全部堅實的理論大廈,仍然任重而道遠。

(完)

參考文獻:

其它精選文章

深度學習、資訊理論與統計學

相關文章