002-深度學習數學基礎(神經網絡、梯度降低、損失函數)

002-深度學習數學基礎(神經網絡、梯度降低、損失函數)

這裏在進入人工智能的講解以前,你必須知道幾個名詞,其實也就是要簡單瞭解一下人工智能的數學基礎,否則就真的沒辦法往下講了。網絡

本節目錄以下:函數

  • 前言。
  • 監督學習與無監督學習。
  • 神經網絡。
  • 損失函數。
  • 梯度降低。

0. 前言

人工智能能夠歸結於一句話:針對特定的任務,找出合適的數學表達式,而後一直優化表達式,直到這個表達式能夠用來預測將來學習

接下來就來一句一句的分析這句話:優化

  • 針對特定的任務:

首先咱們須要知道的是,人工智能其實就是爲了讓計算機看起來像人同樣智能,爲何這麼說呢?舉一我的工智能的例子:人工智能

咱們人看到一個動物的圖片,就能夠馬上知道這個動物是貓,仍是狗。可是計算機卻不能夠,若是計算機能夠分出類別,那麼這就會是一個具備圖像分類功能的人工智能小例子。code

這裏的圖像分類就是咱們所說的特定任務,這就是咱們但願寫出一我的工智能的程序來作的事情。圖片

還有一些其餘的常見的任務:人臉識別,目標檢測,圖像分割,天然語言處理 等等。深度學習

  • 找出合適的數學表達式:

學太高等數學而且有計算機思惟的人都知道,世界中幾乎全部的事情均可以用數學函數來表達出來,咱們先無論這個數學表達式是離散仍是連續,也無論他的次數多高,反正他能達到表示特定任務的一種目的。數學

好比說,針對一個西瓜質量好壞的預測任務,能夠設出如下的表達式:入門

解釋以下:

一、x1,x2,x3 能夠看做判斷西瓜好壞的判斷依據,好比能夠是:瓜皮紋路,敲擊聲音,瓜皮顏色等等。

二、a,b,c,d​ 就是這個表達式的係數,一旦數學表達式定下來了,那麼接下來須要作的事情就是找出合適的係數,使得這個表達式能夠很好的判斷出西瓜質量的好壞。

因此,針對上文提到的特定任務,均可以用數學表達式表示出來,固然,咱們會盡量找簡單、高效的表達式。

  • 一直優化這個表達式:

上邊引出表達式以後,會發現當表達式肯定下來以後,就要尋找合適的係數了,尋找係數的過程就被稱之爲訓練網絡的過程。

咱們優化表達式的重要思想是:一直調整係數值,使得預測出的數據 與 真實數據之間的差距儘量的最小。

好比:假設預測的數據f1(x)​真實數據是​y,咱們經過一直改變係數的值,來找出可使得預測數據與真實數據之間距離最小的一組,最小的一組數據就是咱們須要的係數。

其中,距離計算公式能夠是以下的表達式:

經過這個表達式,獲得的 loss 值就是真實值與預測值之間的距離。

而後,接下來的優化就是針對這個loss 表達式來進行的,目的就是讓loss的值達到最小。

由於loss值達到最小的時候,就意味着咱們的預測值與真實值距離很相近,預測越準確。

這裏值得一提的是,這裏的loss表達式的優化過程,其實就是將loss公式對函數f(x)的係數求導。

因此當loss最小的時候,就意味着此時的係數最合適。

具體的細節往下看。

  • 用優化好的表達式預測將來:

通過上邊的優化,此時函數會獲得一個相對好一點的係數,而後就可使用這個函數來預測將來的事情了。

這就是達到了人工只能的目的了。

因此,下邊咱們就要仔細討論,數學表達式的構建,距離函數的構建,距離的優化。

1. 神經網絡

神經網絡的英文是:neural network (簡稱:NN)。

神經網絡其實就是變形的數學表達式,它經過拼裝基礎組件(神經元)來模擬出數學表達式

