這裏在進入人工智能的講解以前,你必須知道幾個名詞,其實也就是要簡單瞭解一下人工智能的數學基礎,否則就真的沒辦法往下講了。網絡
本節目錄以下:函數
人工智能能夠歸結於一句話:針對特定的任務,找出合適的數學表達式,而後一直優化表達式,直到這個表達式能夠用來預測將來。學習
接下來就來一句一句的分析這句話:優化
首先咱們須要知道的是,人工智能其實就是爲了讓計算機看起來像人同樣智能,爲何這麼說呢?舉一我的工智能的例子:人工智能
咱們人看到一個動物的圖片,就能夠馬上知道這個動物是貓,仍是狗。可是計算機卻不能夠,若是計算機能夠分出類別,那麼這就會是一個具備圖像分類功能的人工智能小例子。code
這裏的圖像分類
就是咱們所說的特定任務,這就是咱們但願寫出一我的工智能的程序來作的事情。圖片
還有一些其餘的常見的任務:人臉識別
,目標檢測
,圖像分割
,天然語言處理
等等。深度學習
學太高等數學而且有計算機思惟的人都知道,世界中幾乎全部的事情均可以用數學函數來表達出來,咱們先無論這個數學表達式是離散仍是連續,也無論他的次數多高,反正他能達到表示特定任務的一種目的。數學
好比說,針對一個西瓜質量好壞的預測任務,能夠設出如下的表達式:入門
解釋以下:
一、
x1,x2,x3
能夠看做判斷西瓜好壞的判斷依據,好比能夠是:瓜皮紋路,敲擊聲音,瓜皮顏色等等。二、
a,b,c,d
就是這個表達式的係數,一旦數學表達式定下來了,那麼接下來須要作的事情就是找出合適的係數,使得這個表達式能夠很好的判斷出西瓜質量的好壞。
因此,針對上文提到的特定任務,均可以用數學表達式表示出來,固然,咱們會盡量找簡單、高效的表達式。
上邊引出表達式以後,會發現當表達式肯定下來以後,就要尋找合適的係數了,尋找係數的過程就被稱之爲訓練網絡的過程。
咱們優化表達式的重要思想是:一直調整係數值,使得預測出的數據 與 真實數據之間的差距儘量的最小。
好比:假設預測的數據是 f1(x)
,真實數據是y
,咱們經過一直改變係數的值,來找出可使得預測數據與真實數據之間距離最小的一組,最小的一組數據就是咱們須要的係數。
其中,距離計算公式能夠是以下的表達式:
經過這個表達式,獲得的 loss
值就是真實值與預測值之間的距離。
而後,接下來的優化就是針對這個loss
表達式來進行的,目的就是讓loss
的值達到最小。
由於loss
值達到最小的時候,就意味着咱們的預測值與真實值距離很相近,預測越準確。
這裏值得一提的是,這裏的
loss
表達式的優化過程,其實就是將loss
公式對函數f(x)
的係數求導。因此當
loss
最小的時候,就意味着此時的係數最合適。具體的細節往下看。
通過上邊的優化,此時函數會獲得一個相對好一點的係數,而後就可使用這個函數來預測將來的事情了。
這就是達到了人工只能的目的了。
因此,下邊咱們就要仔細討論,數學表達式的構建,距離函數的構建,距離的優化。
神經網絡的英文是:neural network (簡稱:NN)。
神經網絡其實就是變形的數學表達式,它經過拼裝基礎組件(神經元)來模擬出數學表達式。
一說神經網絡,你們首先想到的就是神經元,其實沒錯,神經網絡這個名詞就是從神經元這裏演變過來的。因此咱們作一下類比。
如圖所示,這個圖就是咱們人體的神經元的放大圖。
一般咱們身體的 A
部位發出的命令,要指揮 B
部位響應,就要經過 A
向 B
發出信號。這個信號的強弱影響着 B
反應的強弱。
因此,這就是神經網絡的構思所在:
構建出一個相似於神經元的結構,上一個節點的輸入(A處的控制) 以及權重(信號的強弱)共同決定下一個節點的輸出(B處的反應)。
這句話,如今看不懂不要緊,有個印象就好,繼續往下看吧。
如圖所示就是一個最簡單的神經網絡結構,這個結構的數學表達式是:
圖中的圓圈咱們就把他類比於神經元,圖中的各個結構解釋以下:
其中 X1,X2
就是這個神經網絡的輸入,他至關於就是人體大腦發出的控制命令。
W1,W2
就是權重,他是用來控制不一樣輸入信號佔比大小的數據,好比:想讓控制X1
做用明顯一點,那麼對應的W1
就大一點。
Y
就是輸出,他就是輸入數據與權重做用以後的最終結果,在神經元中也就是最終對身體某個部位的控制信號。
神經網絡的數學原理很是簡單,簡單總結下來就是一句話:不一樣的輸入做用於各自的權重以後的和即爲咱們須要的結果。
其實就能夠大體理解爲咱們的函數 :
f(x) = a*x1 + b*x2
同樣,所謂的權重就是咱們方程的係數。
細心的人觀察上邊的公式就會發現,一個神經元節點就能夠歸結於一個運算式子。因此咱們這裏就來針對上圖,分析分析含有一個神經元節點的公式。
從圖中能夠看得出來,最終的輸出結果 Y
是由 輸入(X)
以及 權重(W)
共同決定的。
他們最終的計算結果 Y
其實說白了就是一個計算公式:Y = X1*W1 + X2*W2
,這個公式的含義你們應該都明白,給不一樣的輸入 分配不一樣的權重 ,從而獲得想要的結果。
這就是神經網絡中一個神經元的數學原理,當把神經元的個數增多以後,原理以此類推,只不過是要增長權重W
以及輸入X
的個數而已。
下邊就能夠看做是一個,含有兩層的神經網絡結構。
第一層節點: 11
,12
,13
。第二層節點: 21
。
輸入: X1
,X2
。 輸出 : Y
。
因而,根據公式:輸出 等於 輸入做用於 權重, 得出如下推導 :
X1
,X2
。11
的值: 12
的值: 13
的值: 21
的值就是最終輸出 Y
: 因此,最終的整合式子爲:
因而,咱們能夠發現,相似於這樣的堆疊方式,咱們能夠組合成不少的數學函數。
這就是神經網絡,他的目的在於將數學公式堆砌出來,至於爲何要這樣堆砌,是由於這樣堆砌計算機計算比較方便唄。
到目前爲止你已經知道了神經網絡的由來,而且知道神經網絡與數學公式之間的關係。
此時你須要明確的知識點是:
這個知識點比較簡單,就一些單純的概念。
監督學習:就是咱們收集到的數據是有標籤的。
就是說,咱們收集到的數據是已經分好類的。
好比說:當前當前有一批樣本數據,
x1, x2, x6, x9, x13
屬於類別y1
類。x3, x4, x5, x8, x11
屬於類別y2
類。x7, x10, x12
屬於類別y3
類。
而後接下來咱們使用這些數據的時候,就可使用已有標籤的數據,去擬合出曲線,用以預測將來。
無監督學習:咱們收集到的數據是無標籤的。
就是說,收集到的數據並無固定的類別,咱們須要作的事情就是挖掘數據內部的聯繫,給他們聚類,找出類別。
如圖所示,挖掘出數據內部的聯繫,讓他自動歸類。
上邊解釋過了,損失函數的做用就是計算 真實值 與 預測值 之間距離的 (距離其實能夠簡單理解爲兩個數據之間的差距)。
這裏介紹一些常見的幾種損失函數,以供你們入門使用。
這裏給定一些大前提,下邊的幾種損失函數通用的那種。
y
,他就是針對某一組輸入x
的真實標籤。f(x)
,他就是針對輸入x
的預測標籤。m
,他就是咱們每次輸入多少樣本進行計算,好比:某一次輸入5
組x
,獲得5
個預測結果,這裏的m=5
.其實就是簡單的計算 真實值 與 預測值 之間的絕對值距離而已。
公式:
解釋:
J(y,f(x))
的意思就是,這個損失函數的參數是:真是標籤y
與 預測數據f(x)
。J(w,b)
的意思是,這個損失函數的目的是優化參數 w
與 b
。這裏的w
,b
其實就是係數的矩陣形式。m
個樣本,計算出這m
個樣本的距離絕對值和,而後再求均值。就是將上邊式子的絕對值換成平方就行了。
公式:
解釋:
m
換成了除以2m
。這個就比較麻煩了,交叉熵損失函數通常用於解決分類問題。
標籤:
在一般的分類問題中,標籤y
的取值通常只有 0
或 1
。
1 表示是當前類別, 0 表示不是當前類別。
公式:
解釋:
y
與 f(x)
都只能取 1
與 0
中的一種可能性。因此,上述公式的效果就是:你帶入
y=1 , f(x)=1
試試就知道了。
你帶入
y=1 , f(x)=0
試試就知道了。
到這裏你已經學習了三種常見的損失函數。
此時你應該有一個明確的知識點就是:
好了好了,上邊過完理論知識,這裏來一個真真正正的數學內容了,其實不難,看我慢慢分析。
咱們知道了損失函數就是衡量預測值與真實值之間距離的公式。
而且知道,損失函數的值越小,真實值和預測值之間的距離越小,也即:預測的越準。
也就是沒有告訴你們怎麼使得損失函數的值愈來愈小。
其實,這裏使用的數學知識就是 :求偏導
這裏以一個簡單的數學例子來引入梯度降低的內容。
在數學課中咱們常常作的一個題型就是:已知一個函數
f(x)
的表達式,如何求出這個式子的最小值點。
在數學題中咱們常常用的方法就是:將函數f(x)
對x
求導,而後令導數式子爲0
,求出此時的x
的值,即爲最小值點的位置。
求函數
的最小值點,而且求出最小值。
對函數求導
令導函數爲0,求出此時的x
此時,x = 3
即爲函數 f(x)
的最小值點,帶入原方程 f(3)= 2*9-12*3+20 = 2
.
這個解題過程,想必你們都很熟悉吧。
下邊就分析一下這個過程的數學原理了
梯度就是導數。
針對上邊提到的方程的最小值求解,其實就是求出其梯度(導數)爲0
的位置,就是其最低點的位置。具體看下圖:
從圖中能夠看出,方程在不一樣位置的導數方向是不一樣的,只有在最低點的位置,導數爲
0
,因此能夠用導數爲0
的位置求出最低點。
上邊舉的例子是一個比較簡單的例子,方程中只有一個未知數,可是在真實狀況中,每每一個方程有不少未知數。
此時須要作的事情就是針對每個變量求偏導,求出該方程針對每一個變量的梯度方向 (梯度方向就是數據變小的方向)。
因而,在方程的每一個點上,都有多個梯度方向,最終將這多個方向合併,造成這個點的最終梯度方向 (數據變小的方向)
如圖,方程有兩個變量
x
,y
,因而在A點針對兩個變量求偏導就能夠獲得各自的梯度方向(兩個紅色箭頭的方向)。而後,將兩個梯度進行合併,獲得最終的梯度方向
Z
。Z方向就是方程在A點數據變小的方向了。
上邊講完原理,這裏就舉出一個例子,帶着你們走一遍梯度降低找最小值的過程。
假設此時的方程已知,而且根據方程繪製出的圖像以下。
一、在A點處針對方程的各個變量求出偏導,因而即可以獲得方程針對各個方向的梯度方向。
二、將A點處各個方向的梯度方向進行合併,造成最終的梯度方向。
三、最終的梯度方向就是AB方向。
四、因而向着AB方向走出一段距離,走到了B點。
一、求出B點處各個方向的梯度方向,而後合併全部梯度方向,獲得最終的B點處梯度方向 BC。
二、因而沿着BC方向,走出一段距離,到達C點。
到達某個點以後,求出各方向的偏導數,而後合併獲得最終的梯度方向。
而後沿着合併後的梯度方向走出一段距離到達下一個點。
而後在一直重複......
K點就是最終的點,這就是優化獲得的最重點。
這就是整個找最小點的可視化過程,可是其中提到更新的數學細節並無提到,因此下邊提一下用到的數學更新公式吧
通常咱們梯度降低更新的數據只有函數的係數,而後函數的係數能夠分爲兩類:權重(W)+ 誤差(b)
因此,更新的時候也就針對這兩個參數就行了。
變量定義:
W
: 方程的權重。 (能夠簡單理解爲方程變量前面的係數)b
:方程的誤差。 (能夠簡單理解爲方程中的常數)好比:
中,
2 , 1
就是權重,3
就是誤差。
公式:
W
:原始點的權重是
,原始點此時針對
W
的梯度方向是.
α
就是一段距離長度(它就是咱們上文一直提到的走一段距離)。因此
表達的含義就是沿着
W
的梯度走一段長度爲α
的距離。而後 新的
W
就是 舊的W
減去那一段方向長度。
原理同
W
.
這就是更新參數的整個梯度降低過程了。
到目前爲止,基礎的人工智能知識已經基本講完了,這個時候咱們再來仔細品味這句話。
針對特定的任務,找出合適的數學表達式,而後一直優化表達式,直到這個表達式能夠用來預測將來。
或許你就會有不同的體會了。
ok,下一節就講一講Pytorch的基礎使用,而後就是最終的手寫體數字識別任務了。