【翻譯】給初學者的 Neural Networks / 神經網絡 介紹

本文翻譯自 Neural Networks : A 30,000 Feet View for Beginners程序員

算法

翻譯:coneypo數組

 

在這篇文章中,我會向你們簡要的介紹下 Neural Networks / 神經網絡瀏覽器

能夠做爲 Machine Learning / 機器學習Deep Learning / 深度學習 的入門愛好者參考;網絡

咱們文章中會盡可能用簡短的,零基礎的方式來向你們介紹。架構

 

做爲 Black Box / 黑盒 的 Neural Networks / 神經網絡

咱們能夠把神經網絡看成一個神奇的黑盒子,你沒必要知道黑盒子裏面是什麼;機器學習

你如今只知道黑盒有 一個輸入  三個輸出函數

輸入能夠是圖像的尺寸,顏色或者種類等等;學習

輸出分別爲 "貓","狗",和 "其餘" 三種標籤,標籤的輸出值都是介於 0~1,並且三種標籤的數值之和爲 1測試

 

理解神經網絡的輸出

黑盒的神奇之處其實很簡單,若是你向它輸入一張圖像,它會輸出三個數值;

一個理想化的完美神經網絡,對於 "貓" 輸出(1,0,0),對於 "狗" 輸出(0,1,0),對於 "其餘" 輸出(0,0,1);

事實上即便一個訓練的很是好的神經網絡也可能達不到上述的完美輸出;

好比,若是你輸出一張貓的圖像,」貓」 標籤輸出的數值爲 0.97,「狗」 標籤下的輸出數值爲 0.01,「其餘」 標籤下的輸出數值爲 0.02。

 

輸出數值 能夠理解爲 可能性機率;

好比說黑盒 "認爲" 這張圖像是 "貓" 的機率是 97%,很小的機率是 "狗" 或者是 "其餘" 物種;

請注意輸出數值之和必定爲 1;

具體的這種問題歸類於 image classification / 圖像分類 問題:給定一張圖像,你用最有可能的標籤去給圖像進行分類(貓,狗,或者其餘);

 

理解神經網絡的輸入

如今你做爲一名程序員,你可使用數值來表示神經網絡的輸出;

可是你如何輸入一張圖像呢?

 

圖像其實就是一個存放數值的數組。一個 256*256 三通道的圖像其實就是 256*256*3=196608 個數值;

你使用圖片瀏覽器來瀏覽 256*256 大小的圖片,其實在內存裏就是 196608 個數值構成的 continuous block / 連續塊;

通過上述描述,咱們知道輸入有一點複雜,輸入實際上有 196608 個數值,咱們由此更新一下咱們的黑盒模型。

 

我知道你在想什麼,若是圖像不是 256*256 的呢?

其實你能夠經過如下步驟來把任何一張圖像轉換爲 256*256 大小:

  1. Non-Square aspect ratio / 非正方形縱橫比調整:若是輸入圖像不是正方形,你能夠從新調整圖像大小到 256,而後從圖像中間裁剪出 256*256 的像素大小;
  2. Grayscale image / 灰度圖:若是輸入圖像不是一個彩色圖像,你能夠經過拷貝灰度圖到三個通道來得到三通道彩色圖像;

你們使用不少不一樣種類的方法來轉換圖像到一個適合的尺寸( 好比 256*256 ),可是正如我以前所說,我會讓咱們的流程變得簡單,我不會使用這些各類各樣的方法。須要注意的事情是任何一張圖像能夠被轉換成你想要的尺寸,即便咱們在裁剪或者調整大小的時候丟掉一些信息。

 

訓練神經網絡須要注意什麼

黑盒模型有一些 knobs / 旋鈕 來調整模型參數;

從技術角度來講,這些旋鈕稱之爲 weights / 權重

當這些旋鈕處於正確的位置,神經網絡就能夠達到更好更正確的輸出結果;

訓練神經網絡就是要找到正確的 旋鈕設置 / 權重;

 

如何訓練神經網絡

若是你有一個黑盒,可是不知道正確的旋鈕設置,那麼這個黑盒其實至關於沒用的;

好消息是你能夠經過訓練神經網絡來找到正確的旋鈕設置。

 

訓練神經網絡和訓練小孩特別像。你拿一個球給小孩看,而後告訴他這是一個球;

當你給他看了不少種球以後,小孩就會弄明白,球和球的形狀有關,與它的顏色或者尺寸無關;

而後你給小孩一個雞蛋,問他這是什麼,他回答是球。你糾正他這不是球,這是雞蛋;

當這個過程重複幾回以後,這個小孩就能夠辨別球和雞蛋了。

 

爲了訓練一個神經網絡,你給它幾千個想讓它學習的分類例子(好比貓,狗或者其餘);

這種訓練稱之爲 Supervised Learning / 監督學習,由於你提供給這個神經網絡來自某個分類的圖像,而後確切的告訴它,這張圖像來自這個分類;

 

