第二章 文獻探討
2.2 手寫辨識作法與 TensorFlow
TensorFlow MNIST For ML Beginners[9]為 TensorFlow 官方網站的新手入門教學 範例,以複雜度較低的數字手寫辨識來介紹 TensorFlow 的基本功能、使用方式以及強 gradient descent optimizer 對類神經網路內的參數(權重)做調整以減小誤差。此方 式擁有 92%的辨識率。
第二階段則是改進第一階段的類神經網路,分成為五層的類神經網路的架構:兩層 convolutional layer、densely connected layer、dropout layer、readout layer。
其中兩層 convolutional layer 和 densely connected layer 包含了 pooling layer 和 ReLU layer。整個網路的設計核心集中在了兩層 convolutional layer,本文中利 用了 5x5 的權重矩陣對輸入的圖片做掃描,掃描方式為每次掃描只向右或向下移動一 個 pixel,將 5x5 權重矩陣內的所有元素與目前掃描的圖片區塊內對應位置的 pixel 值
10
相乘之後再全部相加可得到一個值(若目前掃描的 5x5 區域超出圖片範圍,則將那些位 置補零),如此掃描完整張圖片之後,對每一個得到的值加上一個偏差值(bias),利用 ReLU 函 數 , 如 圖 2-2-2 , 將 所 有 小 於 零 的 元 素 令 為 零 , 即 可 以 得 到 一 張 特 徵 圖 (feature map)。不同的 5x5 的權重矩陣依照上述的步驟,都可以得到不同的特徵圖。
接下來,將這些特徵圖經過 pooling layer,在 pooling layer 中,會使用 2x2 的矩陣,
每次掃描只向右或向下移動兩個 pixel,並從 4 個元素值中,挑選最大之值並保留,掃 描完整張特徵圖後,保留下來的值即會形成新的圖片,此時這些新的圖片的尺寸長寬 為輸入圖片的二分之一。
圖 2-2-2 Relu function: h = max(0, y), where y = Wx + b
例如,若初始輸入的圖片為 28x28,經過一層的 convolutional layer 之後,將會 變為 14x14、輸出 32 張 feature map,經過第二層 convolutional layer 之後,會變 為 7x7、輸出 64 張 feature map。雖然圖片尺寸逐層變小,但是相對地節點個數會增 加。
經過了兩層 convolutional layer 後,接下來會進入 densely connected layer,
又可稱為 completely connected layer,在此階段,輸入的圖片已經變為尺寸 7x7,
由於上一層 convolutional layer 總共輸出了 64 張圖片,這 64 張圖片會被變形
11
(reshape)為 7x7x64 的矩陣向量,與相同尺寸的權重矩陣(feature)作相乘,並加上偏 差值,產生出 1024 個輸出。
Dropout layer 只有在 training 的時候才會使用,為了預防 overfitting,又稱為 過度學習,避免較不好的 training data 影響類神經網路內的參數調整。可以自由調 整 keep_prob 參數使在訓練的過程中,無視誤差過大的 training data 的訓練結果,
例如,設定為 0.5 的時候,若每次讀取 10 筆 training data 作訓練,會捨棄 5 筆產生 最大誤差的訓練結果。
Readout layer 為輸出層,輸入數量為 1024 個,輸出為 10 個。利用尺寸為 1024 的矩陣向量對輸入作矩陣相乘,並加上偏差值(bias),產生 10 個輸出。這 10 個分別 代表著最後辨識結果每個數字的機率。
此階段改為使用 Adam optimizer 對類神經網路內的參數(權重)做調整以減小誤差。
在此階段,辨識率大幅提升至 99.2%。
12