电竞比分网-中国电竞赛事及体育赛事平台

分享

Chat 嚴選 | 機器學(xué)習(xí)必備的數(shù)學(xué)知識,一次學(xué)會

 西北望msm66g9f 2019-12-12

寫在最前

學(xué)習(xí)機器學(xué)習(xí),初學(xué)者的阻塞點往往不在機器學(xué)習(xí)本身,而是數(shù)學(xué)。面對教材中滿篇的數(shù)學(xué)公式時,如果你的數(shù)學(xué)基礎(chǔ)不牢固,就會逐步失去學(xué)習(xí)信心、喪失學(xué)習(xí)動力。最終,你投入了時間和精力,卻未達到預(yù)期的學(xué)習(xí)效果,也只能淪落個“半吊子”的水平。

有鑒于此,本 Chat 將會拆解機器學(xué)習(xí)主流模型,找到其背后依賴的數(shù)學(xué)知識點。再將這些知識點,進行整合歸并。因此,這篇 Chat 的背景是機器學(xué)習(xí),而講述的內(nèi)容是數(shù)學(xué)知識。我會取其精華、去其糟粕,讓你盡可能以較低成本,迅速掌握機器學(xué)習(xí)必備的數(shù)學(xué)知識。相信有了這些必備知識之后,你就能輕松讀懂其他機器學(xué)習(xí)教材并快速入門機器學(xué)習(xí)啦。

本文,我會用第一人稱和第二人稱來行文。這次我想突破一下自己,一反以往嚴肅行文的常態(tài),用一種詼諧幽默的方式來行文。本文適合的人群為,每次打開書都被公式搞垮的機器學(xué)習(xí)初學(xué)者。

看完 chat,別忘了再來關(guān)注一下我的公眾號“算法入門速成班”哦。

熱身

在熱身環(huán)節(jié),我想和你先共同建立信心。高斯和你一樣都是兩只眼睛,拉格朗日和你一樣都是一個鼻子。因此,我想請你找個沒人的旮旯,對著鏡子中的自己,高呼三聲,“別怕,數(shù)學(xué)就是紙老虎”。

完成熱身后,恭喜你,你已經(jīng)成功了一半!

系統(tǒng)性學(xué)習(xí)與散點式學(xué)習(xí)

系統(tǒng)性學(xué)習(xí)與散點式學(xué)習(xí),這是常用的兩種學(xué)習(xí)方式。

  • 系統(tǒng)性學(xué)習(xí),會讓你看到全貌,就是把一本書都給啃了。

  • 散點式學(xué)習(xí),會快速拿到收益,就是哪里不會學(xué)哪里。

對于機器學(xué)習(xí)而言,你一定并且必須去花時間進行系統(tǒng)性學(xué)習(xí)。當你的學(xué)習(xí)進程被數(shù)學(xué)的某個知識點阻塞時,你也許想過系統(tǒng)性學(xué)習(xí)數(shù)學(xué)。當然了,如果你愿意花大量時間系統(tǒng)地研究數(shù)學(xué),并且最終把數(shù)學(xué)也給學(xué)會了,這一定是個好事情。可惜,更有可能的結(jié)果是,你買了很多數(shù)學(xué)書,卻發(fā)現(xiàn)數(shù)學(xué)根本學(xué)不會。此時,你就要學(xué)會變通。也就是,盡快把阻塞你的數(shù)學(xué)知識點突破掉,然后重回機器學(xué)習(xí)的主流程上來。這樣,你就能在機器學(xué)習(xí)的道路上不斷披荊斬棘。因此,你需要系統(tǒng)性學(xué)習(xí)機器學(xué)習(xí),并散點式學(xué)習(xí)數(shù)學(xué)。

在這里插入圖片描述

機器學(xué)習(xí)中的數(shù)學(xué)

既然確定了要散點式學(xué)習(xí)數(shù)學(xué),那就要找出到底是哪些阻塞點需要你去攻克。為此,我制作了下面一幅圖。

在這里插入圖片描述

機器學(xué)習(xí)的建模過程包含 3 個步驟,分別是模型、策略、算法。在我的技術(shù)專欄和先前的 chat 文章《入門機器學(xué)習(xí),有這 3 把金鑰匙就夠了!,我喜歡稱之為機器學(xué)習(xí)建模的 3 把金鑰匙。你可以直觀地理解為,這是 3 個方程。既然是 3 個方程,那么就需要利用數(shù)學(xué)知識去解方程。根據(jù)具體模型的不同,這 3 個方程的形式和解法也會各不相同。因此,上面的圖就是不同模型 3 個方程的不同表現(xiàn)形式,也是本次 chat 的總綱