1.01. 什麼是神經網絡

一說神經網絡,你們首先想到的就是神經元,其實沒錯,神經網絡這個名詞就是從神經元這裏演變過來的。因此咱們作一下類比。

1.01.001. 神經元

如圖所示,這個圖就是咱們人體的神經元的放大圖。

一般咱們身體的 A 部位發出的命令,要指揮 B 部位響應,就要經過 AB 發出信號。這個信號的強弱影響着 B 反應的強弱。

因此,這就是神經網絡的構思所在:

構建出一個相似於神經元的結構,上一個節點的輸入(A處的控制) 以及權重(信號的強弱)共同決定下一個節點的輸出(B處的反應)

這句話,如今看不懂不要緊,有個印象就好,繼續往下看吧。

1.01.002. 神經網絡

如圖所示就是一個最簡單的神經網絡結構,這個結構的數學表達式是:

圖中的圓圈咱們就把他類比於神經元,圖中的各個結構解釋以下:

  • 其中 X1,X2 就是這個神經網絡的輸入,他至關於就是人體大腦發出的控制命令。

  • W1,W2 就是權重,他是用來控制不一樣輸入信號佔比大小的數據,好比:想讓控制X1做用明顯一點,那麼對應的W1就大一點。

  • Y 就是輸出,他就是輸入數據與權重做用以後的最終結果,在神經元中也就是最終對身體某個部位的控制信號。

1.02. 神經網絡的數學原理

神經網絡的數學原理很是簡單,簡單總結下來就是一句話:不一樣的輸入做用於各自的權重以後的和即爲咱們須要的結果。

其實就能夠大體理解爲咱們的函數 : f(x) = a*x1 + b*x2 同樣,所謂的權重就是咱們方程的係數。

細心的人觀察上邊的公式就會發現,一個神經元節點就能夠歸結於一個運算式子。因此咱們這裏就來針對上圖,分析分析含有一個神經元節點的公式。

從圖中能夠看得出來,最終的輸出結果 Y 是由 輸入(X) 以及 權重(W) 共同決定的。

他們最終的計算結果 Y 其實說白了就是一個計算公式:Y = X1*W1 + X2*W2​ ,這個公式的含義你們應該都明白,給不一樣的輸入 分配不一樣的權重 ,從而獲得想要的結果。

這就是神經網絡中一個神經元的數學原理,當把神經元的個數增多以後,原理以此類推,只不過是要增長權重W以及輸入X的個數而已。

下邊就能夠看做是一個,含有兩層的神經網絡結構。

  • 第一層節點: 111213 。第二層節點: 21

  • 輸入: X1X2 。 輸出 : Y

因而,根據公式:輸出 等於 輸入做用於 權重, 得出如下推導 :

  • 輸入: X1X2
  • 節點11的值: .
  • 節點12的值: .
  • 節點13的值: .
  • 節點21的值就是最終輸出 Y .

因此,最終的整合式子爲:

因而,咱們能夠發現,相似於這樣的堆疊方式,咱們能夠組合成不少的數學函數。

這就是神經網絡,他的目的在於將數學公式堆砌出來,至於爲何要這樣堆砌,是由於這樣堆砌計算機計算比較方便唄。

1.03 總結

到目前爲止你已經知道了神經網絡的由來,而且知道神經網絡與數學公式之間的關係。

此時你須要明確的知識點是:

  • 人工智能就是使用已有的數據,擬合出一個能夠用來預測將來的公式。
  • 這個公式的係數須要一直調整,從而找出一組最爲合適,正確率較高的係數。
  • 由於係數的尋找須要大量的計算,因此須要將這個公式用神經網絡表示出來的,由於在計算機中這樣表示的時候計算最爲方便。

2. 監督學習與無監督學習

這個知識點比較簡單,就一些單純的概念。

監督學習:就是咱們收集到的數據是有標籤的。

就是說,咱們收集到的數據是已經分好類的。

