神經網路
步驟 1/36
1/36 · 問題與解法 · 先把問題說清楚,再看解法。左邊:80 個點,還沒有任何分界。 右邊:2-8-8-1 的整個網路。88 個權重畫成連線、17 個偏置畫成神經元下面的短豎,各自帶著數值,合計 105 個參數。
← 圖比螢幕寬,可以左右滑動 →
問題與解法1/1
先把問題說清楚,再看解法
左邊有 80 個點:上面一群 40 個,下面一群 40 個,彼此交錯;每個點只有橫、縱兩個數字,以及它屬於哪一群的正確答案。任務是學會從兩個座標判斷新點屬於哪一群,也就是二元分類。你的眼睛一秒就能分開,但一條直線辦不到。
訓練時會把這些標好答案的例子交給模型,卻不會告訴它「兩個彎月要怎麼分」的公式。這叫監督式學習:已知範例和答案,未知的是能延伸到新資料的規則。這一頁只專注這個範圍清楚的問題;神經網路也能做回歸、生成、影像和語言,但那些任務不會每一處都長得一樣。
右邊的 2 → 8 → 8 → 1 多層感知器(MLP)會把加法、乘法和彎曲函數疊起來。它先猜答案,用 loss 算出錯多少,再沿計算路徑倒著找出每個數字該怎麼調;反覆調整後,多條簡單直線就能共同組成彎曲邊界。
全頁分六個大段落:先看問題與解法,再讓一顆神經元正向、反向各走一次,接著擴成完整網路、訓練整批資料,最後檢查規律能不能用在沒看過的資料。右邊現在只先亮出全貌,不用讀每條線;下一段會把其中一顆放大。
自己從亂數訓練一個
初始化種子 23 · 0/800
這一頁用到的名詞,一句話一個
- 參數 parameter
- 網路裡所有可以被訓練改動的數字,權重和偏置都算。這一頁的網路有 105 個:88 個權重加 17 個偏置。講「模型多大」時算的就是這個。
- 權重 weight
- 一個網路裡可以被改動的數字。它決定某個輸入對某個神經元有多重要。這一頁的網路有 88 個(另外還有 17 個偏置,合起來 105 個參數),最大的那些模型到了兆的等級。**學習的方法**兩者相同;架構、資料、以及讓那些權重跑得起來的整套系統則完全不同,那正是另外兩頁在講的事。
- 偏置 bias
- 加在加權和上的一個數字,跟輸入無關。它讓神經元的分界線可以離開原點——沒有它,所有的線都必須通過中心。
- 激活函數 activation function
- 加權和之後的函數;這一頁的隱藏層用 tanh。它提供非線性,所以多層仿射運算不會被合併回一層。輸出層則常依任務刻意不加,例如這一頁輸出的是原始分數。
- 損失函數 loss function
- 一個數字,說模型現在錯得多離譜。這一頁用平方差:(輸出 − 正確答案)²。訓練就是讓這個數字在訓練資料上變小——但那不等於在沒看過的資料上也變小,這一頁最後兩步就在講這件事。
- 梯度 gradient
- 對每一個參數問「把你往上動一點點,loss 會變多少」的那個數字。它有正負:正的代表往上動會變糟,所以要往下動。
- 鏈鎖律 chain rule
- 微積分裡的一條規則:兩件事串在一起時,整體的變化率等於各段變化率相乘。反向傳播就只是把它沿著一張圖用到底,沒有別的東西。
- 張量 tensor
- 一個裝數字的盒子,帶著形狀:一個數字是 0 維、一排是 1 維(向量)、一個表格是 2 維(矩陣),再上去就沒有專用名字了。它跟神經元是完全不同層次的東西——神經元是一小段運算,張量是裝資料的容器。會混淆通常是因為在 PyTorch 那類框架裡,你摸得到的每一個東西都叫 Tensor。這一頁的 Value 就是一個 0 維張量再掛上它的梯度;真實框架讓同一個物件裝一整層的數字,一次運算就算完整層,所以快,也所以沒有人像這一頁一樣把圖畫出來。
- 計算圖 computation graph
- 把一個算式拆成一個一個運算,記下誰是誰算出來的。正向的時候它記錄;反向的時候梯度沿著它往回走。它不是示意圖,是程式裡真的存在的東西。
- 反向傳播 backpropagation
- 沿著計算圖倒著走一次,讓每個節點用鏈鎖律把自己的梯度交給上游。重點是只需一次正向加一次反向,就能得到全部參數的梯度;每一趟仍會隨計算圖一起變大。
- 有限差分 finite difference
- 求梯度的笨方法:把一個參數加 0.00001 跑一次、減 0.00001 再跑一次,看 loss 差多少,除回去。答案跟反向傳播一樣,但每個參數都要重跑**兩次**,所以 105 個參數是 210 次。它的用途是驗證,不是訓練。
- 梯度下降 gradient descent
- 把每個參數往它梯度的反方向移動一小步,然後重複。「一小步」的大小叫學習率,太大可能震盪或發散、也可能把 tanh 推到飽和而卡住,太小則會等很久。
- 決策邊界 decision boundary
- 模型輸出剛好等於 0 的那一組點。在這一頁的二維平面上它畫出來是線,但不保證只有一條、也不保證連得起來;更高維時它是一張曲面。一顆神經元的邊界一定是直的;一個網路的可以彎,可以比任何一條直線豐富得多——但不是任何形狀,能表示到什麼程度仍然受深度和寬度限制。
- 過擬合 overfitting
- 模型把訓練樣本特有的細節(包括雜訊)也當成規律,於是訓練成績好過它在新資料上該有的表現。不一定表現為逐點背誦,也不一定每一個沒看過的點都變差。這一頁小到可以直接量:標籤全對的那次,驗證 loss 在第 8000 步觸底,之後回升 29%;把 4 個標籤改成錯的,觸底提早到第 1000 步、回升 255%。所以在這個實驗裡,乾淨的標籤沒有防止過擬合,只是讓它來得晚一點、輕一點。
105 個參數,800 步,分對 80 個點(100%),最終 loss 0.0498,梯度驗證誤差 +0.000000742。
空白鍵播放/暫停,← → 逐步。