我們按照圖中的知識點進行聚合,可以得到如下機器學(xué)習(xí)的數(shù)學(xué)知識要點。

  • 平方誤差

  • 梯度下降法

  • 矩陣求解

  • 極大似然估計

  • 熵的原理

  • 啟發(fā)式算法

知識點就這 6 個。這些知識點,就像打怪通關(guān)一樣,你只需要各個擊破就能在機器學(xué)習(xí)的世界中興風(fēng)作浪。如果你不滿足于這些知識點,可以找些大學(xué)數(shù)學(xué)教材多學(xué)一些,那自然更好。

好了,下面我們就來闖關(guān),共計六關(guān)。

第一關(guān):平方誤差

第一關(guān)熱身為主,比較簡單。誤差,指的是某個變量的錯誤程度,也就是

平方誤差,則采用一種平方處理的方式來衡量誤差。例如,用某個儀器去測量人的身高,這樣就有儀器的測量值和人身高的真實值,得到如下表:

姓名云里金剛打虎英雄矮腳虎炊餅鋪老板
身高真實值1.901.951.651.59
身高測量值1.921.941.651.63

那么,平方誤差就是

由這個例子可以知道,平方誤差的計算方法是,每一個樣本誤差的平方,再求和。則平方誤差的公式為

其中, 為第 個樣本的真實值, 為第 個樣本的預(yù)測值。平方誤差可能還有一些變種,例如開個根號,除個樣本量變成平均值等等?;旧鲜菗Q湯不換藥。這個 chat 就以上面公式的表達形式為例。

好的,到了這里,第一關(guān)通過。恭喜你!

在這里插入圖片描述

第二關(guān):梯度下降法

第二關(guān)開始難度系數(shù)增加。先明確大方向,到底梯度下降法是干嘛的呢?其實,你可以簡單粗暴地認為,梯度下降法就是求解函數(shù)極值的一種算法。因此,為了快速學(xué)習(xí)梯度下降法,你可能需要從求解函數(shù)的極值出發(fā)。請看下面例題。

【例題】求解函數(shù) 的最小值。

【解析】

方法一:代數(shù)法,將函數(shù)轉(zhuǎn)換為“平方項+常數(shù)”的形式。即

平方項 。當且僅當 時, 取得最小值 。因此,當 時, 取得最小值

方法二:求導(dǎo)法,解函數(shù)導(dǎo)數(shù)為零的方程。即,方程

解之,得到 處的導(dǎo)數(shù)為零,即為極值點。則有

代數(shù)法和求導(dǎo)法,是高中數(shù)學(xué)中常用的極值求解方法。然而,它們又都有著各自的局限性。代數(shù)法要求,函數(shù)必須可以被調(diào)整為多項式平方加常數(shù)的形式。求導(dǎo)法要去解方程,需要我們有著極強的方程求解能力。

當目標函數(shù)比較復(fù)雜時,這兩種方法就會失效。例如,求解函數(shù)

的極小值。此時,由于有了指數(shù)項,代數(shù)法不再適用。求導(dǎo)法會得到方程

這個方程只靠簡單數(shù)學(xué)的計算,根本無法找到解。此時就需要用更通用的極值求解方法,這就是梯度下降法。

到這里你一定會問,說了半天,到底什么是梯度。關(guān)于梯度,你需要掌握 3 個要點:

  • 梯度是某個函數(shù) 的,用 來表示

  • 梯度是一階偏導(dǎo)組成的向量

  • 梯度表示函數(shù)變化率最快的方向

有了這 3 個要點,我們給出計算函數(shù) 梯度的定義式,即

看到這里,你千萬別害怕。我們再次建立信心,梯度這玩意就是紙老虎,老簡單了。看例題。

【例題】計算函數(shù) 的梯度。

【解析】根據(jù)定義式,這個函數(shù)包含兩個自變量,分別為 。首先計算函數(shù)關(guān)于每個自變量的偏導(dǎo),得到 。因此,函數(shù)的梯度為

到了這里你已經(jīng)學(xué)會了梯度是什么。那么問題來了:1)梯度到底有什么用?2)梯度下降法到底是什么?3)梯度下降法是如何找到函數(shù)極值的?

前面說過,連續(xù)函數(shù)的極值處導(dǎo)數(shù)為 0。也就是說,非極值處的導(dǎo)數(shù)不為 0。假設(shè)有個向上張口的拋物線,這個拋物線一定會存在一個最小值(紅色)。如下圖。

在這里插入圖片描述

