您的位置:首頁>正文

看圖猜口袋妖怪屬性,這個神經網路可能比你強!(教程)

王新民 編譯自 博客Journal of Geek Studies

量子位·QbitAI 出品

還記得去年異常火爆, 然而最終也沒能入華的Pokémon Go麼?我們今天要講的, 就和《口袋妖怪》有關。

這一系列遊戲是由任天堂發行的,

官方名字叫精靈寶可夢, 可以說是近20多年來世界上第二暢銷的電子遊戲(第一當然是超級馬里奧), 現在已經發行到第七世代, 精靈數量也從第一代的151只增加到了802只。

玩家在遊戲中扮演著精靈訓練師的角色, 捕捉精靈然後與它們並肩作戰。

802只精靈不知道有沒有人認得全, 反正量子位元編輯們只認識比卡丘等等最常見的, 比如說初學者系列:

圖1:妙蛙種子、小火龍和傑尼龜(從左到右)

就算能認全802只也還沒完。 這些小精靈們, 每只都具有一兩種特殊的屬性, 來表明其“元素親和力”, 當它們對抗其他屬性的精靈時都存在自己的優勢及弱點。 這種設定就像是複雜版的石頭剪刀布, 構成了戰鬥系統的基礎, 大大提高了遊戲的趣味性(和記憶難度)。 如下圖所示, 最新版本口袋妖怪共有18種屬性:

圖2:18種口袋妖怪的屬性, 用它們常用背景顏色來進行區分

來個中文版

想不起來這只小精靈是什麼屬性, 我會去求助精靈圖鑒, 不過一位認真好學的外國Geek想到了卷積神經網路。


他寫了一篇博客文章, 通過卷積神經網路ConvNets實現口袋妖怪中精靈屬性的分類任務, 該網路可通過某個精靈的圖像來判斷該遊戲精靈的屬性。

他在博客中詳細介紹了資料集構建、預處理過程和訓練步驟, 以及分析所選模型的性能指標, 同時在GitHub上公開了所有的資料, 實現代碼和分析結果。

以下內容譯自博客Journal of Geek Studies

資料預處理

資料集特徵

