1. 程式人生 > >機器學習入門案例簡單理解

機器學習入門案例簡單理解

這兩天仔細看了看機器學習的入門案例,一般程式的入門案例都是“hello world”;但是機器學習的比較特殊,是一個MNIST案例。

案例的具體操作不做為重點去寫,主要是想記錄一下自己對案例中的處理方法,處理思路的理解,對於我這個數學能力有限的小白入門來說,確實花費的功夫不小啊,趕緊記錄下來,希望下次再回想時不用那麼費力了。

效果

MNIST主要就是通過機器學習,教會電腦認識手寫的1-9的數字,原理對於我來說比較複雜,看我慢慢道來。

如下圖的數字:
這裡寫圖片描述
通過機器學習後,電腦能認出來,並且準確率要90%以上

模型

其實上面的每一個數字都是如下圖的
這裡寫圖片描述
一個28x28的一個畫素點組成的,總共是28x28=784個畫素點;

那麼每一張圖我們可以用像[0,0,0,…,0](總共784位)的一個向量,也就是一個矩陣來表示,每一個畫素點用0-1的值來描述它的色值;簡單的說如上圖的一個數字影象,本來是28x28的一個畫素集,我們把它每一行的點都往第一行後面追加,變成一個784x1的畫素集(當然會有資訊有所改變,這裡先不計)。

總的來說,我們把一個數字圖片用一個784維的向量x來表示了,我們再用一個變數y表示這個數字真正的值,y呢,是一個[0,0,0,0,0,0,0,0,0,0]這樣的10維的向量,第幾維的數字是1,這就代表是幾,如[0,0,1,0,0,0,0,0,0,0]表示2。現在我們把x叫作自變數,y叫作因變數,x,y的關係簡單的用一個函式來表示:

y 
= ax + b;

因為y是一個1x10的矩陣,x是一個1x784的矩陣,那麼可以通過矩陣的乘法,加法,得知,a是一個784x10的矩陣,b是一個1x10的矩陣。(忘記矩陣的自行復習一下)

到這裡,我們就瞭解了,x代表一張手寫數字的圖,y代表手寫圖表示的數字,x,y用一個簡單的函式
y = ax + b;
來表示了,我們只要通過大量的資料訓練出a,b的值,就可以通過x知道y的值了,

至少,我是簡單粗暴的就這樣理解了。

評估值

接著上面的說,如果訓練好了a,b,我們就能通過圖片x,預測我們的圖片所代表的數值y了,我們假設y'是這個圖片實際代表的值,y是我們通過圖片x預測的其所代表的值,我們在來一個函式

z = y' * log(y)

其中z代表了 交叉熵,粗暴的理解,z就是代表了我們我們的預測值y,和實際值y'之間的差距,可想而知,我們希望z越小越好。

接下來TensorFlow就該出場了,

 tf.train.GradientDescentOptimizer(0.01).minimize(z)

TensorFlow提供了一套牛逼反向傳播演算法,具體我也不清楚,反正很快,很準;可以每次讓z小一點,然後記錄a,b的值。通過多個數據的訓練,讓y=ax+b越來越準。

至於到底準不準,TensorFlow也提供了方法去檢測。我不涉及啥理解的,我就不說了。

以上就是我對MNIST的一個原理的理解了。