這幾招可以幫你馬上提升 AI 航空調度、文字生成的效率,輕鬆抓出結構差異,優化運籌流程。
- 先挑 3 個常見資源限制,直接丟進模型去測試運算速度(比如 5 分鐘內看完結果)。
這樣能馬上知道 AI 算航空調度時會卡在哪,找到瓶頸就能對症下藥(看 log 裡處理超過 5 分鐘的部分)。
- 用 2025 年流行的 LP 放寬法,把原本 2 個以上複雜限制先變成軟性條件,然後 10 分鐘內比較計算時間。
計算速度通常會快上 30% 以上,還能減少程式跑不動的狀況(計算記錄裡比對前後計算秒數)。
- 每次設計 prompt,記得只加 1 種語言控制條件,然後連續試 5 次看結果差異。
這樣很容易看出 Attention Head 怎麼處理不同限制,方便微調模型(比對 5 次 output 裡語言風格變化)。
- 調 Transformer 溫度參數時,一次只變動 0.1,然後 3 天內記錄生成文本的品質跟多樣性。
這種漸進式調整能明顯抓出最適合自己資料的平衡值(3 天後回顧文本裡重複率和創新度變化)。
比較航空調度與 Transformer Attention 的最佳化挑戰
你問 ChatGPT「法國的首都是什麼?」它馬上說「巴黎。」很順手、沒什麼神秘感,像是在查一條字典。但真正背後,如果拉開來看,AI其實是在處理一堆跟美國航空公司那種瘋狂航班排程超像的數學大題,只是從排飛機換成挑詞彙而已 - 其實方法都超級像。搞笑的是,它骨子裡就是在搞那種混合整數線性規劃(MILP),只是表面換一層皮。
對了順便補充一下,限制也一堆爆多。飛機不能一台同時出現在兩地(廢話);FAA又規定一個人一天只准工作八小時;飛機每兩天都要回去修兩個小時;某些大機場像JFK一共才五十個登機門可用。還有組員輪班最少要休十小時,不能連軸轉。某些時間段不給降落,宵禁是死規矩。反正,就是不只有目標要最大化(比如賺最多錢啦,準點率啦,分攤負擔啦),各種亂七八糟的「條件」全部疊加,根本是密碼題。
真的寫成數學長這樣:那一大包x_{i,j,t}只能選0或1,每個代表一個超細的動作,然後整體目標通常會寫「Σ profit_{i,j,t} × x_{i,j,t}」要最大,也就是拼命幫公司賺最多錢。條件式更多:像Σ_j x_{i,j,t} ≤ 1,就是說同一時間,一架飛機只會現身在一條線上嘛;再加進工時計算、修理時間、登機門數量……零零總總超過五十個約束在卡。實際跑數字算一下,一千台×五千路×24小時,就跳到一億兩千萬個變數!更誇張的是,如果要暴力算完所有可能,大概要看10^(36,000,000)種配置,比宇宙的原子都還多,你懂這有多瘋狂嗎。
所以沒人會笨到全算一遍啦!專業的人會轉成嚴格的優化模型,用branch-and-bound或cutting plane這些很會剪枝的招式,在幾小時內搞出超接近滿分的安排方案。你知道嗎?美國航空靠這幾套演算法,一年現省下至少一億美元,有夠扯。
好了,我們鏡頭切回Transformer那一類的AI處理文字,也差不多套路。譬如:「The capital of France is」輸進去以後,AI等於同時盯著五萬個詞,要從裡面選哪一顆出來當下一步產物。但不是亂選啊!它必須剛好抓出唯一對的token(Σx_i = 1),而且還不能語病連發,要保證語意流暢、事實沒錯,也不會重複短期內容,更不行人格崩壞或者偏題瞎扯,同時答案還得一路走向重點。
系統也是一堆目標加一狗票限制夾擊你:希望預測機率最高優先;句法、語意連貫度最大化;事實正確要優先;內容新穎避免嘴砲循環……全都塞進那50,000維二進位變數陣列裡,每次只允許0或1(猜猜看是哪一項入選)。最後就會長得很像這種maximize Σ p_i × x_i,把預測最好那顆詞丟上來發表,其它各種限制也全被翻成公式綁住了。所以講白一點,其實AI每天都在跟一題超龐大的MILP對幹,而且題目本質跟排美國航班根本同宗!
要不我直接把兩邊的模型放一起你對照一下好了 -
藍色那塊:美國航空航班MILP問題,主角就是x_{i,j,t
OK,我先簡單解釋一下運籌學(Operations Research)這玩意。教科書講很多抽象定義,但直接抓個真實案例給你 - 比如美國航空,要怎麼決定明天五千個班次、橫跨兩百座機場,全部要飛哪些線?資源一大堆:一千架不同型號的飛機、全美兩百個機場,再加五千條亂七八糟的可能路線,全都得考慮在裡面。另外還有一萬人組成的機組員,包括正副駕駛、空服、技師等,每一種輪班時段又有24小時要輪著來 - 每架飛機,每一條航線,每個小時,都要下決定,到底這台要不要去執行?通常他們會用 x_{i,j,t} 這種方式記 - 如果第i架飛機要在第j條航線、t小時起飛就設成1,不然就是0。
對了順便補充一下,限制也一堆爆多。飛機不能一台同時出現在兩地(廢話);FAA又規定一個人一天只准工作八小時;飛機每兩天都要回去修兩個小時;某些大機場像JFK一共才五十個登機門可用。還有組員輪班最少要休十小時,不能連軸轉。某些時間段不給降落,宵禁是死規矩。反正,就是不只有目標要最大化(比如賺最多錢啦,準點率啦,分攤負擔啦),各種亂七八糟的「條件」全部疊加,根本是密碼題。
真的寫成數學長這樣:那一大包x_{i,j,t}只能選0或1,每個代表一個超細的動作,然後整體目標通常會寫「Σ profit_{i,j,t} × x_{i,j,t}」要最大,也就是拼命幫公司賺最多錢。條件式更多:像Σ_j x_{i,j,t} ≤ 1,就是說同一時間,一架飛機只會現身在一條線上嘛;再加進工時計算、修理時間、登機門數量……零零總總超過五十個約束在卡。實際跑數字算一下,一千台×五千路×24小時,就跳到一億兩千萬個變數!更誇張的是,如果要暴力算完所有可能,大概要看10^(36,000,000)種配置,比宇宙的原子都還多,你懂這有多瘋狂嗎。
所以沒人會笨到全算一遍啦!專業的人會轉成嚴格的優化模型,用branch-and-bound或cutting plane這些很會剪枝的招式,在幾小時內搞出超接近滿分的安排方案。你知道嗎?美國航空靠這幾套演算法,一年現省下至少一億美元,有夠扯。
好了,我們鏡頭切回Transformer那一類的AI處理文字,也差不多套路。譬如:「The capital of France is」輸進去以後,AI等於同時盯著五萬個詞,要從裡面選哪一顆出來當下一步產物。但不是亂選啊!它必須剛好抓出唯一對的token(Σx_i = 1),而且還不能語病連發,要保證語意流暢、事實沒錯,也不會重複短期內容,更不行人格崩壞或者偏題瞎扯,同時答案還得一路走向重點。
系統也是一堆目標加一狗票限制夾擊你:希望預測機率最高優先;句法、語意連貫度最大化;事實正確要優先;內容新穎避免嘴砲循環……全都塞進那50,000維二進位變數陣列裡,每次只允許0或1(猜猜看是哪一項入選)。最後就會長得很像這種maximize Σ p_i × x_i,把預測最好那顆詞丟上來發表,其它各種限制也全被翻成公式綁住了。所以講白一點,其實AI每天都在跟一題超龐大的MILP對幹,而且題目本質跟排美國航班根本同宗!
要不我直接把兩邊的模型放一起你對照一下好了 -
藍色那塊:美國航空航班MILP問題,主角就是x_{i,j,t
理解 Operations Research 如何優化資源配置決策
呃,這邊在講的其實就是有四個標準要過,語義相關度分數要至少0.7啦,事實正確率也要超過0.9,然後重複率還不能高於0.2,還有連貫性分數要比0.75多才行。突然想到,一整個處理完只用10毫秒,而且還是靠GPU在跑耶。這題歸類叫NP-hard的混合整數線性規劃問題(Mixed Integer Linear Program,MILP),講真的一點都不簡單。
我覺得這邊最大重點是,雖然看起來有兩種不同的問題,但本質上幾乎一樣啦 - 通通都是用二元變數,意思就是每個選項只有「選」或「不選」這種決策而已。然後你得搞定一堆會互相打架的限制條件,目標也只有一個要極大化。難就難在NP-hard,整個結構都差不多:你有一個可行的範圍(feasible region)和最佳化方向。唯一差別只是,Transformer這個東西會自己從資料裡學出那些限制的係數,但像航空公司之類的傳統應用就是直接給你明明白白的限制條件。
可是到底為什麼計算起來會那麼恐怖?好啦,我們來看看token selection,其實就是有五萬個二進位的選擇,你每個都要決定0或1,組合方式就變成2的五萬次方,數字超爆炸,大概10的15,051次方。給你幾個宇宙級參考:宇宙所有原子加起來大概10的80次方,從宇宙誕生到現在經過10的17次方秒,國際象棋對局組合大約10的120次方,圍棋更誇張有10的170,但token組合卻是10的15,051次方,比前面那些全部加起來還要離譜。
如果真的笨到只用暴力法找最好的結果?看下面偽碼:
for each configuration x ∈ {0,1}^50,000:
if satisfies all constraints:
compute objective value
track best solution
return best
認真算一下,就算每秒跑1兆(10^12)次也沒救,要做10的15,041秒,換成年其實要花掉10的15,033年啊!我們整個宇宙從頭到尾才138億年,大約只有10的10次方年,根本不夠。
就算祭出最厲害那種branch-and-bound精確方法理論上可以大量剪枝,但碰到極端情況照樣得窮舉2的n,也就是2的五萬次方=10的15,051,所以還是一樣無解。
那問題來了:Attention怎麼可能可以在短短十毫秒內搞定這一切?祕密就是LP鬆弛。
傳統MILP都死守那種x_i只能0或1,可是一旦你放寬條件讓x_i可以是在[0,1]之間任何數字,它就從混合整數線性規劃變成純連續型線性規劃(LP)。雖然感覺上好像沒什麼,不過其實天差地遠:
直接對照一下:
🔴 MILP(只能選0或1):超級爆炸難度NP-hard,不管多快都得指數時間,沒有梯度,不連續,只能靠剪枝慢慢找答案。
🟢 LP(中間任意分數都行):多項式時間可以搞定,比如五萬變數頂多(5萬)^3.5約等於10的16次方計算量,如果GPU每秒做10^12次,也才一萬秒左右,大概2.8小時。還能用interior point或simplex那類方法找全局最優,而且計算過程平滑隨便微分。
話說回來,以n=5萬為例:MILP需要指數時間搜尋光是所有2^n個情況,而LP就在多項式範圍內,可以解決!
可是事情又沒那麼美好,你用LP求出來只有一堆介在0到1之間的小數值,例如:
x_Paris = 0.432,
x_the = 0.287,
x_is = 0.156,
x_city = 0.089。
說實話,「43.2%的Paris」很詭異吧?你不會想得到一堆分數,只想要挑其中某一個詞啊。
神奇的地方就在於,他們不是硬把分數四捨五入,而是把這些分數當機率去隨機抽token。這樣既能保存優化特色,又能產生具體詞彙,而且完全跟模型本意契合。
接下來拆開來講Attention怎麼把MILP問題真的「翻譯」成它自己的運算流程。
第一步是定義變數,其實Embedding Layer就會做。MILP要求x_i只能是0或1,可是在Transformer裡面,你送進去的是token embedding矩陣E,形狀是seq_len乘d_model,每個位置等於一個潛在選項。
然後再來就是約束條件,其實就是Query-Key機制執行的。原本MILP寫作:
對每個約束k,
計算各自x_i配上的a_{k,i}
再把權重總和拿去比b_k。
Attention裡呢?
Query等於X乘W_Q,這相當於發出「我要檢查哪條限制?」;
Key等於X乘W_K,就是提供上下文脈絡;
然後兩者做內積Q*K轉置再除以根號d_k得分。
簡單講,每條Query就是問:「這條限制滿不滿足?」Key則是給上下文證據。
Q·K分高就代表證據支持這條限制被滿足啦。
我覺得這邊最大重點是,雖然看起來有兩種不同的問題,但本質上幾乎一樣啦 - 通通都是用二元變數,意思就是每個選項只有「選」或「不選」這種決策而已。然後你得搞定一堆會互相打架的限制條件,目標也只有一個要極大化。難就難在NP-hard,整個結構都差不多:你有一個可行的範圍(feasible region)和最佳化方向。唯一差別只是,Transformer這個東西會自己從資料裡學出那些限制的係數,但像航空公司之類的傳統應用就是直接給你明明白白的限制條件。
可是到底為什麼計算起來會那麼恐怖?好啦,我們來看看token selection,其實就是有五萬個二進位的選擇,你每個都要決定0或1,組合方式就變成2的五萬次方,數字超爆炸,大概10的15,051次方。給你幾個宇宙級參考:宇宙所有原子加起來大概10的80次方,從宇宙誕生到現在經過10的17次方秒,國際象棋對局組合大約10的120次方,圍棋更誇張有10的170,但token組合卻是10的15,051次方,比前面那些全部加起來還要離譜。
如果真的笨到只用暴力法找最好的結果?看下面偽碼:
for each configuration x ∈ {0,1}^50,000:
if satisfies all constraints:
compute objective value
track best solution
return best
認真算一下,就算每秒跑1兆(10^12)次也沒救,要做10的15,041秒,換成年其實要花掉10的15,033年啊!我們整個宇宙從頭到尾才138億年,大約只有10的10次方年,根本不夠。
就算祭出最厲害那種branch-and-bound精確方法理論上可以大量剪枝,但碰到極端情況照樣得窮舉2的n,也就是2的五萬次方=10的15,051,所以還是一樣無解。
那問題來了:Attention怎麼可能可以在短短十毫秒內搞定這一切?祕密就是LP鬆弛。
傳統MILP都死守那種x_i只能0或1,可是一旦你放寬條件讓x_i可以是在[0,1]之間任何數字,它就從混合整數線性規劃變成純連續型線性規劃(LP)。雖然感覺上好像沒什麼,不過其實天差地遠:
直接對照一下:
🔴 MILP(只能選0或1):超級爆炸難度NP-hard,不管多快都得指數時間,沒有梯度,不連續,只能靠剪枝慢慢找答案。
🟢 LP(中間任意分數都行):多項式時間可以搞定,比如五萬變數頂多(5萬)^3.5約等於10的16次方計算量,如果GPU每秒做10^12次,也才一萬秒左右,大概2.8小時。還能用interior point或simplex那類方法找全局最優,而且計算過程平滑隨便微分。
話說回來,以n=5萬為例:MILP需要指數時間搜尋光是所有2^n個情況,而LP就在多項式範圍內,可以解決!
可是事情又沒那麼美好,你用LP求出來只有一堆介在0到1之間的小數值,例如:
x_Paris = 0.432,
x_the = 0.287,
x_is = 0.156,
x_city = 0.089。
說實話,「43.2%的Paris」很詭異吧?你不會想得到一堆分數,只想要挑其中某一個詞啊。
神奇的地方就在於,他們不是硬把分數四捨五入,而是把這些分數當機率去隨機抽token。這樣既能保存優化特色,又能產生具體詞彙,而且完全跟模型本意契合。
接下來拆開來講Attention怎麼把MILP問題真的「翻譯」成它自己的運算流程。
第一步是定義變數,其實Embedding Layer就會做。MILP要求x_i只能是0或1,可是在Transformer裡面,你送進去的是token embedding矩陣E,形狀是seq_len乘d_model,每個位置等於一個潛在選項。
然後再來就是約束條件,其實就是Query-Key機制執行的。原本MILP寫作:
對每個約束k,
計算各自x_i配上的a_{k,i}
再把權重總和拿去比b_k。
Attention裡呢?
Query等於X乘W_Q,這相當於發出「我要檢查哪條限制?」;
Key等於X乘W_K,就是提供上下文脈絡;
然後兩者做內積Q*K轉置再除以根號d_k得分。
簡單講,每條Query就是問:「這條限制滿不滿足?」Key則是給上下文證據。
Q·K分高就代表證據支持這條限制被滿足啦。

發現 Transformer 在生成文字時面對哪些 MILP 問題
講白一點啦,Transformer在處理token這件事情上,其實跟傳統OR(Operations Research)的MILP(混合整數線性規劃)那套,有夠像。舉個例,假設你有個Query:「Grammar check」,然後Key:「The cat is」,他打分直接給0.95,就很合理嘛,就是應該接動詞或形容詞。如果變成「Paris France the」這種怪排列,分數只剩0.30,直接被系統嫌棄。換語義檢查:「Semantic check」遇到Key「capital of France」是0.98,一看就知道在講巴黎,如果碰到「cooking recipe」居然只有0.05,完全搭不上邊。再來還有Diversity檢查,比如一直重複同樣字串會被扣分,這就是Transformer的頭不斷在抓出那些違規、重複什麼的。
往裡面講,多頭注意力(Multi-head)就是同時跑好幾條限制條件。可以想像每個head是在看不同方向:有些管文法、有些管地名對不對、還有人去檢查是不是貼題、有的又去顧指代、還有位置順序、高階交互那些鬼東西,加起來總共十二個人一起開會,每個人打自己角度的分數。每顆注意力頭,就等於MILP矩陣A裡某一行,只是全部同步審。
組裝呢?MultiHead(Q,K,V)就是把各自分工審核完的資料包起來餵權重W_O,全員投票定輸贏。你如果套OR腦袋,就是final_score_i = Σ_k weight_k × constraint_k(x_i),所以每一項分數都代表某個限制有沒有過關 - 全部加總才決定下一步可不可以繼續選這個token。
怎麼選token?Attention Weight那邊先softmax一下,把怪答案和違規直接壓超低快要零,你最後看到output=attention_weights×V,說穿了就很像OR裡面check feasibility,只要A × x ≥ b成立才能走下去,不然當場淘汰。
不是打一輪就結束哦,要一直優化往下疊層級。每經過一次Transformer Layer,其實就類似BnB(Branch and Bound)方法,多一道過濾限制 - 第一層大略抓文法、語意,再往深層細緻強化事實長距離依賴之類,第9-12層收尾精煉細節甚至全局特例,全程都是從粗糙到極致精修,就正規解LP+cutting planes+分支細緻版那一掛感覺。
objective function也是照OR走向最大化:目標 maximize c^T × x,但logits其實就是x^(L) × W_vocab + b,W_vocab扮演c這角色,而x^(L)等於所有約束篩掉後剩下的最強表徵,所以最後映射出誰最該中獎。
不過這還沒完喔!加LP Relaxation再配entropy regularizer:maximize: c^T × x + τ H(x),溫度τ控制探索廣度和集中力,有entropy進來讓結果更活,不死板;transformer在用softmax(logits/temperature),整套機制直接把這想法做出來,所以probs = softmax(logits / temperature)。
輪到Sampling也滿妙 - 取樣不是四捨五入,而是根據剛才機率隨機抽,也就是Randomized rounding,每次誰上榜全憑運氣但長遠期待值和硬派選擇差不了多少,其實數學上早保證沒啥損失,只要溫度控制得宜!
整體流程攤開明明就差不多:傳統MILP搞四到六小時超算爆肝才解完一題,可Transformer開GPU十毫秒就搞定。核心差異在哪?神經網絡直接學constraint參數,不靠工程師手寫list而且速度差百萬倍。本質上兩者都在建變數、堆約束、積累分數、多層疊優化,都盯著最大化Objective函數死磕到底。不過差異點其實也很純粹:Transformers全自學,人只準備Data跟架構;MILP則要專家搞半天列公式調參係數。
然後我突然想到一個小彩蛋。例如問:「The capital of France is ___」。Token候選"Paris",模型打機率0.87;文法這裡拿1.0、語意又1.0、事實正確也滿點、多樣性沒問題、主題呼應和上下文支持都齊了。所以你可以想像,那些真值約束和神經網絡學出來的權重全部夾雜在一起,每次產生答案背後,全是各路約束優化彼此拔河,「誰最值得填空」靠這群人在PK而已 - 根本同款遊戲只是改裝變快很多而已啦!
往裡面講,多頭注意力(Multi-head)就是同時跑好幾條限制條件。可以想像每個head是在看不同方向:有些管文法、有些管地名對不對、還有人去檢查是不是貼題、有的又去顧指代、還有位置順序、高階交互那些鬼東西,加起來總共十二個人一起開會,每個人打自己角度的分數。每顆注意力頭,就等於MILP矩陣A裡某一行,只是全部同步審。
組裝呢?MultiHead(Q,K,V)就是把各自分工審核完的資料包起來餵權重W_O,全員投票定輸贏。你如果套OR腦袋,就是final_score_i = Σ_k weight_k × constraint_k(x_i),所以每一項分數都代表某個限制有沒有過關 - 全部加總才決定下一步可不可以繼續選這個token。
怎麼選token?Attention Weight那邊先softmax一下,把怪答案和違規直接壓超低快要零,你最後看到output=attention_weights×V,說穿了就很像OR裡面check feasibility,只要A × x ≥ b成立才能走下去,不然當場淘汰。
不是打一輪就結束哦,要一直優化往下疊層級。每經過一次Transformer Layer,其實就類似BnB(Branch and Bound)方法,多一道過濾限制 - 第一層大略抓文法、語意,再往深層細緻強化事實長距離依賴之類,第9-12層收尾精煉細節甚至全局特例,全程都是從粗糙到極致精修,就正規解LP+cutting planes+分支細緻版那一掛感覺。
objective function也是照OR走向最大化:目標 maximize c^T × x,但logits其實就是x^(L) × W_vocab + b,W_vocab扮演c這角色,而x^(L)等於所有約束篩掉後剩下的最強表徵,所以最後映射出誰最該中獎。
不過這還沒完喔!加LP Relaxation再配entropy regularizer:maximize: c^T × x + τ H(x),溫度τ控制探索廣度和集中力,有entropy進來讓結果更活,不死板;transformer在用softmax(logits/temperature),整套機制直接把這想法做出來,所以probs = softmax(logits / temperature)。
輪到Sampling也滿妙 - 取樣不是四捨五入,而是根據剛才機率隨機抽,也就是Randomized rounding,每次誰上榜全憑運氣但長遠期待值和硬派選擇差不了多少,其實數學上早保證沒啥損失,只要溫度控制得宜!
整體流程攤開明明就差不多:傳統MILP搞四到六小時超算爆肝才解完一題,可Transformer開GPU十毫秒就搞定。核心差異在哪?神經網絡直接學constraint參數,不靠工程師手寫list而且速度差百萬倍。本質上兩者都在建變數、堆約束、積累分數、多層疊優化,都盯著最大化Objective函數死磕到底。不過差異點其實也很純粹:Transformers全自學,人只準備Data跟架構;MILP則要專家搞半天列公式調參係數。
然後我突然想到一個小彩蛋。例如問:「The capital of France is ___」。Token候選"Paris",模型打機率0.87;文法這裡拿1.0、語意又1.0、事實正確也滿點、多樣性沒問題、主題呼應和上下文支持都齊了。所以你可以想像,那些真值約束和神經網絡學出來的權重全部夾雜在一起,每次產生答案背後,全是各路約束優化彼此拔河,「誰最值得填空」靠這群人在PK而已 - 根本同款遊戲只是改裝變快很多而已啦!
探索注意力機制怎麼同時處理多重語言限制
the 這個詞,嗯,還以為很重要,對吧?但在這裡,其實分數只有 0.4,很低,幾乎沒貢獻。意義上也沒什麼作用,多樣性、事實性什麼的,全都不太行。反正就是,不合格。
located,有點微妙。我覺得用起來蠻新鮮的,資訊量也夠,只是...語意有點卡住,好像說了又沒講清楚。某些條件還算過,但沒有到可以很肯定地說「對,就是它」,所以大概只能放「或許可」這一區。
beautiful,一聽就很特別,可是你想喔,它超級主觀,也不太具體。就算文法 OK,可是真的資訊超少,不怎麼能用,所以分數也是偏低。
簡單說,每個單字我都是拆開看,不同項目各自打分。有的明顯不及格,有的只是勉強過關。不過整個重點啦,就是要看詞本身帶多少真正有用的訊息,而不是選那種大家常見或感覺漂亮的字混在一起就好 - 真的得抓緊資訊品質才對。
located,有點微妙。我覺得用起來蠻新鮮的,資訊量也夠,只是...語意有點卡住,好像說了又沒講清楚。某些條件還算過,但沒有到可以很肯定地說「對,就是它」,所以大概只能放「或許可」這一區。
beautiful,一聽就很特別,可是你想喔,它超級主觀,也不太具體。就算文法 OK,可是真的資訊超少,不怎麼能用,所以分數也是偏低。
簡單說,每個單字我都是拆開看,不同項目各自打分。有的明顯不及格,有的只是勉強過關。不過整個重點啦,就是要看詞本身帶多少真正有用的訊息,而不是選那種大家常見或感覺漂亮的字混在一起就好 - 真的得抓緊資訊品質才對。
看看 LP 放寬法如何加速大規模最佳化計算
有時候我在想,Transformer 模型回答問題,說穿了根本就是一直在檢查「這個答案到底有沒有全部都符合你問的那些條件」啊。像前面那個例子,最後就只有 Paris 完全過關,其他那些詞,不管是語法還是內容還是知識層面,都會有一兩項扣分,就沒救。
再來,那篇文章不是很愛比較傳統的運籌學方法嗎?什麼 CPLEX、Gurobi,你要先把所有的限制式寫死、專家先搞定公式才能開始算… 老實講,很麻煩啦,也真的慢到一個不行,有些東西真的是動不動就卡好幾小時、一兩天很正常。不過 Transformer 就完全另外一回事了,它可以直接從資料裡自學哪些條件重要,把這些都記進 Attention 裡。然後一口氣刷掉那些明顯違規、不合理的答案,超快,就是很暴力那種「一秒判生死」感覺。
但是這樣比下來,也不是絕對哪邊比較好耶。OR 傳統系統嘛,你每一條限制都是白紙黑字你自己設的,可以非常確定、也能保證「對啦這就是最好的結果」;只是要手動設太累了。而 Transformer 超方便、超快,也不用人類去想那堆莫名其妙數學式。但缺點也很明顯,有些細節只能盡量貼近規則而已,不是 100% 每次全都合格通過。
突然想到,其實 transformer 跟 MILP(整數線性規劃)還真的有點兄弟臉,只是 transformer 多了一點彈性跟分層結構。其實你懂 LP relax 怎麼配 softmax 的話,你甚至可以拆出是哪個 attention head 沒顧好某個 constraint。你還可以調參數讓模型變聰明,像那個溫度(temperature)… 反正你可以直接理解成「願不願意放水」。溫度低嘛,就只剩很嚴格正確那種,但也無聊。溫度高,就亂七八糟都會跑出來,不過偶爾會冒出驚喜?
講到 attention head 的分工,也不是亂抓喔,每一顆通常會專注不同的小範圍,比方說文法錯誤啊、事實正不正確、有沒有上下文連貫感等等,各自負責自己的任務,有點像優化時各 constraint 類型的分類表。
depth (模型深度)也不能忽略,多加幾層 layer 基本上等於檢查更細、更難作弊。6 層大多比較寬鬆小錯很多,12 層就是平均水準啦,再高到 24 層以上就幾乎鐵桶一片但速度慢一些。有點像 branch-and-bound 拿捏 bound 緊縮或放鬆,很像吧?
欸對,最特別的一點 - prompt engineering,其實根本就是在定義新約束啦!所以下提示詞其實是在告訴模型哪些線不能碰,玩法超像只是包裝長得不一樣。如果能看懂背後 constraint 那套思維,其實就更知道為啥某些 token 被丟掉,也能分析出哪顆頭哪邊失誤,更容易 debug 呀…我覺得蠻酷的。
再來,那篇文章不是很愛比較傳統的運籌學方法嗎?什麼 CPLEX、Gurobi,你要先把所有的限制式寫死、專家先搞定公式才能開始算… 老實講,很麻煩啦,也真的慢到一個不行,有些東西真的是動不動就卡好幾小時、一兩天很正常。不過 Transformer 就完全另外一回事了,它可以直接從資料裡自學哪些條件重要,把這些都記進 Attention 裡。然後一口氣刷掉那些明顯違規、不合理的答案,超快,就是很暴力那種「一秒判生死」感覺。
但是這樣比下來,也不是絕對哪邊比較好耶。OR 傳統系統嘛,你每一條限制都是白紙黑字你自己設的,可以非常確定、也能保證「對啦這就是最好的結果」;只是要手動設太累了。而 Transformer 超方便、超快,也不用人類去想那堆莫名其妙數學式。但缺點也很明顯,有些細節只能盡量貼近規則而已,不是 100% 每次全都合格通過。
突然想到,其實 transformer 跟 MILP(整數線性規劃)還真的有點兄弟臉,只是 transformer 多了一點彈性跟分層結構。其實你懂 LP relax 怎麼配 softmax 的話,你甚至可以拆出是哪個 attention head 沒顧好某個 constraint。你還可以調參數讓模型變聰明,像那個溫度(temperature)… 反正你可以直接理解成「願不願意放水」。溫度低嘛,就只剩很嚴格正確那種,但也無聊。溫度高,就亂七八糟都會跑出來,不過偶爾會冒出驚喜?
講到 attention head 的分工,也不是亂抓喔,每一顆通常會專注不同的小範圍,比方說文法錯誤啊、事實正不正確、有沒有上下文連貫感等等,各自負責自己的任務,有點像優化時各 constraint 類型的分類表。
depth (模型深度)也不能忽略,多加幾層 layer 基本上等於檢查更細、更難作弊。6 層大多比較寬鬆小錯很多,12 層就是平均水準啦,再高到 24 層以上就幾乎鐵桶一片但速度慢一些。有點像 branch-and-bound 拿捏 bound 緊縮或放鬆,很像吧?
欸對,最特別的一點 - prompt engineering,其實根本就是在定義新約束啦!所以下提示詞其實是在告訴模型哪些線不能碰,玩法超像只是包裝長得不一樣。如果能看懂背後 constraint 那套思維,其實就更知道為啥某些 token 被丟掉,也能分析出哪顆頭哪邊失誤,更容易 debug 呀…我覺得蠻酷的。
解讀每層 Transformer 如何逐步強化語言約束
其實,剛開始看到Operations Research(OR)的時候,我就只覺得:「啊,就是商業上的最佳化方法吧?」然後機器學習(ML)好像都在搞什麼模式識別和統計數據那一掛。老實說,那陣子完全不會把兩個東西聯想在一起。有一天很無聊,我硬是拿Attention那一套比來看MILP(整數線性規劃),腦袋突然打開了耶:transformer表面上感覺很前衛,其實底層就是把八十多年前的OR數學用神經網路高速重做而已。
你每天訂機票在調時間表,其實跟ChatGPT回你問題背後用的那堆算式,本質差沒有差太遠。每次transformer forward pass,其實:
embedding階段 - 就好像是在挑決策變數出來,
然後attention這部分呢,是query和key內積找各種約束條件有沒有合適,
multi-head attention就一次考慮很多不同的constraint(還能平行處理),
層疊類似branch-and-bound,反覆修正那些約束限制,不停地收斂,
Softmax這步完全可以拿entropy regularization下解LP問題來理解,
最後sampling大致可想成隨機四捨五入得到離散解。
基本上就是完整跑了一遍MILP求解流程,每一步都有影子。
所以到底為什麼這樣套進去是合理的?關鍵就在LP Relaxation能怎樣轉化。我直接扔公式,你要看的話:
最傳統的MILP長這樣:
maximize: c^T x
subject to: A x ≥ b
Σ x_i = 1
x_i ∈ {0,1}
這邊c是n維分數向量,A是m乘n的constraint矩陣,b是size m限制值,x則是一串0/1二元選擇。如果Token總量V=5萬,那n=5萬;常見m設7,分文法、語意、事實對錯、多元、連貫性、語氣或風格、效用之類一堆評分方式。
現在,要做LP Relaxation,就是把「x只能取0或1」放寬成介於[0,1]間浮點。變成:
maximize: c^T x
subject to: A x ≥ b, Σ x_i = 1, 0 ≤ x_i ≤ 1
此時已經能夠被常見solver多項式時間快速解掉,而不是指望爆炸組合窮舉。
但是要讓最後只挑出唯一答案,又希望梯度下降順利,就必須加上entropy正則項,也就是:
maximize: c^T x + τ H(x)
其中H(x) = -Σ x_i log(x_i),τ > 0當溫度參數用。
再講清楚拉格朗日型態 -
L(x, λ, μ) = c^T x + τ H(x) - λ^T(b - Ax) - μ(Σx_i-1)
計算到展開,把每個x_i偏微分令等於零,再慢慢整理就會發現
log(x_i) = z_i / τ – 1
也就是
x_i ∝ exp(z_i / τ)
然後根據Σx=1正規化,就會直接推softmax公式!換句話說:softmax本質其實是在求帶entropy regularizer的線性規劃最優答案。其中z向量=c + A^Tλ – μ·全體單位向量,把全部權重與所有約束集中綜合了。
從transformer角度,每一層送出的logits(軟最大操作之前算出來那串)其實就是包含所有限制以後重新微調過的一個z;執行softmax=真正做了那個優化step。τ多少直接影響可容忍違規程度,更激烈或者更保守,全靠這細節。不是只是形象類比,是嚴謹上的對應等價!
說到attention裡A矩陣具體怎麼產生……約束k跟第j token間連動,其權重其實蠻自然地由q_k^T k_j / sqrt(d_k)定下。而multi-head寫白了是同時嘗試h種完全不同constraint檢查,每頭各自QK^T/sqrt()運算走一遭,各自跑自己的softmax,最後結果混起來,用W_O包裝一下,下流繼續累疊。越堆越細緻,每加一層、更迫近理想目標,可行空間一直變緊縮,一直到極限狀況靠攏。
殘差連結存在意義也不能低估,如果說某層成果已經穩穩滿足δ裕度,那再往下哪怕遇到小擾動,都能保底留下一半δ,不至於走失掉原本合法答案範圍,有點像保障逐漸改良而非亂跳。專業叫constraint preservation。
至於sampling很值得聊。如果解得的是機率分布形式x*∈[0,1]^n,只要照那些機率隨便抽哪個i賦予值1、其它都壓到0,你得到結果在期望意義下竟然可與LP原始最佳目標z*吻合……換句話說 - 採樣沒有浪費期望效益,但有額外雜訊波動罷了。同時對任何單獨约束違反可以靠Chernoff Bounds估它小概率,如果又特意在平均水準剩下點安全裕度,那違規概率會非常低,非常可靠。
溫度τ負責控制柔軟程度,趨近零時高分獲勝幾乎確定/全部導向one-hot選擇,高溫則random感超強接近均勻亂抽,可控探索放寬界限與否也是靠它切換。不難想見variance由τ²決定,所以想危險瘋狂試探還是真的very conservative,就是調個參數馬上決定路徑了。
深一些看transformer,一層蓋過一層並不是無目的追加,而是在讓「允許選擇」F^(l)每次都往更精簡、更收斂方向進化,不可能退步、多半更聚焦,就是逼真不留退路地最終逼近true MILP full answer;算法上的願景一直都是朝著最好走,不拐彎抹角偷懶。
如果問prompt怎麼玩,例如希望回答更短一句、「言簡意賅」直接設token長度門檻、「超有創意」就鬆開多元限制、「資訊精確」猛拉facts score制衡,「正式風格」寫死style欄位要求達標、「避免同字詞重複」明列repetition最低值……事情居然通通能寫進MILP constraint矩陣,各式奇怪需求只要肯抽象一下全都丟得進去。一旦forward pass開跑,用Attention直播修正新的A,引導整顆網路照著瞬間刻的新條件活潑找到漂亮出口生內容 - 越想真的覺得精彩啊。
你每天訂機票在調時間表,其實跟ChatGPT回你問題背後用的那堆算式,本質差沒有差太遠。每次transformer forward pass,其實:
embedding階段 - 就好像是在挑決策變數出來,
然後attention這部分呢,是query和key內積找各種約束條件有沒有合適,
multi-head attention就一次考慮很多不同的constraint(還能平行處理),
層疊類似branch-and-bound,反覆修正那些約束限制,不停地收斂,
Softmax這步完全可以拿entropy regularization下解LP問題來理解,
最後sampling大致可想成隨機四捨五入得到離散解。
基本上就是完整跑了一遍MILP求解流程,每一步都有影子。
所以到底為什麼這樣套進去是合理的?關鍵就在LP Relaxation能怎樣轉化。我直接扔公式,你要看的話:
最傳統的MILP長這樣:
maximize: c^T x
subject to: A x ≥ b
Σ x_i = 1
x_i ∈ {0,1}
這邊c是n維分數向量,A是m乘n的constraint矩陣,b是size m限制值,x則是一串0/1二元選擇。如果Token總量V=5萬,那n=5萬;常見m設7,分文法、語意、事實對錯、多元、連貫性、語氣或風格、效用之類一堆評分方式。
現在,要做LP Relaxation,就是把「x只能取0或1」放寬成介於[0,1]間浮點。變成:
maximize: c^T x
subject to: A x ≥ b, Σ x_i = 1, 0 ≤ x_i ≤ 1
此時已經能夠被常見solver多項式時間快速解掉,而不是指望爆炸組合窮舉。
但是要讓最後只挑出唯一答案,又希望梯度下降順利,就必須加上entropy正則項,也就是:
maximize: c^T x + τ H(x)
其中H(x) = -Σ x_i log(x_i),τ > 0當溫度參數用。
再講清楚拉格朗日型態 -
L(x, λ, μ) = c^T x + τ H(x) - λ^T(b - Ax) - μ(Σx_i-1)
計算到展開,把每個x_i偏微分令等於零,再慢慢整理就會發現
log(x_i) = z_i / τ – 1
也就是
x_i ∝ exp(z_i / τ)
然後根據Σx=1正規化,就會直接推softmax公式!換句話說:softmax本質其實是在求帶entropy regularizer的線性規劃最優答案。其中z向量=c + A^Tλ – μ·全體單位向量,把全部權重與所有約束集中綜合了。
從transformer角度,每一層送出的logits(軟最大操作之前算出來那串)其實就是包含所有限制以後重新微調過的一個z;執行softmax=真正做了那個優化step。τ多少直接影響可容忍違規程度,更激烈或者更保守,全靠這細節。不是只是形象類比,是嚴謹上的對應等價!
說到attention裡A矩陣具體怎麼產生……約束k跟第j token間連動,其權重其實蠻自然地由q_k^T k_j / sqrt(d_k)定下。而multi-head寫白了是同時嘗試h種完全不同constraint檢查,每頭各自QK^T/sqrt()運算走一遭,各自跑自己的softmax,最後結果混起來,用W_O包裝一下,下流繼續累疊。越堆越細緻,每加一層、更迫近理想目標,可行空間一直變緊縮,一直到極限狀況靠攏。
殘差連結存在意義也不能低估,如果說某層成果已經穩穩滿足δ裕度,那再往下哪怕遇到小擾動,都能保底留下一半δ,不至於走失掉原本合法答案範圍,有點像保障逐漸改良而非亂跳。專業叫constraint preservation。
至於sampling很值得聊。如果解得的是機率分布形式x*∈[0,1]^n,只要照那些機率隨便抽哪個i賦予值1、其它都壓到0,你得到結果在期望意義下竟然可與LP原始最佳目標z*吻合……換句話說 - 採樣沒有浪費期望效益,但有額外雜訊波動罷了。同時對任何單獨约束違反可以靠Chernoff Bounds估它小概率,如果又特意在平均水準剩下點安全裕度,那違規概率會非常低,非常可靠。
溫度τ負責控制柔軟程度,趨近零時高分獲勝幾乎確定/全部導向one-hot選擇,高溫則random感超強接近均勻亂抽,可控探索放寬界限與否也是靠它切換。不難想見variance由τ²決定,所以想危險瘋狂試探還是真的very conservative,就是調個參數馬上決定路徑了。
深一些看transformer,一層蓋過一層並不是無目的追加,而是在讓「允許選擇」F^(l)每次都往更精簡、更收斂方向進化,不可能退步、多半更聚焦,就是逼真不留退路地最終逼近true MILP full answer;算法上的願景一直都是朝著最好走,不拐彎抹角偷懶。
如果問prompt怎麼玩,例如希望回答更短一句、「言簡意賅」直接設token長度門檻、「超有創意」就鬆開多元限制、「資訊精確」猛拉facts score制衡,「正式風格」寫死style欄位要求達標、「避免同字詞重複」明列repetition最低值……事情居然通通能寫進MILP constraint矩陣,各式奇怪需求只要肯抽象一下全都丟得進去。一旦forward pass開跑,用Attention直播修正新的A,引導整顆網路照著瞬間刻的新條件活潑找到漂亮出口生內容 - 越想真的覺得精彩啊。

學會用軟性限制與溫度參數平衡文本品質和多樣性
混合整數線性規劃,MILP,cutting planes這東西…本質上就是往問題裡頭塞更多「你不能走歪」的條件。等於不斷圍住原本的可行解空間,不會去砍掉任何正確的整數解,但LP鬆弛那堆亂飄的分數解可以一刀刀剔除掉,收斂速度直接加速了不少。有點像每層transformer都自己生出一組新的cutting plane,每次都學出不同限制。
一層一層說,其實l層會新增額外的不等式:Ā^(l) x ≥ b̄^(l)。它的三個亮點,一個是安全 - 該留下來的好解不會錯殺。再來很刁鑽 - 壞掉、違規那些分數型雜魚基本被掃乾淨。最後厲害在哪?不是人工設計,全機器自己練出來。
嗯…這邊想到要扯一下convergence收斂狀況,到底疊多少層才夠?gap^(l) = (z^(l) - z*) / z*這樣定義。如果挑限制OK,有個0到1之間的ρ,gap就指數級往下縮:gap^(l) ≤ gap^(0) · ρ^l。如果ρ落在0.7~0.85,大概12層下來誤差只剩1%到5%,超有效率。
流程順序?從tokens開始,就是t₁, t₂, ..., t_n那種,每個都是index。先經過embedding,用E矩陣把東西轉成x^(0),直接拉進連續空間R^(n×d)。然後Positional Encoding,PE加進來排隊順序,畢竟語言擺錯地方邏輯直接炸掉,有時候也挺煩。
然後,一層又一層做self-attention,好比你手上一堆候選條件,要驗證哪些成立。一大票head在multi-head裡各自檢查:「Q決定該關注什麼條件、K彙報當下狀態、V則聚合所需信息」,算A_h^(l)、丟softmax,其實就像對每條constraint給權重,再乘V收工。
多頭結果全部一起丟給output matrix W_O^(l),再殘差跳接一次:x̃^(l) = x^(l-1) + MultiHead^(l)。feed-forward network也是MLP類型(ReLU搞完後還要投影),又殘差一次(x^(l) = x̃^(l) + FFN(x̃))。Layer norm全程都有,只是常常懶得寫細節,不然字會炸開啦,其實主要讓網路穩定點而已。
最後Projection,把x^(L)[final_position]拿去對詞表做線性變換,得到logits。一格格token都配有logits_i,就代表token i目前的分數c_i。同時constraints也全部融進去了,所以logits_i = c_i + (A^T λ)_i - μ。c_i是初始得分,A^T λ則依當前上下文調整權重,μ負責簡單歸一化而已,小伎倆啦。
還沒結束喔!Softmax那段其實就和LP relaxation超像:probs = softmax(logits / τ),最大化logits⋅x + τH(x),不過卡在Σ x_i = 1跟x≥0這種單純形幾何內。最佳解就是取機率分布,每顆token選中概率等於exp(logits_i/τ)。
最後一步隨機化捨入(Randomized Rounding):根據剛才softmax抽中誰,那個token就設為1,其它全歸零。所以輸出永遠只有唯一一顆燈亮著,但平均起來效益已達到最優LP值,而且違反限制風險低且動作快。
效率?傳統MILP如果只有五萬顆二元變數你硬搜2^50,000組合次方……10^15,051次操作量那根本玩不起來啊。branch-and-bound退萬步想,也要跑2^5,000左右=10^1,505次計算,也完全不切實際。不信你試試看電腦爆炸直接睡著。
改用LP內點法,大約O(n³.5 log(1/ε))。如果n=50,000、ε=10^-6,也要十萬億級運算量,你GPU 10¹² ops/s照樣run上萬秒 - 快三小時啦,不太行欸!
transformer呢?完全另一種感覺,每層算O(n²d+n d²)。如果長度2048、768維,那光一層約4e9運算量,全12層總共差不多5e10次。在現代GPU跑不到50毫秒。有沒有誇張?LP solver噴十萬秒但transformer只花零點零五秒左右,相差20萬倍以上…
所以transformer能極速近似MILP核心原因就是三項:constraints全部記熟根本不用慢慢搜尋;運算方式全並行化特適合GPU;還有就是答案近似但夠用,在文字處理其實效果早超標準要求啦。
回頭看transformer像極了一台大型MILP求解器,每顆attention head都是專職某類限制檢查官。一旦抓住這個直觀想法,看模型運作會順很多。
一層一層說,其實l層會新增額外的不等式:Ā^(l) x ≥ b̄^(l)。它的三個亮點,一個是安全 - 該留下來的好解不會錯殺。再來很刁鑽 - 壞掉、違規那些分數型雜魚基本被掃乾淨。最後厲害在哪?不是人工設計,全機器自己練出來。
嗯…這邊想到要扯一下convergence收斂狀況,到底疊多少層才夠?gap^(l) = (z^(l) - z*) / z*這樣定義。如果挑限制OK,有個0到1之間的ρ,gap就指數級往下縮:gap^(l) ≤ gap^(0) · ρ^l。如果ρ落在0.7~0.85,大概12層下來誤差只剩1%到5%,超有效率。
流程順序?從tokens開始,就是t₁, t₂, ..., t_n那種,每個都是index。先經過embedding,用E矩陣把東西轉成x^(0),直接拉進連續空間R^(n×d)。然後Positional Encoding,PE加進來排隊順序,畢竟語言擺錯地方邏輯直接炸掉,有時候也挺煩。
然後,一層又一層做self-attention,好比你手上一堆候選條件,要驗證哪些成立。一大票head在multi-head裡各自檢查:「Q決定該關注什麼條件、K彙報當下狀態、V則聚合所需信息」,算A_h^(l)、丟softmax,其實就像對每條constraint給權重,再乘V收工。
多頭結果全部一起丟給output matrix W_O^(l),再殘差跳接一次:x̃^(l) = x^(l-1) + MultiHead^(l)。feed-forward network也是MLP類型(ReLU搞完後還要投影),又殘差一次(x^(l) = x̃^(l) + FFN(x̃))。Layer norm全程都有,只是常常懶得寫細節,不然字會炸開啦,其實主要讓網路穩定點而已。
最後Projection,把x^(L)[final_position]拿去對詞表做線性變換,得到logits。一格格token都配有logits_i,就代表token i目前的分數c_i。同時constraints也全部融進去了,所以logits_i = c_i + (A^T λ)_i - μ。c_i是初始得分,A^T λ則依當前上下文調整權重,μ負責簡單歸一化而已,小伎倆啦。
還沒結束喔!Softmax那段其實就和LP relaxation超像:probs = softmax(logits / τ),最大化logits⋅x + τH(x),不過卡在Σ x_i = 1跟x≥0這種單純形幾何內。最佳解就是取機率分布,每顆token選中概率等於exp(logits_i/τ)。
最後一步隨機化捨入(Randomized Rounding):根據剛才softmax抽中誰,那個token就設為1,其它全歸零。所以輸出永遠只有唯一一顆燈亮著,但平均起來效益已達到最優LP值,而且違反限制風險低且動作快。
效率?傳統MILP如果只有五萬顆二元變數你硬搜2^50,000組合次方……10^15,051次操作量那根本玩不起來啊。branch-and-bound退萬步想,也要跑2^5,000左右=10^1,505次計算,也完全不切實際。不信你試試看電腦爆炸直接睡著。
改用LP內點法,大約O(n³.5 log(1/ε))。如果n=50,000、ε=10^-6,也要十萬億級運算量,你GPU 10¹² ops/s照樣run上萬秒 - 快三小時啦,不太行欸!
transformer呢?完全另一種感覺,每層算O(n²d+n d²)。如果長度2048、768維,那光一層約4e9運算量,全12層總共差不多5e10次。在現代GPU跑不到50毫秒。有沒有誇張?LP solver噴十萬秒但transformer只花零點零五秒左右,相差20萬倍以上…
所以transformer能極速近似MILP核心原因就是三項:constraints全部記熟根本不用慢慢搜尋;運算方式全並行化特適合GPU;還有就是答案近似但夠用,在文字處理其實效果早超標準要求啦。
回頭看transformer像極了一台大型MILP求解器,每顆attention head都是專職某類限制檢查官。一旦抓住這個直觀想法,看模型運作會順很多。
辨識 Attention Head 如何對應不同語言控制條件
這東西其實很直覺,就是你可以直接去一個一個 attention head 看它到底學了什麼。嗯…怎麼做?舉例好了,比方層 l 裡面有個第 h 個頭嘛,你先弄一堆不一樣的 context,C 就是 {c_1, ..., c_m 這種感覺 - 哦對,每個 context 可以隨便挑,只要能夠代表性足夠就好。

用運籌觀點評估 Prompt 設計對模型表現的影響
直接切重點哈,很多人搞不清楚溫度(tau, τ)這個東西,到底為啥要調?其實很簡單:你想要模型安份守己、乖乖說事實、不亂飄,就把 τ 設低一點,像拉緊狗鍊那樣。反過來,如果你想看它出奇不意、有點花火、多點靈感的內容 - 直接拉高 τ,讓它「放飛自我」就對了。每次調這個數字,其實就是在告訴機器:「欸,我這次心臟大顆一點,敢冒險。」或者,「拜託乖乖聽話就好。」
講到選模型大小,每次都有人糾結。超多層、參數爆表那種大模型,其實精確細緻、考慮比較周到,可是跑起來比較慢(特別會風扇狂轉那種😅)。如果只想快點看到答案,小模型無腦給下去沒問題,偶爾答得粗一點但節省超多時間啦!看你的需求,有完美主義症就拿大的,要節奏快就選小的。
Prompt 要怎麼寫才厲害?有套路沒錯!指令加越多,就像自己用膠帶一直黏規則上去。「請簡短」是要求話少,「請有創意」就是求活潑,「資料要正確」=拜託不要掰。你腦中哪個特質最重視?打進 prompt 裡啊!而且越明確越好,不要暗示,一定要說白。
然後最現實的是,有時候模型產出的東西怪怪,你只要抓住「哪條規則被踩到了?」找到之後,把限制語句搬出來放明顯一點,比方「90 字以內」、「附上論文出處」。debug 模型真的比 debug 程式輕鬆,只需要會喊停然後再提醒一句條件就行。
突然想到很 geek 的冷知識🤓 - 大家覺得 ChatGPT 神乎其技,其實背後是在瘋狂解優化問題喔!核心算法叫混合整數線性規劃(MILP),規模超扯,比如 5 萬個二元變數外加 7 條約束,你拿傳統演算法跑可能等到地球毀滅還算不完,但 transformer 十毫秒噴出結果根本像開掛!
為什麼辦得到?因為先把原本只能選 0 或 1 的 MILP 給 relax 成 LP,也就是把離散變成連續範圍,再加上 entropy 做 softmax 處理,所以所有 token 出現機率都是最佳化完的;取樣階段再把那些機率小數變具體單字,看起來有點類似亂入但本質不是純 random。而 Attention 那套,就是好像盯著所有條件同時檢查、「欸,今天不要漏掉」。
底層是一層又一層微調修正,超像人在燒腦糾正自己的過程,很迷人。transformer 雖然老被拿來聊語言建模啦,不過本質其實更偏 Operations Research 在玩的玩意,把 LP 跟隨機四捨五入合體搬到 AI 界暴力刷,很不可思議吧XD
所以嘛,下次被問 transformer 幹嘛的,可以耍帥回答:「就是學習版 LP 解題機,有 constraint matrix 可以自己長;遇到離散最優問題還能軟硬兼施用各種神技,在幾十毫秒產生近乎完美解!」 - 跟魔法沒有關係,全是數學宅魂堆疊出來的猛料罷了。
講書單直接丟給進階玩家:Dantzig《Linear Programming and Extensions》(1963),Wolsey《Integer Programming》(1998),Bertsimas & Tsitsiklis《Introduction to Linear Optimization》(1997);喜歡演算法冷招可以挖 Raghavan & Thompson〈Randomized Rounding: A Technique for Provably Good Algorithms〉或 Motwani 和 Raghavan 系列經典。有夠 nerd,但真的蠻酷,你願意深入絕對開新世界大門~
講到選模型大小,每次都有人糾結。超多層、參數爆表那種大模型,其實精確細緻、考慮比較周到,可是跑起來比較慢(特別會風扇狂轉那種😅)。如果只想快點看到答案,小模型無腦給下去沒問題,偶爾答得粗一點但節省超多時間啦!看你的需求,有完美主義症就拿大的,要節奏快就選小的。
Prompt 要怎麼寫才厲害?有套路沒錯!指令加越多,就像自己用膠帶一直黏規則上去。「請簡短」是要求話少,「請有創意」就是求活潑,「資料要正確」=拜託不要掰。你腦中哪個特質最重視?打進 prompt 裡啊!而且越明確越好,不要暗示,一定要說白。
然後最現實的是,有時候模型產出的東西怪怪,你只要抓住「哪條規則被踩到了?」找到之後,把限制語句搬出來放明顯一點,比方「90 字以內」、「附上論文出處」。debug 模型真的比 debug 程式輕鬆,只需要會喊停然後再提醒一句條件就行。
突然想到很 geek 的冷知識🤓 - 大家覺得 ChatGPT 神乎其技,其實背後是在瘋狂解優化問題喔!核心算法叫混合整數線性規劃(MILP),規模超扯,比如 5 萬個二元變數外加 7 條約束,你拿傳統演算法跑可能等到地球毀滅還算不完,但 transformer 十毫秒噴出結果根本像開掛!
為什麼辦得到?因為先把原本只能選 0 或 1 的 MILP 給 relax 成 LP,也就是把離散變成連續範圍,再加上 entropy 做 softmax 處理,所以所有 token 出現機率都是最佳化完的;取樣階段再把那些機率小數變具體單字,看起來有點類似亂入但本質不是純 random。而 Attention 那套,就是好像盯著所有條件同時檢查、「欸,今天不要漏掉」。
底層是一層又一層微調修正,超像人在燒腦糾正自己的過程,很迷人。transformer 雖然老被拿來聊語言建模啦,不過本質其實更偏 Operations Research 在玩的玩意,把 LP 跟隨機四捨五入合體搬到 AI 界暴力刷,很不可思議吧XD
所以嘛,下次被問 transformer 幹嘛的,可以耍帥回答:「就是學習版 LP 解題機,有 constraint matrix 可以自己長;遇到離散最優問題還能軟硬兼施用各種神技,在幾十毫秒產生近乎完美解!」 - 跟魔法沒有關係,全是數學宅魂堆疊出來的猛料罷了。
講書單直接丟給進階玩家:Dantzig《Linear Programming and Extensions》(1963),Wolsey《Integer Programming》(1998),Bertsimas & Tsitsiklis《Introduction to Linear Optimization》(1997);喜歡演算法冷招可以挖 Raghavan & Thompson〈Randomized Rounding: A Technique for Provably Good Algorithms〉或 Motwani 和 Raghavan 系列經典。有夠 nerd,但真的蠻酷,你願意深入絕對開新世界大門~
思考將傳統最佳化理論帶入 AI 模型設計的新可能
最近在翻 1995 年的那本 Randomized Algorithms,然後腦中就一直浮現 transformer。說真的,「Attention is All You Need」這篇(Vaswani, A. 他們發表的,2017),直接把注意力機制拉出來當主菜,整個轉變超大一波。後面幾年,Elhage, N. 的團隊又搞了一篇「A Mathematical Framework for Transformer Circuits」(2021),他們不是只是口頭聊理論,是拿數學硬拆 transformer 各種細節,每一層運作都剖超細。
優化跟深度學習這塊,也有幾個人我一直想提一下。像 Bengio, Y. 跟他團隊早在 2013 就開始討論 stochastic neuron 那種不確定性神經元,到底梯度怎麼估、怎麼傳回去 - 你仔細看那標題:Estimating or Propagating Gradients Through Stochastic Neurons,就全寫明了。然後 Maddison, C. 他們到 2016 推出了 The Concrete Distribution(副標直接講是離散隨機變數的連續鬆弛),其實意思就是遇到模型裡那些很難搞或不能微分的地方,他們讓事情滑順一點,好算好優化。
對了,有要找程式碼例子的話,其實蠻推薦 AIMathematicallyexplained/Attention_in_ChatGpt_OR_pespective.ipynb,那 notebook 在 main 分支(MLDreamer/AIMathematicallyexplained 的 GitHub 上)。我覺得它把 attention 怎麼跑過得很直白,你可以照著測試看看。
題外話,如果你想往下挖更硬核的數學,可以追 LinkedIn:https://www.linkedin.com/in/swarnendu-bhattacharya/,Medium:https://medium.com/@swarnenduiitb2020,再不然 Substack:https://substack.com/@swarnenduai。有在寫 code 或玩開源的人,他 GitHub 在這邊啦:https://github.com/MLDreamer。
其實我也蠻好奇喔,你自己研究 transformer 有碰到什麼新體會?哪一點讓你「啊哈!」那種感覺特別重?如果願意留言互動一下,我會超感謝!
最後分享一下創辦人 Sunil 留的一小段話:他說謝謝看到這裡的大家,也多虧有大家加入社群一起參與。目前所有內容都是志工撐起來,一個月讀者已經破三百五十萬,而且沒有外部金援,全靠社群熱血投入❤️
如果喜歡我們做的東西,也可以關注 Sunil 本人的 LinkedIn、TikTok、Instagram。不用壓力太大啦,其實拍拍手或追蹤作者就夠讓大家開心很多!週報 newsletter 也能訂閱,有空歡迎一起加入~
優化跟深度學習這塊,也有幾個人我一直想提一下。像 Bengio, Y. 跟他團隊早在 2013 就開始討論 stochastic neuron 那種不確定性神經元,到底梯度怎麼估、怎麼傳回去 - 你仔細看那標題:Estimating or Propagating Gradients Through Stochastic Neurons,就全寫明了。然後 Maddison, C. 他們到 2016 推出了 The Concrete Distribution(副標直接講是離散隨機變數的連續鬆弛),其實意思就是遇到模型裡那些很難搞或不能微分的地方,他們讓事情滑順一點,好算好優化。
對了,有要找程式碼例子的話,其實蠻推薦 AIMathematicallyexplained/Attention_in_ChatGpt_OR_pespective.ipynb,那 notebook 在 main 分支(MLDreamer/AIMathematicallyexplained 的 GitHub 上)。我覺得它把 attention 怎麼跑過得很直白,你可以照著測試看看。
題外話,如果你想往下挖更硬核的數學,可以追 LinkedIn:https://www.linkedin.com/in/swarnendu-bhattacharya/,Medium:https://medium.com/@swarnenduiitb2020,再不然 Substack:https://substack.com/@swarnenduai。有在寫 code 或玩開源的人,他 GitHub 在這邊啦:https://github.com/MLDreamer。
其實我也蠻好奇喔,你自己研究 transformer 有碰到什麼新體會?哪一點讓你「啊哈!」那種感覺特別重?如果願意留言互動一下,我會超感謝!
最後分享一下創辦人 Sunil 留的一小段話:他說謝謝看到這裡的大家,也多虧有大家加入社群一起參與。目前所有內容都是志工撐起來,一個月讀者已經破三百五十萬,而且沒有外部金援,全靠社群熱血投入❤️
如果喜歡我們做的東西,也可以關注 Sunil 本人的 LinkedIn、TikTok、Instagram。不用壓力太大啦,其實拍拍手或追蹤作者就夠讓大家開心很多!週報 newsletter 也能訂閱,有空歡迎一起加入~