為了訓練網路模型, 我在Veekun(https://veekun.com/)上獲得了所有遊戲精靈的資料集。 這個資料集包括了遊戲第一代到第五代出現的精靈。 後來發佈的第六、七代遊戲中有新的精靈, 但這些精靈使用了三維動畫模型, 從遊戲中提取精靈圖像比較困難, 機器學習的方法不支持對這種格式進行訓練。

因此在本文中, 我們將只使用Pokémon前五代所推出的649個精靈圖像。

圖3:三隻關都地區的初學者精靈, 在歷代遊戲中的變化

我們可以看到, 由於遊戲機硬體和功能的不同, 遊戲中的原畫精細程度不同。 在任天堂的Game Boy遊戲機裡, 第一代版本的每一個精靈幾乎沒有色調變化,

但是資料集中提供了一些色調資訊, 如Bulbasaur是綠色的, Charmander是紅色的, Squirtle是藍色的。 從Game Boy到Nintendo DS, 我們發現隨著版本的更新, 小精靈的精細程度突飛猛進, 不只色調有了變化, 形狀都不太一樣了。

同時, 我們遇到了圖像分類任務中的一個典型問題, 即圖像具有不同的解析度。 雖然所有圖像的長寬比都是1:1, 但是請注意看上圖中每個子畫面上的邊框刻度, 在第一代遊戲中, 圖像還是40圖元寬, 到第五代已經增加到96圖元。

此外, 所有精靈在每個圖像中的所占空間也不盡相同。 早期版本的精靈似乎填充了圖像中的更大空間。 在同一個版本中, 隨著精靈的進化, 其大小也會發生相應的變化。

圖4:第五代遊戲中,隨著妙蛙種子進化成妙蛙草、妙蛙花,它的體型也在增大,佔據圖片空間的比例也隨之增大

圖像居中

當我們應用電腦視覺技術來識別圖像中的主要物件,需要確定它的邊界框,並將圖像進行居中處理,其步驟是:

1. 將彩色圖像轉換成灰度圖;

2. 用Sobel濾波器處理圖像,突出精靈的輪廓。Sobel濾波器是一個3×3的卷積核,它能夠通過圖像的梯度,得到主體的輪廓座標;

3. 填充圖像中的空白,獲得精靈的輪廓;

4. 計算輪廓中能夠包含所有圖元的最小面積;

5. 根據精靈輪廓確定方形邊界框的大小;

6. 將方形邊界框調整為64x64圖元;

圖5:對小精靈圖像居中處理的完整步驟

在執行上述步驟後,我們獲得主體填充率最大化的精靈圖像。這個過程是針對精靈的居中處理,這種方法是非常有效的。因為我們要處理圖片很簡單,由精靈形象和白色背景構成。

最後,我們用這種方法處理了所有的精靈圖像。

圖6:多個第五代精靈居中後的結果

目標變數

現在我們處理好了所有的精靈圖像,來建立我們的圖像資料集,接下來我們根據要預測的變數來對它們進行分類。在本文中,我們將僅使用其圖像來判斷出每個精靈的正確屬性。在圖7中,我們嘗試使用邊界框內的圖像,將小精靈正確地分類到18個屬性中的一種。

圖7:精靈及其對應屬性
上行:妙蛙草(左)和波波(右)
下行:大鋼蛇(左)和菊石獸(右)

但是仍然存在一個問題,大多數精靈具有雙重屬性,也就是說,一個精靈的正確屬性是在18種屬性中某兩種不同屬性的組合。例如在圖7中,妙蛙草的屬性是草和毒,同時具有兩種屬性的優點和弱點。

如果要解決這類情況,我們就需要對組合屬性進行分類。即使我們忽視屬性順序,把[火 岩石]屬性與[岩石 火]屬性分為同一個類,除去不存在的組合,我們最終會得到154個可能的類。

更糟的是,如圖8所示,一些組合是罕見的,只有一個或兩個神奇寶貝,這樣限制了可供學習的樣本。

圖8:一些罕見的屬性組合
上行:熔岩蝸牛(左)和溜溜糖球(右)
下行:花岩怪(左)和火鋼獸(右)

由於上述原因,我決定忽略精靈的組合屬性。因此,我們只考慮精靈的主要屬性。以圖7中的小精靈為例,我們將這樣設置:

妙蛙草:草

波波:一般

大鋼蛇:鋼

菊石獸:岩石

模型訓練

選擇模型

我將通過卷積神經網路實現對資料集的預測。首先,我們來瞭解一下神經網路。

根據維琪百科的介紹,神經網路是一種常用的機器學習預測模型,本質上是由稱為神經元的簡單單位組成的互連網路。通過對生物系統內部運作的簡單類比,神經網路能夠通過這些神經元來實現複雜的函數和模式。

神經元的最簡單形式只是一個輸入的線性函數,可以通過組合實現非線性啟動函數,如下圖:

圖9:神經網路的基本單元

然而,通過加深網路層數,神經網路能夠在獨立變數和因變數之間構建越來越複雜的對應關係,如下圖:

圖10:一個稍微複雜的,具有一個隱藏層的神經網路結構

從1940年開始,就已經有學者研究神經網路,但是存在局部最優和計算量過大的問題,所以一直發展緩慢。近年來,隨著計算性能的大大提高,以及反向傳播演算法的提出和發展,神經網路又再一次受到了大量學者的關注。

好的,我們已經比較瞭解神經網路了。但是“卷積”指的是什麼呢?我們先來介紹一下內核。

在影像處理中,內核,也叫作卷積矩陣,是在模糊、銳化、邊緣檢測等任務中使用的小型矩陣。我們通過設定合適的內核進行矩陣的卷積運算,產生新的圖像從而實現目的效果。在前邊的步驟中,我們已經用過了一種內核:在資料預處理中用Sobel內核來檢測精靈的邊緣。

圖11:精靈妙蛙花在應用Sobel運算元後的效果

卷積運算可以看作是卷積核在圖像上的遍歷。將內核的值按照逐個元素,乘以圖像中的灰度值,並將結果相加即可得到該卷積的最終值。在應用中,我們可以使用垂直Sobel濾波器來檢測顏色強度的明顯變化。

圖12:應用垂直邊緣濾波器對突出顯示的紅色區域進行卷積,從而在生成矩陣上獲得紅色最終值

但是這些卷積核與神經網路有什麼關係?神經網路的卷積層實際上就是通過巧妙的方式來實現神經元之間的連接關係,進而實現一種分類器,其能夠通過有監督學習來識別這些特殊的濾波器。在預處理步驟中,我們會使用一種特定結構的內核,因為我們瞭解何種結構的內核能夠完成提取輪廓的任務。但在卷積神經網路中,我們會讓訓練演算法自動找到特殊結構的濾波器,並能通過多級組合來表示越來越複雜的高級特徵。

我們的神經網路結構

對於精靈分類任務,我使用了一個四層的卷積神經網路。

圖13:本文中精靈分類所用到的神經網路結構

上圖中的每一層,都對應著卷積網路中的一個層。在每個層後,我們獲得表示該層輸出的狀態張量,每個層的右側寫明瞭該張量維度。

然後,在卷積層通過卷積核進行卷積運算。在第一層,我們對輸入圖像應用32個維度為5的卷積核,產生了32個大小為60×60的輸出矩陣。對圖像應用卷積運算產生邊界效應,造成輸出矩陣維度減小。

我們還使用了最大池化層,通過對某個張量區域提取最大值,將其用單值代替。因此,在應用2×2最大池化操作後,我們得到新的張量,其大小只有原始張量的四分之一。

圖14:最大池化操作的示例

最後,我們將張量展開為一維向量,接以全連接層進行預測。最後一層的輸出節點數為18,與精靈屬性的個數相同。

訓練和驗證

為了訓練精靈分類模型,我們將資料集劃分為兩個部分:

1)訓練網路時將使用訓練集,從資料中學習模型參數;

