深度網絡揭秘之深度網絡背後的數學

2020-12-11 雷鋒網

本文為 AI 研習社編譯的技術博客,原標題 :

Deep Dive into Math Behind Deep Networks

作者 |  Piotr Skalski

翻譯 | 灰灰在學習、Disillusion

校對 | 醬番梨        整理 | 菠蘿妹

原文連結:l

https://towardsdatascience.com/https-medium-com-piotr-skalski92-deep-dive-into-deep-networks-math-17660bc376ba


  神秘的神經網絡第一部分

如今,我們擁有許多高級的,特殊的庫與框架,比如 Keras,TensorFlow或者PyTorch,也不再總需要擔心權重矩陣的大小,更不需要記住我們決定使用的激活函數導數的公式。通常我們只需要盡力一個神經網絡,即使是一個結構非常複雜的神經網絡,也只需要導入和幾行代碼就可以完成了。這節省了我們搜索漏洞的時間並簡化了我們的工作。但是,對於神經網絡的深入了解對我們完成在構架選擇,或者超參數的調整或優化的任務上有著很大的幫助。

注意:感謝Jung Yi Lin 的幫助,你也可以閱讀中文版的這篇文章。我在GitHub上提供了用於創建本文中使用的可視化的原始碼。

了解更多的神經網絡的工作原理。我決定在今年夏天抽出點時間深入的學習一下數學。我也打算寫一篇關於最新的學習諮詢的文章,以便幫助別人理解一些生澀難懂的概念。我編寫的這篇文章會對那些不太擅長線性代數和微積分的人十分友好,但就像標題所暗示的,這將是一篇與數學密切相關的文章。

圖1.訓練集的可視化

舉一個例子:我們將解決確定二進位分類數據集問題,如下面圖一所示。如果兩個類不同那就會形成兩個圓圈——這種設置非常不方便在許多傳統的ML算法中,但是再一些小型神經網絡中卻可以有很好的效果。為了解決這個問題,我們將使用具有圖二結構的神經網絡——5個具有不同數量單位的全連接層。對於隱藏層,我們將使用relu作為其激活函數,而將Sigmod作為輸出層。這是相當簡單的一種構造,而不是複雜到足以成為一個需要我們深思熟慮的一個例子。

 圖2.神經網絡架構

首先,我們用最流行的機器學習庫之一——KERAS提出了第一種解決方法。

