機器學習101:我們天天都在說的機器學習,究竟該怎么入門?


為了使大家對機器學習有一個基本的認識,在這篇文章中,我們將對以下四個主題做簡要的介紹:

 

  1. 什么是機器學習?

  2. 機器學習模型的訓練。

  3. 模型參數的優化。

  4. 神經網絡。

 

即使你不是機器學習方面的專家也不必擔心,因為你只需具備高中數學的基本知識就能讀懂本篇文章。

 

▌什么是機器學習?

 

牛津詞典對“機器學習”的定義如下:

 

計算機從經驗中學習的能力。

 

機器學習的目標是找到一種或多種算法,在現有示例數據的基礎上學習執行某項任務。

 

例如,假設現在我們想要編寫一個能夠玩Go這款游戲的程序。我們可以為這款程序添加某些游戲規則,或者也可以為其制定一些開放性策略和決策規則。

 

但此處存在一個問題。一方面,在編寫新規則的同時,程序會變得越來越復雜;另一方面,程序員所能提出的策略也是有限的,程序最終會受到限制。解決這個問題最好的辦法就是建立機器學習算法。人類能夠根據某些案例和實際的經驗去學習如何玩圍棋游戲,同樣機器學習也可以。這就是DeepMind公司用他們的阿爾法圍棋(AlphaGo)程序所做的事情,阿爾法圍棋(AlphaGo)程序是一種基於深度學習的機器算法。

 

▌機器學習模型的訓練

 

機器學習算法是根據帶標簽的數據實例來訓練模型的,通常情況下它會定義一個具有可調參數和優化算法的模型,如下圖所示。首先該模型以數據(x)的形式進行輸入,然后根據輸入的數據及模型參數生成輸出(y)。優化算法會設法找到最佳的參數組合,也就是說,在給定輸入數據x的情況下,使得模型輸出的y盡可能接近期望輸出。經過訓練的模型將生成特定的函數f,即在輸入x時輸出y。因此,函數方程式為y = f (x)。

 

訓練機器學習模型的途徑

 

圖片翻譯:

labeled data——標記數據,

model with tunable parameters——具有可調參數的模型

optimisation algorithm——優化算法

Trained model——訓練模型y = f (x))

 

▌優化算法

 

有許多方法可以找到參數的最佳組合,它們都能在輸入x的情況下使得模型f的輸出y盡可能的接近期望輸出。其中一種方法是嘗試所有可能的參數組合,並選擇能夠提供最佳結果的組合。如果模型中的參數組合數量有限,那么這種方法可能會起作用,但是對於具有數千甚至數百萬個參數的典型機器學習模型來說,這種方法可以說是完全不切實際。幸運的是,目前我們有一種更好的方法可以為某些類型的模型找到最佳解決方案,這種方法得益於17世紀的數學家牛頓。

 

牛頓和萊布尼茨- https://xkcd.com/626/

 

圖片翻譯:

牛頓,1666年,I have invented calculus——我發明了微積分

萊布尼茨,1674年,I have invented calculus——我發明了微積分

Really?sounds a little bit——真的嗎?聽起來有點……

Derivative——導數

 

牛頓發明了導數(也被稱為梯度)。函數的導數表示該函數伴隨其中某一參數的變化而變化的趨勢,它能夠表示函數的增減方向。如果我們有一個函數f,該函數有一個參數p,那么參數p的變化就可以表示為dp,函數f相對於dp的變化就可以表示為df,其方程式為df(p)/ dp。

Derivative (gradient) df(p)/dp of f(p) = psin(p^2) for different values of p.

 

那么,我們如何利用導數來提高模型的優化效率呢? 假設我們有一些數據(x,t),在輸入x時對應於輸出t,並且這些數據在圖表中的表示如下:

 

標簽數據(x,t)

 

如果我們現在想要創建一個模型,在該模型中對於所有給定的示例數據,在輸入x時都能輸出最接近期的t,那么我們就可以嘗試擬合出一條通過原點的直線(這也被稱為線性回歸)。這條直線可以用y=f(x)和f(x)=p·x的函數來表示,其中p是該模型的唯一參數(注意:p表示該直線的斜率)。這個模型可以用下圖來表示:

 

