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

評論