本文是機器學習系列的第一篇文章, 在寫這篇文章之前, 我思考了很久,該如何開始這一系列的內容..
我很久以前看過一篇ted上講解的視頻給了我啟發.
本篇文章將用我認為最好理解的方式介紹機器學習的基本原理, 力求讓沒有任何基礎的小伙伴也能夠理解 在機器學習中, 我們是如何訓練計算機"學習"的.
下面我們看看一個計算機視覺處理模型的最基本功能:


將上面的圖片識別為"bird", 對於人腦來說非常簡單. 但是對於傳統的計算機程序來說, 這是非常非常困難的任務.
那么, 這幅圖片到底是經過什么樣的計算得到了"bird"這個單詞的呢?
對於人來說, 識別過程大概如下如所示:

圖片被視覺神經元感知, 經過一層又一層的神經元(亂七八糟的神經元),發生一次又一次的變化; 你可以想象一層又一層的神經元就是一個又一個的數學函數, 從上一層神經元數據加工后, 輸出到下一層神經元.....
最終一組神經元在我們電腦里面打開了一個開關, "叮!!!" 的一下, 一盞燈就亮了, 突然冒出了4個字母"bird".
然后, 牛逼的科學家們, 把 圖片的像素點, 人類的神經系統, 還有鳥, 分別抽象成了:$x,w,y$. 像下面的圖片展示的一樣:
在圖片中,有上百萬上千萬的大量的x, w, 和少量的輸出: y, 畢竟得出的結果:'bird'只是4個字母.
之后, 科學家們又假設了一個公式: $X '*' W = Y$, 在
"乘以"
上加上了引號
,
表示這個
"乘以"實際上是一系列復雜的數學運算.

這樣一個等式:$Y = X '*' W$, 只要得到其中,2個值,就能解出另外一個值, 非常簡單.
我們有x, 並且我們知道y, 我們很容易就能夠計算出w, 然后把w告訴計算機, 用在其它的輸入:'X'上, 通過X '*' W = Y這個等式, 把Y計算出來.
但是這里的乘號'*', 是一個非常復雜的數學過程, 他可能並不存在逆運算(乘的逆運算是除), 我們不能用直接在兩邊同時乘以 '1/X'的方式來計算W.
那到底應該怎么計算這個W呢? 為了說明這個過程, 我們用一個更簡單的栗子: 現在
假設 輸入值 x = 3, 輸出值:y = 6
$3 * w = 6$
上面說了, 我們
不能直接通過等式兩邊同時除以3來做這件事.
使用一種
不使用除法的方式來計算,
把y移到等式左邊, 隨機假設一個w 的值, 然后把得到的輸出值y' - 真實值y 的結果, 作為誤差lossing_value, 就像下面的等式:
$3 * w - 6 = y'$
$lossing\_value = y' - y$
當這個lossing_value的值滿足一定條件, 或者說, 變得非常非常小的時候, 我們說這是了一個比較有用的, 滿足條件的w.
那么, 具體過程是如何做的呢?, 我們繼續使用上面的栗子:
上面的栗子中, y=0, x =3, 現在隨機假設一個值 w = 5, 我們看, 這個w和lossing_value其實是存在一定關系的.
$w = 5$
$3 * w - 6 = 9,\ \ \ y' - y = 9,\ \ \ lossing\ too\ large, try\ agin: w-0.5$
$w = 4.5$
$3 * w - 6 = 7.5,y' - y = 7.5,lossing\ too\ large, try\ agin: w-0.5$
$w = 4$
$3 * w - 6 = 6,\ \ \ y' - y = 6,\ \ \ lossing\ too\ large, try\ agin: w-0.5$
$......$
$w = 2$
$3 * w - 6 = 0,\ \ \ y' - y = 0,\ \ \ lossing\ small\ than\ 0.001,\ ok ,\ stop!$
以上這個過程, 就是我們訓練計算機學習整個過程.
在真實的情況下, 我們需要
大量的x, 以及大量的y, 我們不斷的告訴計算機x, 和, y, 讓計算機不停的迭代, 最終計算機可以得到一個滿足條件的w, 使得lossing_value非常小.
下面說一些專業術語:
1) 每一次迭代, 調整w的值, 使得lossing_value更小. 這個過程叫: 梯度下降, 之前我們隨便選擇了一個w, 然后再調整, 這就是
"隨機梯度下降".
2) 在真實的訓練中, 並不會直接使用$y' - y = lossing\_vlaue$, 畢竟 這樣計算出來的$lossing\_value$可能是負值, 但是誤差卻更大了.
衡量誤差大小有一系列專門的函數, 比如 使用方差:
$lossing\_value = \frac{\sum_{i=1}^m\sqrt{(y - y_i)^2}}{m}$
還有交叉熵..等等.
嗯...講這里, 訓練機器進行學習的最基本原理講得就差不多了. 整個過程非常容易理解, 真實應用場景中, 也差不多是上面這個流程, 但情況會更加復雜一點.
大家不用擔心, 這些內容后面有時間我也會慢慢寫.
如果有條件可以看看個視頻, 這篇文章很多內容就是從這個視頻上來的.
抽空來完成這些文章, 對自己的學習來說是一種鞏固, 但的確也會耗費不少精力. 如果大家轉載文章, 請尊重作者, 注明文章來源.
如果能夠您覺得文章對您有幫助, 您除了可以留言點贊之外, 還可以掃描下面的二維碼, 對我進行
打賞!
