# 章節包:人工智慧導論(AI)W3(9/24)第 03 章「局部束搜尋與基因演算法」
影片 0:42:49–1:10:01,YouTube ID S1km7opW6rw。Notion 章節頁 https://app.notion.com/p/3e6fc631b0308105a674c6e43a405835(頁 ID 3e6fc631b0308105a674c6e43a405835),頁面標題「03 局部束搜尋與基因演算法(0:42–1:10)」。
## 1. 第一行(直接照抄,不要改)
[人工智慧導論](https://app.notion.com/p/3e6fc631b0308131b213f0a3d93fe91d) › [W3(9/24)](https://app.notion.com/p/3e6fc631b0308137bbd8e73f5c6f1b62) › 03|影片 [0:42:49–1:10:01](https://www.youtube.com/watch?v=S1km7opW6rw&t=2569s)|投影片 Ch4 p.12–15|上一章 [02 爬山法複習與模擬退火(0:23–0:42)](https://app.notion.com/p/3e6fc631b03081a79865f701c688c1c4)|下一章 [04 連續空間的梯度上升(1:21–1:40)](https://app.notion.com/p/3e6fc631b030812a99d4eb793b437690)
## 2. 各段標題(照順序;每段一個 ## 標題,直接照抄連結)
- `## [0:42:49](https://www.youtube.com/watch?v=S1km7opW6rw&t=2569s) 局部束搜尋` 老師講什麼:Local beam search 一次隨機撒 k 個解,把每個解的鄰居全部產生出來,再從所有鄰居裡挑最好的 k 個繼續。
- `## [0:44:42](https://www.youtube.com/watch?v=S1km7opW6rw&t=2682s) 跟 random restart 差在哪` 老師講什麼:Random restart 每次重跑互相獨立;beam search 把 k 組的鄰居放在一起 PK,好的區域可能把 k 個名額全拿走,等於資訊在平行搜尋之間互相傳遞。老師講了兩次。
- `## [0:47:22](https://www.youtube.com/watch?v=S1km7opW6rw&t=2842s) 它是策略,也有隨機版` 老師講什麼:老師說 beam search 嚴格說是一種搜尋策略,可以搭配爬山法或模擬退火。Stochastic beam search 依機率挑 k 個,越好的越容易被挑;深度學習的訓練策略裡也常看到 beam search。
- `## [0:49:17](https://www.youtube.com/watch?v=S1km7opW6rw&t=2957s) 基因演算法的名詞` 老師講什麼:GA 是 stochastic beam search 的變形,受演化論啟發:k 個隨機解叫 population,每個解叫 individual,解要寫成有限字母的字串,最常見是 0 和 1。
- `## [0:51:36](https://www.youtube.com/watch?v=S1km7opW6rw&t=3096s) 八皇后:染色體與適應度` 老師講什麼:把每一欄皇后由下往上的位置寫成一串數字,這串叫 chromosome(染色體),每個數字是 gene(基因);再用 fitness(適應度)幫每個盤面打分數。
- `## [0:55:39](https://www.youtube.com/watch?v=S1km7opW6rw&t=3339s) 選擇、交配、突變` 老師講什麼:依 fitness 比例挑父母(24、23、20、11 分對應 31%、29%、26%、14%),表現好的可能被挑很多次;隨機選切點做 crossover 產生子代,再以很小的機率做 mutation。
- `## [1:00:39](https://www.youtube.com/watch?v=S1km7opW6rw&t=3639s) 繁衍多代與各種變形` 老師講什麼:繁衍很多代後挑最好的解。演化式計算本身就是一門課,有很多變形,例如讓超優秀個體「長生不老」、用實數當染色體;關鍵在把問題寫成染色體的形式。
- `## [1:03:18](https://www.youtube.com/watch?v=S1km7opW6rw&t=3798s) 課堂問答` 老師講什麼:模擬退火會不會越走越爛:溫度只會一路下降,最後越走越爛的機率非常低(證明略過)。找不到全域最佳解怎麼辦:實務上用 random restart 多跑幾次,夠好就好,連 GPT 找到的也只是 local maxima。(下課時另有同學問能不能記住歷史最佳解,老師說實務上可以,1:10:16)
## 3. 老師強調/會考/不考的地方(原句已驗證;寫進筆記時 ASR 錯字要改正)
- (0:45:14) [強調] 「差別在於Local Research,它其實有不同Solution之間的溝通,再講一次,再講一次」 → Local beam search 和 random-restart 的差別:k 條平行搜尋之間會傳遞資訊(逐字稿的 Local Research=Local Beam Search)
- (1:06:10) [不考] 「只是我們書上這個證明的部分就略過不談」 → 模擬退火收斂的數學證明略過不講(原話是「略過不談」,沒有明說不考)
## 4. 這章摘要與重要度
局部束搜尋一次追蹤 k 個解並放在一起比較,基因演算法再加上選擇、交配、突變;最後是課堂問答。(核心)
## 5. 整堂課的提醒(ASR 錯字、老師口誤、投影片缺公式等;只用跟這章有關的)
- 0:00:42–0:09:57 直播沒有聲音(0:00:42 只有一句「今天是9月24號」),從 0:09:57 的「上課注意事項」才開始有內容。不確定這 9 分鐘有沒有漏掉課程內容。
- 這堂有兩次下課:1:10:01–1:21:32、2:04:58–2:16:36。
- Ch12 投影片本機沒有(課程網站連不上),第 07 章的 Exam-ready 要等主理人從 NTU COOL 下載後再補(停車場 P1)。
- Ch4 講義 PDF 頁碼有跳號:_text 的 p.27 以後,投影片上印的頁碼是 52–63。本週 slides 欄一律用 _text 的 PDF 頁序 p.N。
- 0:53:50–0:55:00 逐字稿有大量重複和亂碼(八皇后 fitness 的例子),老師那段講的 fitness 定義聽不清楚。
- 課本 Ch5–10(符號邏輯)整段跳過,Ch4 講完直接進 Ch12(2:30:39)。
- 老師講的和課本不一樣:老師把牛頓法說成 line search 找最好 α 的一種做法(1:38:54、1:44:29、1:47:11);投影片 p.20、p.23 則是把 Newton–Raphson 當成另一種更有效的方法,直接解 ∇f(x)=0,更新式是 x ← x − H⁻¹∇f。寫筆記建議照課本寫,另加一句「注意:老師口頭說的是……」。
- 「不考」這類 emphasis 共 4 條(1:06:10、1:30:17、2:00:18、2:31:02),老師的原話都是「略過不談/不會告訴你/不再講/跳過」,沒有一條明說「不考」。直接標【老師說不考】可能太強,建議寫成內文的「注意:本課不講……」,由寫章節的人判斷。
- 0:53:50–0:55:00 逐字稿亂掉:「這個」連續重複十幾次,還有「measure 3 種不同的劑다車 種」「erlebt,omination」。八皇后 fitness 的定義聽不清楚;推測是課本的定義(互不攻擊的皇后對數,24/23/20/11 分),寫筆記照課本寫。
- Ch4 PDF 頁碼跳號:_text 的 p.26 之後,p.27 投影片上印的是 52,一路到 p.35=63。印刷頁 27–51 不在講義裡,老師也沒講(推測是課本 4.3 非確定性動作等內容,不確定)。p.4、p.28 是純圖片頁,要看圖。
- 1:17:52 那行「我們在這一張的前半段那一邊呢」時間戳疑似錯位:它的語意接的是 1:21:32,老師實際應該是 1:21:3x 左右才開始講課。休息結束時間我用 1:21:32。
- 已知事實說「可能還有 Ch3 收尾」:這堂沒有用到 Ch3 投影片,只在 2:24:29 口頭提到上一章的 DFS、BFS、A*。Ch4 p.2–9 上週(W2)已經講過(W2 逐字稿 2:29:44 講了 p.8 的 86%/14%),本週只是快速複習。
- 老師口頭說小鎮蛀牙的先驗機率是 25%(2:51:1x);我記得課本(AIMA 4e)是 P(cavity)=0.2、P(cavity|toothache)=0.6,但不確定。等 Ch12 投影片到手再核對。
- Stochastic beam search 老師口頭說「跟我目前現有的 Solution 差不多的挑的機率越高」(0:48:23),講得不太清楚;投影片 p.12 的說法是挑選機率是 value 的遞增函數。寫筆記照投影片寫。
- 第 06 章只有 13 分鐘,比 15 分鐘的下限短。它前面是下課、後面接 Ch12,沒辦法合理併到別章,所以維持獨立一章。
- emphasis 的 quote 照規定用逐字稿原文,裡面有 ASR 錯字,寫進筆記時要改成正確的字。本週常見錯字可以補進 fix_transcript.py 的 ASR 表:Hear/Heel Climbing=Hill Climbing、Semantic Unnealing/Seminity Unlimited/Seminating and Nearing=Simulated Annealing、Local Bean Search/Local Research=Local Beam Search、經驗演算法/經易演算法=基因演算法、chromazone=chromosome、Colon=column、八王二=八皇后、修道口=虛擬碼、T度/t度=梯度、State Piste Assent=steepest ascent、S1/S2=x1/x2、助療=蛀牙、simple space=sample space、Peper-Z(2:39:38,推測=propositional logic)、一頓=一對(doubles)、汗毛牌=號碼牌、admission=admissible、snide=Slido。
## 6. 投影片文字(這章範圍)
**這幾頁的公式或內容只在圖裡(文字檔抓不到),寫 Exam-ready 與公式前先用 Read 看這幾張圖:**
- Ch4 p.12 → C:\D槽\TAICA課程\_work\notes-v2\ai-w3\img\brief_Ch4_p012.png
- Ch4 p.13 → C:\D槽\TAICA課程\_work\notes-v2\ai-w3\img\brief_Ch4_p013.png
- Ch4 p.14 → C:\D槽\TAICA課程\_work\notes-v2\ai-w3\img\brief_Ch4_p014.png
--- Ch4 p.12 ---
• The local beam search algorithm keeps track of k states rather than just one.
• It begins with k randomly generated states. At each step, all the successors of
all k states are generated. If any one is a goal, the algorithm halts. Otherwise, it
selects the k best successors from the complete list and repeats.
• A local beam search seem to be nothing more than running k random restarts
in parallel instead of in sequence. In a random-restart search, each search
process runs independently of the others. In a local beam search, useful
information is passed among the parallel search threads.
• Stochastic beam search chooses k successors at random, with the probability
of choosing a given successor being an increasing function of its value.
Local Beam Search
12
--- Ch4 p.13 ---
• A genetic algorithm (or GA) is a variant of stochastic beam search in which
successor states are generated by combining two parent states rather than by
modifying a single state.
• GAs begin with a set of k randomly generated states, called the population.
Each state, or individual, is represented as a string over a finite alphabet—
most commonly, a string of 0s and 1s.
Genetic Algorithms
13
--- Ch4 p.14 ---
• A fitness function should return higher values for better states. The probability
of being chosen for reproducing is directly proportional to the fitness score.
• For each pair to be mated, a crossover point is chosen randomly from the
positions in the string.
Genetic Algorithms
14
--- Ch4 p.15 ---
• Finally, each location is subject to random mutation with a small independent
probability. In the 8-queens problem, this corresponds to choosing a queen at
random and moving it to a random square in its column.
Genetic Algorithms
15
## 7. 逐字稿(0:42:49 前後各多 1 分鐘,原始行)
[00:41:50] 比如說你們現在,
[00:41:51] 理論上你們還年輕,
[00:41:53] 對不對?
[00:41:54] 你們應該可以去投,
[00:41:55] 比較高風險性的資產,
[00:41:59] 等到已經快要退休了,
[00:42:02] 老年人快要退休了,
[00:42:03] 他投的資產,
[00:42:04] 就應該要風險性比較低的,
[00:42:06] 因為他比較不能夠接受,
[00:42:08] 用比較爛的結果,
[00:42:10] 來取代掉現有的結果嘛,
[00:42:12] 所以隨著生命,
[00:42:14] 隨著人生也是一樣,
[00:42:15] 一開始溫度比較高,
[00:42:17] 你可以比較接受比較爛的結果,
[00:42:19] 因為蹲下是為了跳起來,
[00:42:22] 你可以這麼說,
[00:42:23] 好,
[00:42:24] 只要你年紀大了,
[00:42:26] 你就比較不願意,
[00:42:28] 用比較爛的選擇,
[00:42:30] 來取代掉你現在的選擇,
[00:42:33] 這樣懂我意思嗎?
[00:42:34] 就跟人生的哲理是一樣的,
[00:42:36] 這個就是Seminity Unlimited,
[00:42:38] 講完了,
[00:42:40] 就這樣,
[00:42:41] 那這個請大家自己去看,
[00:42:43] 這就是Seminity Unlimited的概念,
[00:42:45] 好,
[00:42:49] 那接下來,
[00:42:50] 繼續進階,
[00:42:52] 下一個叫做Local Bean Search,
[00:42:54] 好,
[00:42:55] 剛剛前面的Hear Climbing,
[00:42:57] 跟Seminity Unlimited,
[00:42:59] 一次就是看一組姐,
[00:43:02] 比如說我以一個姐為中心,
[00:43:04] 我去看周圍的鄰居,
[00:43:05] 然後去決定要不要取代,
[00:43:07] 對不對,
[00:43:08] 好,
[00:43:09] 那Local Bean Search是說,
[00:43:10] 我為什麼一次只看一個姐,
[00:43:12] 我可不可以一次就看K個姐啊,
[00:43:14] 對不對,
[00:43:15] 有沒有,
[00:43:16] 我在這個State Space裡面,
[00:43:17] 我一次就灑K個,
[00:43:19] Random灑,
[00:43:20] K個不同的點嘛,
[00:43:21] 對不對,
[00:43:22] 那以每一個點為中心,
[00:43:23] 去看一下週圍的鄰居嘛,
[00:43:25] 一次看K個,
[00:43:27] 好,
[00:43:28] 那所以說呢,
[00:43:29] It begins with K,
[00:43:30] Randomly generated state,
[00:43:32] 好,
[00:43:33] 那以每一個State為中心,
[00:43:36] 我去看,
[00:43:39] 第一個人,
[00:43:40] 以第一個人為中心,
[00:43:41] 去看一下他周圍的鄰居,
[00:43:43] 然後呢,
[00:43:44] 用最好的來取代掉他,
[00:43:45] 第二組姐,
[00:43:46] 我以他為中心,
[00:43:47] 看一下週圍的鄰居,
[00:43:49] 對不對,
[00:43:50] 不對,
[00:43:51] 我剛剛講太誇張,
[00:43:52] 應該是這樣講,
[00:43:53] 我第一個,
[00:43:54] Random的solution,
[00:43:56] 我去看一下他周圍的鄰居,
[00:43:58] 每一個,
[00:43:59] 我都可以知道他的objective function value嘛,
[00:44:02] 第二個,
[00:44:03] 以他為中心,
[00:44:04] 看一下他的鄰居,
[00:44:05] 第三個,
[00:44:06] 我也看一下他的鄰居,
[00:44:07] 假設,
[00:44:08] 每一個人,
[00:44:09] 都看10個鄰居,
[00:44:10] 那我現在一開始就隨機灑,
[00:44:12] 10個可能的解,
[00:44:14] 所以呢,
[00:44:15] Totally,
[00:44:16] 你是不是會有100個鄰居啊,
[00:44:18] 對不對,
[00:44:19] 因為一個人就看10個鄰居,
[00:44:21] 10個人就看,
[00:44:22] 10乘10,
[00:44:23] 100個鄰居,
[00:44:24] 他再從這100個,
[00:44:27] 所有官看到的鄰居裡面,
[00:44:30] 挑10個最好的出來,
[00:44:33] 這個就叫做Local Research,
[00:44:36] 講完了,
[00:44:39] 就這麼簡單,
[00:44:40] 好,
[00:44:41] 那,
[00:44:42] 這麼簡單,
[00:44:43] 你會想說,
[00:44:44] 這個跟,
[00:44:46] 這個跟我剛剛那個什麼,
[00:44:48] Random Restart Here Climbing,
[00:44:50] 有什麼不一樣,
[00:44:51] 剛剛Random Restart Here Climbing是說,
[00:44:53] 我隨機挑一個點,
[00:44:55] 以它為中心,
[00:44:56] 去看周圍的鄰居,
[00:44:58] 對不對,
[00:44:59] 然後一直跑Here Climbing,
[00:45:01] 好,
[00:45:02] 跑完,
[00:45:03] 得到一個最佳解,
[00:45:05] 啊,
[00:45:06] 我再隨機又再挑一個,
[00:45:07] 又再跑跑跑,
[00:45:08] 找到一個最佳解,
[00:45:09] 好,
[00:45:10] 那跟剛剛聽起來很像啊,
[00:45:11] 好,
[00:45:12] 我跟你講,
[00:45:13] 差別在哪裡,
[00:45:14] 差別在於Local Research,
[00:45:17] 它其實有不同Solution之間的溝通,
[00:45:23] 再講一次,
[00:45:25] 再講一次,
[00:45:26] 怎麼樣一個溝通方式呢,
[00:45:28] 它其實它的意思就是說,
[00:45:29] 比如說我今天,
[00:45:30] 我隨機灑十個,
[00:45:33] 我為了避免重複,
[00:45:35] 我隨機灑五個Solution好了,
[00:45:39] 我第一個Solution,
[00:45:40] 以第一個Solution為中心,
[00:45:42] 我去看周圍的十個鄰居,
[00:45:46] 好,
[00:45:47] 然後第二個Solution,
[00:45:48] 我也去看周圍,
[00:45:49] 找十個鄰居,
[00:45:50] 所以Totally我是不會找到五十個,
[00:45:53] 對不對,
[00:45:54] 這五十個裡面,
[00:45:56] 我要挑最好的五個出來,
[00:46:00] 有可能喔,
[00:46:01] 有可能我挑出來的這五個,
[00:46:04] 全部來自剛剛的第一個Solution的那十個鄰居裡面,
[00:46:13] 這樣大家懂我意思嗎,
[00:46:15] 它跟剛剛一開始那個Random Restart Here Climbing,
[00:46:19] 是不一樣的,
[00:46:21] 因為它是把所有這五個Random Start,
[00:46:26] Random State,
[00:46:28] 開頭的這五十個鄰居是一起同胞,
[00:46:31] 一起去PK得到最好的那五個,
[00:46:37] 好,
[00:46:38] 那當然也有可能說,
[00:46:39] 我是從第一個Random State的十個鄰居裡面挑出兩個,
[00:46:44] 然後呢,
[00:46:45] 第二個Random State挑出一個,
[00:46:46] 第三個又挑出兩個,
[00:46:48] 這樣去抽到所謂的最好的五個,
[00:46:50] 也是有可能的,
[00:46:52] 所以呢,
[00:46:53] 這一段的話,
[00:46:54] 這字比較多,
[00:46:55] 但講的就是在講這個意思,
[00:46:58] 你會覺得說呢,
[00:46:59] 這個做法好像Seem to Nothing More Than Running K Random Restart,
[00:47:04] 但其實不一樣,
[00:47:05] 好,
[00:47:06] 在Random Restart,
[00:47:07] 每一次Restart,
[00:47:09] 都是一個獨立的開始,
[00:47:11] 那如果是Local Bean Search呢,
[00:47:13] Useful Information is Passed Among the Parallel Search Threat,
[00:47:18] 好,
[00:47:19] OK,
[00:47:20] 好,
[00:47:21] 那這個,
[00:47:22] 所以,
[00:47:23] 嚴格來講,
[00:47:24] Local Bean Search啊,
[00:47:26] 它其實不是一種,
[00:47:28] 演算法,
[00:47:29] 它其實是一種,
[00:47:30] 搜尋策略啦,
[00:47:32] 你今天,
[00:47:36] 我隨機灑五個Random State出去,
[00:47:39] 接下來你要怎麼運作,
[00:47:41] 你可以搭配Hear Climbing來運作,
[00:47:43] 你可以搭配Symmetric Engineering來運作,
[00:47:46] 所以Local Bean Search其實是一個,
[00:47:51] 一個策略,
[00:47:53] 一個策略這樣子,
[00:47:55] 好,
[00:47:56] 那你也可以有一些變形啊,
[00:47:58] 比如說今天我,
[00:48:00] 不是永遠取,
[00:48:02] 這五十個,
[00:48:04] 鄰居裡面的最好的那五個出來,
[00:48:06] 你可能是隨機挑五個出來,
[00:48:09] 好,
[00:48:11] 或者也不是隨機,
[00:48:12] 而是根據某一個機率,
[00:48:14] 來挑五個出來,
[00:48:16] 好,
[00:48:17] 那這機率怎麼設定呢,
[00:48:18] 那就是看,
[00:48:19] 一樣嘛,
[00:48:20] 這邊跟剛剛Symmetric Engineering很像,
[00:48:22] 就是,
[00:48:23] 跟我目前現有的Solution,
[00:48:27] 差不多的,
[00:48:29] 我挑的機率就越高嘛,
[00:48:31] 好,
[00:48:32] 甚至贏越多的,
[00:48:33] 我挑的機率就更高,
[00:48:35] 甚至是必挑嘛,
[00:48:37] 好,
[00:48:38] 那這個就叫做Stochastic的Bean Search,
[00:48:41] 好,
[00:48:42] 那大家不要覺得這個Local Bean Search,
[00:48:44] 這個好像是,
[00:48:45] 老Coco,
[00:48:46] 現在沒有人在用演算法,
[00:48:47] 現在你,
[00:48:48] even你是在訓練Deep Learning的模型,
[00:48:51] 有的時候你的一個訓練策略裡面,
[00:48:53] 你就會看到,
[00:48:54] 它是講Bean Search,
[00:48:56] Bean Search,
[00:48:57] 所謂的Bean Search,
[00:48:58] Bean就是一束,
[00:49:00] 一束的意思,
[00:49:01] 就是一次看一堆結的意思,
[00:49:03] 一束,
[00:49:05] 把什麼稻草捆成一束,
[00:49:07] 的那個Bean Search,
[00:49:09] OK,
[00:49:11] 這樣可以嗎?
[00:49:12] 好,
[00:49:13] 所以我們用一頁,
[00:49:14] 把Local Bean Search的策略講完了,
[00:49:17] 再來下一個,
[00:49:22] Genetic Algorithm,
[00:49:24] 基因演算法,
[00:49:26] 一樣,
[00:49:27] 其實基因演算法呢,
[00:49:28] 它可以是一本書,
[00:49:30] 但是我們打算用三頁頭影片,
[00:49:33] 講談基因演算法,
[00:49:36] 基因演算法,
[00:49:37] 它其實是Stochastic Bean Search的一個變形,
[00:49:42] 好,
[00:49:43] 那你一聽你就知道,
[00:49:44] OK,
[00:49:45] 它是Bean Search的變形,
[00:49:47] 代表它一次會看一堆結的意思,
[00:49:50] 然後呢,
[00:49:51] 前面又加一個Stochastic,
[00:49:52] 就代表說,
[00:49:53] 它有這個隨機性,
[00:49:55] 對吧,
[00:49:56] 好,
[00:49:57] 那基因演算法呢,
[00:49:59] 它其實是受到,
[00:50:01] 這個,
[00:50:02] 演化論的這個啟發,
[00:50:05] 好,
[00:50:06] 它的概念是這樣,
[00:50:07] 一樣的,
[00:50:08] 基因演算法呢,
[00:50:09] 它會從K個Random Generated State出發,
[00:50:14] 好,
[00:50:15] 等於說它一開始呢,
[00:50:16] 就會隨機出K個結,
[00:50:19] 好,
[00:50:20] 那在基因演算法裡面呢,
[00:50:22] 它稱呼這K個結呢,
[00:50:24] 稱為是一個Population,
[00:50:26] 一個群體,
[00:50:28] 好,
[00:50:29] 一個群體,
[00:50:30] 好,
[00:50:31] 一個結,
[00:50:32] 我們又稱呼它這樣,
[00:50:33] 一個一個個體,
[00:50:36] OK,
[00:50:37] 這個群體裡面有一個個個體,
[00:50:39] 每一個個體,
[00:50:40] 其實就是一個結的意思,
[00:50:43] 好,
[00:50:44] 那比較特別的事情是,
[00:50:46] 它為了要套用這整個染色體,
[00:50:51] 演化的這整個過程,
[00:50:53] 好,
[00:50:54] 所以它會把它的Solution呢,
[00:50:56] 都表達成一個字串,
[00:51:00] 一個序列,
[00:51:01] 一個字串,
[00:51:02] 好,
[00:51:03] 然後這個字串通常都會定義在,
[00:51:06] 一個現有的這個字母,
[00:51:09] Alphabet裡面,
[00:51:10] 好,
[00:51:11] 等一下我們會看到一些例子,
[00:51:12] 好,
[00:51:13] 那一般來講,
[00:51:14] 這個Alphabet,
[00:51:15] 或者這個,
[00:51:16] 常常是隻有0或1,
[00:51:17] 所以一個Solution表達成,
[00:51:19] 一堆011010100,
[00:51:22] 這樣子的一個Binary String,
[00:51:24] 這是一個常見的一個情況,
[00:51:26] 另外一種常見的情況是,
[00:51:28] 我可能是定義好,
[00:51:30] 這些字母,
[00:51:32] 來表達一組結,
[00:51:34] 這樣子,
[00:51:35] 好,
[00:51:36] 那講這樣子,
[00:51:37] 講這樣子,
[00:51:38] 好像搞不清楚你在講什麼,
[00:51:39] 我們直接舉一個例子,
[00:51:41] 八皇后問題,
[00:51:43] 大家還記得吧,
[00:51:44] 好,
[00:51:45] 在這個八乘八的棋盤裡面呢,
[00:51:47] 我要放八隻皇后,
[00:51:49] 對不對,
[00:51:50] 然後希望八隻放上去之後呢,
[00:51:52] 彼此之間沒有互相衝突,
[00:51:54] 好,
[00:51:55] 那我怎麼放,
[00:51:56] 我現在,
[00:51:57] 我就先隨便放,
[00:51:58] 假設我的,
[00:51:59] 我的這個限制就是說,
[00:52:02] 我一個Colon,
[00:52:03] 只能放一隻皇后,
[00:52:05] 所以,
[00:52:06] 我八個Colon,
[00:52:07] 我就放八隻皇后,
[00:52:09] 所以呢,
[00:52:10] 我就把八隻皇后放好之後,
[00:52:13] 這個盤面,
[00:52:15] 它基本上就是一個結,
[00:52:17] 它是一個Solution,
[00:52:18] 只是,
[00:52:19] 這個Solution是一個蠻爛的Solution,
[00:52:21] 因為我們可以蠻輕易的看出,
[00:52:23] 有好多衝突的地方嘛,
[00:52:25] But anyway,
[00:52:26] 它就是一個Solution,
[00:52:27] 一個Possible的Solution,
[00:52:29] 如何來表達這個Solution呢,
[00:52:31] 我們可以設計說,
[00:52:33] 我們根據它在盤面上的位置,
[00:52:37] 比如說,
[00:52:38] 今天第一隻皇后,
[00:52:39] 是在第一個Colon的由下往上數,
[00:52:41] 第三個位置,
[00:52:43] 第二隻皇后,
[00:52:44] 就是第二個Colon的,
[00:52:46] 第二個這個,
[00:52:47] 由下往上的第二個位置,
[00:52:49] 以此類推,
[00:52:50] 所以我可以把這個盤面,
[00:52:51] 表達成,
[00:52:52] 3,
[00:52:53] 2,
[00:52:54] 7,
[00:52:55] 5,
[00:52:56] 2,
[00:52:57] 4,
[00:52:58] 這裡,
[00:52:59] 3,
[00:53:00] 2,
[00:53:01] 7,
[00:53:02] 5,
[00:53:03] 2,
[00:53:04] 4,
[00:53:05] 1,
[00:53:06] 這個,
[00:53:07] 這一串,
[00:53:08] 就代表,
[00:53:09] 那個8皇后的那個盤面,
[00:53:10] 可以吧,
[00:53:11] 好,
[00:53:12] 所以,
[00:53:13] 我們可以把每一組解,
[00:53:14] 表達成,
[00:53:15] 一個字串,
[00:53:16] 而我們在經驗的演算法裡面呢,
[00:53:17] 我們稱呼這個字串呢,
[00:53:18] 叫做一個Colon,
[00:53:19] 一個染色體,
[00:53:20] 好,
[00:53:21] 一個染色體,
[00:53:22] 其中呢,
[00:53:23] 呃,
[00:53:24] 這個染色體裡面的每一個質啊,
[00:53:25] 這個染色體裡面的每一個質啊,
[00:53:27] 3,
[00:53:28] 2,
[00:53:29] 7,
[00:53:30] 5,
[00:53:31] 2,
[00:53:32] 4,
[00:53:33] 這個每一個質,
[00:53:34] 叫做,
[00:53:35] 就是一個基因啦,
[00:53:36] 一串基因串起來,
[00:53:37] 變成一個染色體,
[00:53:38] 這個意思,
[00:53:39] OK,
[00:53:40] 好,
[00:53:41] 所以,
[00:53:42] 這只是,
[00:53:43] solution 的表達法喔,
[00:53:44] 接下來,
[00:53:45] 針對每一組染色體,
[00:53:46] 我們都可以去評估,
[00:53:47] 它的好壞,
[00:53:48] 在經驗的演算法裡面,
[00:53:49] 叫做,
[00:53:50] Fitness,
[00:53:51] Fitness,
[00:53:52] 哦,
[00:53:53] Fitness,
[00:53:54] 指的就是,
[00:53:55] Fitness,
[00:53:56] Fitness,
[00:53:57] 適應程度,
[00:53:58] 好,
[00:53:59] 因為它基本上就是搭建在,
[00:54:00] 因為它基本上就是搭建在,
[00:54:01] 因為它基本上就是搭建在,
[00:54:02] 演化論裡面嘛,
[00:54:03] 就適者生存,
[00:54:04] 不適者失敗嘛,
[00:54:05] 對不對,
[00:54:06] 好,
[00:54:07] 在八皇后問題裡面的Fitness,
[00:54:08] 在八皇后問題裡面的Fitness,
[00:54:09] 可能是設計成,
[00:54:10] 可能是設計成,
[00:54:11] 欸,
[00:54:12] 今天,
[00:54:13] 你的皇后的衝突的,
[00:54:14] 你的皇后的衝突的,
[00:54:15] 這個,
[00:54:16] 這個,
[00:54:17] 這個,
[00:54:18] 這個,
[00:54:19] 這個,
[00:54:20] 這個,
[00:54:21] 這個,
[00:54:22] 這個,
[00:54:23] 這個,
[00:54:24] 這個,
[00:54:25] 這個,
[00:54:26] 這個,
[00:54:27] 這個,
[00:54:28] 會去算出需要Fitness的頻率,
[00:54:29] 會去算出需要Fitness的頻率,
[00:54:30] 這樣,
[00:54:34] 那再來,
[00:54:35] 那再來,
[00:54:36] 講設今天,
[00:54:37] 我們要用經易演算法,
[00:54:38] 我們要用經易演算法,
[00:54:39] 要用經易演算法,
[00:54:40] 來處理八皇后問題,
[00:54:41] 那首先呢,
[00:54:42] 那首先呢,
[00:54:43] 我就先隨機產生出,
[00:54:44] 我就先隨機產生出,
[00:54:46] 四組不同的結,
[00:54:47] 那當然就是表達成,
[00:54:48] 那當然就是表達成,
[00:54:49] 四種不同的染色體,
[00:54:50] 四種不同的染色體,
[00:54:52] measure 3 種不同的劑다車 種,
[00:54:53] 譬如說,
[00:54:54] 第1種檯面,
[00:54:55] 比如說,
[00:54:56] 第一種 erlebt,
[00:54:57] omination,
[00:54:58] 的分數
[00:54:59] 第一種盤面給24分
[00:55:01] 第二種盤面23
[00:55:02] 第三種盤面20
[00:55:03] 第四個盤面11
[00:55:05] 分數 數字越大的就代表表現越好
[00:55:09] 這裡你可以自己定
[00:55:10] 你可以自己定你自己的
[00:55:12] 這個所謂的
[00:55:13] 適者生存的這個條
[00:55:16] 這個所謂的適應程度
[00:55:18] 你可以給它一個原則
[00:55:20] 好 根據這個Fitness Value
[00:55:25] 我們要從
[00:55:27] 這四個人呢
[00:55:28] 我們就說它形成了一個Population
[00:55:32] 每一個都是一個Individual
[00:55:33] 那每一個Individual也都表達
[00:55:35] 就是都表達成染色體的形式
[00:55:39] 好啦 那這次這個群體裡面呢
[00:55:42] 我們要先做第一件事情就是
[00:55:44] 我們要先挑出優秀的人出來
[00:55:48] 來結婚產生出下一個子彈
[00:55:52] 那什麼叫優秀呢
[00:55:53] 那就是看這個Fitness的值
[00:55:56] OK 有24 23 20 11
[00:55:58] 好 所以基本上呢
[00:56:00] 它就是我挑到第一個染色體的機率
[00:56:05] 31%
[00:56:06] 挑到第二個29%
[00:56:08] 挑到第二個26%
[00:56:09] 挑到第四個14%
[00:56:11] 好 那我就挑
[00:56:13] 那假設我也挑四次
[00:56:15] 好 第一次我挑到這個327521
[00:56:18] 第二次我挑到24748552
[00:56:21] 第三次又很巧的
[00:56:23] 又挑到327521
[00:56:25] 第四次我挑到2441512
[00:56:28] 四次
[00:56:28] 那之前被挑出來的
[00:56:31] 我挑的時候是菁英原則
[00:56:35] 就是說你表現越好的
[00:56:38] 就越有可能被挑出來
[00:56:40] 當成是產生出下一代的那個群體
[00:56:46] 那同一個Chromosome可能被挑很多次
[00:56:48] 如果它表現超優秀的話
[00:56:53] 好 挑出來之後
[00:56:55] 接下來兩兩兩兩之間
[00:56:58] 比如說第一個跟第二個結婚
[00:57:00] 好 第一個盤面跟第二個盤面結婚
[00:57:03] 那在這裡就會做兩種不同的動作
[00:57:06] 第一個動作叫Crossover
[00:57:08] 其實就是交配啦
[00:57:09] 好 交配
[00:57:10] 那我們會隨機的在這個染色體這邊
[00:57:15] 隨機找某一個位置
[00:57:16] 好 交配之後呢
[00:57:19] 我就是把第一個Chromosome的前半部分
[00:57:23] 會接上第二個Chromosome的第二個部分
[00:57:26] 第二個Chromosome的第一部分會接上
[00:57:29] 第一個Chromosome的第二部分
[00:57:31] 這個就是交配生出的小孩
[00:57:36] 好 所以這叫子代
[00:57:38] 這是父母
[00:57:40] 這是Parent
[00:57:41] 這是Children
[00:57:43] 好 那同樣的
[00:57:44] 後面這兩個也結婚
[00:57:46] 然後呢進行Crossover得到什麼
[00:57:48] 那不要忘記這是什麼意思
[00:57:50] 這個其實就是新的Solution的意思
[00:57:54] 新的盤面的意思
[00:57:56] 好 這叫Crossover
[00:57:58] 那Crossover
[00:57:59] 這個完呢
[00:58:00] 我們也知道在生物界
[00:58:04] 產生出像一個子代的
[00:58:05] 這個整個繁衍的過程當中
[00:58:07] 有可能會發生突變嘛
[00:58:09] 除了父親跟母親交換染色體之外
[00:58:13] 有可能產生突變
[00:58:15] 所以呢
[00:58:16] 每一個Individual
[00:58:20] 都有可能有一個很小的機率
[00:58:22] 可能某一個基因會變
[00:58:26] 比如說這裡本來是五的
[00:58:27] 它就變成了一
[00:58:29] 有很小很小的機率
[00:58:31] 那像第二個
[00:58:33] 這個就沒有產生任何的突變
[00:58:35] 那第三個又有某一個隨機某一個位置
[00:58:37] 產生一個突變
[00:58:39] 好 第四個這樣子
[00:58:40] 這個叫做Mutation
[00:58:44] 好 那所以說呢
[00:58:46] 這裡你看
[00:58:47] 所謂的
[00:58:48] 這是第一個染色體
[00:58:50] 這是第二個染色體
[00:58:51] 第二個染色體就是
[00:58:52] 2 4 7 4 8
[00:58:56] 8嗎 8
[00:58:58] 5 5 2
[00:58:59] 這樣子
[00:59:01] 有沒有
[00:59:01] 還有 在這裡
[00:59:02] 就是這兩個Crossover
[00:59:05] 我得到的
[00:59:06] 比如說我把它的
[00:59:07] 左邊這個盤面接上這裡的
[00:59:09] 右邊這個盤面
[00:59:10] 接起來就長這樣
[00:59:12] 所以你看它接起來就變成
[00:59:13] 3 2 7 4 8 5 5 2
[00:59:19] 就是對應到這個
[00:59:23] 產生出下一代之後
[00:59:26] 那同樣的啦
[00:59:27] 這樣的步驟可以繼續往下走
[00:59:30] 產生出下一代之後一樣
[00:59:32] 我就可以去計算這裡面每一個新的Solution
[00:59:37] 你的Fitness的值是怎麼樣
[00:59:41] 對不對
[00:59:42] 你現在產生出新的解嗎
[00:59:43] 產生出來你的新的Fitness是怎麼樣
[00:59:47] 然後呢
[00:59:48] 再根據Fitness的值去挑出能夠繁衍下一代的Chromosome
[00:59:53] 然後又繼續Crossover Mutation
[00:59:56] 那依此類推
[00:59:57] 你可以繁衍很多代
[01:00:00] 最終
[01:00:01] 在這整個繁衍了之後呢
[01:00:01] 最終在這整個繁衍了之後呢
[01:00:01] 最終在這整個繁衍了之後呢
[01:00:02] 這個過程當中
[01:00:03] 可能繁衍到最後
[01:00:04] 你比如說你讓它繁衍100代
[01:00:07] 你就去挑出第100代的
[01:00:11] 表現最好的那一個盤面
[01:00:12] 來當成你的解
[01:00:14] 或者是說你讓它繁衍100個世代
[01:00:18] 然後你再去看說
[01:00:20] 每一個世代最強的那個你都留下來
[01:00:23] 那你繁衍完100個世代之後
[01:00:25] 再把100個世代祖孫
[01:00:27] 從這個曾祖父祖父對不對
[01:00:31] 父母自己小孩孫子什麼玄孫
[01:00:35] 全部最強的拿出來再PK
[01:00:37] 再挑出一個最好的
[01:00:39] 這個就是基因演算法
[01:00:41] 講完了
[01:00:45] 就這樣
[01:00:46] 這就是基因演算法的最核心的概念
[01:00:50] 那當然其實基因演算法
[01:00:52] 或者說講得更廣一點
[01:00:54] 所謂的演化式計算
[01:00:56] 它根本就是一個學問
[01:00:58] 它根本就是一門課
[01:01:00] 它有根本就是有一門課
[01:01:04] 有一本教科書完全就是在講這個的
[01:01:07] 那裡面呢
[01:01:08] 整個大體的概念
[01:01:10] 就是我們這三頁頭裡面所說的
[01:01:13] 那裡面有很多小細節
[01:01:14] 比如說你這個挑
[01:01:16] 你要怎麼挑啊
[01:01:19] 比如說你這個挑
[01:01:21] 你是用什麼樣的策略來挑出
[01:01:23] 優秀的個體
[01:01:26] 產生出下一個子彈
[01:01:28] 那還有啊
[01:01:30] 還有另外一種做法就是
[01:01:31] 你允許假設其中某一彈
[01:01:34] 有某一個個體
[01:01:36] 超級優秀
[01:01:38] 你可以給它一個特權
[01:01:40] 就是長生不老
[01:01:41] 就是它永遠
[01:01:43] 下一代要生
[01:01:45] 就是說它超級優秀
[01:01:47] 你可以讓它在下一次
[01:01:49] 下一個世代
[01:01:51] 也永遠都會保留
[01:01:53] 它一定就可以再生出
[01:01:55] 下一代
[01:01:56] 它一定會被選
[01:01:57] 你可以給它一個特權
[01:01:59] 或者是怎麼樣
[01:02:01] 這裡有一大堆各式各樣不同的
[01:02:04] 變形
[01:02:06] 包含像你的chromazone
[01:02:08] 一定是binary的嗎
[01:02:09] 還是說你可以像現在畫面上的這種
[01:02:12] 你是real number的
[01:02:16] 那所以只要你的想法
[01:02:20] 你所想要求的解
[01:02:23] 有辦法表達成chromazone的形式
[01:02:27] 你就可能可以應用經驗演算法
[01:02:30] 來解這個問題
[01:02:32] 所以我們目前在書上
[01:02:34] 我們這裡是用八王二問題來表達
[01:02:37] 那接下來其他的
[01:02:39] 你自己比如說你自己final project
[01:02:41] 你假設你要做
[01:02:42] 那就看你自己的創意
[01:02:43] 比如說在過去以前
[01:02:45] 我們曾經
[01:02:47] 我們實驗室也用過
[01:02:49] 經驗演算法來幫忙我們解決
[01:02:51] 比如說棒球比賽
[01:02:54] 棒球影片分析的問題
[01:02:56] 那重點在於說你如何把那個問題
[01:02:58] 轉化成chromazone的形式
[01:03:01] 讓它去求一個最佳解
[01:03:03] 好
[01:03:04] 這當然就是各自看你的
[01:03:06] 個人的這個功力
[01:03:09] 看你個人的設計而定
[01:03:12] 好
[01:03:13] 以上就是這個基因演算法
[01:03:16] 好
[01:03:18] 講到這邊一個段落
[01:03:20] 我們來看一下snide上面有沒有問題
[01:03:22] 我如果一開始就存在整體最佳解
[01:04:00] 根據模擬退火的機制
[01:04:03] 它會為了尋找更最佳
[01:04:05] 更佳的解而有機率容許問題嗎
[01:04:08] 就是溫度更高的解存在
[01:04:10] 如果最後發現溫度越來越高
[01:04:14] 它怎麼會回傳原本一開始的最佳解
[01:04:17] 我覺得問這個問題可能有點誤解
[01:04:20] 就是說溫度一定不會越來越高
[01:04:23] 因為根據定義溫度一定是一開始最高溫
[01:04:27] 然後溫度會一路下降
[01:04:29] 所以你的溫度是肯定一路下降的
[01:04:33] 那溫度下降是什麼意思呢
[01:04:35] 就是你越來越不容易用
[01:04:38] 比較爛的解來取代掉現有的解的意思
[01:04:44] 那我在猜這位同學問這個問題是說
[01:04:48] 會不會比如說我本來我在某一個位置
[01:04:53] 然後我用一個比較爛的解來取代掉我
[01:04:58] 那我就變爛了啊
[01:05:00] 你的意思應該是說
[01:05:02] 當我變爛了之後
[01:05:04] 我會不會又一路爛下去
[01:05:06] 我再也就回不到
[01:05:08] 我剛剛比如說我現在在時間t等於3的時候
[01:05:11] 其實我的解比t等於4的時候的解來得更好
[01:05:15] 那你走到t等於4
[01:05:17] 你變爛了
[01:05:18] 然後又跑到t等於5
[01:05:20] 會不會又更爛
[01:05:22] 你的意思是說有沒有可能再回歸到
[01:05:27] 當時t等於3的時候的那個
[01:05:29] 真正在歷史上曾經掌握的最佳解呢
[01:05:32] 我覺得有可能可以
[01:05:36] 也有可能不可以
[01:05:40] 我可以講說
[01:05:42] 因為機率嘛
[01:05:43] 所以它沒有一定會怎麼樣
[01:05:45] 我只能夠說它最終
[01:05:47] 它的解
[01:05:51] 你找到的解會變得越來越爛的
[01:05:53] 那個機率是非常非常低的
[01:05:55] 非常非常低的
[01:05:57] 應該有很高的機會
[01:05:59] 你的解是會朝好的方向來走
[01:06:03] 我只能夠跟你這麼講
[01:06:05] 那當然你如果要很嚴謹的數學證明
[01:06:08] 這個一定也有證明
[01:06:10] 只是我們書上這個證明的部分
[01:06:12] 就略過不談
[01:06:14] 好
[01:06:15] 所以同學你這個問得不錯
[01:06:19] 信件這個我已經說過N次了
[01:06:23] N次了
[01:06:24] 我不想要再回答
[01:06:28] 成大同學不可以填線上保單
[01:06:31] 我們說過了
[01:06:34] 我們為什麼要弄這個算力
[01:06:36] 就是我們要鼓勵大家來實體上課
[01:06:39] 你只要成大同學
[01:06:41] 你填再多也沒有用
[01:06:43] 因為你必須在現場
[01:06:45] 當場領號碼牌
[01:06:46] 這個我講過太多次了
[01:06:56] 老師說會卡在極大值
[01:06:59] 應該說local maxima
[01:07:01] 但老師後來又說
[01:07:03] 正常來講根本不可能像現在看一眼就知道
[01:07:06] 最大值在哪裡
[01:07:07] 對
[01:07:08] 那這個問題是不是隻能
[01:07:11] 只能怎樣
[01:07:12] 不同方法多找幾個極大值再來比較
[01:07:15] OK
[01:07:16] 好
[01:07:17] 我稍微
[01:07:19] 對
[01:07:20] 就是說很多時候
[01:07:22] 在現實世界當中
[01:07:24] 我們根本就不知道
[01:07:25] 真正的極大值在哪裡
[01:07:29] 這是很正常的
[01:07:31] 那所以呢
[01:07:32] 很多時候我們找到的解
[01:07:34] 都只是local maxima
[01:07:38] 即使
[01:07:39] 你現在看全世界AI最強的
[01:07:42] 對不對GPT-6 Ultra
[01:07:45] 你認為它現在的這個模型
[01:07:47] 找到的就已經是這個宇宙裡面的最佳解嗎
[01:07:50] 一定不是
[01:07:52] 我們只能夠說
[01:07:53] 它是目前地球上
[01:07:55] 我們能夠所使用的training data裡面
[01:07:58] 能夠找到
[01:07:59] 目前人類能夠找到的
[01:08:01] 某一組
[01:08:03] 你認為是很不錯的一個解而已
[01:08:06] 但它是不是在數學上是一個
[01:08:08] 真正的最佳解
[01:08:10] 事實上我覺得一定不是
[01:08:13] 如果是的話
[01:08:15] 它就再也不會有GPT-7
[01:08:17] GPT-8
[01:08:18] GPT-9了嘛
[01:08:19] 一定不是
[01:08:20] 它就不可能再進步了
[01:08:22] 所以一定不是
[01:08:23] 好
[01:08:24] 好那再來
[01:08:25] 所以你的問題是說
[01:08:26] 那怎麼辦呢
[01:08:28] 不能怎麼辦
[01:08:29] 或者是說
[01:08:30] 我們剛剛講了有幾種做法
[01:08:32] 比如說Random Restart
[01:08:34] 我們就多做幾次
[01:08:36] 然後再從這幾次的結果裡面
[01:08:39] 找到相對最好的那一個
[01:08:42] 但是你可能永遠都無法保證
[01:08:45] 你找到的是數學上的最佳解
[01:08:49] OK我希望這樣有回答到你的問題
[01:08:53] 很多時候我們
[01:08:55] 那你說
[01:08:56] 那這樣子我沒有找到真正的最佳解
[01:08:59] 會不會怎麼樣啊
[01:09:00] 答案是也不會怎麼樣
[01:09:02] 我們還活得好好的
[01:09:04] 很多時候在人類的真正的應用上
[01:09:07] 你找到的解
[01:09:09] 只要夠好就行了
[01:09:13] 我們就覺得Happy了
[01:09:15] 我們就覺得Happy了
[01:09:16] 這樣子
[01:09:17] 像你現在用GPT-6
[01:09:19] 你蠻Happy的吧
[01:09:20] 用得還行吧
[01:09:22] 事實上在GPT-6出來之前
[01:09:24] 你GPT-5
[01:09:25] 你用得也還蠻Happy的吧
[01:09:27] 所以其實沒有一定要找到最佳解
[01:09:32] 只有什麼人要找到
[01:09:34] 真正窮極意義上的最佳解呢
[01:09:37] 大概就是數學家吧
[01:09:39] 在概念上consecually要找到最佳解
[01:09:43] 在實際工程應用上
[01:09:45] 通常我們大部分接受的都是
[01:09:47] 到目前為止能夠找到的那個解
[01:09:50] 可用的解這樣子
[01:09:55] 而且沒有公認最好的最佳化的方法
[01:09:57] 沒有
[01:09:58] 根據不同的問題
[01:10:00] 你所使用的策略
[01:10:01] 先休息一下再回來
[01:10:16] 你不是有提到那個
[01:10:32] 炊火它有可能越來越爛
[01:10:34] 然後你說可能性很低
[01:10:36] 那我剛剛的想法就是
[01:10:38] 就是在演算法為什麼就是先不要記住
[01:10:40] 哎我有個時間的最佳解
[01:10:42] 然後往下走
[01:10:43] 然後它會有一個最終的重點
[01:10:45] 然後如果最後真的最爛
[01:10:46] 那我就用一個額外的能源去把那個
[01:10:49] 可以啊
[01:10:50] 可以啊
[01:10:51] 剛剛我有回答問題的時候
[01:10:53] 我有提到類似像這樣
[01:10:54] 可以可以
[01:10:55] 實際上真正應用的時候
[01:10:57] 的確是可以
[01:10:58] 另外一個問題是
## 8. 寫作規則
(這是 `_筆記SOP.md` 第 3.1、4、5、6 節的濃縮版。兩者衝突時以 SOP 為準。)
讀者:碩士生,兩門課期末是英文考試。要只看筆記就能學會,講得比老師好懂。畫面要簡潔。
### 輸出兩個檔
1. `chNN.md`(Notion 寫法,不含頁面標題),結構固定:
- 第一行:章節包第 1 節那行,原樣照抄。
- `## 重點`:三點中文,每點一到兩句。
- `## Exam-ready`:3–10 行英文,**從章節包的投影片文字逐字抄**,每行 `- **Term**: "原句"(Ch3 p.14)`。老師有明確證據才在行尾加 `【老師強調】(h:mm:ss)`。
- 章節包第 2 節的每一段:`## [h:mm:ss](連結) 標題`(照抄),下面 2–4 句白話摘要,其餘全部收進摺疊:
```
問句(例:用生活例子講,BFS 在做什麼?)
內容
```
摺疊種類(需要才放):用生活例子講?/它到底怎麼運作?/要先懂什麼?(老師假設你會的數學或概念,短版教學)/老師原話是什麼?(「原話」(h:mm:ss),只放重要的,最多 5 句)。
- 「它到底怎麼運作?」要用一組小數字把這段的演算法**真的跑 1–3 步**(例:算出梯度、更新一次、比較兩個 α),不是只示範定義的加減乘除。全章盡量沿用同一組數字,讓前一段的答案能在下一段被驗證。
- 每段正文要回答讀者最可能卡住的一個「為什麼」。投影片公式方向跟題目相反、或投影片說「解不出來」時,用一兩句講出原因,自己補的標(我補充)。
- 投影片句子停在公式前(公式在圖裡)時:Exam-ready 在粗體詞條上補公式、引號內保持原句;正文寫出同一條式子。公式圖看章節包第 6 節列出的 PNG。
- `## Self-check`:2–4 題英文考題,答案收摺疊,答案後補「中文重點:一句」。**至少一題考老師強調的內容**;不出「老師和投影片哪裡不同」這類不會考的題目。
- 不要把章節包或這份規則裡的指示句寫進筆記(例如「寫筆記時照投影片寫」「已改正 ASR 錯字」)。
- 長度 8,000–14,000 字元。
2. `chNN.concepts.json`:JSON 陣列,4–12 個考試可能問的術語,每個物件:
`name`(英文)、`zh`、`type`(概念/演算法/公式/人物事件/前置知識/行政)、`signal`("老師說會考"/"老師強調"/"核心(我判斷)"/"")、`evidence`(有 signal 前兩種時必填:原句+時間)、`definition_en`(投影片原句;沒有就註明 (textbook)/(lecture)/(my wording))、`plain`(一句中文)、`a4`(≤150 字元英文,可夾極短中文;期末拼貼用的小方塊)、`time`、`slides`、`prereq`(英文名陣列)。
### 風格鐵律
- 不用 emoji 或裝飾符號(✓✗★⚠ 都不要;→ 可以)。不用 callout。不用 `$`。時間不要用 code 樣式。
- 每個 `##` 段落最多一種視覺元素:一張圖、或一個表格、或一個 mermaid。
- 摺疊標題是問句,前面不加符號。
- 圖片最多 3 張,只放文字取代不了的圖。放法:單獨一行 `[[IMG: | 中文圖說]]`,PNG 用 `slides_to_png.py <圖片資料夾> <頁> --dpi=110` 產生。
- 考試訊號只在老師明確說時標。老師只說「不用背」「不講」就寫「注意:……」。
- 老師口誤或跟投影片不同:照投影片寫,加「注意:老師口頭說的是……」。
- 引用老師的話時,ASR 錯字改成正確的字。
### 沒有投影片時
不要憑記憶逐字重現課本段落或數值表。英文定義用自己的話寫、句尾標 (my wording);Exam-ready 每行標「(自擬,投影片待補)」。例子只用老師講的。
### 寫完之後(只做一次)
跑檢查:
`C:\Users\user\.cache\meeting-record\venv\Scripts\python.exe C:\Users\user\.claude\scripts\check_note.py --transcript <逐字稿> --slides <投影片 txt …> --start <起> --end <訖> --vid <影片 ID>`
- STYLE/VISUAL/TIME/FORMAT:全部改掉。
- QUOTE:確認是不是你改正了 ASR 錯字(是就保留),不是就改成原文或拿掉引號。
- ENGLISH:確認是不是投影片斷行造成的(是就保留),不是就改成投影片原句。
**省額度守則**:章節包裡已經有你需要的全部資料。不要再去讀整份逐字稿、整份投影片、segments.json 或手冊。一次寫好整個檔(Write 一次),檢查後集中修改。