2)驗證集用來驗證所得到模型的預測性能。

這樣,我們將能夠通過正確率、測試誤差來判斷網路訓練是否陷入過擬合。

但是我們不能通過隨機劃分來確定這兩個資料集。因為在不同《口袋妖怪》遊戲中,特別是在同一代的不同遊戲之間,同一精靈的原畫非常相似。

圖15:大比鳥在寶石版本(左)和鑽石版本(右)裡的原畫。你能看出兩者的區別嗎?請點擊此處輸入圖片描述

如果對原始資料集進行隨機劃分,驗證集和訓練集中可能存在若干個樣本幾乎相同,這將導致對網路模型性能的高估。因此,我將整個精靈的全部圖像集合都分配給同一個資料集,而不是將精靈圖像隨機劃分。也就是說,如果噴火龍被分配給驗證集,那麼它的所有圖像將被分在驗證集,這樣就可以消除了模型高估的問題。

我將20%的精靈作為測試集,80%的精靈作為訓練集,也就是訓練集中有2727個精靈樣本。

性能指標

本文將使用三個性能指標來評估該模型的分類性能:

1)準確度(accuracy):在預測過程中,能對精靈屬性正確分類的百分比;

2)精度(precision):真正屬於該類的圖像占所有歸於該類圖像的百分比;

3)召回率(recall):該類正確歸類的圖像占該類全部圖像的百分比;

雖然準確性已經能夠評估所訓練模型的大體品質,但是精確度和記憶力説明我們衡量模型對每個類具體的預測效果。

第一個模型:簡單訓練

第一次嘗試時,在保持訓練集和驗證集互相獨立的條件下,用原始精靈圖像對神經網路進行訓練。 該演算法運行了20步,只用了大約一分鐘,訓練正確率已經全部達到了100%。第一次訓練結果如下圖所示。

圖16:第一個模型對訓練集的分類性能

好激動,所有的精靈分類都是完全正確的!但是這些指標代表這個網路模型的預測性能嗎?其實這些指標是在暗示我們,該模型已經完全擬合了訓練集資料,但是不能很好地預測新資料。讓我們來驗證一下:下圖展示了該模型對驗證集的預測性能。

圖17:第一個模型對驗證集的分類性能

雖然目前模型的分類效果優於隨機猜測,但是網路確實存在過擬合問題。

奇怪的是,為什麼飛行屬性沒有對應的精靈呢?事實上,只有精靈龍卷雲是屬於飛行屬性的,但是它被劃分到了訓練集。

圖18:我們的資料集中,龍卷雲是唯一的飛行屬性精靈

第二個模型:圖像增強

在對驗證集的預測上,第一個模型表現不佳。正如在介紹中提到的,電腦仍在努力解決圖像分類的問題。我們的資料集存在數量太少和變化不多的問題,使得此演算法訓練得到的模型不具備特徵泛化能力。

為了解決這個問題,我們應用了圖像增強技術。我們通過對訓練集圖像進行隨機變換,來增強它們的變化。無論皮卡丘的方向是顛倒的或者是一定程度傾斜,人類都能夠準確識別,我們希望訓練出的模型也有這個功能。

