本課講的不是一篇文章,而是一門課。2015 年,斯坦福大學的李飛飛和她的學生 Karpathy 開了一門教電腦看圖的課,叫 CS231n。他就是第 1 課的作者。這一課是「看圖 AI」的總複習。
下面是一張寫滿數字的表格。把寫著 1 的格子塗黑,寫著 0 的格子不塗。塗完看看,藏的是什麼?
| 0 | 1 | 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 0 | 1 | 1 | 1 | 1 | 1 | 0 |
| 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 | 0 |
我塗出來的是:
提示:從第 1 行開始,一行一行塗。
在電腦眼裡,一張圖就是一大張數字表格。CS231n 這門課,就是教電腦從這堆數字裡認出東西。
把照片放大很多倍,會看到一個個小方格。每個小方格叫一個像素,只有一種顏色。彩色的點要用 3 個數記:紅光、綠光、藍光各有多亮。每個數從 0(不亮)到 255(最亮)。
比如紅色是 255、0、0,白色是 255、255、255,黑色是 0、0、0。CS231n 的講義常用一種 32×32 格的小圖,一共有 3072 個數。手機照片的數字就更多了。
最簡單的認圖辦法是:先記住很多張標好答案的照片。來了新圖,就和每張照片比一比,抄最像的那張的答案。這叫最近鄰,意思是「找離得最近的鄰居」。比法是把對應格子的數相減,差得越少越像。
上圖是示意。最近鄰會說:「這是狗!」它只比格子的顏色,背景佔的格子多,就說了算。照片挪一挪,數字也全變了。而且每認一張圖,都要和所有照片比一遍,很慢。所以 CS231n 馬上換了個辦法:學會打分。
新辦法給每種答案打一個分。看到一張貓的圖,電腦可能打出:貓 3 分、狗 5 分、車 1 分(示意)。狗的分最高,它就答錯了。錯了多少也變成一個數,叫損失,也可以叫「錯誤分」。錯誤分越小越好。
打分靠的是電腦裡很多個旋鈕(第 4 課講過)。怎麼調旋鈕?想像你蒙著眼睛站在山坡上,山有多高就是錯誤分有多大。你只能用腳感覺哪邊往下最陡,再往那邊走一小步。然後再感覺,再走。
這個辦法叫梯度下降。「梯度」就是「哪邊最陡、陡多少」。第 1 課裡電腦猜錯了就「悄悄調整自己」,用的就是它。每步邁多大,叫學習率。步子大小很要緊:
電腦裡的「山」有幾百萬個方向,每個旋鈕一個。辦法還是一樣:每個旋鈕都往「少錯一點」的那邊擰一小下。
還有個難題:幾百萬個旋鈕,每個該往哪邊擰、擰多少?電腦用的辦法叫反向傳播。我們用一個做檸檬水的小隊來想(示意):
試喝的人說:「太酸了!」這句話往回傳。加冰水的人想:「水影響小,我少改一點。」加糖的人想:「糖影響大,我多加一些。」擠檸檬的人收到:「檸檬汁多了。」下次少擠一點。每個人只要知道兩件事:傳回來的話,和自己這一步影響多大。電腦從最後的錯誤分開始一站一站往回算,走一趟就算出所有旋鈕該怎麼擰。
CS231n 教的卷積網絡,是用幾種積木一層層搭起來的。好幾種你已經認識了:
| 積木 | 做什麼 | 在哪課見過 |
|---|---|---|
| 小窗口(卷積) | 一個小窗口在圖上一格一格掃,找一種小花紋。 | 第 8 課 |
| 縮小彙總(池化) | 把圖縮小,只留下最要緊的數。見下圖。 | 新積木 |
| 近路 | 給幾層修一條近路,讓很深的網絡也能練好。 | 第 9 課 |
| 請假 | 練習時零件隨機請假,防止死記硬背。 | 第 3、12 課 |
池化是新積木。它把圖切成 2×2 的小塊,每塊 4 個數只留最大的 1 個。圖的寬和高都縮成一半,要算的數少了很多。池化沒有旋鈕,不用學。
小窗口還很省旋鈕,因為同一個窗口在整張圖上到處用。講義拿 AlexNet 第一層算過:每個位置配自己的窗口,旋鈕會超過 1 億個;到處共用,只要約 3.5 萬個。
2012 年 AlexNet(第 8 課)贏了看圖比賽後,很多人想學,卻沒有好教材。2015 年冬天,李飛飛和她的博士生 Karpathy 開出了 CS231n。2016 年,Justin Johnson 也加入講課。講義、作業和錄像都在網上,全世界很多人靠它入了門。講義裡的例子正好有第 8、9 課的網絡,還有專講跳格小窗口(第 11 課)和請假(第 12 課)的小節。
這門課最特別的是什麼都自己寫:學生要親手寫出往前算和往回傳,再用笨辦法檢查。Karpathy 認為,不懂往回傳話,網絡出了毛病就修不好。後來他又做了一套從零寫代碼的視頻課,叫「Neural Networks: Zero to Hero」。
今天很多聊天 AI 能看圖,但看圖的部分很多已經不用卷積網絡了。2020 年,有人把圖切成小塊,每塊當成一個「字」。這些「字」交給第 13 課的 Transformer 去讀。不過 CS231n 的基本功沒過時:錯誤變成一個數,往回傳話,順著下坡調旋鈕。訓練今天的聊天 AI,用的還是這幾樣。這門課換了名字,2026 年春天還在開。
1. 約好顏色代號:0 = 白,1 = 黑,2 = 紅,3 = 黃,4 = 藍。2. A 揹著 B 在格子①裡畫一個圖案,每格只塗一種顏色。
3. A 把每格換成代號寫進格子②,只把②交給 B。4. B 只看數字,在格子③裡塗色,再和①比一比。格子太小,就用最後一頁附頁上的大格子來玩。
記錄:64 格里,B 塗對了格。塗錯的格子,是數字寫錯了,還是看錯了?
你會發現:只要數字沒錯,B 就能畫出一模一樣的圖。電腦存照片、發照片,傳的也只是數字。
1. 「地圖員」照下表在 20 張紙片背面寫高度,按號碼排成一排,寫字的一面朝下。別讓「下山的人」看見高度表。
2. 下山的人從 1 號出發。每步只能翻開左右正好隔「步子大小」張的兩張紙片(一邊沒有就只翻一邊)。
3. 哪張比腳下低就走過去,兩張都低就走更低的。都不比腳下低,就停下。
4. 每輪從 1 號重來。第 4 輪停下後換小一號的步子:7 換 3,3 換 1。
| 號 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 高度 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 2 | 4 | 6 | 8 | 9 | 10 | 11 | 12 |
| 第幾輪 | 步子大小 | 走了幾步 | 停在幾號 | 那裡多高 | 到谷底了嗎 |
|---|---|---|---|---|---|
| 1 | 1 張 | ||||
| 2 | 3 張 | ||||
| 3 | 7 張 | ||||
| 4 | 先 7,再 3,再 1 |
你會發現:小步子一定能走到谷底,但要走很多步。大步子走得快,卻可能停在半山腰。先大步、再換小步,又快又能到底。科學家訓練電腦時,也常常先大後小地調學習率。
給家長和老師:本課講斯坦福課程 CS231n: Convolutional Neural Networks for Visual Recognition(2015 年冬季首開,李飛飛、Andrej Karpathy 主講,2016 年 Justin Johnson 加入,現名 Deep Learning for Computer Vision)。講義從 k 近鄰、線性分類器、SGD、反向傳播講到卷積網絡,作業要求用 numpy 手寫前向/反向並做梯度檢查。AlexNet 第一層不共享參數超過 1 億,共享後 34,944;VGGNet 約 1.38 億參數。
愛心數字表、像素蘋果的 RGB 值、貓狗格子對比、打分卡、檸檬水小隊、池化數字和山路高度都是示意;講義的最近鄰用 L1/L2 距離比較 CIFAR-10 像素。矇眼下山答案:1 張步走 11 步停在 12 號(高 1);3 張步走 4 步停在 13 號(高 2);7 張步走 1 步停在 8 號(高 5);先 7 再 3 再 1 共 3 步,停在 12 號(高 1)。熱身答案是愛心。
詳見本站 第 28 天中文導讀,代碼見開源項目 30u30 第 28 天目錄(英文) · 極客教育 jikejiao.com 原創講義 · 2026-10
配合第 9 節「方格紙像素畫」使用。顏色代號:0 = 白,1 = 黑,2 = 紅,3 = 黃,4 = 藍。可以剪開,A 拿①,B 拿③,②交給 B。