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