因此,我們對訓練集資料進行以下變換:

1)高達40度的隨機旋轉;

2)高達20%的圖像寬度的隨機水平移位;

3)高達20%的圖像高度的隨機垂直移位;

4)高達20%的隨機放大;

5)垂直鏡像;

6)在0.2弧度範圍內,進行剪切變換。

圖19:對妙蛙種子進行圖像增強操作後獲得的一系列圖像

我將上述的增強變換應用于訓練集中的所有精靈,每個精靈圖像能夠生成10個新圖像。這樣,我們把訓練集的樣本量擴展到了27,270個。經過這樣的操作,是否能夠正確分類?該演算法運行超過30步,用了超過10分鐘的時間,訓練結果如下圖所示:

圖20:第二個模型對訓練集的分類性能

咦,我們的模型性能下降了?圖像增強技術不是應該使我的網路模型預測性能變得更好麼?

別著急下結論,我們不能根據對訓練集的分類效果來下定論。該模型預測性能的整體下降是由於訓練集變化的增加,如果它能轉化為對驗證集更好的分類性能,這應該是個好消息。

圖21:第二個模型對驗證集的分類性能

我們證明了,圖像增強技術有助於提高模型的預測性能,對驗證集的預測準確率提高了14%,達到了39%。我們可以通過改動該模型的超參數或優化卷積網路的結構,來獲得更好的預測模型,但我們希望將後續的工作交給讀者來完成。

對分類結果進行研究

我們要從結果中提取到關鍵的規律。預測精度較高的屬性如下:

火:61%

水:54%

毒:54%

草:47%

電:46%

召回率較高的屬性如下:

惡:92%

火:74%

水:55%

一般:49%

草:42%

這個結果並不奇怪,火、水和草這三種主要屬性在這兩個指標中均位列前五。這是由於這些屬性與顏色具有關聯性,這是從精靈圖像裡容易提取到的資訊。同時屬於這三種屬性的精靈也很多,所以有很多的訓練樣本可供模型進行學習。

現在來看看容易被正確分類和不容易被正確分類的精靈:

圖22:高正確率精靈
上行:傑尼龜,比卡丘,口呆花
下行:火焰鳥,班基拉,脫殼忍者

圖23:低正確率精靈
上行:豪力,菊石神,洛奇亞
下行:沙奈朵,飯匙蛇,水伊布

即使在這個樣本量較小的資料集中,我們可以看到,顏色在精靈分類中起著重要的作用。例如在容易被錯誤分類的精靈中,豪力很大可能被劃分為毒型,可能是由主體色為紫色導致分類錯誤。同樣地,可能由於飯匙蛇為深色,所以被誤分為惡型。

好吧,我們可能永遠不知道為什麼會出現這樣的結果。使用深層神經網路進行分類的一個缺點是該網路模型相當於一個“黑盒”,目前有很多學者在研究神經網路在圖像分類中學習到的抽象特徵。

現在,我們可以來觀察下通過第一層卷積核獲取到的特徵圖譜,嘗試理解下卷積核在尋找什麼樣的圖像特徵。但是隨著深度神經網路層數的加深,我們越來越難辨識出組合而成的高級抽象特徵。

圖24:用第一卷積層的內核來處理第一代初學者精靈圖像所得到的效果

結論

該模型的預測正確率只有39%,可能不那麼盡如人意。但是想要利用小樣本資料集實現18類精靈的分類問題,並不是那麼簡單。我們的模型比零規則基線高出了20%的分類準確度。表1列出了在測試集上每個精靈屬性出現的頻率,比零規則基線高出了19.5%的精度。

表1:測試集裡精靈出現的頻率

但是,如果我們期望電腦有一天能夠成為地球上的機器人霸主,我們就不應該用這種笨拙的方法來衡量它們。如果電腦想比我弟弟更好地認出精靈寶貝,那他還需要好好努力。

今天AI界還有哪些事值得關注?

今天”,看精選的AI行業資訊和研究動態。筆芯~

圖4:第五代遊戲中,隨著妙蛙種子進化成妙蛙草、妙蛙花,它的體型也在增大,佔據圖片空間的比例也隨之增大

圖像居中

當我們應用電腦視覺技術來識別圖像中的主要物件,需要確定它的邊界框,並將圖像進行居中處理,其步驟是:

