機械學習1
在我們看來,辨識手寫的數字是很簡單的,但是電腦不像我們,它們很難辨識那麼不規則的圖型。
那我們該怎麼讓電腦學會看手寫的數字呢?
機械學習就是解決這種問題的方法,它以一種模仿神經網的方式運作。
第一層是輸入層,最後一層是輸出層,中間都是中間層或叫隱藏層。
我們是如何辨識數字的?
以這個9舉例,我們可能會看到這是一個圈加上一條線。
那電腦該怎麼辨識這是一個圈 + 一條線呢?
可以將這個圈拆成多的弧線,然候電腦會依據辨識到的這些特徵去組合出數字。
假設我們的手寫圖片的像素是28*28,每一個的數值是0~1越接近1代表亮度越高反之越暗。
我們以每一個像素作為輸入層,所以我們的輸入層就有784個神經元
那我們的第二層就是一靠前面的每一個神經元的值去乘上一個數值叫權重weight,再減去一個叫偏置bias的值,然後把每個神經元乘與weight減去bias。把全部處理過的神經元數值加起來會是一個很大的數,所以之後會後再塞進一個激活函數中,在這裡用的是sigmoid,這個函數可以讓數值介於0~1無限大會無限趨近一反之亦然。
weight可以理解為這個神經元對下一層的影響程度。bias可以理解為門檻,到什麼程度這個神經元才會起作用。
每以個神經元都會有對應的weight和bias,所以第二層光是一個神經元就有784個weight和bias。
但是這樣我們的電腦只會看整張圖片而不是去尋找特徵那該怎麼辦?
我們可以畫出一個範圍,假設要找的事一條線的話就讓其他部分的weight為0只留下要找的部分,要確認確實是一條線的話就把周圍的weight設為負的。
這樣一個範圍就叫做receptive field,我們不知道特徵會出現在哪裡所以要讓這種格子覆蓋全局,每個格子間隔的距離就叫做stride。在最後,最邊邊的那個可能會超出圖片那就把凸出去的全部補零,就叫做padding。不過這就牽扯到了cnn。
這樣我們就可以們就可以讓第二層來辨識那些小特徵,這樣就可以設計第三層來辨識大特徵如圈或直線,第四層去組合,然後輸出層的得出結果。
這個模型很大,是由多的weight和bias組成的函數。
我們現在要做的就是去調整模型的weight和bias,讓輸出出來的結果是正確的。