表示我們的模型y = f(x)

 

為了找到參數p,使函數y=x·p的值在所有給定的示例(x,t)中都接近期望輸出t,我們必須用數學方法定義一種能夠衡量“親密度”的度量方法,即“成本函數”。在此,我們有一個解決該問題的典型成本函數,即將所有的示例(x,t)的期望輸出t和模型輸出y之差的絕對值的平方值(也就是|t-y|²)求和。最終,成本函數的形式為Σ| t - (xp)| ²,其中Σ(sigma)表示求和。由於這個例子非常簡單,對於所有的參數p,我們很容易便能看到整個的成本函數。

 

例子中的成本函數

 

為了找到最好的參數p,我們需要最小化成本函數。請記住,我們的模型中存在一個參數p,並且在輸入x時生成輸出y。因此我們可以把這個模型寫成y = xp。由於成本函數的表達式是Σ| t-y | ²,我們可以用xp代替y,並將成本函數寫成Σ | t -(xp)| ²的形式。如果我們想要最小化這個函數,並使輸出y盡可能接近期望輸出t, 我們可以讓每個輸入樣本(x,t)嘗試所有可能的p值,並最終選擇其中一個p值,該p值能夠使所有輸入樣本的成本之和最低。

 

當模型中只有一個參數時,嘗試所有可能的p值是可能的,但是很快當模型中存在多個參數時嘗試所有p值的方法就會變得不可行。這也就是導數能夠發揮作用的時候。利用導數,我們可以簡單地為p選擇一個隨機起始參數值,然后開始在相反的方向上求導,最終找到成本函數的最低點。導數(梯度)下降的過程也被稱為梯度下降。

 

這個過程如下圖所示,我們從p=0.3開始,然后沿着梯度進行12個次漸變,同時改善模型與數據的擬合的情況(右圖所示的線)。當成本函數不再大幅度下降時,我們停止對模型進行擬合,此時最終的參數p的值為1.94,成本函數的值為0.451。我們注意到,相比最初的線性回歸函數,最終的線性回歸函數與數據(x,t)的匹配程度更高,而且高很多。

 

梯度下降優化

 

▌神經網絡

 

以上就是我們在訓練神經網絡模型時實實在在發生的事情。然而,更典型的神經網絡模型是由比y=xp模型復雜得多的函數組成的。我們有各種各樣的神經網絡模型,但通常它們都是可以區分的,並且可以用在上文介紹的梯度下降法進行優化。

 

例如,在計算機視覺中使用的典型神經網絡由多個層組成,每一層都對應成百上千個參數以及一個非線性函數。正是由於在神經網絡中存在許多個層,所以才有了“深度學習”這一術語。在模型中使用多個層的好處是,每個層都可以利用上一層提取的信息來建立更為復雜的數據表示。正因為如此,神經網絡才會非常強大,經過訓練后不僅可以從視頻中識別出貓,還能識別語音,甚至也能玩Atari視頻游戲。

 

如果你想嘗試一些小型的神經網絡,可以試試谷歌的Tensorflow;如果你想嘗試一些更具技術含量的神經網絡,想要學習更多的東西,你可以嘗試查閱我的教程“如何實現神經網絡”(how to implement networks),並且在它的幫助下嘗試建立自己的模型。

 

gradient descent

https://en.wikipedia.org/wiki/Gradient_descent

 

how to implement networks

http://peterroelants.github.io/posts/neural_network_implementation_part01/

 

原文地址

https://medium.com/onfido-tech/machine-learning-101-be2e0a86c96a

 

https://mp.weixin.qq.com/s?__biz=MzI0ODcxODk5OA==&mid=2247485749&idx=1&sn=a6424a7606513bb16545b5f089bca46e&chksm=e99d3accdeeab3daa880f23bdbecff319e35271ef242a0b40595cf09c49bb2e705cdf9ca1332#rd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM