在本文中,我將向您簡(jiǎn)要介紹深度學(xué)習(xí)的基礎(chǔ)知識(shí),無(wú)論您之后可能選擇何種語(yǔ)言,庫(kù)或框架。
介紹
試圖用很好的理解來(lái)解釋深度學(xué)習(xí)可能需要一段時(shí)間,所以這不是本文的目的。
目的是幫助初學(xué)者理解該領(lǐng)域的基本概念。然而,即使是專家也可能會(huì)在以下內(nèi)容中找到有用的東西。
冒著極其簡(jiǎn)單的風(fēng)險(xiǎn)(請(qǐng)專家請(qǐng)?jiān)徫遥視?huì)盡量給你一些基本信息。如果不出意外,這可能只會(huì)引發(fā)一些人更愿意深入研究這個(gè)問(wèn)題。
一些歷史
深度學(xué)習(xí)本質(zhì)上是一個(gè)新的和時(shí)髦的名稱,一個(gè)主題已經(jīng)存在了相當(dāng)長(zhǎng)一段時(shí)間的神經(jīng)網(wǎng)絡(luò)。
當(dāng)我在90年代初開(kāi)始學(xué)習(xí)(和愛(ài)好)這個(gè)領(lǐng)域時(shí),這個(gè)主題已經(jīng)眾所周知了。事實(shí)上,第一步是在20世紀(jì)40年代(麥卡洛克和皮茨),但從那時(shí)起,這個(gè)領(lǐng)域的進(jìn)展一直很大,直到現(xiàn)在。該領(lǐng)域取得了巨大的成功,在智能手機(jī),汽車和許多其他設(shè)備上進(jìn)行了深入的學(xué)習(xí)。
那么,什么是神經(jīng)網(wǎng)絡(luò),你可以用它做什么?
好吧,讓我們關(guān)注計(jì)算機(jī)科學(xué)的經(jīng)典方法:程序員設(shè)計(jì)一種算法,對(duì)于給定的輸入,它會(huì)生成輸出。
他或她準(zhǔn)確地設(shè)計(jì)函數(shù)f(x)的所有邏輯,以便:
y = f(x)
其中x和y分別是輸入和輸出。
但是,有時(shí)設(shè)計(jì)f(x)可能并不那么容易。例如,想象一下,x是面部圖像,y是通信者的名字。對(duì)于自然大腦來(lái)說(shuō),這項(xiàng)任務(wù)非常容易,而計(jì)算機(jī)算法難以完成!
這就是深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)發(fā)揮作用的地方?;驹瓌t是:停止嘗試設(shè)計(jì)f()算法并嘗試模仿大腦。
好的,大腦是如何表現(xiàn)的?它使用幾個(gè)無(wú)限對(duì)(x,y)樣本(訓(xùn)練集)訓(xùn)練自己,并且在整個(gè)逐步過(guò)程中,f(x)函數(shù)自動(dòng)形成自身。它不是由任何人設(shè)計(jì)的,而是從無(wú)休止的試錯(cuò)法提煉機(jī)制中產(chǎn)生的。
想象一個(gè)孩子每天看著他或她周圍的熟悉的人:數(shù)十億的快照,從不同的位置,視角,光線條件,每次進(jìn)行關(guān)聯(lián),每次糾正和銳化下面的自然神經(jīng)網(wǎng)絡(luò)。
人工神經(jīng)網(wǎng)絡(luò)是由大腦中的神經(jīng)元和突觸構(gòu)成的自然神經(jīng)網(wǎng)絡(luò)的模型。
典型的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
為了保持簡(jiǎn)單(并且能夠利用當(dāng)今機(jī)器的數(shù)學(xué)和計(jì)算能力),可以將神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)為一組層,每層包含節(jié)點(diǎn)(大腦神經(jīng)元的人工對(duì)應(yīng)物),其中層中的每個(gè)節(jié)點(diǎn)連接到下一層中的每個(gè)節(jié)點(diǎn)。
每個(gè)節(jié)點(diǎn)都有一個(gè)由兩個(gè)限制之間的浮點(diǎn)數(shù)表示的狀態(tài),通常為0和1.當(dāng)此狀態(tài)接近其最小值時(shí),該節(jié)點(diǎn)被視為非活動(dòng)(關(guān)閉),而當(dāng)它接近最大值時(shí),該節(jié)點(diǎn)被視為活動(dòng)狀態(tài)(上)。你可以把它想象成一個(gè)燈泡; 不嚴(yán)格依賴于二進(jìn)制狀態(tài),但也能夠處于兩個(gè)限制之間的某個(gè)中間值。
每個(gè)連接都有一個(gè)權(quán)重,因此前一層中的活動(dòng)節(jié)點(diǎn)可能或多或少地對(duì)下一層中的節(jié)點(diǎn)的活動(dòng)(興奮性連接)做出貢獻(xiàn),而非活動(dòng)節(jié)點(diǎn)不會(huì)傳播任何貢獻(xiàn)。
連接的權(quán)重也可以是負(fù)的,這意味著前一層中的節(jié)點(diǎn)(或多或少地)對(duì)下一層中的節(jié)點(diǎn)的不活動(dòng)性(抑制連接)做出貢獻(xiàn)。
為簡(jiǎn)單起見(jiàn),讓我們描述一個(gè)網(wǎng)絡(luò)的子集,其中前一層中的三個(gè)節(jié)點(diǎn)與下一層中的節(jié)點(diǎn)相連。再簡(jiǎn)單來(lái)說(shuō),假設(shè)前一層中的前兩個(gè)節(jié)點(diǎn)處于其最大激活值(1),而第三個(gè)節(jié)點(diǎn)處于其最小值(0)。
在上圖中,前一層中的前兩個(gè)節(jié)點(diǎn)是活動(dòng)的(on),因此,它們對(duì)下一層中節(jié)點(diǎn)的狀態(tài)有所貢獻(xiàn),而第三個(gè)節(jié)點(diǎn)在非活動(dòng)(關(guān)閉)中有所貢獻(xiàn),因此它不會(huì)貢獻(xiàn)以任何方式(獨(dú)立于其連接重量)。
第一個(gè)節(jié)點(diǎn)具有強(qiáng)(厚)正(綠色)連接權(quán)重,這意味著它對(duì)激活的貢獻(xiàn)很高。第二個(gè)具有弱(?。┴?fù)(紅色)連接重量; 因此,它有助于抑制連接節(jié)點(diǎn)。
最后,我們得到了來(lái)自前一層的傳入連接節(jié)點(diǎn)的所有貢獻(xiàn)的加權(quán)和。
其中i是節(jié)點(diǎn)i的激活狀態(tài),w ij是連接節(jié)點(diǎn)i和節(jié)點(diǎn)j的連接權(quán)重。
那么,給定這個(gè)加權(quán)和數(shù),我們?nèi)绾闻袛嘞乱粚又械墓?jié)點(diǎn)是否會(huì)被激活?規(guī)則是否簡(jiǎn)單如“如果總和為正,它將被激活,而如果負(fù)數(shù)則不會(huì)”?嗯,它可能是這種方式,但一般來(lái)說(shuō),它取決于您為節(jié)點(diǎn)選擇的激活函數(shù)(以及哪個(gè)閾值)。
想一想; 這個(gè)最終數(shù)字可以是實(shí)數(shù)范圍內(nèi)的任何數(shù)字,而我們需要使用它來(lái)設(shè)置具有更有限范圍的節(jié)點(diǎn)的狀態(tài)(假設(shè)從0到1)。然后我們需要將第一個(gè)范圍映射到第二個(gè)范圍,以便將任意(負(fù)數(shù)或正數(shù))數(shù)字壓縮到0..1范圍。
執(zhí)行此任務(wù)的一個(gè)非常常見(jiàn)的激活函數(shù)是sigmoid函數(shù)
閾值(y值達(dá)到范圍中間的x值,即0.5)為零,但通常,它可以是任何值(負(fù)或正,導(dǎo)致sigmoid向左移位)或右邊)。
低閾值允許以較低加權(quán)和激活節(jié)點(diǎn),而高閾值將僅使用該總和的高值來(lái)確定激活。
該閾值可以通過(guò)考慮前一層中的附加虛節(jié)點(diǎn)來(lái)實(shí)現(xiàn),其具有恒定激活值1.在這種情況下,實(shí)際上,該虛節(jié)點(diǎn)的連接權(quán)重可以充當(dāng)閾值,并且總和公式以上可以認(rèn)為包含閾值本身。
最終,網(wǎng)絡(luò)的狀態(tài)由其所有權(quán)重的值集合(從廣義上講,包括閾值)來(lái)表示。
給定狀態(tài)或一組權(quán)重值可能會(huì)產(chǎn)生不良結(jié)果或大錯(cuò)誤,而另一個(gè)狀態(tài)可能會(huì)產(chǎn)生良好結(jié)果,換句話說(shuō),就是小錯(cuò)誤。
因此,在N維狀態(tài)空間中移動(dòng)會(huì)導(dǎo)致小的或大的錯(cuò)誤。將權(quán)重域映射到錯(cuò)誤值的此函數(shù)是損失函數(shù)。我們的思想不能輕易想象在N + 1空間中的這種功能。但是,我們可以得到N = 2的特殊情況的一般概念:閱讀本文,你會(huì)看到。
訓(xùn)練神經(jīng)網(wǎng)絡(luò)包括找到最小的損失函數(shù)。為什么一個(gè)好的最小值而不是全局最小值?好吧,因?yàn)檫@個(gè)函數(shù)通常是不可微分的,所以你只能借助一些Gradient Descent技術(shù)在權(quán)重域中游蕩,并希望不要:
做出太大的步驟,可能會(huì)讓你在沒(méi)有意識(shí)到的情況下爬到最低限度
做太小的步驟可能會(huì)讓你鎖定在一個(gè)不太好的局部最小值
這不是一件容易的事,是吧?這就是為什么這是深度學(xué)習(xí)的總體主要問(wèn)題,以及為什么訓(xùn)練階段可能需要數(shù)小時(shí),數(shù)天或數(shù)周。這就是為什么您的硬件對(duì)于此任務(wù)至關(guān)重要以及為什么您經(jīng)常需要停止培訓(xùn)并考慮不同的方法和配置參數(shù)值并重新開(kāi)始它的原因!
但讓我們回到網(wǎng)絡(luò)的一般結(jié)構(gòu),這是一堆層。第一層是輸入(x),而最后一層是輸出(y)。
中間的層可以是零,一個(gè)或多個(gè)。它們被稱為隱藏層,深度學(xué)習(xí)中的“深層”一詞恰好指的是網(wǎng)絡(luò)可以有許多隱藏層,因此可能在訓(xùn)練期間找到更多關(guān)聯(lián)輸入和輸出的特征。
注意:在20世紀(jì)90年代,你會(huì)聽(tīng)說(shuō)過(guò)多層網(wǎng)絡(luò)而不是深層網(wǎng)絡(luò),但這是一回事?,F(xiàn)在,已經(jīng)越來(lái)越清楚的是,層越遠(yuǎn)離輸入(深層),它就越能捕獲抽象特征。
另請(qǐng)參閱: 從程序員的角度設(shè)計(jì)Java中的神經(jīng)網(wǎng)絡(luò)
學(xué)習(xí)過(guò)程
在學(xué)習(xí)過(guò)程開(kāi)始時(shí),權(quán)重是隨機(jī)設(shè)置的,因此第一層中的給定輸入集將傳播并生成隨機(jī)(計(jì)算)輸出。然后將該輸出與所提供輸入的所需輸出進(jìn)行比較; 差異是衡量網(wǎng)絡(luò)錯(cuò)誤的指標(biāo)(損失函數(shù))。
然后,此錯(cuò)誤用于對(duì)生成它的連接權(quán)重應(yīng)用調(diào)整,此過(guò)程從輸出層開(kāi)始,逐步向后移動(dòng)到第一層。
應(yīng)用的調(diào)整量可以很小或很大,并且通常在稱為學(xué)習(xí)率的因素中定義。
該算法稱為反向傳播,并在Rumelhart,Hinton和Williams研究后于1986年開(kāi)始流行。
請(qǐng)記住中間的名字:Geoffrey Hinton。他經(jīng)常被稱為“深度學(xué)習(xí)的教父”,是一位不知疲倦的照明科學(xué)家。例如,他現(xiàn)在正在研究一種名為Capsule Neural Networks的新范例,這聽(tīng)起來(lái)像是該領(lǐng)域的另一場(chǎng)偉大革命!
反向傳播的目標(biāo)是通過(guò)對(duì)訓(xùn)練集中每次迭代的權(quán)重進(jìn)行適當(dāng)?shù)男U齺?lái)逐漸減少網(wǎng)絡(luò)的整體誤差。再次,考慮到減少誤差的這個(gè)過(guò)程是困難的部分,因?yàn)闆](méi)有任何保證重量調(diào)整總是朝著正確的方向進(jìn)行最小化。
這個(gè)問(wèn)題總結(jié)為在n維表面找到最小值,同時(shí)用眼罩踩著:你可以找到一個(gè)局部最小值,永遠(yuǎn)不知道你是否能表現(xiàn)得更好。
如果學(xué)習(xí)速率太小,則該過(guò)程可能導(dǎo)致過(guò)慢,并且網(wǎng)絡(luò)可能停滯在局部最小值。另一方面,較大的學(xué)習(xí)速率可能導(dǎo)致跳過(guò)全局最小值并使算法發(fā)散。
事實(shí)上,在訓(xùn)練階段,問(wèn)題往往是減少錯(cuò)誤的過(guò)程不會(huì)收斂,錯(cuò)誤會(huì)增加而不是縮小!
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4777瀏覽量
100970 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4344瀏覽量
62813 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5511瀏覽量
121349
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論