好比說:當前當前有一批樣本數據,

  • x1, x2, x6, x9, x13屬於類別y1類。
  • x3, x4, x5, x8, x11屬於類別y2類。
  • x7, x10, x12屬於類別y3類。

而後接下來咱們使用這些數據的時候,就可使用已有標籤的數據,去擬合出曲線,用以預測將來。

無監督學習:咱們收集到的數據是無標籤的。

就是說,收集到的數據並無固定的類別,咱們須要作的事情就是挖掘數據內部的聯繫,給他們聚類,找出類別。

如圖所示,挖掘出數據內部的聯繫,讓他自動歸類。

3. 損失函數

上邊解釋過了,損失函數的做用就是計算 真實值預測值 之間距離的 (距離其實能夠簡單理解爲兩個數據之間的差距)。

這裏介紹一些常見的幾種損失函數,以供你們入門使用。

3.01. 一些前提

這裏給定一些大前提,下邊的幾種損失函數通用的那種。

  • 真實值y ,他就是針對某一組輸入x的真實標籤。
  • 預測值f(x),他就是針對輸入x的預測標籤。
  • 樣本數m,他就是咱們每次輸入多少樣本進行計算,好比:某一次輸入5x,獲得5個預測結果,這裏的m=5.

3.02. 絕對值損失函數

其實就是簡單的計算 真實值 與 預測值 之間的絕對值距離而已。

公式

解釋

  • J(y,f(x)) 的意思就是,這個損失函數的參數是:真是標籤y 與 預測數據f(x)
  • J(w,b)​ 的意思是,這個損失函數的目的是優化參數 wb 。這裏的wb其實就是係數的矩陣形式。
  • 後邊具體的計算公式就是:輸入有m個樣本,計算出這m個樣本的距離絕對值和,而後再求均值。

3.03 均方差損失函數

就是將上邊式子的絕對值換成平方就行了。

公式:

解釋:

  • 這裏只是將絕對值換成了平方,除以m換成了除以2m

3.04 交叉熵損失函數

這個就比較麻煩了,交叉熵損失函數通常用於解決分類問題。

標籤

在一般的分類問題中,標籤y的取值通常只有 01

1 表示是當前類別, 0 表示不是當前類別。

公式:

解釋:

  • 上邊說了,yf(x) 都只能取 10 中的一種可能性。因此,上述公式的效果就是:
  • 若是 y與 f(x) 相同,則 J = 0.

你帶入 y=1 , f(x)=1 試試就知道了。

  • 若是 y與 f(x) 不一樣,則 J = 無窮大.

你帶入 y=1 , f(x)=0 試試就知道了。

3.05 總結

到這裏你已經學習了三種常見的損失函數。

此時你應該有一個明確的知識點就是:

  • 損失函數是用來計算真實值與預測值之間距離的。
  • 當損失函數的值越小就表明着真實值與預測值之間的距離就越小,也就意味着預測的越準。

4. 梯度降低

好了好了,上邊過完理論知識,這裏來一個真真正正的數學內容了,其實不難,看我慢慢分析。

  • 上邊咱們提到對數學函數優化的時候,只是介紹了理論的知識。

咱們知道了損失函數就是衡量預測值與真實值之間距離的公式。

而且知道,損失函數的值越小,真實值和預測值之間的距離越小,也即:預測的越準。

  • 可是並無帶着你們深刻探究如何優化。

也就是沒有告訴你們怎麼使得損失函數的值愈來愈小。

其實,這裏使用的數學知識就是 :求偏導

4.01. 數學例子

這裏以一個簡單的數學例子來引入梯度降低的內容。

  • 場景引入

在數學課中咱們常常作的一個題型就是:已知一個函數f(x)的表達式,如何求出這個式子的最小值點。

在數學題中咱們常常用的方法就是:將函數f(x)x求導,而後令導數式子爲0,求出此時的x的值,即爲最小值點的位置。

  • 具體例子

求函數 的最小值點,而且求出最小值。

