2017年4月15日 星期六

Training A Simple Classifier

「學如逆水行舟,不進則退。」這句話是真的。

有一段時間沒碰Neural Network,今天想要繼續深入研究時,感覺心裡有一點心虛,好像有一些地方沒有真正搞懂,然後就是一點害怕,因為竟然不知道那些地方不懂。於是,重新復習「Make Your Own Neural Network」,從Trainig A Simple Classifier這一章節開始,再讀一遍。於是,才算真正了解為何需要Learning Rate,以及如何用它。為了怕自己將來再次忘記,故寫此文,這樣以後就不用花時間去回想,而阻礙到學習的進步。

以上是記錄本人的心路歷程,大家可以略過。本文,主要的目的是:
  1. 設計一個演算法,可以簡單區分兩種蟲
  2. 如何用Learning Rate改善此演算法
會分三篇說明:
在「Make Your own Neural Network」這本書,拿兩種蟲作為一個例子。一個叫Caterpillar,長得像毛毛蟲,身體長長的,另外一個叫Ladybird,瓢蟲,身體圓滾滾的。3歲小孩就能區分這兩種蟲的不同了。電腦如何區分呢?我們要「教」電腦。可是,若電腦沒有學習能力,如何教之?所以,首先,我們要讓電腦具備簡單的學習能力。也就是,在教電腦之前,要先把具有學習能力演算法的程式寫好,放到電腦裡執行。

這種程式要如何寫?先從簡單的開始。

Caterpillar和Ladybird這兩種蟲,我們可以單從形狀,就可以簡單區分他們的不同。形狀來看,一個是長長的,另一個是圓滾滾的。如何用數學來描述呢?根據經驗,可以用Width和Length,可以用這兩個值,區分這兩種蟲。如,抓到一隻Caterpillar,(Width, Length) = (1, 3)。一隻Ladybird,(Width, Length) = (3, 1),為了舉例方便,這是一隻很寬的瓢蟲。

會不會有例外,抓到一隻圓滾滾的Caterpillar?如果真的有這樣的情況出現,那麼用Width和Length,這兩個值,來區分Caterpillar和Ladybird。就行不通了。可以現像一下,如果真的看到一隻圓滾滾的Caterpillar,我們如何判斷牠不是Ladybird呢?其實還有其它特徵可以使用,如顏色、翅膀、腳的長度、移動方式、……等等,如下表所示。


為了說明方便,本文就假設,光靠Width和Length就能區分這兩個蟲。

程式要如何寫?

我們先把這個問題,轉換成數學問題。因為只有考慮Width和Length,就把這兩個視為平面的兩個座標軸,Width為x軸,Length為y軸。假設,我們在花園裡面,只抓到Caterpillar和Ladybird各一,量牠們的Width和Length,然後標示在平面座標上。Caterpillar = (1, 3)、Ladybird = (3, 1)。

接下來,我們要思考,如何讓電腦學習,去判斷這兩種蟲?我覺得學習的方法,可能有無限個。如下圖:


把Caterpillar和Ladybird周遭的範圍,圈起來,這兩個圈的中心點及半徑,就是所謂的學習結果,以後就可以拿這個結果,去區分Caterpillar和Ladybird。

或者,我們在 y = 2 之處畫一個橫線,來區分Caterpillar和Ladybird。於是 y = 2 就是學習的結果

當然 x = 2 之處,畫一條直線,來區分Caterpillar和Ladybird。這樣也行。

「Make Your Own Neural Network」這本書,採用的方法是,從原點畫一條線,來區分Caterpillar和Ladybird。這條線要怎麼畫,是一個需要指導員參與的學習過程。也就是說,當抓到一個蟲的時候,指導員會和電腦說,牠是Caterpillar還是Ladybird,電腦會根據結果,來調整這條線。隨者電腦看過的蟲愈多,它的線就會愈能區分Caterpillar和Ladybird。

至此,分類的問題,大家是不是清楚了解了,而且也找到許多不錯的Idea去解這個問題。我會在下一篇,介紹如何用程式,去表達這個Idea。

Training A Simple Classifier - Algorithm

-Count

沒有留言:

張貼留言