1. 將彩色圖像轉換成灰度圖;

2. 用Sobel濾波器處理圖像,突出精靈的輪廓。Sobel濾波器是一個3×3的卷積核,它能夠通過圖像的梯度,得到主體的輪廓座標;

3. 填充圖像中的空白,獲得精靈的輪廓;

4. 計算輪廓中能夠包含所有圖元的最小面積;

5. 根據精靈輪廓確定方形邊界框的大小;

6. 將方形邊界框調整為64x64圖元;

圖5:對小精靈圖像居中處理的完整步驟

在執行上述步驟後,我們獲得主體填充率最大化的精靈圖像。這個過程是針對精靈的居中處理,這種方法是非常有效的。因為我們要處理圖片很簡單,由精靈形象和白色背景構成。

最後,我們用這種方法處理了所有的精靈圖像。

圖6:多個第五代精靈居中後的結果

目標變數

現在我們處理好了所有的精靈圖像,來建立我們的圖像資料集,接下來我們根據要預測的變數來對它們進行分類。在本文中,我們將僅使用其圖像來判斷出每個精靈的正確屬性。在圖7中,我們嘗試使用邊界框內的圖像,將小精靈正確地分類到18個屬性中的一種。

圖7:精靈及其對應屬性
上行:妙蛙草(左)和波波(右)
下行:大鋼蛇(左)和菊石獸(右)

但是仍然存在一個問題,大多數精靈具有雙重屬性,也就是說,一個精靈的正確屬性是在18種屬性中某兩種不同屬性的組合。例如在圖7中,妙蛙草的屬性是草和毒,同時具有兩種屬性的優點和弱點。

如果要解決這類情況,我們就需要對組合屬性進行分類。即使我們忽視屬性順序,把[火 岩石]屬性與[岩石 火]屬性分為同一個類,除去不存在的組合,我們最終會得到154個可能的類。

更糟的是,如圖8所示,一些組合是罕見的,只有一個或兩個神奇寶貝,這樣限制了可供學習的樣本。

圖8:一些罕見的屬性組合
上行:熔岩蝸牛(左)和溜溜糖球(右)
下行:花岩怪(左)和火鋼獸(右)

由於上述原因,我決定忽略精靈的組合屬性。因此,我們只考慮精靈的主要屬性。以圖7中的小精靈為例,我們將這樣設置:

妙蛙草:草

波波:一般

大鋼蛇:鋼

菊石獸:岩石

模型訓練

選擇模型

我將通過卷積神經網路實現對資料集的預測。首先,我們來瞭解一下神經網路。

根據維琪百科的介紹,神經網路是一種常用的機器學習預測模型,本質上是由稱為神經元的簡單單位組成的互連網路。通過對生物系統內部運作的簡單類比,神經網路能夠通過這些神經元來實現複雜的函數和模式。

神經元的最簡單形式只是一個輸入的線性函數,可以通過組合實現非線性啟動函數,如下圖:

圖9:神經網路的基本單元

然而,通過加深網路層數,神經網路能夠在獨立變數和因變數之間構建越來越複雜的對應關係,如下圖:

圖10:一個稍微複雜的,具有一個隱藏層的神經網路結構

從1940年開始,就已經有學者研究神經網路,但是存在局部最優和計算量過大的問題,所以一直發展緩慢。近年來,隨著計算性能的大大提高,以及反向傳播演算法的提出和發展,神經網路又再一次受到了大量學者的關注。

好的,我們已經比較瞭解神經網路了。但是“卷積”指的是什麼呢?我們先來介紹一下內核。

在影像處理中,內核,也叫作卷積矩陣,是在模糊、銳化、邊緣檢測等任務中使用的小型矩陣。我們通過設定合適的內核進行矩陣的卷積運算,產生新的圖像從而實現目的效果。在前邊的步驟中,我們已經用過了一種內核:在資料預處理中用Sobel內核來檢測精靈的邊緣。

圖11:精靈妙蛙花在應用Sobel運算元後的效果

卷積運算可以看作是卷積核在圖像上的遍歷。將內核的值按照逐個元素,乘以圖像中的灰度值,並將結果相加即可得到該卷積的最終值。在應用中,我們可以使用垂直Sobel濾波器來檢測顏色強度的明顯變化。

圖12:應用垂直邊緣濾波器對突出顯示的紅色區域進行卷積,從而在生成矩陣上獲得紅色最終值