對函數求導

令導函數爲0,求出此時的x

此時,x = 3 即爲函數 f(x) 的最小值點,帶入原方程 f(3)= 2*9-12*3+20 = 2.

這個解題過程,想必你們都很熟悉吧。

下邊就分析一下這個過程的數學原理了

4.02. 數學例子原理

梯度就是導數。

針對上邊提到的方程的最小值求解,其實就是求出其梯度(導數)爲0的位置,就是其最低點的位置。具體看下圖:

  • 方程 圖像以下:

從圖中能夠看出,方程在不一樣位置的導數方向是不一樣的,只有在最低點的位置,導數爲0,因此能夠用導數爲0的位置求出最低點。

上邊舉的例子是一個比較簡單的例子,方程中只有一個未知數,可是在真實狀況中,每每一個方程有不少未知數。

  • 好比:

此時須要作的事情就是針對每個變量求偏導,求出該方程針對每一個變量的梯度方向 (梯度方向就是數據變小的方向)。

因而,在方程的每一個點上,都有多個梯度方向,最終將這多個方向合併,造成這個點的最終梯度方向 (數據變小的方向)

如圖,方程有兩個變量x,y,因而在A點針對兩個變量求偏導就能夠獲得各自的梯度方向(兩個紅色箭頭的方向)。

而後,將兩個梯度進行合併,獲得最終的梯度方向ZZ方向就是方程在A點數據變小的方向了

4.03. 完整例子

上邊講完原理,這裏就舉出一個例子,帶着你們走一遍梯度降低找最小值的過程。

假設此時的方程已知,而且根據方程繪製出的圖像以下。

  • 剛開始咱們位於A點:

一、在A點處針對方程的各個變量求出偏導,因而即可以獲得方程針對各個方向的梯度方向。

二、將A點處各個方向的梯度方向進行合併,造成最終的梯度方向。

三、最終的梯度方向就是AB方向。

四、因而向着AB方向走出一段距離,走到了B點。

  • 到達B點: (思路同上)

一、求出B點處各個方向的梯度方向,而後合併全部梯度方向,獲得最終的B點處梯度方向 BC。

二、因而沿着BC方向,走出一段距離,到達C點。

  • ...重複上述過程:

到達某個點以後,求出各方向的偏導數,而後合併獲得最終的梯度方向。

而後沿着合併後的梯度方向走出一段距離到達下一個點。

而後在一直重複......

  • 到達K點:

K點就是最終的點,這就是優化獲得的最重點。

這就是整個找最小點的可視化過程,可是其中提到更新的數學細節並無提到,因此下邊提一下用到的數學更新公式吧

4.04. 更新公式

通常咱們梯度降低更新的數據只有函數的係數,而後函數的係數能夠分爲兩類:權重(W)+ 誤差(b)

因此,更新的時候也就針對這兩個參數就行了。

變量定義:

  • W : 方程的權重。 (能夠簡單理解爲方程變量前面的係數)
  • b :方程的誤差。 (能夠簡單理解爲方程中的常數)

好比: 中,2 , 1就是權重,3就是誤差。

公式:

  • 更新權重W.

原始點的權重是 ,原始點此時針對W的梯度方向是.

α 就是一段距離長度(它就是咱們上文一直提到的走一段距離)。

因此 表達的含義就是沿着 W的梯度走一段長度爲 α 的距離。

而後 新的W 就是 舊的W 減去那一段方向長度

  • 更新誤差:.

原理同 W .

這就是更新參數的整個梯度降低過程了。

5. 總結

到目前爲止,基礎的人工智能知識已經基本講完了,這個時候咱們再來仔細品味這句話。

針對特定的任務,找出合適的數學表達式,而後一直優化表達式,直到這個表達式能夠用來預測將來

或許你就會有不同的體會了。

ok,下一節就講一講Pytorch的基礎使用,而後就是最終的手寫體數字識別任務了。

相關文章
相關標籤/搜索