
神經網路是一段透過數學運算,能預測得越來越準的程式碼。
你知道嗎?你用人臉辨識或是指紋解鎖手機,這功能的背後,都藏著一個聰明的幫手——神經網路。它就像一個模仿人腦的超級計算機,能從數據中學習,幫我們做判斷,例如,從辨認照片裡的貓狗到預測房價,都能利用神經網路。
本篇文章克里斯會介紹神經網路是什麼,尤其它的結構是什麼,神經網路的學習力從何而來。
雖然神經網路聽起來高深,但其實可以分成三個部分來認識:資料輸入、輸出預測、經驗累積。
第一鑰:資料輸入——給神經網路準備好食材
想要讓神經網路學好預測嗎?第一步得「餵」好的數據,就像廚師需要新鮮食材才能做出美味料理。
這些數據可以是圖片、文字、數字,只要能轉成數值,就能成為神經網路的「食材」。但怎麼準備這些數據?有三個重點:資料清理、資料預處理、資料拆分。
資料清理:把壞掉的食材丟掉
現實中的數據常常有點亂,例如照片裡模糊的像素,或是 Excel 表格裡少了數字。這些「壞掉的食材」會讓神經網路學得不好。
資料清理就像整理冰箱:把缺失的數據補上(例如用平均值填空)、把異常值丟掉(例如一個離譜的數字),確保數據乾淨整齊。
資料預處理:把食材切好、調好味道
資料清理完成後,還需進一步預處理,讓神經網路更容易「消化」這些資料。例如,一張圖片需要被轉換成數值陣列(像一張 4×4 的圖片會變成 16 個像素值)。如果要同時處理多張解析度不同的圖片,預處理階段通常會把它們統一調整成相同的尺寸(如縮成 64×64 像素),像把食材切成統一大小,方便烹飪。
此外,如果任務是文字辨識或圖像分類(例如辨識圖片中是「貓」還是「狗」),而且採用監督式學習方法,就必須為每張圖片提供正確的「標籤」。這些標籤告訴模型正確答案是什麼,讓神經網路能學會如何對應輸入與輸出。
資料拆分:分出練習和考試的題目
準備好乾淨整齊的數據後,為了看看神經網路學得怎麼樣,我們通常會把資料分成三份:訓練集(70%)讓神經網路練習,驗證集(15%)幫我們調整學習方式,測試集(15%)用來考試。
這樣將資料分清楚,能確保神經網路不只會背答案,還能應付沒看過的問題。
第二鑰:輸出預測——神經網路端出成品
神經網路的終極目標是學會預測,例如「這張照片到底是貓還是狗?」或者「這棟房子一年後值多少錢?」。這部分預測工作是由輸出層負責,就像廚師做菜,最後要把做好的菜端上桌。
輸出層是什麼?功能是什麼?其實,輸出層的功能會因為交給神經網路的「任務」而有所不同。
我們先來理解,輸出層是什麼?輸出層可以分為三個「什麼」來理解:給神經網路的任務是什麼、預測出來的數值代表什麼、預測轉變成什麼決策。
任務是什麼:端什麼菜用什麼盤子
有哪些預測任務?神經網路的任務有很多種,常見的任務:
- 分類任務:神經網路能幫你辨認照片裡的貓狗(多分類任務),或過濾垃圾郵件(二分類任務)。
- 回歸任務:神經網路能預測房價或明天的氣溫,給出具體數字。
- 還有更多的任務,比如 GPT 生成圖片或翻譯圖片中的語言。
簡單說,不同任務需要不同的輸出層設計。
現實中,分類任務的輸出層可能有多個神經元,可搭配 Softmax 輸出每個類別的機率(例如「 80% 是貓」);回歸任務則可以只用一個神經元,直接吐出數字(例如「房價預測一年後是 1500 萬」)。
預測出來的數值代表什麼意義:這道菜是什麼味道?
輸出層吐出來的永遠是數值,但這些數值的意義取決於神經網路面對的是什麼「任務」。
如果是貓狗的分類任務,輸出可能是 [0.8, 0.2],表示「80%是貓,20%是狗」;
如果是房價的回歸任務,輸出可能是 1500 萬,直接代表價格。
另外,為了確認神經網路學得好不好,像這種分類任務,我們可以用圖表(像混淆矩陣)檢查它猜對多少次。
如何將數值轉換成決策:這道菜的影響力
預測出來的數值,轉換成決策(實際的行動)。例如,貓狗分類中,選機率最高的貓作為答案,然後在螢幕上顯示「這是一隻貓」給你看;垃圾郵件過濾中,如果機率超過 0.5 的郵件,就標為「垃圾」,然後丟到垃圾桶中。
螢幕上顯示貓和丟到垃圾桶中就是這邊說的決策。
有時候,我們還會用進階技巧(像Top-K預測),挑出最可能的幾個答案,確保決策更可靠。
這些決策就像把菜端給客人,解決生活中的問題。例如,神經網路的影像辨識幫醫生判斷X光片或讓手機認出你的臉後,自動解鎖手機,這都是實際生活中的應用。
簡單說,輸出層讓神經網路將數據轉變成對我們有用的決策,在生活中解決問題,讓生活更簡單!
第三鑰:經驗累積——神經網路的學習廚藝
很多人可能會問,到底神經網路怎麼從一堆數據變「聰明」,預測的越來越準?答案是學習,就像廚師反覆練習做菜一樣。
這部分是神經網路的核心,是一個不斷試錯修正的過程。但是其實說穿了就是數學計算,加減乘除微分而已啦!
到底如何做到的?可拆解成三個核心來認識:順向傳遞、計算梯度、反向傳遞。
順向傳遞:數據傳遞,接力賽跑!
什麼是順向傳遞?
要先知道神經網路可以有一層、二層、三層或更多層。在神經網路裡,可以想像資料是一個跑者,資料的順向傳遞是一場接力賽。假設有一個三層的神經網路,資料從輸入層(第一層)起跑,在跑道上經過隱藏層(第二層),一路跑到輸出層(第三層終點),這個過程叫做順向傳遞。
最前面的層叫做輸入層,最後面的層叫做輸出層,中間的都叫做隱藏層。
資料在跑的過程中,會改變嗎?會!
改變的方式,可以先看下面的二元一次方程式:
$$ y = \sigma (wx + b) $$
如果是一層的神經網路,且輸入是一個神經元,輸出也是一個神經元,那其實上面的二元一次方程式就是一個神經網路了。
可以這樣理解:資料x乘上一個「權重 w」(重要程度),加上一個「偏值 b」(調整值),再通過「激活函數 σ」決定了y。(後面會討論激活函數是什麼)
那這個y是什麼?其實就是前面說的,神經網路的輸出層算出來的預測(例如回歸任務說的「房價是 1500 萬」。)
這整個過程叫順向傳遞,一個資料從起點x跑到終點y的過程。
損失函數:導航,計算出修正的方向
如果是監督式學習,資料會包含神經網路需要的答案,專業的說法稱之為「標籤」。像是這間房子的價格是「1200 萬」、那間房子的價格是「1500 萬」。
當神經網路第一次跑到終點時(計算出預測值y),假設y= 960 萬,代表模型預測這間房子的價格是 960 萬,而「標籤」真實值卻是 1200 萬。
此時,「損失函數」就用來計算 960 萬和 1200 萬之間的差距。如果是回歸任務的誤差,常用均方誤差(MSE)來計算:
$$ 損失函數 = \left[ (960 – 1200)^2 \right] $$
簡單來說,損失函數會計算模型預測的房價(96 萬)和實際房價(120 萬)相比,錯了多少。
不同的損失函數,適用於不同的任務。常見的損失函數,包括用 均方誤差(MSE) 來算房價預測這類的回歸任務誤差,或者用 交叉熵(Cross Entropy) 來計算圖像分類等分類任務的誤差。
反向傳遞:知道錯了多少後,去跑道上修改權重和偏值
知道損失函數的大小後,下一步是修正,讓神經網路模型更準。數學上,就是損失函數的數值越小越好。然而,要讓損失函數變小,必須要先知道哪些權重影響了損失函數,這要先知道「微分」是什麼!
讓我們再看一次這個二元一次方程式:
$$ y = \sigma (wx + b) $$
將它化簡成下面的函數形式,因為我們知道y是x的函數,x是輸入(資料),y是輸出(預測)
$$ y = f(x) $$
如果想知道x如何影響y,你會怎麼做?對x微分!多一個點。
$$ y = f′(x) $$
如果只有一層的神經網路,就是如此簡單。
進階一點,如果有一層隱藏層呢?
簡單!就用數學工具—鏈鎖律(Chain Rule)從終點往起點的方向推算就好了!
相關文章:有隱藏層的神經網路,怎麼學習的?(施工中)
但到底對x微分目的是算什麼?
其實就是算出跑道上的「權重」對錯誤的影響,這叫梯度,就像找出「跑者在哪個跑道跑慢了」,想要快一點?權重加大一點,什麼意思?假設原本是一個水平的跑道,權重加大一點就類似把跑道變得往下斜的斜坡,有助於跑得更快。
所以,如果想要損失函數的值更小(預測和答案的距離更近),可以調一下權重,進一步縮小這個距離(也稱作 Error)。
循環、不斷地縮小這個 Error 的過程中,權重和偏值也會不斷被調整,直到損失函數夠小(錯誤夠小)為止。
最後,如何判斷訓練是否順利呢?如果訓練的過程,錯誤是逐漸越來越小(收斂),表示神經網路模型有學好;相反的,如果錯誤忽大忽小(發散),可能需要做進一步的分析。
結語:資料輸入、輸出預測、經驗累積—備料、試做、學習
所以啊,神經網路就像一個認真學習的小廚師,從輸入層的備料(資料輸入)、輸出層的試做(輸出預測),到試菜修正學習(經驗累積),一步一步學會怎麼做出好吃的料理、正確的預測。
下次你們使用臉部解鎖手機或是讓 AI 幫你分類照片、預測房價,就清楚背後其實就是這位「數據廚師」。看似神秘,其實結構簡單,只要你掌握這「三鑰」,也能摸清楚神經網路。