但是這些卷積核與神經網路有什麼關係?神經網路的卷積層實際上就是通過巧妙的方式來實現神經元之間的連接關係,進而實現一種分類器,其能夠通過有監督學習來識別這些特殊的濾波器。在預處理步驟中,我們會使用一種特定結構的內核,因為我們瞭解何種結構的內核能夠完成提取輪廓的任務。但在卷積神經網路中,我們會讓訓練演算法自動找到特殊結構的濾波器,並能通過多級組合來表示越來越複雜的高級特徵。

我們的神經網路結構

對於精靈分類任務,我使用了一個四層的卷積神經網路。

圖13:本文中精靈分類所用到的神經網路結構

上圖中的每一層,都對應著卷積網路中的一個層。在每個層後,我們獲得表示該層輸出的狀態張量,每個層的右側寫明瞭該張量維度。

然後,在卷積層通過卷積核進行卷積運算。在第一層,我們對輸入圖像應用32個維度為5的卷積核,產生了32個大小為60×60的輸出矩陣。對圖像應用卷積運算產生邊界效應,造成輸出矩陣維度減小。

我們還使用了最大池化層,通過對某個張量區域提取最大值,將其用單值代替。因此,在應用2×2最大池化操作後,我們得到新的張量,其大小只有原始張量的四分之一。

圖14:最大池化操作的示例

最後,我們將張量展開為一維向量,接以全連接層進行預測。最後一層的輸出節點數為18,與精靈屬性的個數相同。

訓練和驗證

為了訓練精靈分類模型,我們將資料集劃分為兩個部分:

1)訓練網路時將使用訓練集,從資料中學習模型參數;

2)驗證集用來驗證所得到模型的預測性能。

這樣,我們將能夠通過正確率、測試誤差來判斷網路訓練是否陷入過擬合。

但是我們不能通過隨機劃分來確定這兩個資料集。因為在不同《口袋妖怪》遊戲中,特別是在同一代的不同遊戲之間,同一精靈的原畫非常相似。

圖15:大比鳥在寶石版本(左)和鑽石版本(右)裡的原畫。你能看出兩者的區別嗎?請點擊此處輸入圖片描述

如果對原始資料集進行隨機劃分,驗證集和訓練集中可能存在若干個樣本幾乎相同,這將導致對網路模型性能的高估。因此,我將整個精靈的全部圖像集合都分配給同一個資料集,而不是將精靈圖像隨機劃分。也就是說,如果噴火龍被分配給驗證集,那麼它的所有圖像將被分在驗證集,這樣就可以消除了模型高估的問題。

我將20%的精靈作為測試集,80%的精靈作為訓練集,也就是訓練集中有2727個精靈樣本。

性能指標

本文將使用三個性能指標來評估該模型的分類性能:

1)準確度(accuracy):在預測過程中,能對精靈屬性正確分類的百分比;

2)精度(precision):真正屬於該類的圖像占所有歸於該類圖像的百分比;

3)召回率(recall):該類正確歸類的圖像占該類全部圖像的百分比;

雖然準確性已經能夠評估所訓練模型的大體品質,但是精確度和記憶力説明我們衡量模型對每個類具體的預測效果。

第一個模型:簡單訓練

第一次嘗試時,在保持訓練集和驗證集互相獨立的條件下,用原始精靈圖像對神經網路進行訓練。 該演算法運行了20步,只用了大約一分鐘,訓練正確率已經全部達到了100%。第一次訓練結果如下圖所示。

圖16:第一個模型對訓練集的分類性能

好激動,所有的精靈分類都是完全正確的!但是這些指標代表這個網路模型的預測性能嗎?其實這些指標是在暗示我們,該模型已經完全擬合了訓練集資料,但是不能很好地預測新資料。讓我們來驗證一下:下圖展示了該模型對驗證集的預測性能。

圖17:第一個模型對驗證集的分類性能

雖然目前模型的分類效果優於隨機猜測,但是網路確實存在過擬合問題。

奇怪的是,為什麼飛行屬性沒有對應的精靈呢?事實上,只有精靈龍卷雲是屬於飛行屬性的,但是它被劃分到了訓練集。

圖18:我們的資料集中,龍卷雲是唯一的飛行屬性精靈

第二個模型:圖像增強

