本文是機器學習系列的第一篇文章, 在寫這篇文章以前, 我思考了好久,該如何開始這一系列的內容..
我好久之前看過一篇ted上講解的視頻給了我啓發.
本篇文章將用我認爲最好理解的方式介紹機器學習的基本原理, 力求讓沒有任何基礎的小夥伴也可以理解 在機器學習中, 咱們是如何訓練計算機"學習"的.
下面咱們看看一個計算機視覺處理模型的最基本功能:
將上面的圖片識別爲"bird", 對於人腦來講很是簡單. 可是對於傳統的計算機程序來講, 這是很是很是困難的任務.機器學習
那麼, 這幅圖片究竟是通過什麼樣的計算獲得了"bird"這個單詞的呢?
對於人來講, 識別過程大概以下如所示:
圖片被視覺神經元感知, 通過一層又一層的神經元(亂七八糟的神經元),發生一次又一次的變化; 你能夠想象一層又一層的神經元就是一個又一個的數學函數, 從上一層神經元數據加工後, 輸出到下一層神經元.....函數
最終一組神經元在咱們電腦裏面打開了一個開關, "叮!!!" 的一下, 一盞燈就亮了, 忽然冒出了4個字母"bird".學習
而後, 牛逼的科學家們, 把 圖片的像素點, 人類的神經系統, 還有鳥, 分別抽象成了:$x,w,y$. 像下面的圖片展現的同樣:
在圖片中,有上百萬上千萬的大量的x, w, 和少許的輸出: y, 畢竟得出的結果:'bird'只是4個字母.spa
以後, 科學家們又假設了一個公式: $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}$
還有交叉熵..等等.
嗯...講這裏, 訓練機器進行學習的最基本原理講得就差很少了. 整個過程很是容易理解, 真實應用場景中, 也差很少是上面這個流程, 但狀況會更加複雜一點.
你們不用擔憂, 這些內容後面有時間我也會慢慢寫.
若是有條件能夠看看個視頻, 這篇文章不少內容就是從這個視頻上來的.
抽空來完成這些文章, 對本身的學習來講是一種鞏固, 但的確也會耗費很多精力. 若是你們轉載文章, 請尊重做者, 註明文章來源.
若是可以您以爲文章對您有幫助, 您除了能夠留言點贊以外, 還能夠掃描下面的二維碼, 對我進行
打賞!