爲了訓練神經網絡,咱們須要三件事情:

  1. Training data / 訓練數據

    各類分類的數千張圖像和它們期待的輸出;

    好比全部貓的圖像,被期待輸出爲(1,0,0);

  2. Cost function / 損失函數

    咱們須要知道當前的權值設置是否比以前的設置要更好;

    損失函數會統計訓練集中全部圖像通過神經網絡處理的錯誤信息;

    經常使用的損失函數被稱爲 sum of squared errors (SSE) / 平方偏差和

    對於一張圖像,你期待的輸出是一隻貓或者(1,0,0),神經網絡的實際輸出是(0.37,0.5,0.13),

    平方損失會計算出全部圖像的損失,都會被簡化爲平方偏差之和;

    訓練的目的就是找到合適按鈕設置(權重)達到最小化損失函數的目的。

  3. How to update the knob setting / 如何調整權重

    最後咱們須要根據觀察訓練圖像的錯誤數據,來更新神經網絡的權重;

 

用一個單獨的 knob / 旋鈕 來訓練神經網絡

咱們如今有一千張貓的圖像,一千張狗的圖像,和一千張隨機的物體不是貓也不是狗,這三千張圖像就是咱們的訓練集;

若是神經網絡尚未被訓練,內部的權值是隨機的,當你將三千張圖像輸入神經網絡,獲得輸出的準確率爲 1/3 ;

爲了簡化流程,咱們的神經網絡只有一個旋鈕權值。因爲咱們已經僅僅有一個權值,咱們能夠測試一千種不一樣的權值測試,來找到能夠最小化損失函數最好的權值設置。這樣就完成了咱們的訓練;

然而,事實上神經網絡不只僅有一個旋鈕權值,以流行的神經網絡 VGG-Net 爲例,它有 1.38 億 個旋鈕權值。

 

利用多個旋鈕權值來訓練神經網絡

剛纔咱們用一個旋鈕來訓練神經網絡,在測試完全部可能性(可能數量很大)以後,咱們能夠找到最好的參數設置;

這有點不切實際,由於若是三個旋鈕權值,咱們就要測試十億次;

很明顯這種暴力搜索方式是不切實際的;

 

幸運的是,有一種解決方法,當損失函數是 convex function / 凸函數 時(看起來像一個碗);

咱們能夠用 Gradient Descent / 梯度降低 的方式來迭代找到最好的權重;

 

Gradient Descent / 梯度降低

讓咱們回到只有一個權值的神經網絡,而且假設咱們如今的旋鈕設置(或者權值)是 

若是咱們的損失函數像一個碗,咱們能夠找到損失函數的斜率,而後一步步移到最佳的旋鈕設置 , 這個過程稱爲 梯度降低;

由於咱們根據斜率(或者 Gradient / 梯度)逐漸向下移動( Descending / 降低 ),當咱們到達損失函數碗的底部,梯度或者斜率會變成零,而後完成你的訓練;

這些碗形狀的函數被稱之爲 convex functions / 凸函數

 

 

可是第一次是如何估計?你能夠選擇一個隨機數;

 

Note:當你使用一些流行的神經網絡架構,好比 GoogleNet 或者 VGG-Net,你可使用基於 ImageNet 訓練的權重,而不是選擇隨機的初始權值,這樣能夠收斂的更快。

 

當有多個旋鈕時,梯度降低也是類似的工做原理;

好比當有兩個旋鈕時,損失函數在 3D 座標中看起來像一個碗同樣;

若是你把一個球放到這個碗的任何位置,球會沿着 the maximum downward slope / 最大降低斜率 滾到碗的底部,這也是梯度降低工做的原理;

若是你讓球以全速滾下去,它會到達底部,可是因爲慣性和動能,還會繼續向上滾動,最終停在底部;

可是若是給這個球下落的時候增長約束條件,讓它更慢的降低,到達底部以後就不會再上升了,其實會花費更少的時間來達到底部;

實際上當咱們訓練一個神經網絡的時候,咱們使用一個參數 learning rate / 學習率 來控制收斂速度;

 

當咱們有不少個鈕釦(權重)時,損失函數的形狀在更高維的空間,依然是一個碗形。雖然這時候這個碗很難去可視化觀測,可是斜率和梯度降低依然能夠工做;

所以梯度降低提供了一個很好的找到最小損失函數解決方案。

 

Backpropagation / 逆傳播

有一個問題,知道了當前的權值設置,咱們怎麼知道損失函數的斜率?

損失函數的梯度取決於訓練集中,真實輸出和當前輸出的差異;

換句話說,訓練集的每張圖像,若是神經網絡在這些圖像上表現的差,都會最終的梯度計算都有貢獻。

用來估計損失函數的梯度的算法,被稱爲 Backpropagation / 逆傳播。

咱們會在未來的文章中介紹逆傳播。

 

 

# 英文版權 @ 

# 翻譯中文版權 @ coneypo

# 轉載請註明出處

相關文章
相關標籤/搜索