本文的主要目的是通過MNIST這個入門級的小項目來了解機器學(xué)習(xí)的大致工作過程,心中有一個框架就可以了,至于一些細節(jié)和理論的東西將會在后面進一步討論。就好比你在進行繪畫創(chuàng)作的時候先勾勒輪廓后添加細節(jié)一樣。另外先跑出幾個小程序也會對機器學(xué)習(xí)產(chǎn)生更多的興趣,不至于在漫漫的數(shù)學(xué)海洋中漂啊漂啊,然后淹死了。
首先簡單介紹一下MNIST(Mixed National Institute of Standards and Technology database),其起源于NIST(美國國家標準與技術(shù)研究所)收集修改后的兩個手寫體數(shù)據(jù)集,包含60000條訓(xùn)練數(shù)據(jù)集和10000條測試數(shù)據(jù),由于其數(shù)據(jù)整理規(guī)范,標定準確被很多教材用于教學(xué),所以大家都習(xí)慣將手寫體識別直接稱呼為MNIST。MNIST的數(shù)據(jù)很好找,大家可以下載http://yann.lecun.com/exdb/mnist/這個鏈接里的數(shù)據(jù),這是卷積神經(jīng)網(wǎng)絡(luò)之父,機器學(xué)習(xí)界的大神嚴恩·樂純(我喜歡翻譯成閆立春,聽起來親切?。┨峁┑臄?shù)據(jù),里面的數(shù)字圖片已經(jīng)被處理成長度為784(數(shù)字圖片之前被保存為28*28的大小,如下圖)的向量了。
我是用的Tensorflow搭建的神經(jīng)網(wǎng)絡(luò),感覺不錯,初學(xué)的時候不到半天就吭哧吭哧的搭完了,這里插一篇Tensorflow的入門文章,如果大家沒有接觸過Tensorflow的話可以看看。
? ?


上圖是最基本的一種神經(jīng)元結(jié)構(gòu),叫做感知器,信息從左邊輸入經(jīng)過處理從右邊輸出,當然單個神經(jīng)元由于過于簡單,無法處理復(fù)雜的數(shù)據(jù),說以我們要搭建更加復(fù)雜的神經(jīng)網(wǎng)絡(luò)。

上吐就是一個有六個輸入神經(jīng)元,兩層隱藏層以及一個輸出的神經(jīng)網(wǎng)絡(luò),在搭建神經(jīng)網(wǎng)絡(luò)的過程中,輸入神經(jīng)元個數(shù)由需要處理的數(shù)據(jù)大小決定,例如在處理手寫體數(shù)據(jù)時輸入神經(jīng)元個數(shù)就是784,隱藏層數(shù)量不限,但理論上來講隱藏層數(shù)量越多,機器學(xué)習(xí)的效果越好,相應(yīng)的訓(xùn)練時間也會越長。輸出層的個數(shù)則與訓(xùn)練數(shù)據(jù)的目的有關(guān),例如本文中進行手寫體識別,共有0到9十個數(shù)字,因此輸出層神經(jīng)元個數(shù)就為10。而機器學(xué)習(xí)的過程就是訓(xùn)練神經(jīng)元之間的參數(shù),使得輸出層的輸出結(jié)果越來越接近真實結(jié)果。

在搭建好神經(jīng)網(wǎng)絡(luò)之后就可以利用準備好的訓(xùn)練數(shù)據(jù)對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練了。機器學(xué)習(xí)雖然叫機器學(xué)習(xí),但是機器其實并不了解自己學(xué)到的是什么,上圖神經(jīng)網(wǎng)絡(luò)的作用也只是把數(shù)字圖片的像素點作為輸入,然后去盡量擬合一個復(fù)雜的函數(shù)使其輸出結(jié)果接近真實結(jié)果而已。所以目前的機器學(xué)習(xí)不是學(xué)習(xí),人工智能也不是智能。
本篇文章先大概的舉了一個機器學(xué)習(xí)的例子,讓大家有個概念,在接下來的文章中將會對損失函數(shù),激活函數(shù),梯度下降等相關(guān)的知識進行介紹。祝大家生活愉快啦。我愛大頭,啦啦啦。