from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(4, input_dim=2,activation='relu'))
model.add(Dense(6, activation='relu'))
model.add(Dense(6, activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=50, verbose=0)

就像這樣。正如我在介紹中提到的,一些導入加幾行代碼就足以創建並且訓練一個能夠對我們的測試集中的樣本進行幾乎100%分類的模型了。我們的任務歸根結底就是根據設定超參數(層數,層中神經元數,激活函數或時期數)選擇神經網絡的結構。現在讓我們看一看訓練背後的過程。哦......我在學習過程中創建了一個很酷的可視化界面。希望你看了以後不會難以入睡。

 圖3.對訓練合適的類進行可視化展示

讓我們先回答一個問題:什麼是神經網絡?它是一種生物學啟發的構建電腦程式的方法,能夠學習和獨立地找到數據中的連接。正如圖二所展示的。網絡是層疊排列的軟體「神經元」的集合,他們以允許通信的方式連在一起。


單個神經元

每個神經元接收一組x值(編號從1到n)作為輸入並計算預測的y^值。向量X是訓練集中m個樣本之一的特徵值的量化。更重要的是每個單元都有自己的一組參數,通常要用到在學習過程中不斷變化的w(權重列向量)和b(偏差值),在每次迭代中神經元計算向量x的值的加權平均值,基於其當前的權重向量w並加上偏差,最後,該計算的結果通過非線性激活函數g()。我將在以後的部分中提及一些關於最流行的激活函數。


單個層

現在讓我們往小的地方看,考慮如何對整個神經網絡層進行計算。我們將運用我們所知的在單個神經元內部的原理,矢量化整個層,將這些計算結合到矩陣方程中。方程式將會被編寫在選擇層中,為了統一符號[l]。順便說一下,下標i標記該層中神經元的索引。


 圖5,單個層

一個更重要的評價:當我們為一個單個單元編寫方程時,我們使用x和y^,它們分別是特徵值的列向量和預測值,當我們切換到圖層的一般表示法時,我們使用向量a - 該向量可以激活相應的層。因此,x向量就可以激活層0——輸入層,每個神經元都執行者如下所類似的計算:


為清楚起見,讓我們寫下如第二層的方程式:


正如你所看到的,對於每個層,我們必須執行許多非常類似的操作,因此其實for循環在此使用效率並不高,所以我們將其矢量化以加快運算,首先,我們將向量水平堆疊成一個N*1的向量。

我們將每個權重w進行轉置以形成舉證W,類似地,我們將層中的每個神經元的偏差堆疊在一起,從而創建垂直向量b,現在沒有什麼可以阻止我們構建一個矩陣方程,它可以使我們一次對層的所有神經元進行計算。讓我們寫下我們使用的矩陣和向量的維數。


多個矢量化例子

這個我們設置的方程式目前為止只包含一個例子。在神經網絡的學習過程中,你通常使用大量數據,最多可達數百萬條。因此,下一步將是矢量化多個例子。假設我們的數據集中有m個條目,每個條目都有nx個特徵,首先,我們將每層的垂直向量x,a和z組合在一起,分別創建X,A和Z矩陣。然後我們重寫先前布局的方程式,同時考慮新創建的矩陣。


激活函數是神經網絡的關鍵元素之一,如果缺失了他們,那麼我們的神經網絡就只剩下線性函數的組成了。所以神經網絡將直接成為一個線性函數。我們的模型也將缺失多樣的擴展性,導致其甚至連邏輯回歸都不如。

非線性的元素使得複雜的函數在學習過程中具有更好的靈活性和可塑性。我們選擇激活函數的主要原因是,它能對學習速度有著重大影響,圖6顯示了一些常用的激活函數。目前,最受歡迎的隱藏層應該是ReLU函數,但是我們有時仍然會使用sigmoid,尤其是在輸出層。當我們處理二進位分類時,我們希望模型返回的值在0到1的範圍內。


圖6.最流行的激活函數及其衍生物的圖

促進深度學習的發展進程的基石可以說就是損失的值。一般來說,損失函數就是表示的我們理想值與現實值之間的差距。在我們的例子中,我們使用二進位交叉熵,但根據問題,我們還可以用不同的函數。我們使用的函數由以下公式表示,在圖7中可以看到學習過程中其價值的變化。它顯示了每次迭代時損失函數的值是如何減小同時使精確值增加。



圖7.學習過程中精確值和損失值的變化

學習過程其實就是最小化損失值,通過改變W和參數的值。為了達到這個目標,我們從使用積分和梯度下降法去找到一個可以使loss值最小的函數。在每次迭代中我們將計算神經網絡的每一部分的損失函數的偏導數的值。對於那些不太擅長這種計算的人,我就簡單的說,導數具有很好的描述函數斜率的能力。由於我們知道如何改變變量使其在圖表中向下移動。

為了形成關於梯度下降如何工作的直觀理解(再次引起你的注意)我準備了一個小的可視化示意圖。你可以看到我們從隨機點走向最低點的每一步。在我們的神經網絡中它以同樣的方式工作——每次迭代的梯度都向我們展示了我們應該移動的方向。最主要的不同點是在我們的示範神經網絡,我們有更多的參數需要考慮。但是...我們又如何計算這些全導數呢?


圖8.實際中的梯度下降

正如我們所需要的,反向傳播是一種可以讓我們計算非常複雜的梯度的算法,我們可以根據以下公式調整神經網絡的參數。

在上面的等式中,α表示學習率 —— 一個超參數,可以使你控制調整表現的參數。選擇學習率至關重要 —— 如果我們通常將其設置得太低。我們的神經網絡將非常緩慢地學習;如果我們設置得太高,我們無法達到最低限度。關於W和b的損失函數的偏導數dW和db,我們使用鏈式方法進行計算。dW和db矩陣的大小與W的大小相同。圖9顯示了神經網絡中的操作順序。我們清楚地看到前向和後向傳播如何一起工作以優化損失函數。


 圖9.前向和後向傳播


希望我已經解釋了在神經網絡中發生的數學。在使用神經網絡時,至少基本了解這個過程是非常有用的。我認為我提到的這些事情是最重要的,但它們僅僅是冰山一角。我強烈建議你嘗試自己編寫這樣一個小的神經網絡,不使用高級框架,只使用Numpy。

如果你成功讀到這裡,恭喜你。這肯定不是一篇很簡單的文章。如果你喜歡本文,請在Twitter和Medium上關注我,並查看我正在進行的其他項目,如GitHub和Kaggle。本文是「神經網絡的奧秘」系列文章的第二篇,如果你還沒有機會閱讀其他文章。保持好奇!雷鋒網


想要繼續查看該篇文章相關連結和參考文獻?雷鋒網

長按連結點擊打開或點擊【深度網絡揭秘之深度網絡背後的數學】:

https://ai.yanxishe.com/page/TextTranslation/1161


AI研習社每日更新精彩內容,觀看更多精彩內容:雷鋒網(公眾號:雷鋒網)

等你來譯:

五個很厲害的 CNN 架構 

狀態估計:卡爾曼濾波器 

如何在神經NLP處理中引用語義結構 

讓神經網絡說「我不知道」——用Pyro/PyTorch實現貝葉斯神經網絡


相關焦點

  • 深度學習背後的基礎-神經網絡揭秘
    最近, 深度學習三傑獲得了計算機界最重要的圖靈獎, 它們的貢獻都集中在對深度學習的根據神經網絡的理論突破。 今天我們看到的所有和人工智慧有關的偉大成就, 從阿法狗到自動駕駛, 從海量人臉識別到對話機器人, 都可以歸功於人工神經網絡的迅速崛起。那麼對於不了解神經網絡的同學如何入門? 神經網絡的技術為什麼偉大, 又是什麼讓它們這麼多年才姍姍走來?
  • 通俗理解神經網絡與深度學習
    不過在以單人競技為主的即時戰略遊戲《星際爭霸》中,人類頂尖玩家也敗於 DeepMind 團隊開發的阿爾法星(AlphaStar) 之手。不過歸根結底,人工神經網絡終究是個數學模型,層數越多,模型越複雜。由於缺少有效的算法支持,在 60-80 年代期間,神經網絡的研究進入一個低谷期。
  • 深度學習背後的數學思想
    深度神經網絡(DNN)本質上是通過具有多個連接的感知器而形成的,其中感知器是單個神經元。可以將人工神經網絡(ANN)視為一個系統,其中包含沿加權路徑饋入的一組輸入。然後處理這些輸入,並產生輸出以執行某些任務。隨著時間的流逝,ANN「學習」了,並且開發了不同的路徑。
  • 神經網絡與深度學習
    隱藏層使得感知機能夠發展為擬合萬物的神經網絡模型,而反向傳播算法則是整個神經網絡訓練的核心要義。要學習深度學習,恐怕不得不先溫習一下機器學習,搞清楚二者之間的關係。簡單來說,機器學習就是從歷史數據中探索和訓練出數據的普遍規律,將其歸納為相應的數學模型,並對未知的數據進行預測的過程。
  • 深度學習網絡之CNN
    深度學習的提出:2006年,Hinton提出了深度學習,兩個主要的觀點是:深度學習取得成功的原因:深度學習的思想:深度神經網絡的基本思想是通過構建多層網絡,對目標進行多層表示,以期通過多層的高層次特徵來表示數據的抽象語義信息,獲得更好的特徵魯棒性。
  • 火爆網絡的《神經網絡與深度學習》,有人把它翻譯成了中文版!
    ,就是《Neural Network and Deep Learning》,中文譯為《神經網絡與深度學習》。這是一本解釋人工神經網絡和深度學習背後核心思想的免費在線書籍。書籍在線地址:http://neuralnetworksanddeeplearning.com/about.html該書的作者是來自 Y Combinator Research 的研究員 Michael Nielsen,他也是⼀位量⼦物理學家、科學作家、計算機編程研究⼈員。
  • 深度學習和深度神經網絡
    深度學習深度學習是眾多機器學習方法中的一種。主要是通過神經網絡來實現。「深度」是指神經網絡的層數。
  • 什麼是深度學習? - 45分鐘理解深度神經網絡和深度學習
    與之相反,如果激活函數導數的絕對值大於1,多次連乘後權重值會趨向於非常大的數,這稱為「梯度爆炸」。長期以來,這兩個問題一直困擾神經網絡層次無法變得很深。最近幾年,ReLU函數被經常使用作為深度神經網絡的激活函數。
  • 人工智慧黑盒揭秘:深度神經網絡可視化技術
    雲腦科技自主研發的 Deepro 深度學習平臺利用可視化技術,集成了最前沿的各類深度神經網絡可視化組件,分析與顯化內部隱藏結構與模型輸出的關係,解決「黑盒」難題。深度神經網絡又是最為複雜的機器學習模型,其可解釋性與可視化性更加具有挑戰性。網絡模型為什麼起作用,它是否足夠好,圖像識別是如何抽象出「貓」這個概念的?本段分析了幾種典型深度神經網絡可視化技術,詳盡展示了前沿的可視化原理以及解釋性效果。
  • 深度神經網絡中的數學,對你來說會不會太難?
    本文由機器之心編輯,「機器之心」專注生產人工智慧專業性內容。編者按:這是一篇講解深度學習數學的系列文章,但並非是基礎數學,還涉及到了拓撲與測度論等內容。本文為該系列文章的第一部分,機器之心會持續把後續內容全部放出。更規範的公式,請查看原文,連結在文末。本文為第一部分。
  • 自底向上看深度學習網絡的工作原理
    來源:Medium編譯:Kathy深度學習是一種處理和解讀數據的方式,我們需要更深入的理解機器的運作才能更更好的控制和應用它為我們服務,接下來將要詳細討論深度學習得以實現如此優異表現的原因。為了簡化討論的過程,本文將利用Tensorlow及其API為例來進行討論,從認知論的程度來理解深度學習背後的魅力。
  • 【資源】2020最新版《神經網絡與深度學習》中文版pdf下載
    僅做學術分享,如有侵權,聯繫刪除1 前言當前,機器學習十分火熱,人工智慧、AI、深度學習等早已是大家耳熟能詳的詞語。今天,StrongerTang 繼續給大家分享一下《神經網絡與深度學習》,分享給有需要的小夥伴,也希望有更多的朋友能在 StrongerTang 相遇。《神經網絡和深度學習》是一本免費的在線書,對讀者數學知識需求適度,兼顧理論和動手實踐。
  • 深度學習筆記4:深度神經網絡的正則化
    今天筆者要寫的是關於機器學習和深度學習中的一項關鍵技術:正則化。相信在機器學習領域摸爬滾打多年的你一定知道正則化是防止模型過擬合的核心技術之一,關於欠擬合和過擬合的問題,本篇筆者就不再展開來說,筆者年初就在一篇文章中詳細通俗地闡述了過擬合的相關問題。想要看的朋友猛戳談談過擬合    總的來說,監督機器學習的核心原理莫過於如下公式:
  • (圖解)類神經網絡的復興:深度學習簡史
    機器學習方法有許多種不同的數學模型,包括隨機森林、類神經網絡、感知器…族繁不及備載。此間爆發了兩種不同的機器學習模型浪潮,第一波興盛的模型為「類神經網絡」、又稱人工神經網絡。機器學習一直在嘗試解決現實中複雜的資料切分問題。
  • 人工智慧-Andrew Ng版|神經網絡和深度學習|深度學習概述
    包含一個深度神經網絡)以及如何在數據上面訓練他們。以此為例, x 是所有的這四個輸入, y是你嘗試預測的價格,把這些單個的神經元疊加在一起,我們就有了一個稍微大一點的神經網絡。這顯示了神經網絡的神奇之處,雖然我已經描述了一個神經網絡,它可以需要你得到房屋面積、步行化程度和學校的質量,或者其它影響價格的因素。
  • 資源| 來自獨秀同學的深度網絡數學筆記,還不快收藏?
    為了更加深入地了解深度網絡背後的工作原理,本文作者花時間學習了隱藏在模型背後的數學原理,並對一些概念進行了梳理,包括神經網絡、單個神經元、激活函數、損失函數等基本概念。引言為了更加深入地了解神經網絡的工作原理,我決定在這個夏天花一些時間看一看隱藏在模型背後的數學原理。
  • 神經網絡和深度學習簡史(全)
    多層前饋神經網絡是普適模擬器( universal approximators)。」本質上,可以從數學證明多層結構使得神經網絡能夠在理論上執行任何函數表達,當然包括XOR(異或)問題。然而,這是數學,你可以在數學中暢想自己擁有無限內存和所需計算能力——反向傳播可以讓神經網絡被用於世界任何角落嗎?噢,當然。
  • 深度理論VGG-NET 網絡
    深度學習VGG-NET 網絡概述VGG名字來源於Visual Geometry Group, Department of Engineering
  • 從這開始了解深度學習——視覺的深度學習與網絡
    「深度學習」,接下來就來詳細聊聊深度學習(為什麼要深度學習特徵???),然後來說說深度網絡的搭建,最後讓我們自己用手 DIY 屬於自己的網絡,現在就開始 ing......介紹一說起 「深度學習」,大家有想過為什麼要去搭建複雜網絡,去學習更高級的特徵呢?其實很簡單,因為趨勢是朝著類腦那個大方向,現在類腦工作已經得到很多研究員的關注。
  • 深度 | 從AlexNet到殘差網絡,理解卷積神經網絡的不同架構
    這是深度學習背後的哲學,不存在內置硬編碼特徵提取器。它將提取和分類模塊整合進一個系統,它通過辨別不同圖像的表徵進行提取,根據監督數據進行分類。這樣的系統包括多層感知機,即多層神經元互相緊密相連的神經網絡。深度 vanilla 神經網絡就具備大量參數,因為缺乏充分的訓練樣本,它訓練出的系統會發生模型過擬合的情況。