在這個線上有個點(橙色),這個點附近的導(dǎo)數(shù)值為 2,大于 0。那么這個函數(shù)的最小值的橫坐標,一定是在這個橙色點的橫坐標的左邊。反之,如果這個點的導(dǎo)數(shù)值小于 0,假設(shè)是綠色的點,導(dǎo)數(shù)為 -0.9。那么函數(shù)的最小值的橫坐標,一定在這個綠色點的橫坐標的右邊。而且這個目標最小值的橫坐標與這個觀測點(綠色、橙色)的橫坐標的距離,與導(dǎo)數(shù)的絕對值正相關(guān)。即,導(dǎo)數(shù)的絕對值越大,極值點越遠;反之亦然。

因此,可以得到結(jié)論:

  • 根據(jù)導(dǎo)數(shù)的正負號,可以判斷最小值的坐標是在左邊還是右邊。

  • 通過導(dǎo)數(shù)絕對值的大小,可以判斷距離的遠近。

用個公式來代替這兩條結(jié)論的描述,就是

其中, 是個正數(shù)。當 時,會得到一個更小的 ,即 向左移動。當 時,會得到一個更大的 ,即 向右移動。且移動的距離 與導(dǎo)數(shù)的絕對值正相關(guān),滿足所有上面的結(jié)論。這樣,在多次反復(fù)使用上面的公式進行循環(huán)迭代后,就能逐步逼近函數(shù)的極值。

再仔細看看上面的公式, 不就是梯度嘛。因此,這就是梯度下降法的核心思路。我們給出梯度下降法的算法流程:

【梯度下降法算法】

輸入:某個函數(shù) ,學(xué)習(xí)率參數(shù) 。

輸出:函數(shù)的極小值。

流程:

(1)隨機初始化自變量坐標點

(2)計算函數(shù)在點 處的梯度

(3)用梯度值來更新 ,更新規(guī)則為

(4)如果梯度 不為 0,則跳轉(zhuǎn)到第(2)步

(5)函數(shù)的最小值為

期待你能看懂上面的算法。如果看不懂也沒關(guān)系,來個例題啥都明白了。

【例題】求函數(shù) 的最小值。

【解析】我們嚴格按照上面的算法來求解。

首先,隨機初始化一個點,假設(shè) 。設(shè)置學(xué)習(xí)率

其次,計算梯度 。此時由于函數(shù)只有一個自變量,所以梯度可以是個只有一個元素的向量。我們?yōu)榱撕唵尉椭苯訉懗扇缟系臉肆俊?/p>

接下來,進入循環(huán)。由于有些計算量,我就以 Python 來進行計算,并以表格形式給出計算結(jié)果。代碼如下:

import math

x = 0.0  #初始化值
a = 0.5  #設(shè)置學(xué)習(xí)率
for i in range(0,10):   #10次循環(huán)
  xold = x                 #本次循環(huán)前的 xt 值
  grad = 2*x+2+math.exp(x)   #計算梯度值
  xnew = x - a*grad    #本次循環(huán)更新后的 xt 值

  #四舍五入精確到小數(shù)點后兩位,打印出來
  print str(i+1) + '\t' + str(round(xold,2)) + '\t' + str(round(grad,2)) + '\t' + str(round(xnew,2))

  x = xnew  #保存下來,留著下次循環(huán)使用
 

這段代碼執(zhí)行后,打印的結(jié)果如下表:

循環(huán)次數(shù)循環(huán)前的 梯度值更新后的
10.03.0-1.5
2-1.5-0.78-1.11
3-1.110.11-1.16
4-1.16-0.02-1.16
5-1.160.0-1.16
6-1.16-0.0-1.16
7-1.160.0-1.16
8-1.16-0.0-1.16
9-1.160.0-1.16
10-1.16-0.0-1.16

可見,從第 4 次循環(huán)開始后, 的結(jié)果不再發(fā)生變化,即收斂。最終,原函數(shù)的最小值發(fā)生在 處,最小值為

【例題】求函數(shù) 的最小值。

【解析】根據(jù)代數(shù)法、求導(dǎo)法,你都能輕松計算出當 、 時,。雖然這個答案是對的,但顯然這不是我們想闡述的內(nèi)容。接下來,我們用梯度下降法來求解。

我們隨機初始化 ,設(shè)置學(xué)習(xí)率 。求解函數(shù)的偏導(dǎo) ,。

這樣,得到函數(shù)的梯度為 。接著進入循環(huán)迭代計算,代碼如下。

import math