在對驗證集的預測上,第一個模型表現不佳。正如在介紹中提到的,電腦仍在努力解決圖像分類的問題。我們的資料集存在數量太少和變化不多的問題,使得此演算法訓練得到的模型不具備特徵泛化能力。

為了解決這個問題,我們應用了圖像增強技術。我們通過對訓練集圖像進行隨機變換,來增強它們的變化。無論皮卡丘的方向是顛倒的或者是一定程度傾斜,人類都能夠準確識別,我們希望訓練出的模型也有這個功能。

因此,我們對訓練集資料進行以下變換:

1)高達40度的隨機旋轉;

2)高達20%的圖像寬度的隨機水平移位;

3)高達20%的圖像高度的隨機垂直移位;

4)高達20%的隨機放大;

5)垂直鏡像;

6)在0.2弧度範圍內,進行剪切變換。

圖19:對妙蛙種子進行圖像增強操作後獲得的一系列圖像

我將上述的增強變換應用于訓練集中的所有精靈,每個精靈圖像能夠生成10個新圖像。這樣,我們把訓練集的樣本量擴展到了27,270個。經過這樣的操作,是否能夠正確分類?該演算法運行超過30步,用了超過10分鐘的時間,訓練結果如下圖所示:

圖20:第二個模型對訓練集的分類性能

咦,我們的模型性能下降了?圖像增強技術不是應該使我的網路模型預測性能變得更好麼?

別著急下結論,我們不能根據對訓練集的分類效果來下定論。該模型預測性能的整體下降是由於訓練集變化的增加,如果它能轉化為對驗證集更好的分類性能,這應該是個好消息。

圖21:第二個模型對驗證集的分類性能

我們證明了,圖像增強技術有助於提高模型的預測性能,對驗證集的預測準確率提高了14%,達到了39%。我們可以通過改動該模型的超參數或優化卷積網路的結構,來獲得更好的預測模型,但我們希望將後續的工作交給讀者來完成。

對分類結果進行研究

我們要從結果中提取到關鍵的規律。預測精度較高的屬性如下:

火:61%

水:54%

毒:54%

草:47%

電:46%

召回率較高的屬性如下:

惡:92%

火:74%

水:55%

一般:49%

草:42%

這個結果並不奇怪,火、水和草這三種主要屬性在這兩個指標中均位列前五。這是由於這些屬性與顏色具有關聯性,這是從精靈圖像裡容易提取到的資訊。同時屬於這三種屬性的精靈也很多,所以有很多的訓練樣本可供模型進行學習。

現在來看看容易被正確分類和不容易被正確分類的精靈:

圖22:高正確率精靈
上行:傑尼龜,比卡丘,口呆花
下行:火焰鳥,班基拉,脫殼忍者

圖23:低正確率精靈
上行:豪力,菊石神,洛奇亞
下行:沙奈朵,飯匙蛇,水伊布

即使在這個樣本量較小的資料集中,我們可以看到,顏色在精靈分類中起著重要的作用。例如在容易被錯誤分類的精靈中,豪力很大可能被劃分為毒型,可能是由主體色為紫色導致分類錯誤。同樣地,可能由於飯匙蛇為深色,所以被誤分為惡型。

好吧,我們可能永遠不知道為什麼會出現這樣的結果。使用深層神經網路進行分類的一個缺點是該網路模型相當於一個“黑盒”,目前有很多學者在研究神經網路在圖像分類中學習到的抽象特徵。

現在,我們可以來觀察下通過第一層卷積核獲取到的特徵圖譜,嘗試理解下卷積核在尋找什麼樣的圖像特徵。但是隨著深度神經網路層數的加深,我們越來越難辨識出組合而成的高級抽象特徵。

圖24:用第一卷積層的內核來處理第一代初學者精靈圖像所得到的效果

結論

該模型的預測正確率只有39%,可能不那麼盡如人意。但是想要利用小樣本資料集實現18類精靈的分類問題,並不是那麼簡單。我們的模型比零規則基線高出了20%的分類準確度。表1列出了在測試集上每個精靈屬性出現的頻率,比零規則基線高出了19.5%的精度。

表1:測試集裡精靈出現的頻率

但是,如果我們期望電腦有一天能夠成為地球上的機器人霸主,我們就不應該用這種笨拙的方法來衡量它們。如果電腦想比我弟弟更好地認出精靈寶貝,那他還需要好好努力。

今天AI界還有哪些事值得關注?

今天”,看精選的AI行業資訊和研究動態。筆芯~

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示