模型到底是什麼?從資料學習,究竟改了什麼?
上一篇說,機器學習 (Machine Learning) 可以從資料形成判斷方式。這次先追一個具體問題:程式從資料學習時,到底改了什麼?
不知道單價,只拿到幾張收據
假設你想買糖果,卻沒看到價目表。你手上只有同一家店、同一種糖果的購買紀錄:
| 買了幾顆 | 收據上的總價 |
|---|---|
| 2 顆 | 10 元 |
| 4 顆 | 20 元 |
| 6 顆 | 30 元 |
你大概已經看出來:每顆應該是 5 元。但程式不會自己「看出來」;我們要指定它怎麼算、怎麼比較,再讓它根據收據選出單價。
先選一個最簡單的計算方式:
估計總價 = 糖果顆數 × 每顆單價
這就是本章的模型 (Model):接收糖果顆數,使用目前的單價,算出總價。它要估計一個數值,這類任務叫迴歸 (Regression)。模型可以小到只有這個公式,先不需要複雜的神經網路 (Neural Network)。
| 部分 | 本例是什麼 | 做什麼用? |
|---|---|---|
| 輸入 | 這次買幾顆 | 每次要計算的資料 |
| 計算形式 | 顆數 × 單價 | 人先選定的公式形式 |
| 參數 (Parameter) | 每顆單價 | 模型目前使用、可以調整的數值 |
| 輸出 | 估計總價 | 這次算出的結果 |
顆數是你這次交給模型的輸入;單價是模型裡的參數。 兩者都會影響總價,但扮演不同角色。
練習先把單價設成 1 元。買 2 顆,模型就算出 2 元。如果只把顆數改成 8,單價仍是 1 元,結果會是多少?
先把糖果改成 8 顆,看看單價是否跟著變。再按「依紀錄訓練」,看程式如何從收據選出單價;最後換另一組收據,比較訓練前後的總價。
換顆數,是使用模型;改單價,才改變模型
| 動作 | 糖果顆數 | 模型使用的單價 | 估計總價 |
|---|---|---|---|
| 初始狀態 | 2 | 每顆 1 元 | 2 元 |
| 只換輸入 | 8 | 每顆 1 元 | 8 元 |
| 顆數不變,改單價 | 8 | 每顆 5 元 | 40 元 |
前兩列的模型都在做「顆數 × 1」。總價變了,是因為你改了顆數,模型的單價沒有改。
使用模型目前的參數算結果,叫推論 (Inference)。就像單價不變時,你仍然可以問它買 2 顆、4 顆或 8 顆要多少錢,不需要每次重新學習。
第三列則把單價從 1 改成 5。即使仍買 8 顆,總價也從 8 變成 40。這是參數改變的效果。
練習可以讓你手動改單價,方便比較。不過,你直接選 5,和讓程式根據收據找出 5,是不同的過程。
程式怎麼從收據找出單價?
剛才的三張收據,就是訓練資料 (Training Data)。糖果顆數拿來算,收據總價拿來檢查算得對不對。
先試兩個單價:
| 試用的單價 | 買 2 顆,模型算多少? | 收據寫多少? | 差距 |
|---|---|---|---|
| 每顆 1 元 | 2 元 | 10 元 | 少算 8 元 |
| 每顆 5 元 | 10 元 | 10 元 | 沒有差距 |
再拿另外兩張收據檢查:每顆 5 元時,4 顆算出 20 元、6 顆算出 30 元,也都對上了。
在這個練習裡,程式會試算 0~6 元這七個候選單價。每個單價都拿同樣三張收據檢查,最後選出差距最小的單價:5 元。 這個選出的數值會取代模型原本的 1 元。
這種依資料選擇或調整參數的過程,叫訓練 (Training)。人仍需決定公式形式、提供哪些收據,以及怎麼比較差距;並不是程式什麼都不用設計。
練習中的差距評分叫損失 (Loss)。本例用平均平方誤差 (Mean Squared Error, MSE):先把每張收據的「估計總價 − 收據總價」平方,再取平均,分數越小越接近這組收據。例如單價 1 的三筆差距是 −8、−16、−24,平方後是 64、256、576,平均約為 298.67;單價 5 的差距都是 0,分數也是 0。
學完後,用找到的單價算新問題
訓練選出每顆 5 元之後,模型可以拿它算新的顆數:
收據 → 比較候選單價 → 選出每顆 5 元
新問題:買 8 顆 → 8 × 5 → 估計 40 元
收據只有 2、4、6 顆,沒有一張寫著「8 顆 40 元」。程式仍能回答,是因為它用找到的單價做乘法,不是查到一筆一模一樣的答案。
但 40 元仍是根據這個模型算出的估計。如果店家對 8 顆提供折扣,實際總價就可能不同。對上這三張收據,不代表任何新情況都一定算得準。
換另一家店的收據,單價會立刻變嗎?
練習中的「另一組紀錄」改用另一家店的示意收據:2 顆 6 元、4 顆 12 元、6 顆 18 元。
先只換收據,不按訓練。模型仍使用先前的每顆 5 元,所以買 8 顆仍估計 40 元。
按下訓練後,程式才重新比較候選單價。這次會選出每顆 3 元;買 8 顆的估計便從 40 元改成 24 元。
換掉提供的資料,和執行訓練,是兩件事。
| 動作 | 模型的單價會不會變? |
|---|---|
| 改成買 8 顆 | 不會,只用目前單價計算 |
| 換收據,但還沒訓練 | 不會,還沒依新收據選單價 |
| 依另一組收據訓練 | 本例從每顆 5 元變成 3 元 |
| 對同一組收據再訓練 | 本例維持原值,因為它已是候選中差距最小的單價 |
因此,不能只看「結果變了」,就說模型剛剛學到新東西;執行訓練,也不代表每次參數都會改變。
這和語言模型有什麼關係?
人可以直接把「每顆 5 元」寫進程式,也可以讓程式從收據選出 5。最後都可能使用相同的乘法;差別是這個數值如何決定。
語言模型 (Language Model) 的計算複雜得多,參數也不是糖果單價。但共同分工仍是:訓練根據資料調整參數;推論使用目前的參數處理這次輸入。
你在聊天時換一個問題,回答可能改變,就像換糖果顆數會改變總價。回答變了,本身不能證明參數剛剛更新。
這個乘法例子只拆開共同分工,不代表糖果總價計算就是完整的 AI,也不代表語言模型只是查單價。接下來再用語言模型的例子,追文字如何進入計算。
接著讀〈我傳一句話給 AI,到底發生了什麼?〉,把剛才的「輸入、參數、計算」帶到常見聊天語言模型。原先的〈預測錯後,參數與候選機率如何改變?〉則追更深入的一步更新。
參考:Google 線性迴歸、Google 損失與平均平方誤差(2026-10-02 查核)。糖果收據、數值與有限候選訓練為本地教學設計,不是來源中的資料或真實店家報價。