x = 1.0  #初始化值
y = 1.0  #初始化值
a = 0.3  #設(shè)置學(xué)習(xí)率
for i in range(0,10):  #10次循環(huán)
   xold = x   #本次循環(huán)前的 x 值
   yold = y   #本次循環(huán)前的 y 值
   xgrad = 2*x-4   #本次循環(huán)的梯度1
   ygrad = 2*y+6  #本次循環(huán)的梯度2
   xnew = x - a*xgrad   #本次循環(huán)后的 x 值
   ynew = y - a*ygrad   #本次循環(huán)后的 y 值

   #四舍五入,精確到小數(shù)點后兩位,打印出來
   print str(i+1) + '\t' + str(round(xold,2)) + '\t' + str(round(yold,2)) + '\t' + str(round(xgrad,2)) + '\t' + str(round(ygrad,2)) + '\t' + str(round(xnew,2)) + '\t' + str(round(ynew,2))

   x = xnew   #保存下來,留著下次循環(huán)使用
   y = ynew   #保存下來,留著下次循環(huán)使用
 

這段代碼執(zhí)行后,打印的結(jié)果如下表:

循環(huán)次數(shù)循環(huán)前的 梯度向量更新后的
1(1.0,1.0)(-2.0,8.0)(1.6,-1.4)
2(1.6,-1.4)(-0.8,3.2)(1.84,-2.36)
3(1.84,-2.36)(-0.32,1.28)(1.94,-2.74)
4(1.94,-2.74)(-0.13,0.51)(1.97,-2.9)
5(1.97,-2.9)(-0.05,0.2)(1.99,-2.96)
6(1.99,-2.96)(-0.02,0.08)(2.0,-2.98)
7(2.0,-2.98)(-0.01,0.03)(2.0,-2.99)
8(2.0,-2.99)(-0.0,0.01)(2.0,-3.0)
9(2.0,-3.0)(-0.0,0.01)(2.0,-3.0)
10(2.0,-3.0)(-0.0,0.0)(2.0,-3.0)

可見,最終結(jié)果收斂至 ,則有

好的,到了這里,第二關(guān)通過。恭喜你!

在這里插入圖片描述
由于篇幅有限不能展示全部內(nèi)容,
你也可以掃描下方二維碼繼續(xù)閱讀

面對機器學(xué)習(xí),初學(xué)者的阻塞點往往不在于機器學(xué)習(xí)本身,而是數(shù)學(xué)。機器學(xué)習(xí)是計算機技術(shù),但它的底層是數(shù)學(xué)。通常,在機器學(xué)習(xí)相關(guān)的教材中,通篇都是復(fù)雜的數(shù)學(xué)公式。初學(xué)者如果數(shù)學(xué)基礎(chǔ)不牢固,面對滿篇的數(shù)學(xué)公式時,就會逐步失去學(xué)習(xí)信心、減少學(xué)習(xí)動力,而達不到預(yù)期的學(xué)習(xí)效果,最終只能淪落個“半吊子”的水平。

有鑒于此,本 Chat 將會拆解機器學(xué)習(xí)主流模型,找到主流模型背后依賴的數(shù)學(xué)知識點。再講這些數(shù)學(xué)相關(guān)的知識點,進行統(tǒng)一整合歸并。因此,這篇 Chat 的背景是機器學(xué)習(xí),而講述的內(nèi)容是數(shù)學(xué)知識。我會用盡可能簡單的方式,取其精華、去其糟粕,讓你盡可能以極低成本,迅速掌握機器學(xué)習(xí)必備的數(shù)學(xué)知識。相信有了這些必備知識之后,你就能輕松讀懂其他機器學(xué)習(xí)教材并快速入門機器學(xué)習(xí)啦。

本 Chat 內(nèi)容:

  • 機器學(xué)習(xí)主流模型依賴的數(shù)學(xué)知識要點拆解

  • 梯度,利用梯度下降法求解函數(shù)極值

  • 向量與矩陣,求各種積、求逆

  • 求導(dǎo)大法,函數(shù)求導(dǎo)、向量求導(dǎo)、矩陣求導(dǎo)

  • 概率計算,對于事物不確定性概率的計算、極大似然的原理

  • 信息量的度量,熵、條件熵、信息增益、信息增益率

  • 統(tǒng)計量,均值、方差、最小二乘

  • 統(tǒng)計學(xué)的圣經(jīng),中心極限定理、假設(shè)檢驗

適合人群:

  • 每次打開書都被公式搞垮的機器學(xué)習(xí)初學(xué)者

最后一句,寫好每篇 Chat 是對我的要求,更是對你的尊重。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多