人工智能代碼到底長(zhǎng)什么樣?
虛竹在想念自己夢(mèng)姑的時(shí)候,好歹還有夢(mèng)境作為記憶碎片。而那些讓人許多AI公司爆火的、融資拿到手軟的AI代碼是不是也如某國(guó)公主一般呢?直到筆者看到這兩張圖:


當(dāng)然以上純屬玩笑,在QUORA上,一位畢業(yè)于印度理工學(xué)院人工智能與計(jì)算機(jī)科學(xué)專(zhuān)業(yè)、工作于Facebook的工程師Sriraman Madhavan。
寫(xiě)了這么一個(gè)答案:
這是我寫(xiě)的一個(gè)案列:根據(jù)名字來(lái)確定你是來(lái)自印度哪個(gè)地區(qū)的。根據(jù)你名字的不同狀態(tài),可以判定你的家庭人員情況,以下是代碼片段:

下面這個(gè)代碼不是我寫(xiě)的,這是個(gè)谷歌根據(jù)圖片生成描述文字的創(chuàng)新。下面是根據(jù)圖片生成描述的案例:


但等等!別高興得太早,就上面這個(gè)代碼也引發(fā)了啼笑皆非的笑話(huà)。

如果調(diào)教不好,AI可能有點(diǎn)愚蠢。
下面再看一個(gè)復(fù)雜的例子:(作者:Mikkel Duif)
我們必須記住,AI主要只是一堆數(shù)學(xué)邏輯(尤其是在討論機(jī)器學(xué)習(xí)和深度學(xué)習(xí)時(shí))。編碼的作用只是讓計(jì)算機(jī)去執(zhí)行它,并從數(shù)據(jù)中得以學(xué)習(xí)。我認(rèn)為要知道AI代碼長(zhǎng)什么樣,并不是要了解背后代碼的外觀,和如何編寫(xiě)代碼,而是要更多理解代碼中到底發(fā)生了什么。
比如,我們?nèi)绾蝿?chuàng)建能夠識(shí)別MNIST數(shù)據(jù)庫(kù)中這些手寫(xiě)數(shù)字的東西呢?

如下圖,只是一些Python代碼,背后有很多數(shù)學(xué)邏輯。[1]

是不是看完頭皮發(fā)麻?
我自己都覺(jué)得很難理解它。
這到底是個(gè)什么玩意兒?其實(shí)就是數(shù)學(xué)邏輯。
每個(gè)手寫(xiě)數(shù)字由28*28像素組成,那么就共有784個(gè)像素。且每個(gè)像素都被用作神經(jīng)網(wǎng)絡(luò)的輸入,我們用它來(lái)訓(xùn)練網(wǎng)絡(luò)。每個(gè)像素都被認(rèn)作為一個(gè)輸入,并通過(guò)中間隱藏層,也就是下圖中的15個(gè)神經(jīng)元。經(jīng)過(guò)那里,我們將得到最有可能的數(shù)字估計(jì)。
即我們就會(huì)得出哪個(gè)數(shù)字的激活率最高。這種感覺(jué)就如同下圖:[2]

那么我們?cè)趫?zhí)行代碼時(shí)會(huì)發(fā)生什么?我們所建立的網(wǎng)絡(luò)類(lèi)型稱(chēng)為前饋神經(jīng)網(wǎng)絡(luò),這意味著所有數(shù)據(jù)都在一個(gè)方向上。我們使用反向傳播算法來(lái)計(jì)算我們當(dāng)前數(shù)據(jù)的誤差,通過(guò)更改設(shè)置并在此運(yùn)行神經(jīng)網(wǎng)絡(luò)。
我們得出這樣的輸出:

從中可以看出,在第一輪中,我們神經(jīng)網(wǎng)絡(luò)能夠正確地對(duì)51%的數(shù)字進(jìn)行分類(lèi),通過(guò)訓(xùn)練最終正確率能達(dá)到81%。相當(dāng)不錯(cuò)的改進(jìn)吧?隨機(jī)猜測(cè)數(shù)字會(huì)給你10%的準(zhǔn)確率!精度還可以進(jìn)一步提高,只需要更多的計(jì)算能力。此外,對(duì)代碼的更改還可以?xún)?yōu)化學(xué)習(xí)速度。使用普通計(jì)算機(jī),你可能就會(huì)獲得低于4%的錯(cuò)誤率,而最佳結(jié)果是錯(cuò)誤率低于1%。[3]
我們?cè)谶@里做了什么?
這行代碼中,我們告訴網(wǎng)絡(luò):

1,784個(gè)輸入神經(jīng)元;
2,30個(gè)隱藏層;
3,10個(gè)輸出神經(jīng)元。
其次,我們使用一種隨機(jī)梯度下降的方法來(lái)訓(xùn)練我們的網(wǎng)絡(luò),并“降低我們的成本”。
(備注:關(guān)于隨機(jī)梯度下降法,各位看官請(qǐng)自行搜索。)