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