一張圖
其實是一個數字矩陣
把一張 28×28 的手寫「3」放大,它不是連續的筆畫,而是 784 個小方格。每格存一個 0(純白)到 255(純黑)的數字。
所謂「機器閱讀圖片」—— 讀的就是這張表。
把滑鼠移到任一格,看看它的灰階值。
不是一眼看完整張圖。
而是無數個小區域,逐一掃過、計算、組合。
把一張 28×28 的手寫「3」放大,它不是連續的筆畫,而是 784 個小方格。每格存一個 0(純白)到 255(純黑)的數字。
所謂「機器閱讀圖片」—— 讀的就是這張表。
把滑鼠移到任一格,看看它的灰階值。
{{ isCustomKernel ? '自己動手改每一格,kernel 變成你的指令。' : currentKernelMeta.description }}
Kernel(核)是一個很小的數字矩陣。把它想像成一片帶著偏好的濾鏡:
中心值高、周圍值負,就會對「明暗對比強烈」的位置大力反應——那裡通常是邊緣。
把你自訂 kernel 的中心改大(例如 9),四周改成 -1,它就學會了偵測邊緣。把中心改回 1、四周都 1,它就變成了「平均模糊」。
這就是 CNN 的第一個魔法 —— kernel 長什麼樣,它就看到什麼。
將對應格子相乘再加總 —— 這個數字就是 feature map 上亮起的那一格。
剛才只示範了一個 kernel。實務上,CNN 第一層通常有 32 到 64 個 kernel 同時運作。有的偵測垂直邊、有的偵測橫向邊、有的偵測對角線、有的偵測弧度。
每個 kernel 都會產出自己的 feature map。把它們堆疊起來,就形成一個立體的「感官切片」。
試試點擊任一張 feature map,看它到底是用哪把 kernel 做出來的。
max(0, x) —— 比零小的數全部夷平成「沒反應」。
{{ poolType === 'max' ? '保留每區塊最強反應,抓特徵。' : '取每區塊平均,抓整體趨勢。' }}
{{ currentDepth.desc1 }}
{{ currentDepth.desc2 }}
沒有人告訴 CNN「3 由上下兩個彎組成」。它只是在數百萬張圖上反覆被調參,自己長出這種層級結構。
這些滑桿代表 CNN 在各 feature map 上的「強度」。
從像素矩陣,到邊緣偵測,到多層堆疊,到最終投票——
整個過程其實沒有一步用到「理解」。機器不知道「3」是什麼,也沒有眼睛。
但當數百萬張圖片經過同樣的流程反覆調參,這條計算管道最終長出了某種近似視覺的能力。