背景
脫更好久啦,又花了很多時間看西部世界,真的好好看。有機會寫寫西部世界的感想。
上一期有提到Perceptron,其實Perceptron就是一個神經單元。那麼神經元組合起來就是一個神經網路了。本期會初步介紹,神經網絡的組成部分。希望能建立起一個對神經網絡的初步概念. 當然又繞不開,神經網絡的Hello World的例子。
好規矩,仍然從問題出發,用問題引導思路
神經網絡
從問題出發,當我們面對一張圖片,如下圖28*28的圖片。我們需要識別其中數字的時候。我們的任務是什麼?
首先,阿拉伯數字設計是科學的,其中一個原因是其結構的差異性,且不容易混淆;
那麼,圖片識別的任務就是,發掘其結構的差異性。(當然是通過像素分佈)
那麼如何實現呢?
首先,傳統的方法,通過邏輯結構判斷。個人感覺挺困難的,畢竟不是程序員;
其次,傳統方法難在,其需要有嚴格的邏輯判斷。但是我們輸入值,卻是一個28*28的數字;
除此之外,同一個數字的字體,位子都可能不同
所以,傳統方法實現困難。
那麼神經網絡如何實現呢?
首先,在上一期我們知道,一個神經元 通過在W*X + b 再加上激勵函數,我們可以得到一個非線性方程;
那麼,如果將很多個神經元串聯在一起呢?
其結果是一個很大結構很複雜的非線性方程。
那麼一個很大很複雜的非線性方程有什麼用呢?
非線性方程有什麼用。
如何我們換一個角度看待我們的問題,識別圖片中的數字。
將其看作一個公式,公式的輸入是 28*28的像素矩陣。 輸出是一個十緯的one-hot 向量(如下圖,如果是第一行hot,那麼意味著其結果是數字0)。
先不談訓練的事情,如果該公式輸入28*28像素,預測的結果很準確。那麼說明該公式是靠譜的。
神經網絡訓練
上一部分提到神經網絡是一個大公式。但是公式如何輸出一個準確的結果呢。 這靠的是神經網絡訓練。
首先,需要明確一點訓練的目標是什麼?
其實很好理解,當我們輸入一個28*28像素給公式時,不管對錯,它自然會輸出一個結果。 那我們訓練的目標就是讓其預測的結果與實際真實的結果的差距越來越小;
其次,訓練改變的是什麼呢?
這個其實和人類學習有點像,能夠認識數字了。但是,具體是怎麼回事,好像不太清楚。
那麼機器學習,我們需要回到上一期Perceptron,一個Perceptron 可以表示為y= F(W*X + b)。X是輸入值,y是輸出值,那麼要改變輸出的結果,就是要改變該公式的參數W和b。
神經網絡是由很多個神經元組成的,所以訓練的結果就是通過修改參數,來改變預測結果。
那麼,訓練是如何實現的呢?
這個其實也很好理解。假設我們只有一個神經元。y=WX+b。那麼我們的目標是縮小 y_預測 與 y_實際的差。那麼可以通過對X求導來實現。如下圖。
那麼如果是多層神經網絡是如何實現的呢? 其實多層神經網絡和單層是一樣的。因為前一個神經元的計算結果作為X進入第二個神經元。相當於嵌套在一起來。
最後,神經網絡是如何識別圖片中的數字的呢?
正經的回答是,通過搭建合適的神經網絡結構,然後將足夠的訓練數據用於神經網絡訓練。
不正經的回答是,我也不知道怎麼實現的。上面的回答實際上是操作過程,而不是他實現的原因。
這也是神經網絡很有魅力的地方, 你對他的框架負責,但是你並不清楚影響最終預測的哪些因子權重較大。雖然並不清楚影響因子,但是預測結果可以檢驗,這使得它的實用性很強。可以想像下,當你訓練好一個模型之後,這個模型可以直接照搬過去預測新的圖片。
所以還是那句話,作為一個小白,拿到大神的模型和一些數據,你也能跑出最先進模型的感覺。
下期預告
前幾期,提到了數學部分、名詞概念部分、Perceptron。本期,用問題的方式牽引了神經網絡的結構,希望有助於理解。
其中很多部分比我上面提到的更復雜。後續也許會帶來。
再次安利下,西部世界。
閱讀更多 繁林林與機器學習 的文章