近幾年,有幾個被媒體大肆報道的事件,如下表所示。
如上所示,深度學習作為人工智能的一種具有代表性的實現(xiàn)方法,取得了很大的成功。那么,深度學習究竟是什么技術(shù)呢?深度學習里的“學習”是怎么做到的呢?本文我們就來解答一下這個疑問,不過在此之前,我們需要先了解一下神經(jīng)網(wǎng)絡(luò),因為深度學習是以神經(jīng)網(wǎng)絡(luò)為出發(fā)點的。
神經(jīng)網(wǎng)絡(luò)的靈感來源
談到神經(jīng)網(wǎng)絡(luò)的想法,我們需要從生物學上的神經(jīng)元(neuron)開始說起。從生物學扎實的研究成果中,我們可以得到以下關(guān)于構(gòu)成大腦的神經(jīng)元知識。
人的大腦是由多個神經(jīng)元互相連接形成網(wǎng)絡(luò)而構(gòu)成的。也就是說,一個神經(jīng)元從其他神經(jīng)元接收信號,也向其他神經(jīng)元發(fā)出信號。大腦就是根據(jù)這個網(wǎng)絡(luò)上的信號的流動來處理各種各樣的信息的。
神經(jīng)元示意圖
神經(jīng)元主要由細胞體、軸突、樹突等構(gòu)成。樹突是從其他神經(jīng)元接收信號的突起。軸突是向其他神經(jīng)元發(fā)送信號的突起。由樹突接收的電信號在細胞體中進行處理之后,通過作為輸出裝置的軸突,被輸送到其他神經(jīng)元。另外,神經(jīng)元是借助突觸結(jié)合而形成網(wǎng)絡(luò)的。
讓我們來更詳細地看一下神經(jīng)元傳遞信息的結(jié)構(gòu)。如上圖所示,神經(jīng)元是由細胞體、樹突、軸突三個主要部分構(gòu)成的。其他神經(jīng)元的信號(輸入信號)通過樹突傳遞到細胞體(也就是神經(jīng)元本體)中,細胞體把從其他多個神經(jīng)元傳遞進來的輸入信號進行合并加工,然后再通過軸突前端的突觸傳遞給別的神經(jīng)元。
那么,神經(jīng)元究竟是怎樣對輸入信號進行合并加工的呢?讓我們來看看它的構(gòu)造。
假設(shè)一個神經(jīng)元從其他多個神經(jīng)元接收了輸入信號,這時如果所接收的信號之和比較小,沒有超過這個神經(jīng)元固有的邊界值(稱為閾值),這個神經(jīng)元的細胞體就會忽略接收到的信號,不做任何反應(yīng)。
注:對于生命來說,神經(jīng)元忽略微小的輸入信號,這是十分重要的。反之,如果神經(jīng)元對于任何微小的信號都變得興奮,神經(jīng)系統(tǒng)就將“情緒不穩(wěn)定”。
不過,如果輸入信號之和超過神經(jīng)元固有的邊界值(也就是閾值),細胞體就會做出反應(yīng),向與軸突連接的其他神經(jīng)元傳遞信號,這稱為點火。
那么,點火時神經(jīng)元的輸出信號是什么樣的呢?有趣的是,信號的大小是固定的。即便從鄰近的神經(jīng)元接收到很大的刺激,或者軸突連接著其他多個神經(jīng)元,這個神經(jīng)元也只輸出固定大小的信號。點火的輸出信號是由0 或1 表示的數(shù)字信息。
將神經(jīng)元的工作在數(shù)學上抽象化,并以其為單位人工地形成網(wǎng)絡(luò),這樣的人工網(wǎng)絡(luò)就是神經(jīng)網(wǎng)絡(luò)。將構(gòu)成大腦的神經(jīng)元的集合體抽象為數(shù)學模型,這就是神經(jīng)網(wǎng)絡(luò)的出發(fā)點。
對于用神經(jīng)網(wǎng)絡(luò)實現(xiàn)的人工智能,人們只需要簡單地提供數(shù)據(jù)即可。神經(jīng)網(wǎng)絡(luò)接收數(shù)據(jù)后,就會從網(wǎng)絡(luò)的關(guān)系中自己學習并理解。如此看來,神經(jīng)網(wǎng)絡(luò)似乎有一些不可思議的邏輯。然而,從數(shù)學上來說,其原理十分容易。下面我們就一點點闡述它的原理。
神經(jīng)網(wǎng)絡(luò)中的數(shù)學
一、神經(jīng)元工作的數(shù)學表示
讓我們先整理一下已經(jīng)考察過的神經(jīng)元點火的結(jié)構(gòu)。
(i) 來自其他多個神經(jīng)元的信號之和成為神經(jīng)元的輸入。
(ii) 如果這個信號之和超過神經(jīng)元固有的閾值,則點火。
(iii) 神經(jīng)元的輸出信號可以用數(shù)字信號0 和1 來表示。即使有多個輸出端,其值也是同一個。
下面讓我們用數(shù)學方式表示神經(jīng)元點火的結(jié)構(gòu)。
首先,我們用數(shù)學式表示輸入信號。由于輸入信號是來自相鄰神經(jīng)元的輸出信號,所以根據(jù)(iii),輸入信號也可以用“有”“無”兩種信息表示。因此,用變量x 表示輸入信號時,如下所示。
注:與視細胞直接連接的神經(jīng)元等個別神經(jīng)元并不一定如此,因為視細胞的輸入是模擬信號。
接下來,我們用數(shù)學式表示輸出信號。根據(jù)(iii),輸出信號可以用表示點火與否的“有”“無”兩種信息來表示。因此,用變量y 表示輸出信號時,如下所示。
最后,我們用數(shù)學方式來表示點火的判定條件。
從(i) 和(ii) 可知,神經(jīng)元點火與否是根據(jù)來自其他神經(jīng)元的輸入信號的和來判定的,但這個求和的方式應(yīng)該不是簡單的求和。例如在網(wǎng)球比賽中,對于來自視覺神經(jīng)的信號和來自聽覺神經(jīng)的信號,大腦是通過改變權(quán)重來處理的。因此,神經(jīng)元的輸入信號應(yīng)該是考慮了權(quán)重的信號之和。
用數(shù)學語言來表示的話,例如,來自相鄰神經(jīng)元1、2、3 的輸入信號分別為x1、x2、x3,則神經(jīng)元的輸入信號之和可以如下表示。
式中的w1、w2、w3 是輸入信號x1、x2、x3 對應(yīng)的權(quán)重(weight)。
根據(jù)(ii),神經(jīng)元在信號之和超過閾值時點火,不超過閾值時不點火。于是,利用式(1),點火條件可以如下表示。
這里,θ 是該神經(jīng)元固有的閾值。
例1
來自兩個神經(jīng)元1、2 的輸入信號分別為變量x1、x2,權(quán)重為w1、w2,神經(jīng)元的閾值為θ。當w1 = 5,w2 = 3,θ = 4 時,考察信號之和w1x1+ w2x2 的值與表示點火與否的輸出信號y 的值。
二、點火條件的圖形表示
下面我們將表示點火條件的式(2) 圖形化。以神經(jīng)元的輸入信號之和為橫軸,神經(jīng)元的輸出信號y 為縱軸,將式(2) 用圖形表示出來。如下圖所示,當信號之和小于θ 時,y 取值0,反之y 取值1。
如果用函數(shù)式來表示這個圖形,就需要用到下面這個單位階躍函數(shù)。
單位階躍函數(shù)又稱單位布階函數(shù),目前有三種定義,它們共同之處是自變量取值大于0時,函數(shù)值為1;自變量取值小于0時,函數(shù)值為0,不同之處是,自變量為0時函數(shù)值各不相同。
單位階躍函數(shù)的圖形如下所示。
利用單位階躍函數(shù)u(z),式(2) 可以用一個式子表示如下。
通過下表可以確認式(3) 和式(2) 是一樣的。
此外,該表中的z(式(3) 的階躍函數(shù)的參數(shù))的表達式
這稱為該神經(jīng)元的加權(quán)輸入。
三、將神經(jīng)元的工作一般化
上面為了接近神經(jīng)元的形象,我們將神經(jīng)元表示為了下圖的樣子。
然而,為了畫出網(wǎng)絡(luò),我們需要畫很多的神經(jīng)元,在這種情況下上面那樣的圖就不合適了。因此,我們使用如下所示的簡化圖,這樣很容易就能畫出大量的神經(jīng)元。
為了與生物學的神經(jīng)元區(qū)分開來,我們把經(jīng)過這樣簡化、抽象化的神經(jīng)元稱為神經(jīng)單元(unit)。
將神經(jīng)元的示意圖抽象化之后,對于輸出信號,我們也對其進行一般化。
上面我們提到,根據(jù)點火與否,生物學上的神經(jīng)元的輸出y 分別取值1 和0(下圖)。
然而,如果除去“生物”這個條件,這個“0 和1 的限制”也應(yīng)該是可以解除的。這時表示點火與否的下式(前邊式(3))就需要修正。
這里,u 是單位階躍函數(shù)。我們將該式一般化,如下所示。
這里的函數(shù)a 是建模者定義的函數(shù),我們稱為激活函數(shù)(activation function)。x1、x2、x3 是模型允許的任意數(shù)值,y 是函數(shù)a 能取到的任意數(shù)值。這個式(2) 就是今后所講的神經(jīng)網(wǎng)絡(luò)的出發(fā)點。
注:雖然式(2) 只考慮了3 個輸入,但這是很容易推廣的。另外,式(1) 使用的單位階躍函數(shù)u(z) 在數(shù)學上也是激活函數(shù)的一種。
請注意,式(2) 的輸出y 的取值并不限于0 和1,對此并沒有簡單的解釋。一定要用生物學來比喻的話,可以考慮神經(jīng)單元的“興奮度”“反應(yīng)度”“活性度”。
我們來總結(jié)一下神經(jīng)元和神經(jīng)單元的不同點,如下表所示。
將神經(jīng)元點火的式(1) 一般化為神經(jīng)單元的激活函數(shù)式(2),要確認這樣做是否有效,就要看實際做出的模型能否很好地解釋現(xiàn)實的數(shù)據(jù)。實際上,式(2) 表示的模型在很多模式識別問題中取得了很好的效果。
四、神經(jīng)單元的激活函數(shù)
Sigmoid 函數(shù)
神經(jīng)單元激活函數(shù)的代表性例子是Sigmoid 函數(shù)σ(z),其定義如下所示。
關(guān)于這個函數(shù),我們以后可以繼續(xù)深入學習。這里,我們先來看看它的圖形,Sigmoid 函數(shù)σ(z) 的輸出值是大于0 小于1 的任意值。此外,該函數(shù)連續(xù)、光滑,也就是說可導(dǎo)。這兩種性質(zhì)使得Sigmoid 函數(shù)很容易處理。
右圖是激活函數(shù)的代表性例子Sigmoid 函數(shù)σ(z) 的圖形。除了原點附近的部分,其余部分與單位階躍函數(shù)(左圖)相似。Sigmoid 函數(shù)具有處處可導(dǎo)的性質(zhì),很容易處理。
單位階躍函數(shù)的輸出值為1 或0,表示點火與否。然而,Sigmoid 函數(shù)的輸出值大于0 小于1,這就有點難以解釋了。如果用生物學術(shù)語來解釋的話,如上文中的表格所示,可以認為輸出值表示神經(jīng)單元的興奮度等。輸出值接近1 表示興奮度高,接近0 則表示興奮度低。
偏置
再來看一下激活函數(shù)的式(2)。
這里的θ 稱為閾值,在生物學上是表現(xiàn)神經(jīng)元特性的值。從直觀上講,θ表示神經(jīng)元的感受能力,如果θ 值較大,則神經(jīng)元不容易興奮(感覺遲鈍),而如果值較小,則神經(jīng)元容易興奮(敏感)。
然而,式(2) 中只有θ 帶有負號,這看起來不漂亮。數(shù)學不喜歡不漂亮的東西。另外,負號具有容易導(dǎo)致計算錯誤的缺點,因此,我們將- θ 替換為b。
經(jīng)過這樣處理,式子變漂亮了,也不容易發(fā)生計算錯誤。這個b 稱為偏置(bias)。
我們將式(4) 作為標準使用。另外,此時的加權(quán)輸入z如下所示。
式(4) 和式(5) 是今后所講的神經(jīng)網(wǎng)絡(luò)的出發(fā)點,非常重要。
另外,生物上的權(quán)重w1、w2、w3 和閾值θ( = - b)都不是負數(shù),因為負數(shù)在自然現(xiàn)象中實際上是不會出現(xiàn)的。然而,在將神經(jīng)元一般化的神經(jīng)單元中,是允許出現(xiàn)負數(shù)的。
練習題
下圖是一個神經(jīng)單元。如圖所示,輸入x1 的對應(yīng)權(quán)重是2,輸入x2的對應(yīng)權(quán)重是3,偏置是- 1。根據(jù)下表給出的輸入,求出加權(quán)輸入z 和輸出y。注意這里的激活函數(shù)是Sigmoid函數(shù)。
請自行填寫之后看下面答案。
解:結(jié)果如下表所示(式(3) 中的e 取e = 2.7 進行計算)。
備注
改寫式(5)。
我們將式(5) 像下面這樣整理一下。
這里增加了一個虛擬的輸入,可以理解為以常數(shù)1 作為輸入值(下圖)。于是,加權(quán)輸入z 可以看作下面兩個向量的內(nèi)積。
?。?w1,w2,w3,b)(x1,x2,x3,1)
計算機擅長內(nèi)積的計算,因此按照這種解釋,計算就變?nèi)菀琢恕?/p>
神經(jīng)網(wǎng)絡(luò)作為本文的主題,它究竟是什么樣的呢?下面讓我們來看一下其概要。
五、神經(jīng)網(wǎng)絡(luò)
上面我們考察了神經(jīng)單元,它是神經(jīng)元的模型化。那么,既然大腦是由神經(jīng)元構(gòu)成的網(wǎng)絡(luò),如果我們模仿著創(chuàng)建神經(jīng)單元的網(wǎng)絡(luò),是不是也能產(chǎn)生某種“智能”呢?這自然是讓人期待的。眾所周知,人們的期待沒有被辜負,由神經(jīng)單元組成的網(wǎng)絡(luò)在人工智能領(lǐng)域碩果累累。
在進入神經(jīng)網(wǎng)絡(luò)的話題之前,我們先來回顧一下上面考察過的神經(jīng)單元的功能。
將這樣的神經(jīng)單元連接為網(wǎng)絡(luò)狀,就形成了神經(jīng)網(wǎng)絡(luò)。它的連接方法多種多樣,本文將主要考察作為基礎(chǔ)的階層型神經(jīng)網(wǎng)絡(luò)。
神經(jīng)網(wǎng)絡(luò)各層的職責
階層型神經(jīng)網(wǎng)絡(luò)如下圖所示,按照層(layer)劃分神經(jīng)單元,通過這些神經(jīng)單元處理信號,并從輸出層得到結(jié)果,如下圖所示。
構(gòu)成這個網(wǎng)絡(luò)的各層稱為輸入層、隱藏層、輸出層,其中隱藏層也被稱為中間層。
各層分別執(zhí)行特定的信號處理操作。
輸入層負責讀取給予神經(jīng)網(wǎng)絡(luò)的信息。屬于這個層的神經(jīng)單元沒有輸入箭頭,它們是簡單的神經(jīng)單元,只是將從數(shù)據(jù)得到的值原樣輸出。
隱藏層的神經(jīng)單元執(zhí)行前面所復(fù)習過的處理操作(1) 和(2)。在神經(jīng)網(wǎng)絡(luò)中,這是實際處理信息的部分。
輸出層與隱藏層一樣執(zhí)行信息處理操作(1) 和(2),并顯示神經(jīng)網(wǎng)絡(luò)計算出的結(jié)果,也就是整個神經(jīng)網(wǎng)絡(luò)的輸出。
人工智能中著名的深度學習,顧名思義,就是疊加了很多層的神經(jīng)網(wǎng)絡(luò)。疊加層有各種各樣的方法,其中著名的是卷積神經(jīng)網(wǎng)絡(luò)。
了解卷積神經(jīng)網(wǎng)絡(luò)可以閱讀《卷積神經(jīng)網(wǎng)絡(luò)的Python實現(xiàn)》這本書。關(guān)于神經(jīng)網(wǎng)絡(luò)的詳細介紹,請看《這是我看過,最好懂的神經(jīng)網(wǎng)絡(luò)》這篇文章。
從數(shù)學角度看神經(jīng)網(wǎng)絡(luò)的學習
我們了解了神經(jīng)網(wǎng)絡(luò)識別輸入圖像的機制,。具體來說,就是根據(jù)神經(jīng)單元中的權(quán)重關(guān)系來判斷。那么,這個權(quán)重的大小是如何確定的呢?神經(jīng)網(wǎng)絡(luò)中比較重要的一點就是利用網(wǎng)絡(luò)自學習算法來確定權(quán)重大小。
神經(jīng)網(wǎng)絡(luò)的參數(shù)確定方法分為有監(jiān)督學習和無監(jiān)督學習。本文只提到了監(jiān)督學習,有監(jiān)督學習是指,為了確定神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置,事先給予數(shù)據(jù),這些數(shù)據(jù)稱為學習數(shù)據(jù)。神經(jīng)網(wǎng)絡(luò)根據(jù)給定的學習數(shù)據(jù)確定權(quán)重和偏置,稱為學習。
注:學習數(shù)據(jù)也稱為訓(xùn)練數(shù)據(jù)。
那么,神經(jīng)網(wǎng)絡(luò)是怎樣學習的呢?其實思路極其簡單:計算神經(jīng)網(wǎng)絡(luò)得出的預(yù)測值與正解的誤差,確定使得誤差總和達到最小的權(quán)重和偏置。這在數(shù)學上稱為模型的最優(yōu)化(下圖)。
關(guān)于預(yù)測值與正解的誤差總和,有各種各樣的定義。本文采用的是最古典的定義:針對全部學習數(shù)據(jù),計算預(yù)測值與正解的誤差的平方(稱為平方誤差),然后再相加。這個誤差的總和稱為代價函數(shù)(cost function),用符號CT 表示(T 是Total 的首字母)。
利用平方誤差確定參數(shù)的方法在數(shù)學上稱為最小二乘法,它在統(tǒng)計學中是回歸分析的常規(guī)手段。
最優(yōu)化是指確定使得誤差總和最小的參數(shù)的方法。