神經網路識數字 · NeuroLab

神經網路辨識手寫數字:在手寫板上寫一個數字,看訊號在三維神經網路裡逐層點亮、給出答案;親手給一個神經元畫權重,在瀏覽器裡從隨機權重開始現場訓練,看卷積核掃過整張圖,再看 AI 在旋轉、平移和雜訊面前怎樣認錯。

學科:信息技術 · 適用學段:國中、高中 · 知識點:圖像的數位化、神經元與權重、訓練與梯度下降、卷積網路

章節內容

圖像就是數字

在右邊的手寫板上寫一個數字。它會被縮成 28 × 28 個小格子,每個格子是一個像素,用 0(黑)到 1(白)之間的數表示有多亮。方塊越高、越亮,這個像素的數就越大。

所以在電腦眼裡,這張圖只是 784 個數。後面所有的「辨識」,都是對這 784 個數做加減乘除。

寫之前還有一步預處理:先框出筆跡,縮放到 20 × 20 以內,再按「重心」放到正中間。訓練用的 MNIST 資料集(7 萬張真人手寫數字)就是這樣整理的,寫得大小、位置不同也不要緊。

一個神經元

一個神經元只做一件事:把 784 個像素各乘上一個權重再全部加起來,加上偏置 b,得到 z;再經過激活函數,變成它的輸出 a。

地上的方塊:高度是像素,顏色是權重——藍色是正權重(這裡有筆畫就加分),橙色是負權重(這裡有筆畫就扣分)。連到大球上的線越亮,這個像素的貢獻越大。

選中右邊的畫筆,直接在地上的方塊上拖動來「畫權重」。試著設計一個只認「1」的神經元:中間一條豎線畫成藍色,兩側畫成橙色,再用「試一個 1」「試一個 0」檢驗它。

多層網路

把很多神經元排成幾層:第一層 32 個神經元各看整張圖,第二層 16 個看第一層的結果,最後 10 個輸出神經元分別代表 0 到 9。輸出經過 softmax 變成機率,最高的就是辨識結果。

寫一個數字,看訊號從左到右一層層流過去:連線只畫貢獻最大的那些,藍線是「支持」,橙線是「反對」。

點第一層的任意一個方塊,它頭頂會浮出它的 784 個權重拼成的圖——這就是它在找的筆畫形狀。這些權重不是人設計的,是網路看了 6 萬張手寫數字後自己學出來的。

現場訓練

這一次,網路的權重全是隨機數,什麼也不會。點「開始訓練」,它會一張張地看 3000 個帶答案的手寫數字:先猜,再用損失衡量猜得有多錯,然後把每個權重朝「讓損失變小」的方向挪一小步——這就是梯度下降。

看第一層頭頂的 32 張權重圖:一開始是雪花一樣的雜訊,訓練中慢慢長出筆畫的形狀。右邊的曲線裡,損失在下降,準確率在上升。

每一步挪多遠由學習率決定:太小學得慢,太大會在谷底兩邊來回跳,甚至越學越糟。訓練好以後暫停,再用手寫板考考它。

卷積網路

多層網路的每個神經元都盯著整張圖,數字挪一下位置就不認識了。卷積網路換了個思路:用一個 5 × 5 的小窗口(卷積核)在圖上逐格滑動,每到一處都問「這裡有沒有我要找的筆畫」,結果排成一張特徵圖。

第一層有 6 個卷積核,找橫、豎、斜這樣的簡單筆畫;池化把每 2 × 2 取最大值,圖變小但特徵保留;第二層 12 個卷積核把簡單筆畫組合成拐角、圓弧;最後才判斷是哪個數字。

看「掃描動畫」,再點任意一張特徵圖看它的卷積核。它的參數比多層網路少得多,準確率反而更高。

AI 也會犯錯

把數字旋轉、挪到角落、加上雜訊,看右邊的置信度怎麼一點點崩掉。訓練時它沒見過這樣的圖,就容易認錯;多層網路對位置尤其敏感,卷積網路穩一些,但也不是不會錯。

點「看它認錯的數字」,翻翻測試集裡它真的認錯的例子——有些連人也要猶豫。再在手寫板上畫一個笑臉或字母:它只認識 0 到 9,沒有「我不知道」這個選項,照樣會自信地報出一個數字。

所以 AI 的判斷要看訓練資料是否全面,重要的事情還需要人來把關。

更多實驗

返回首頁