[{"data":1,"prerenderedAt":2058},["ShallowReactive",2],{"post-broken-on-arrival-quantized-models":3,"site-info":923,"related-en-broken-on-arrival-quantized-models":1019},{"zh":4,"en":504},{"id":5,"title":6,"author":7,"body":8,"cover":484,"coverAlt":485,"date":486,"description":487,"draft":488,"extension":489,"featured":488,"lang":490,"meta":491,"navigation":492,"ogImage":493,"path":494,"seo":495,"slug":496,"stem":497,"tags":498,"translationKey":496,"updated":502,"__hash__":503},"blog\u002Fblog\u002Fzh-TW\u002Fbroken-on-arrival-quantized-models.md","你下載的量化模型可能是壞的，而且 checksum 驗不出來","Jecision",{"type":9,"value":10,"toc":471},"minimark",[11,23,27,34,37,40,48,52,55,62,68,79,82,85,92,103,110,114,117,181,184,190,194,197,204,211,214,218,221,326,336,347,350,363,373,387,390,410,413,418,424,431,434,458],[12,13,14],"blockquote",{},[15,16,17,18,22],"p",{},"數字來自 arXiv 2609.05881v3 與作者的 ",[19,20,21],"code",{},"quantcheck"," 稽核資料；「今天還在不在」是我們自己查的，腳本在文末。",[24,25,26],"h2",{"id":26},"先講一個畫面",[15,28,29,30,33],{},"你在筆電上 ",[19,31,32],{},"ollama pull qwen2.5-coder:3b","，選了一個 2-bit 的版本，因為記憶體不夠。",[15,35,36],{},"模型跑起來了，有回應，速度也不錯。但你叫它寫一個排序函式，它寫出來的東西編譯不過；再試一題，還是不過。",[15,38,39],{},"你會先懷疑自己：prompt 寫錯？溫度太高？還是這顆模型本來就這麼弱？",[15,41,42,43,47],{},"有一篇論文把這個懷疑變成了普查：",[44,45,46],"strong",{},"Ollama 官方庫裡 305 個「能寫程式」的模型 tag，有 7 個在 164 題 HumanEval+ 上幾乎全錯。"," 其中六個一題都沒對。",[24,49,51],{"id":50},"最反直覺的地方檔案是好的","最反直覺的地方：檔案是好的",[15,53,54],{},"如果模型壞了，你會想「是不是下載壞了、檔案損毀」。",[15,56,57,58,61],{},"作者把其中五個檔案從原始權重重新量化回來，",[44,59,60],{},"tensor 對 tensor 比對，完全一致","。Qwen2.5-Coder-3B 那四個 tag，434 個 tensor 全部相同。",[15,63,64,65],{},"也就是說：",[44,66,67],{},"這些檔案是「正確的壞檔案」。",[15,69,70,71,74,75,78],{},"checksum 會過、檔案大小會對、",[19,72,73],{},"ollama show"," 看起來一切正常——因為檔案真的沒問題。壞的是",[44,76,77],{},"量化的配方","：同樣的權重、同樣的工具鏈、同樣的 tensor 組合，少了校準，就把模型壓成了不會寫程式的形狀。",[24,80,81],{"id":81},"為什麼會這樣",[15,83,84],{},"量化是「把權重從 16 bit 壓到 2–4 bit」。壓的過程要不斷決定「這個誤差要丟給哪個權重」。",[15,86,87,88,91],{},"預設的做法是均勻地丟；比較好的做法是",[44,89,90],{},"看校準資料","，把誤差集中在不重要的權重上——llama.cpp 的 importance matrix（imatrix）就是做這件事。",[15,93,94,95,98,99,102],{},"沒有 imatrix，小模型在低 bit 特別容易崩。這次的七個 suspects 全部落在 ",[44,96,97],{},"q2_K 到 q3_K_L、模型 ≤4B"," 這個範圍；同一個範圍有 48 個 tag，等於 ",[44,100,101],{},"14.6%","。",[15,104,105,106,109],{},"但要注意：",[44,107,108],{},"配方本身不能預測成敗","。同樣的無校準配方，Qwen2.5-Coder-1.5B 的 q2_K–q3_K_L 全部正常（13–15 題）。所以不是「低 bit 一定壞」，是「壞了你不會知道」。",[24,111,113],{"id":112},"加回校準救回大部分","加回校準，救回大部分",[15,115,116],{},"作者固定權重、工具鏈與 tensor 組合，只補上 imatrix：",[118,119,120,136],"table",{},[121,122,123],"thead",{},[124,125,126,130,133],"tr",{},[127,128,129],"th",{},"Tag",[127,131,132],{},"原本",[127,134,135],{},"補 imatrix 後（滿分 164）",[137,138,139,151,161,171],"tbody",{},[124,140,141,145,148],{},[142,143,144],"td",{},"Qwen2.5-Coder-3B q2_K",[142,146,147],{},"0",[142,149,150],{},"106–113",[124,152,153,156,158],{},[142,154,155],{},"Qwen2.5-Coder-3B q3_K_M",[142,157,147],{},[142,159,160],{},"76–89",[124,162,163,166,168],{},[142,164,165],{},"Qwen2.5-Coder-3B q3_K_L",[142,167,147],{},[142,169,170],{},"80–86",[124,172,173,176,178],{},[142,174,175],{},"Qwen2.5-Coder-3B q3_K_S",[142,177,147],{},[142,179,180],{},"13–30（救不回）",[15,182,183],{},"（論文摘要寫「0 → 76–113」；上面是 v3.4 稽核資料的分級數字，我以資料為準。）",[15,185,186,189],{},[44,187,188],{},"同一顆模型、同樣的位元數，只差一張校準表，從 0 題變成三位數。"," 這就是「量化不只是壓縮，是配方」的意思。",[24,191,193],{"id":192},"另一種壞法少了-chat-template","另一種壞法：少了 chat template",[15,195,196],{},"七個 suspects 之外，作者還測了 22 個 Hugging Face 社群檔案，其中兩個（TheBloke 的 deepseek-coder-6.7B Q3_K_M／Q4_K_M）在普查時只對 5、6 題。",[15,198,199,200,203],{},"原因不是量化，是",[44,201,202],{},"檔案沒有附 chat template","。Ollama 找不到 template，就用預設的 ChatML 去套，跟模型原本的指令格式不合——30 個回答裡有 28 個自己接出幻覺的對話輪。",[15,205,206,207,210],{},"補上正確 template 之後：",[44,208,209],{},"98 與 101 題","（滿分 164）。",[15,212,213],{},"所以「跑得起來」跟「它能好好回答」之間，還隔著一個 template。",[24,215,217],{"id":216},"我們今天查了這些-tag-還在","我們今天查了：這些 tag 還在",[15,219,220],{},"文章不能只講九月的事。我們拿稽核資料裡的 blob digest，去比對 Ollama registry 今天的 manifest：",[118,222,223,238],{},[121,224,225],{},[124,226,227,229,232,235],{},[127,228,129],{},[127,230,231],{},"稽核時的 digest",[127,233,234],{},"今天",[127,236,237],{},"狀態",[137,239,240,254,266,278,290,302,314],{},[124,241,242,245,248,251],{},[142,243,244],{},"qwen2.5-coder:3b-instruct-q2_K",[142,246,247],{},"14c4247b8ce4…",[142,249,250],{},"相同",[142,252,253],{},"還在",[124,255,256,259,262,264],{},[142,257,258],{},"qwen2.5-coder:3b-instruct-q3_K_S",[142,260,261],{},"81d167af7fa3…",[142,263,250],{},[142,265,253],{},[124,267,268,271,274,276],{},[142,269,270],{},"qwen2.5-coder:3b-instruct-q3_K_M",[142,272,273],{},"9bb5d28b842a…",[142,275,250],{},[142,277,253],{},[124,279,280,283,286,288],{},[142,281,282],{},"qwen2.5-coder:3b-instruct-q3_K_L",[142,284,285],{},"7a88dc11faae…",[142,287,250],{},[142,289,253],{},[124,291,292,295,298,300],{},[142,293,294],{},"phi3.5:3.8b-mini-instruct-q2_K",[142,296,297],{},"54d47caa8bf3…",[142,299,250],{},[142,301,253],{},[124,303,304,307,310,312],{},[142,305,306],{},"llama3.2:1b-instruct-q2_K",[142,308,309],{},"d1ede02a2111…",[142,311,250],{},[142,313,253],{},[124,315,316,319,322,324],{},[142,317,318],{},"llama3.2:1b-instruct-q3_K_S",[142,320,321],{},"81881dcc12ec…",[142,323,250],{},[142,325,253],{},[15,327,328,331,332,335],{},[44,329,330],{},"七個都還在，digest 跟當時一模一樣。"," 這不是歷史事件，是你今天 ",[19,333,334],{},"ollama pull"," 就可能拿到的檔案。",[15,337,338,339,342,343,346],{},"（查法：",[19,340,341],{},"https:\u002F\u002Fregistry.ollama.ai\u002Fv2\u002Flibrary\u002F\u003Cmodel>\u002Fmanifests\u002F\u003Ctag>","，比對 ",[19,344,345],{},"application\u002Fvnd.ollama.image.model"," 那層的 digest。腳本在文末。）",[24,348,349],{"id":349},"你現在該做的三件事",[15,351,352,355,356,358,359,362],{},[44,353,354],{},"一、篩選。"," 作者釋出了 ",[19,357,21],{},"：對每個 tag 跑 15 題螢幕測試。成本大約 ",[44,360,361],{},"30 秒生成","（4090、不含下載）。66 個通過螢幕測試的重測，沒有一個是壞的——所以它是個堪用的預檢。",[15,364,365,368,369,372],{},[44,366,367],{},"二、如果你自己發佈量化模型","：補上 imatrix，然後",[44,370,371],{},"在發佈前跑一次功能測試","。registry 不會幫你測。",[15,374,375,378,379,382,383,386],{},[44,376,377],{},"三、檢查 chat template。"," ",[19,380,381],{},"ollama show \u003Cmodel> --template","；如果印出 ",[19,384,385],{},"{{ .Prompt }}","，代表沒有 template，模型可能用錯格式回答。",[24,388,389],{"id":389},"別過度解讀",[391,392,393,397,400,407],"ul",{},[394,395,396],"li",{},"2.3% 是「Ollama 官方庫、能寫程式、8GB 以下」這個子集的比例，不是所有量化模型",[394,398,399],{},"只測程式碼能力（HumanEval+）；perplexity 只能當預檢，不能當功能證明",[394,401,402,403,406],{},"七個是",[44,404,405],{},"下限","：deepseek-coder-1.3B 全系列（含 fp16）都只對 1–6 題，無法用群組基線判定，作者沒有把它們算進去",[394,408,409],{},"作者是獨立研究者，資料與工具都公開，但這是單一 registry、單一 runtime 版本的結果",[24,411,412],{"id":412},"結論",[15,414,415],{},[44,416,417],{},"可重現，不等於可用。",[15,419,420,421,423],{},"檔案一致、checksum 通過、",[19,422,73],{}," 正常——這些都只證明「檔案是你以為的那個檔案」，不證明「模型會做事」。",[15,425,426,427,430],{},"所以問題不是「量化能不能用」，是它",[44,428,429],{},"有沒有被測過","。目前答案是：registries 沒有，所以你得自己測。",[432,433],"hr",{},[15,435,436],{},[437,438,439,440,447,448,447,453,102],"em",{},"原始資料：",[441,442,446],"a",{"href":443,"rel":444},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2609.05881",[445],"nofollow","arXiv 2609.05881v3","、",[441,449,452],{"href":450,"rel":451},"https:\u002F\u002Fgithub.com\u002Faditi-p31\u002Fquantcheck",[445],"quantcheck（稽核資料與工具）",[441,454,457],{"href":455,"rel":456},"https:\u002F\u002Fgithub.com\u002Follama\u002Follama\u002Fissues\u002F18252",[445],"Ollama issue #18252",[15,459,460],{},[437,461,462,463,466,467,470],{},"我們比對 digest 的腳本：",[19,464,465],{},"scripts\u002Fcheck-ollama-tags.ts","。跑 ",[19,468,469],{},"npm run check:ollama -- --list"," 會列出這七個 tag 今天的 digest 與稽核值是否一致。",{"title":472,"searchDepth":473,"depth":473,"links":474},"",2,[475,476,477,478,479,480,481,482,483],{"id":26,"depth":473,"text":26},{"id":50,"depth":473,"text":51},{"id":81,"depth":473,"text":81},{"id":112,"depth":473,"text":113},{"id":192,"depth":473,"text":193},{"id":216,"depth":473,"text":217},{"id":349,"depth":473,"text":349},{"id":389,"depth":473,"text":389},{"id":412,"depth":473,"text":412},"\u002Fimages\u002Fblog\u002Fbroken-on-arrival-quantized-models.svg","量化模型檔案完整但功能失效的示意圖，checksum 打勾、程式碼全錯","2026-11-02","有人把 Ollama 官方庫 305 個程式碼模型全跑了一遍，發現 7 個低 bit 量化版幾乎全錯。但檔案沒有壞——重建回來 tensor 完全一致，所以 checksum 抓不到。這篇講它怎麼發生的、你現在能做的三件事。",false,"md","zh-TW",{},true,"\u002Fimages\u002Fblog\u002Fbroken-on-arrival-quantized-models.jpg","\u002Fblog\u002Fzh-tw\u002Fbroken-on-arrival-quantized-models",{"title":6,"description":487},"broken-on-arrival-quantized-models","blog\u002Fzh-TW\u002Fbroken-on-arrival-quantized-models",[499,500,501],"quantization","local-llm","gguf",null,"iM5l1m1nXRGY-pGG2MmAYggyxY9V2uAe132PQbEixw8",{"id":505,"title":506,"author":7,"body":507,"cover":912,"coverAlt":913,"date":486,"description":914,"draft":488,"extension":489,"featured":488,"lang":915,"meta":916,"navigation":492,"ogImage":917,"path":918,"seo":919,"slug":496,"stem":920,"tags":921,"translationKey":496,"updated":502,"__hash__":922},"blog\u002Fblog\u002Fen\u002Fbroken-on-arrival-quantized-models.md","Your quantized model might be broken",{"type":9,"value":508,"toc":901},[509,517,521,527,530,533,539,543,546,553,560,570,574,577,584,593,599,603,606,655,658,664,668,671,678,684,687,691,694,785,791,800,804,817,823,834,838,856,860,865,871,878,880],[12,510,511],{},[15,512,513,514,516],{},"Numbers come from arXiv 2609.05881v3 and the author's ",[19,515,21],{}," audit data. Whether the bad files are still being served is our own check; the method is at the end.",[24,518,520],{"id":519},"a-scene","A scene",[15,522,523,524,526],{},"You are on a laptop. You run ",[19,525,32],{},", choosing a 2-bit tag because memory is tight.",[15,528,529],{},"The model starts. It answers, and it is fast. Then you ask for a sorting function and the code does not compile. You try another task; same thing.",[15,531,532],{},"Your first instinct is to blame yourself: the prompt? the temperature? maybe this model is just weak?",[15,534,535,536],{},"A paper turned that doubt into a census: ",[44,537,538],{},"of 305 code-capable tags in the official Ollama library, seven solved at most six of 164 HumanEval+ tasks. Six solved none.",[24,540,542],{"id":541},"the-counter-intuitive-part-the-files-are-fine","The counter-intuitive part: the files are fine",[15,544,545],{},"When a model misbehaves, you suspect a corrupt download.",[15,547,548,549,552],{},"The author rebuilt five of the seven from the original weights with llama.cpp. Comparing tensor by tensor, ",[44,550,551],{},"all five matched exactly"," — 434 tensors for the Qwen2.5-Coder-3B tags.",[15,554,555,556,559],{},"So these are not corrupt files. They are ",[44,557,558],{},"correctly reproduced broken artifacts",".",[15,561,562,563,565,566,569],{},"Checksums pass. File sizes match. ",[19,564,73],{}," looks normal. Because the file really is exactly what it claims to be. What is broken is the ",[44,567,568],{},"quantization recipe",": same weights, same toolchain, same tensor mix, but without calibration the model collapsed into a shape that cannot write code.",[24,571,573],{"id":572},"why-this-happens","Why this happens",[15,575,576],{},"Quantization squeezes weights from 16 bits down to 2–4 bits. Every step has to decide where the rounding error lands.",[15,578,579,580,583],{},"The default approach spreads it evenly. The better approach uses ",[44,581,582],{},"calibration data"," — llama.cpp's importance matrix (imatrix) — to push error away from the weights that matter, based on activation statistics.",[15,585,586,587,590,591,559],{},"Without imatrix, small models at low bit are the ones that fall apart. All seven suspects sit in ",[44,588,589],{},"q2_K through q3_K_L, in models of at most 4B parameters",". That subgroup contains 48 tags, so the failure rate inside it is ",[44,592,101],{},[15,594,595,596,559],{},"But the recipe alone does not predict failure: the same uncalibrated recipe left Qwen2.5-Coder-1.5B functional (13–15 of 15). The problem is not \"low bit always breaks\". It is that ",[44,597,598],{},"when it breaks, you cannot tell",[24,600,602],{"id":601},"calibration-rescues-most-of-them","Calibration rescues most of them",[15,604,605],{},"Holding weights, toolchain and tensor mix fixed, adding only an imatrix:",[118,607,608,620],{},[121,609,610],{},[124,611,612,614,617],{},[127,613,129],{},[127,615,616],{},"Before",[127,618,619],{},"After imatrix (of 164)",[137,621,622,630,638,646],{},[124,623,624,626,628],{},[142,625,144],{},[142,627,147],{},[142,629,150],{},[124,631,632,634,636],{},[142,633,155],{},[142,635,147],{},[142,637,160],{},[124,639,640,642,644],{},[142,641,165],{},[142,643,147],{},[142,645,170],{},[124,647,648,650,652],{},[142,649,175],{},[142,651,147],{},[142,653,654],{},"13–30 (still weak)",[15,656,657],{},"(The paper's abstract says \"0 → 76–113\"; the per-level numbers above come from the v3.4 audit data, which we treat as authoritative.)",[15,659,660,661],{},"Same model, same bit width, one calibration table: ",[44,662,663],{},"from zero tasks to three digits.",[24,665,667],{"id":666},"another-failure-mode-a-missing-chat-template","Another failure mode: a missing chat template",[15,669,670],{},"Beyond the seven, the author also tested 22 popular Hugging Face community files. Two of them (TheBloke's deepseek-coder-6.7B Q3_K_M and Q4_K_M) scored 5 and 6 of 15 in the census.",[15,672,673,674,677],{},"The cause was not quantization but a ",[44,675,676],{},"missing chat template",". With no template, Ollama falls back to a default ChatML format that does not match the model's instruction format: 28 of 30 answers ran on into invented chat turns.",[15,679,680,681,559],{},"With the right template: ",[44,682,683],{},"98 and 101 of 164",[15,685,686],{},"So \"it runs\" and \"it answers properly\" are separated by a template.",[24,688,690],{"id":689},"we-checked-the-bad-tags-are-still-being-served","We checked: the bad tags are still being served",[15,692,693],{},"A September incident is only interesting if it is still downloadable. We compared the blob digests in the audit data against the current Ollama registry manifests:",[118,695,696,711],{},[121,697,698],{},[124,699,700,702,705,708],{},[127,701,129],{},[127,703,704],{},"Audited digest",[127,706,707],{},"Today",[127,709,710],{},"Status",[137,712,713,725,735,745,755,765,775],{},[124,714,715,717,719,722],{},[142,716,244],{},[142,718,247],{},[142,720,721],{},"same",[142,723,724],{},"still served",[124,726,727,729,731,733],{},[142,728,258],{},[142,730,261],{},[142,732,721],{},[142,734,724],{},[124,736,737,739,741,743],{},[142,738,270],{},[142,740,273],{},[142,742,721],{},[142,744,724],{},[124,746,747,749,751,753],{},[142,748,282],{},[142,750,285],{},[142,752,721],{},[142,754,724],{},[124,756,757,759,761,763],{},[142,758,294],{},[142,760,297],{},[142,762,721],{},[142,764,724],{},[124,766,767,769,771,773],{},[142,768,306],{},[142,770,309],{},[142,772,721],{},[142,774,724],{},[124,776,777,779,781,783],{},[142,778,318],{},[142,780,321],{},[142,782,721],{},[142,784,724],{},[15,786,787,790],{},[44,788,789],{},"Seven out of seven are still there, with identical digests."," This is not history; it is something you can pull today.",[15,792,793,794,796,797,799],{},"(Method: fetch ",[19,795,341],{}," and compare the ",[19,798,345],{}," layer digest. Script at the end.)",[24,801,803],{"id":802},"three-things-you-can-do-now","Three things you can do now",[15,805,806,809,810,812,813,816],{},[44,807,808],{},"Screen."," The author released ",[19,811,21],{},", a 15-task screen per tag. It costs about ",[44,814,815],{},"30 seconds of generation"," (on a 4090, excluding download). None of 66 sampled tags that passed the screen turned out to be non-functional, so it works as a pre-filter.",[15,818,819,822],{},[44,820,821],{},"If you publish quantizations:"," add an imatrix, and run a functional test before publishing. Registries will not do it for you.",[15,824,825,378,828,830,831,833],{},[44,826,827],{},"Check the chat template.",[19,829,381],{},"; if it prints ",[19,832,385],{},", there is no template and the model may be answering in the wrong format.",[24,835,837],{"id":836},"do-not-over-read-this","Do not over-read this",[391,839,840,843,846,853],{},[394,841,842],{},"2.3% is the share of official, code-capable, ≤8 GB tags — not of all quantized models",[394,844,845],{},"Only coding ability was tested (HumanEval+); perplexity is a pre-check, not proof of function",[394,847,848,849,852],{},"Seven is a ",[44,850,851],{},"lower bound",": all 12 deepseek-coder-1.3B tags, including fp16, score 1–6 of 15, so a group baseline cannot judge them and the author does not count them",[394,854,855],{},"The author is an independent researcher; data and tools are public, but this is one registry and one runtime version",[24,857,859],{"id":858},"conclusion","Conclusion",[15,861,862],{},[44,863,864],{},"Exact reproducibility is not function.",[15,866,867,868,870],{},"Identical tensors, a passing checksum, a normal ",[19,869,73],{}," — all of that proves the file is the file. None of it proves the model can do the job.",[15,872,873,874,877],{},"So the question is not whether quantized models are usable. It is ",[44,875,876],{},"whether anyone tested whether this one is",". Right now the registries have not, which leaves it to you.",[432,879],{},[15,881,882],{},[437,883,884,885,888,889,888,892,895,896,898,899,559],{},"Sources: ",[441,886,446],{"href":443,"rel":887},[445],", ",[441,890,21],{"href":450,"rel":891},[445],[441,893,457],{"href":455,"rel":894},[445],". Our digest check: ",[19,897,465],{},"; run ",[19,900,469],{},{"title":472,"searchDepth":473,"depth":473,"links":902},[903,904,905,906,907,908,909,910,911],{"id":519,"depth":473,"text":520},{"id":541,"depth":473,"text":542},{"id":572,"depth":473,"text":573},{"id":601,"depth":473,"text":602},{"id":666,"depth":473,"text":667},{"id":689,"depth":473,"text":690},{"id":802,"depth":473,"text":803},{"id":836,"depth":473,"text":837},{"id":858,"depth":473,"text":859},"\u002Fimages\u002Fblog\u002Fen\u002Fbroken-on-arrival-quantized-models.svg","A quantized model file that passes its checksum but fails every coding task","Someone tested every code-capable tag in Ollama's library. Seven low-bit quantizations failed nearly all tasks, yet the files were exact rebuilds. Checksums pass; the recipe is broken.","en",{},"\u002Fimages\u002Fblog\u002Fen\u002Fbroken-on-arrival-quantized-models.jpg","\u002Fblog\u002Fen\u002Fbroken-on-arrival-quantized-models",{"title":506,"description":914},"blog\u002Fen\u002Fbroken-on-arrival-quantized-models",[499,500,501],"tOVVVr1HmeG95b9UhxSxh_uy4dZQvyUwEripBKmKjww",{"id":924,"company":925,"extension":936,"meta":937,"services":938,"social":1016,"stem":1017,"__hash__":1018},"site\u002Fsite.yml",{"name":926,"nameEn":927,"email":928,"address":929,"addressEn":930,"lineUrl":931,"lineId":932,"duns":933,"youtube":934,"youtubeId":935},"銡策數位有限公司","Jecision Digital Co., Ltd.","contact@jecision.com","231 新北市新店區北新路二段 262 號 3 樓之 3","3F.-3, No. 262, Sec. 2, Beixin Rd., Xindian Dist., New Taipei City 231, Taiwan","https:\u002F\u002Fline.me\u002FR\u002Fti\u002Fp\u002F@374qnumi","@374qnumi","963905705","https:\u002F\u002Fwww.youtube.com\u002Fshorts\u002F6UE0WTmyjsg","6UE0WTmyjsg","yml",{},[939,963,989],{"key":940,"zh":941,"en":952},"audit",{"title":942,"tagline":943,"summary":944,"points":945,"deliverable":949,"detail":950,"duration":951},"企業 AI 導入健檢","先看清楚，再花錢","60 分鐘線上訪談，盤點最耗時、最依賴人力的營運環節；我們會告訴你哪些工作現在就能交給 AI、哪些還不成熟。",[946,947,948],"現況盤點：梳理日常營運中最耗時、最依賴人力的環節","痛點診斷：判斷哪些工作現在就能交給 AI，哪些建議先保留人力","可行性評估：依你的業務特性與預算，篩選適合的模型與工具","《企業 AI 導入建議報告書》（PDF）","含 1–2 個「開發成本最低、成效最明顯」的優先項目、技術棧建議、預期節省的人力時間與下一步","訪談 60 分鐘，報告書 3 個工作天內交付",{"title":953,"tagline":954,"summary":955,"points":956,"deliverable":960,"detail":961,"duration":962},"AI Readiness Audit","Look before you spend","A 60-minute remote audit of the workflows that eat the most time and people-power — and an honest answer on what AI can take over today, and what it cannot.",[957,958,959],"Audit the daily workflows that consume the most time and headcount","Triage which tasks AI can own today, and which should stay human","Shortlist the models and tools that fit your budget and constraints","AI Adoption Recommendation Report (PDF)","One or two highest-ROI entry points, a recommended tech stack, expected hours saved, and the concrete next step","60-minute call, report delivered within 3 business days",{"key":964,"zh":965,"en":976},"prompt",{"title":966,"tagline":967,"summary":968,"points":969,"deliverable":973,"detail":974,"duration":975},"提示詞工程","讓 AI 穩定產出，而不是碰運氣","針對你的實際任務設計提示詞與多步驟工作流，並做極限測試，確保換了資料、換了人操作也不會走鐘。",[970,971,972],"客製提示詞：ChatGPT、Claude、Gemini、Midjourney 等主流工具的專屬模板","除錯與優化：修掉幻覺、格式跑掉、時好時壞的問題","工作流建置：把複雜任務拆成多步驟提示詞與可重複的 SOP","提示詞文件或設定檔","附使用說明與範例，並提供 1 對 1 教學，確保你與團隊能自己維護","依任務複雜度報價，通常 3–7 個工作天",{"title":977,"tagline":978,"summary":979,"points":980,"deliverable":986,"detail":987,"duration":988},"Prompt Engineering","Make AI produce reliably, not by luck","Prompt sets and multi-step workflows designed for your actual tasks, stress-tested so they keep working when the data or the operator changes.",[981,982,984],"Custom prompts for ChatGPT, Claude, Gemini, Midjourney and friends",{"Debugging and tuning":983},"kill hallucinations, broken formats and flaky output",{"Workflow design":985},"break complex work into repeatable multi-step SOPs","Prompt library or exportable config","Ships with usage notes and examples, plus a 1:1 walkthrough so your team can maintain it","Quoted by complexity, typically 3–7 business days",{"key":990,"zh":991,"en":1002},"poc",{"title":992,"tagline":993,"summary":994,"points":995,"deliverable":999,"detail":1000,"duration":1001},"極速 PoC","五天，看到能跑的東西","不談架構藍圖，直接做一個能動的雛形。五個工作天內交付線上可操作的智能體，用你真實的資料驗證。",[996,997,998],"Day 1：15 分鐘對焦，鎖定單一痛點與資料盤點","Day 2–4：模型串接、邏輯設計與雛形開發","Day 5：Demo 展示與 AI 擴展建議書","可線上操作的智能體雛形","交付範圍為概念驗證與展示，不含後續維運或大規模伺服器部署；要進階成完整系統會另行報價","5 個工作天",{"title":1003,"tagline":1004,"summary":1005,"points":1006,"deliverable":1013,"detail":1014,"duration":1015},"Rapid PoC","Five days to something that runs","No architecture decks — a working prototype built in five business days, validated against your real data.",[1007,1009,1011],{"Day 1":1008},"15-minute scoping call, one pain point, data inventory",{"Day 2–4":1010},"model integration, logic design, prototype build",{"Day 5":1012},"live demo plus an AI expansion recommendation","A runnable online agent prototype","Proof of concept and demo scope only; ongoing operations and large-scale deployment are quoted separately","5 business days",[],"site","XTwARfVAOcrXNiKehsM6V6cdkd2HXy4d5yZVrSWrI3Q",[1020,1720],{"id":1021,"title":1022,"author":7,"body":1023,"cover":1705,"coverAlt":1706,"date":1707,"description":1708,"draft":488,"extension":489,"featured":488,"lang":915,"meta":1709,"navigation":492,"ogImage":1710,"path":1711,"seo":1712,"slug":1713,"stem":1714,"tags":1715,"translationKey":1713,"updated":502,"__hash__":1719},"blog\u002Fblog\u002Fen\u002Fshared-trunk-four-modalities.md","Shared dimensions: a new direction for going multimodal",{"type":9,"value":1024,"toc":1686},[1025,1030,1034,1037,1040,1043,1056,1062,1066,1069,1075,1081,1087,1093,1097,1100,1109,1112,1115,1120,1123,1139,1142,1145,1150,1154,1157,1162,1165,1172,1178,1182,1185,1191,1194,1198,1201,1207,1210,1213,1224,1227,1230,1236,1240,1243,1247,1250,1253,1259,1266,1270,1273,1279,1282,1286,1289,1292,1295,1301,1305,1308,1368,1371,1537,1540,1543,1549,1555,1561,1567,1570,1574,1577,1583,1589,1595,1605,1616,1622,1626,1629,1635,1638,1651,1657,1663,1665],[12,1026,1027],{},[15,1028,1029],{},"No benchmarks of our own here. The numbers come from the paper and the model card, linked at the end; the judgments are ours and labelled.",[24,1031,1033],{"id":1032},"start-with-a-scene","Start with a scene",[15,1035,1036],{},"Suppose you want a system that can search everything inside a company.",[15,1038,1039],{},"Contracts are PDFs. Invoices are scans. Meetings are audio. Product photos are images.",[15,1041,1042],{},"Multimodal used to offer two paths. One was to run four models — text embeddings, image embeddings, speech-to-text, audio classification — with four vector spaces that do not talk to each other, plus an alignment layer on top. The other was to make one model big enough to swallow every modality.",[15,1044,1045,1046,1051,1052,1055],{},"In October 2026, Google's ",[441,1047,1050],{"href":1048,"rel":1049},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2610.37364",[445],"EmbeddingGemma 2"," demonstrated a third path: ",[44,1053,1054],{},"share the semantic backbone, and isolate capacity for each modality in branches",". Text-only runs at 271M; turn on vision when you need images, turn on audio when you need sound.",[15,1057,1058,1059],{},"What is actually valuable here is not \"one model handles four data types\". It is that ",[44,1060,1061],{},"going multimodal does not require making the whole model fatter.",[24,1063,1065],{"id":1064},"the-old-bill-for-scaling-up","The old bill for scaling up",[15,1067,1068],{},"To see why the third path matters, look at what the old paths cost.",[15,1070,1071,1074],{},[44,1072,1073],{},"The first is multiplication."," A dense model's bill is parameters times tokens. Want one more capability, and you scale everything up together.",[15,1076,1077,1080],{},[44,1078,1079],{},"The second is gradient conflict."," The same weights must satisfy \"this pixel is a cat\" and \"this word is a subject\". The gradients pull in different directions — negative transfer, in multitask learning terms.",[15,1082,1083,1086],{},[44,1084,1085],{},"The third is input geometry."," Text is discrete tokens, images are pixel grids, audio is waveforms. They do not even agree on what one unit is.",[15,1088,1089,1090],{},"These three costs are not an argument that multimodal is impossible. They explain why the old path stops paying off past a certain size. ",[44,1091,1092],{},"The value of the new direction is a different way to pay.",[24,1094,1096],{"id":1095},"the-new-direction-shared-dimensions-isolated-capacity","The new direction: shared dimensions, isolated capacity",[15,1098,1099],{},"EmbeddingGemma 2 splits at the entrance and merges in semantics.",[1101,1102,1107],"pre",{"className":1103,"code":1105,"language":1106},[1104],"language-text","image\u002Fvideo\u002Faudio ──[per-modality encoders]──> soft tokens ──[one 24-layer transformer]──> vector\n                        ↑ split                                    ↑ shared\n","text",[19,1108,1105],{"__ignoreMap":472},[15,1110,1111],{},"Each modality encoder handles low-level features (pixels, waveforms) and turns them into \"soft tokens\" — continuous vectors that sit in the sequence like text tokens but need not correspond to any word. High-level meaning goes through one shared transformer.",[15,1113,1114],{},"The parameters split like this: a 271M trunk (text also runs here), a 167M vision encoder, and a 305M audio encoder.",[15,1116,1117],{},[44,1118,1119],{},"Note that 305M: the audio encoder is bigger than the entire text trunk.",[15,1121,1122],{},"That is the point of the new direction. Capacity lives in branches, so it can be switched off:",[1124,1125,1128,1129,1128,1135],"figure",{"className":1126},[1127],"article-figure","\n  ",[1130,1131],"video",{"src":1132,"poster":1133,"autoPlay":492,"loop":492,"muted":492,"playsInline":492,"ariaLabel":1134},"\u002Fimages\u002Fblog\u002Fshared-trunk-four-modalities\u002Fsplit.mp4","\u002Fimages\u002Fblog\u002Fshared-trunk-four-modalities\u002Fsplit-poster.jpg","Parameter split and actual loaded memory",[1136,1137,1138],"figcaption",{},"Parameters on the left, actual load on the right. Branches open on demand — that is how scale stops meaning bloat.",[15,1140,1141],{},"On a Pixel 11 Pro at Q4_C, peak memory (including runtime compilation overhead): 191 MB for text, 447 MB for text plus images, 567 MB for everything.",[15,1143,1144],{},"And text quality does not pay for it. Its 271M text path scores 61.36 on multilingual MTEB; the previous generation at 308M scored 61.15. Fewer parameters, three extra modalities, no text regression.",[15,1146,1147],{},[44,1148,1149],{},"That is the most promising part: scale can be opened selectively instead of expanded universally.",[24,1151,1153],{"id":1152},"two-ways-to-split-two-bills","Two ways to split, two bills",[15,1155,1156],{},"\"Share the trunk, isolate capacity\" can be done at different places. Two current answers:",[1158,1159,1161],"h3",{"id":1160},"moe-split-in-the-middle-of-the-model","MoE: split in the middle of the model",[15,1163,1164],{},"Many experts sit inside a layer; each token visits a few, chosen by a router.",[15,1166,1167,1168,1171],{},"What it buys: ",[44,1169,1170],{},"capacity decouples from compute per token."," Parameters can be plentiful while each token touches a small slice.",[15,1173,1174,1175],{},"The cost is training difficulty: router collapse, uneven expert load, sparse gradients. ",[44,1176,1177],{},"MoE trades training difficulty for inference cost.",[1158,1179,1181],{"id":1180},"embeddinggemma-2-split-at-the-entrance","EmbeddingGemma 2: split at the entrance",[15,1183,1184],{},"Heterogeneous modalities go to designed encoders; homogeneous meaning goes to the shared trunk.",[15,1186,1167,1187,1190],{},[44,1188,1189],{},"capacity decouples from resident memory."," You do not keep the whole model resident for the occasional video search.",[15,1192,1193],{},"These are not the same problem, and they are not mutually exclusive. One saves compute; the other saves memory.",[24,1195,1197],{"id":1196},"early-fusion-late-fusion-where-alignment-starts","Early fusion, late fusion: where alignment starts",[15,1199,1200],{},"If you know CLIP, this looks like \"multimodal, again\".",[15,1202,1203,1204,559],{},"The difference is ",[44,1205,1206],{},"where the merge happens",[15,1208,1209],{},"Late fusion (CLIP, SigLIP): two full encoders run independently, then a contrastive loss aligns them. The towers never exchange information.",[15,1211,1212],{},"Early fusion (EmbeddingGemma 2): encoders produce soft tokens that enter one transformer, where all modalities mix.",[1124,1214,1128,1216,1128,1221],{"className":1215},[1127],[1130,1217],{"src":1218,"poster":1219,"autoPlay":492,"loop":492,"muted":492,"playsInline":492,"ariaLabel":1220},"\u002Fimages\u002Fblog\u002Fshared-trunk-four-modalities\u002Fflow.mp4","\u002Fimages\u002Fblog\u002Fshared-trunk-four-modalities\u002Fflow-poster.jpg","Late fusion versus early fusion data flow",[1136,1222,1223],{},"The difference is not whether alignment exists — it is which layer starts aligning. That decides whether cross-modal interaction can be learned.",[15,1225,1226],{},"Late fusion lets each tower be strong on its own; the cost is that it cannot learn cross-modal interaction — text inside images, the original audio of a video, the relationship between a chart and its heading.",[15,1228,1229],{},"Early fusion costs something too: every modality must fit through one narrow channel. The model is 512-dimensional and 24 layers deep. (Our reading: deliberately narrow.)",[15,1231,1232,1233],{},"Its bet: ",[44,1234,1235],{},"only a narrow semantic space forces a genuinely shared representation.",[24,1237,1239],{"id":1238},"three-pieces-of-evidence-for-this-direction","Three pieces of evidence for this direction",[15,1241,1242],{},"The paper ran ablations; three of them speak directly to the \"shared trunk\" idea.",[1158,1244,1246],{"id":1245},"removing-a-text-only-mechanism-improves-everything","Removing a text-only mechanism improves everything",[15,1248,1249],{},"Gemma's per-layer embeddings used an extra lookup table to inject token information into intermediate layers. EmbeddingGemma 2 drops the lookup table and keeps only the projection.",[15,1251,1252],{},"Overall goes from 55.07 to 55.46; image 54.57 → 54.67, video 47.13 → 47.82, visual documents 61.76 → 62.37. These ablations are intermediate training recipes, not the final model (which reaches 59.01 MMEB-v2 overall).",[15,1254,1255,1258],{},[44,1256,1257],{},"Removing it made everything better",", text included. The paper's explanation: the lookup table carries \"no direct signal\" for non-text modalities, and costs memory.",[15,1260,1261,1262,1265],{},"Our reading: ",[44,1263,1264],{},"a shared space is achieved by removing things, not adding them."," Any mechanism that lets one modality bypass the shared space drags the whole down.",[1158,1267,1269],{"id":1268},"the-vision-encoder-cannot-be-frozen","The vision encoder cannot be frozen",[15,1271,1272],{},"Trainable: 52.27 overall, 50.10 image, 43.26 video. Frozen: 48.18, 44.35, 39.24 — a 4.1 point gap.",[15,1274,1275,1276],{},"Many multimodal models freeze modality encoders to save cost and preserve prior ability. This result says otherwise: ",[44,1277,1278],{},"encoders have to be trained to adapt to the shared space.",[15,1280,1281],{},"For this direction that is both good news and a reminder — the shared trunk is not free; it asks every branch to converge somewhere, and that convergence can be trained.",[1158,1283,1285],{"id":1284},"the-audio-encoder-is-frozen-and-audio-merely-ties","The audio encoder is frozen, and audio merely ties",[15,1287,1288],{},"The paper is explicit: the audio encoder is identical to Gemma 4 E2B\u002FE4B and frozen during training.",[15,1290,1291],{},"Audio is also where it is closest to its rival: MAEB Mean(Task) 49.87 versus Jina Omni Nano 50.14, a 0.27 gap. Mean(Type) is 48.65 versus 55.31 — not a tie. By contrast, image is 57.28 versus 55.43 and video 50.67 versus 35.87, both clearly ahead.",[15,1293,1294],{},"The authors leave one line: further training of the audio encoder \"may also yield similar gains\".",[15,1296,1297,1300],{},[44,1298,1299],{},"This is our speculation, not the paper's conclusion",": unfreezing audio could open that gap. They did not do it, so we can only say it is possible — and that is exactly the part of this path that is not finished.",[24,1302,1304],{"id":1303},"how-to-use-it-selection-is-not-a-ranking","How to use it: selection is not a ranking",[15,1306,1307],{},"What matters is what your use case needs, not who is first.",[118,1309,1310,1323],{},[121,1311,1312],{},[124,1313,1314,1317,1320],{},[127,1315,1316],{},"Your use case",[127,1318,1319],{},"A reasonable choice",[127,1321,1322],{},"Why",[137,1324,1325,1336,1347,1357],{},[124,1326,1327,1330,1333],{},[142,1328,1329],{},"Text-only retrieval \u002F RAG",[142,1331,1332],{},"Qwen3 or Jina text models",[142,1334,1335],{},"Higher scores at the same size, smaller models",[124,1337,1338,1341,1344],{},[142,1339,1340],{},"Text plus image search",[142,1342,1343],{},"EmbeddingGemma 2 or a SigLIP-style specialist",[142,1345,1346],{},"Depends on whether you want one checkpoint for everything",[124,1348,1349,1352,1354],{},[142,1350,1351],{},"Video, audio, mixed modality",[142,1353,1050],{},[142,1355,1356],{},"15–20 points ahead on video; native audio beats ASR by about 12 points",[124,1358,1359,1362,1365],{},[142,1360,1361],{},"Phone \u002F offline, tight memory",[142,1363,1364],{},"EmbeddingGemma 2 text-only",[142,1366,1367],{},"191 MB, and only the encoders you need",[15,1369,1370],{},"Some numbers worth reading together:",[118,1372,1373,1401],{},[121,1374,1375],{},[124,1376,1377,1380,1383,1386,1389,1392,1395,1398],{},[127,1378,1379],{},"Model",[127,1381,1382],{},"Params",[127,1384,1385],{},"Multilingual text",[127,1387,1388],{},"English text",[127,1390,1391],{},"Code",[127,1393,1394],{},"Multimodal overall",[127,1396,1397],{},"Image",[127,1399,1400],{},"Video",[137,1402,1403,1438,1462,1491,1514],{},[124,1404,1405,1409,1412,1415,1418,1423,1428,1433],{},[142,1406,1407],{},[44,1408,1050],{},[142,1410,1411],{},"744M",[142,1413,1414],{},"61.36",[142,1416,1417],{},"68.46",[142,1419,1420],{},[44,1421,1422],{},"78.68",[142,1424,1425],{},[44,1426,1427],{},"59.01",[142,1429,1430],{},[44,1431,1432],{},"57.28",[142,1434,1435],{},[44,1436,1437],{},"50.67",[124,1439,1440,1443,1446,1449,1452,1455,1458,1460],{},[142,1441,1442],{},"EmbeddingGemma 1",[142,1444,1445],{},"308M",[142,1447,1448],{},"61.15",[142,1450,1451],{},"69.67",[142,1453,1454],{},"68.76",[142,1456,1457],{},"—",[142,1459,1457],{},[142,1461,1457],{},[124,1463,1464,1467,1470,1475,1480,1482,1485,1488],{},[142,1465,1466],{},"Jina Embed v5 Omni Nano",[142,1468,1469],{},"986M",[142,1471,1472],{},[44,1473,1474],{},"65.52",[142,1476,1477],{},[44,1478,1479],{},"71.11",[142,1481,1457],{},[142,1483,1484],{},"43.61",[142,1486,1487],{},"31.56",[142,1489,1490],{},"30.73",[124,1492,1493,1496,1499,1502,1505,1508,1510,1512],{},[142,1494,1495],{},"Qwen3-Embedding-0.6B",[142,1497,1498],{},"596M",[142,1500,1501],{},"64.34",[142,1503,1504],{},"70.47",[142,1506,1507],{},"75.42",[142,1509,1457],{},[142,1511,1457],{},[142,1513,1457],{},[124,1515,1516,1519,1522,1524,1526,1528,1531,1534],{},[142,1517,1518],{},"InterestFM UIR CAFe 0.5B",[142,1520,1521],{},"894M",[142,1523,1457],{},[142,1525,1457],{},[142,1527,1457],{},[142,1529,1530],{},"49.33",[142,1532,1533],{},"55.43",[142,1535,1536],{},"35.87",[15,1538,1539],{},"(— means the paper reports no score for that cell; the paper uses ∗ for \"not supported\" and – for \"score unavailable\", which are not the same thing. All numbers from Table 6.)",[15,1541,1542],{},"Three things stand out.",[15,1544,1545,1548],{},[44,1546,1547],{},"First, versus the previous generation, text barely moved — but three modalities appeared."," The real difference is not the score; it is that the extra capability did not eat the existing one.",[15,1550,1551,1554],{},[44,1552,1553],{},"Second, text-only it loses to specialists."," Jina leads by 4.2 on multilingual and 2.7 on English; Qwen3 by 3.0. And 744M is the \"everything loaded\" number — text-only runs at 271M. The appendix gives the fair comparison: harrier-oss-v1-270m at 268M scores 66.5 and jina-embed-v5-text-nano at 212M scores 65.5, both higher. Both are text specialists.",[15,1556,1557,1558],{},"That is not a flaw, it is a division of labour. ",[44,1559,1560],{},"Wanting one checkpoint that can grow into other modalities, and wanting the strongest text model, are two different requirements.",[15,1562,1563,1566],{},[44,1564,1565],{},"Third, multimodal it leads clearly."," Video 50.67 versus Jina 30.73 and InterestFM 35.87 — a 15 to 20 point gap. Image 57.28 versus 55.43 is modest but consistent.",[15,1568,1569],{},"On audio: same model, native audio 69.54 versus 57.59 for ASR — about 12 points. What is lost in transcription is the non-linguistic part of sound. (The previous generation's ASR scored 50.95; comparing that to 69.54 gives 18.6, but that is a generational comparison, not a modality gap.)",[24,1571,1573],{"id":1572},"what-is-not-finished","What is not finished",[15,1575,1576],{},"To judge whether a new path is worth betting on, look at what it still lacks. Four things.",[15,1578,1579,1582],{},[44,1580,1581],{},"Text is not the strongest."," The Pareto frontier the paper claims is a quality-versus-parameters efficiency frontier (beating models 2–12× larger), not a first place in every column.",[15,1584,1585,1588],{},[44,1586,1587],{},"Visual documents still have room."," At a 280-token budget, VisDoc is 67.84 versus Jina Omni Nano's 71.34. Scans, tables and dense layouts depend on fine visual detail, and the paper notes that raising the token budget still improves VisDoc — this looks more like \"not tuned yet\" than a ceiling.",[15,1590,1591,1594],{},[44,1592,1593],{},"Quantization hurts audio most."," Moving from bfloat16 to int4, text barely notices (61.36 → 60.84) while audio drops 5.6 points (69.54 → 63.92). The paper notes, however, that float and quantized runs use different evaluation harnesses, so the drop includes harness differences and cannot be blamed on quantization alone.",[15,1596,1597,1600,1601,1604],{},[44,1598,1599],{},"The same token budget moves three tasks in three directions."," Images are trained at 280 tokens per frame, video at 140; raising inference from 280 to 560 improves visual documents sharply (63.38 → 67.62), saturates images, and ",[44,1602,1603],{},"makes video worse"," (48.51 → 46.52). The paper attributes this to excessive sequence length diluting attention and mean-pooled representations.",[1124,1606,1128,1608,1128,1613],{"className":1607},[1127],[1130,1609],{"src":1610,"poster":1611,"autoPlay":492,"loop":492,"muted":492,"playsInline":492,"ariaLabel":1612},"\u002Fimages\u002Fblog\u002Fshared-trunk-four-modalities\u002Fbudget.mp4","\u002Fimages\u002Fblog\u002Fshared-trunk-four-modalities\u002Fbudget-poster.jpg","Vision token budget effects on image, video and visual documents",[1136,1614,1615],{},"One knob, three directions. Images train at 280, video at 140; video is still improving at 280 and drops from 280 to 560.",[15,1617,1618,1619],{},"So the knob has to be tuned per task — ",[44,1620,1621],{},"not a defect, but the control this direction gives you.",[24,1623,1625],{"id":1624},"conclusion-a-new-direction-for-scaling-up","Conclusion: a new direction for scaling up",[15,1627,1628],{},"Back to the scene. You no longer have to choose between \"four models\" and \"one big model\".",[15,1630,1631,1634],{},[44,1632,1633],{},"Shared dimensions, capacity isolated in branches",": one semantic space, open the branch you need.",[15,1636,1637],{},"Two ways to split, two different bills:",[12,1639,1640,1646],{},[15,1641,1642,1645],{},[44,1643,1644],{},"MoE"," splits inside the model. Homogeneous experts, a learned router decides who works. It buys decoupling of capacity from compute per token.",[15,1647,1648,1650],{},[44,1649,1050],{}," splits at the entrance. Heterogeneous modalities, designed encoders decide who handles what. It buys decoupling of capacity from resident memory.",[15,1652,1653,1654],{},"The shared lesson: ",[44,1655,1656],{},"splitting is not about getting bigger; it is about making some parts switchable off.",[15,1658,1659,1660],{},"And the most counter-intuitive lesson of all — ",[44,1661,1662],{},"a shared space comes from removing specialised machinery, not from adding more modules.",[432,1664],{},[15,1666,1667],{},[437,1668,1669,1670,888,1674,1679,1680,1685],{},"We have not measured this model's deployment difficulty, tooling support or real latency, so this is not a recommendation to migrate. If you do, measure three things first: how big your text trunk actually is, whether the branches can be switched off, and what share of your queries are cross-modal. Sources: ",[441,1671,1673],{"href":1048,"rel":1672},[445],"arXiv 2610.37364",[441,1675,1678],{"href":1676,"rel":1677},"https:\u002F\u002Fai.google.dev\u002Fgemma\u002Fdocs",[445],"Gemma docs",". Related MoE work: ",[441,1681,1684],{"href":1682,"rel":1683},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2610.37386",[445],"arXiv 2610.37386"," (channel selection, not a MoE survey).",{"title":472,"searchDepth":473,"depth":473,"links":1687},[1688,1689,1690,1691,1696,1697,1702,1703,1704],{"id":1032,"depth":473,"text":1033},{"id":1064,"depth":473,"text":1065},{"id":1095,"depth":473,"text":1096},{"id":1152,"depth":473,"text":1153,"children":1692},[1693,1695],{"id":1160,"depth":1694,"text":1161},3,{"id":1180,"depth":1694,"text":1181},{"id":1196,"depth":473,"text":1197},{"id":1238,"depth":473,"text":1239,"children":1698},[1699,1700,1701],{"id":1245,"depth":1694,"text":1246},{"id":1268,"depth":1694,"text":1269},{"id":1284,"depth":1694,"text":1285},{"id":1303,"depth":473,"text":1304},{"id":1572,"depth":473,"text":1573},{"id":1624,"depth":473,"text":1625},"\u002Fimages\u002Fblog\u002Fen\u002Fshared-trunk-four-modalities.svg","Parameter split showing a 271M text trunk, 167M vision encoder and 305M audio encoder isolated in branches that can be loaded on demand","2026-11-01","Multimodal used to mean four models, or one big enough to swallow everything. EmbeddingGemma 2 shows a third path: share the semantic backbone, isolate capacity in branches, load only what you need.",{},"\u002Fimages\u002Fblog\u002Fen\u002Fshared-trunk-four-modalities.jpg","\u002Fblog\u002Fen\u002Fshared-trunk-four-modalities",{"title":1022,"description":1708},"shared-trunk-four-modalities","blog\u002Fen\u002Fshared-trunk-four-modalities",[1716,1717,1718],"multimodal","embedding","model-design","wi1YnHGolk3e0hWo1T4Qw9oxzCu8vI22647doO01M-Q",{"id":1721,"title":1722,"author":7,"body":1723,"cover":2043,"coverAlt":2044,"date":2045,"description":2046,"draft":488,"extension":489,"featured":488,"lang":915,"meta":2047,"navigation":492,"ogImage":2048,"path":2049,"seo":2050,"slug":2051,"stem":2052,"tags":2053,"translationKey":2051,"updated":502,"__hash__":2057},"blog\u002Fblog\u002Fen\u002Feth-refuted-not-p-np.md","My friend asked: has P=NP been broken?",{"type":9,"value":1724,"toc":2034},[1725,1728,1731,1734,1737,1741,1744,1747,1750,1753,1759,1762,1768,1777,1781,1784,1787,1790,1793,1799,1802,1809,1812,1816,1819,1826,1829,1840,1844,1851,1854,1857,1860,1863,1866,1869,1872,1875,1878,1881,1892,1896,1899,1906,1912,1915,1918,1921,1924,1927,1930,1933,1944,1948,1951,1954,1963,1966,1969,1972,1975,1978,1981,1984,1987,1991,1994,1997,2000,2003,2006,2009,2012,2015,2018,2020],[15,1726,1727],{},"On Tuesday night, a friend dropped a news screenshot into our group chat and asked: \"Does this mean P=NP has been broken?\"",[15,1729,1730],{},"I said: \"It's not P=NP. It's ETH.\"",[15,1732,1733],{},"He asked: \"Isn't that the same thing?\"",[15,1735,1736],{},"At that moment I didn't have a good answer. We met for lunch the next day, and I spent half an hour walking him through it. This is what I said, plus the details I filled in later from reading the original manuscripts.",[24,1738,1740],{"id":1739},"what-actually-happened","What actually happened",[15,1742,1743],{},"On October 6, OpenAI put several hundred mathematical manuscripts on GitHub. On October 26 it added two more. One of them is catalogue entry 378: 〈Disproof of the Exponential Time Hypothesis〉 — the paper's own title is 〈The Exponential Time Hypothesis is False〉.",[15,1745,1746],{},"The repository now holds 721 manuscripts across 373 families. The family numbers skip around, so \"number 378\" does not mean there are 378 families.",[15,1748,1749],{},"The same day, Anthropic said its model had found the core idea independently on October 16, and described OpenAI's model as having \"independently and concurrently\" proven a similar result.",[15,1751,1752],{},"My friend cut in: \"So who got there first?\"",[15,1754,1755,1756,559],{},"\"I don't know, and it doesn't matter.\" What matters, I told him, is that ",[44,1757,1758],{},"these are not papers yet",[15,1760,1761],{},"OpenAI says so itself in the README: these are \"raw research data, rather than polished academic papers\", and \"some of the unformalized results could have issues\". About 42% of the top-line results in the repository have Lean formalizations; entry 378 is one of them, and its core time bound has been machine-checked.",[15,1763,1764,1765,559],{},"The academic response was not slow. Impagliazzo and Paturi (who formulated ETH in 1999; journal version 2001) and MIT's Ryan Williams formed a working group and published an open letter. They stressed one thing: ",[44,1766,1767],{},"involvement is not certification",[15,1769,1770,1771,1776],{},"As of October 28, ",[441,1772,1775],{"href":1773,"rel":1774},"https:\u002F\u002Fmathworld.wolfram.com\u002FExponentialTimeHypothesis.html",[445],"MathWorld"," records that no independent verification had been reported.",[24,1778,1780],{"id":1779},"start-with-sudoku","Start with Sudoku",[15,1782,1783],{},"To explain this properly, we have to start with something that looks unrelated: Sudoku.",[15,1785,1786],{},"My friend nodded. He plays Sudoku.",[15,1788,1789],{},"\"Imagine a filled-in grid. I show it to you, and you can check it in about ten seconds. Now imagine an empty grid. Finding that solution might take you half an hour.\"",[15,1791,1792],{},"That is the difference between P and NP. P is the class of problems you can solve quickly. NP is the class you can verify quickly.",[15,1794,1795,1796],{},"And P = NP means: ",[44,1797,1798],{},"every answer you can verify quickly, you can also find quickly.",[15,1800,1801],{},"Almost everyone believes that is false, but nobody has proven it.",[15,1803,1804,1805,1808],{},"ETH is a stronger claim. It does not just say \"3SAT is not in P\". It says: ",[44,1806,1807],{},"there is a constant c such that 3SAT requires at least 2 to the cn steps."," 3SAT is the most standard problem in that family — like Sudoku, it is NP-complete.",[15,1810,1811],{},"Here is an analogy. P ≠ NP only says \"these two are not in the same place\". ETH says \"they are at least two thousand kilometers apart\" — much more information.",[24,1813,1815],{"id":1814},"why-would-anyone-assume-such-a-thing","Why would anyone assume such a thing",[15,1817,1818],{},"\"What's the use of assuming something nobody has proven?\" my friend asked.",[15,1820,1821,1822,1825],{},"The use is this: ",[44,1823,1824],{},"if you know two places are at least two thousand kilometers apart, you can rule out anyone driving there in an hour."," A lower bound on distance eliminates an entire class of \"fast\" solutions.",[15,1827,1828],{},"That is how fine-grained complexity has worked for the past twenty years: assume ETH, then prove \"if this problem had a fast algorithm, 3SAT would too, contradiction\". So ETH is not a textbook term. It is the foundation under a whole shelf of papers.",[1124,1830,1128,1832,1128,1837],{"className":1831},[1127],[1130,1833],{"src":1834,"poster":1835,"autoPlay":492,"loop":492,"muted":492,"playsInline":492,"ariaLabel":1836},"\u002Fimages\u002Fblog\u002Feth-refuted-not-p-np\u002F03-ladder.mp4","\u002Fimages\u002Fblog\u002Feth-refuted-not-p-np\u002F03-ladder-poster.jpg","Complexity ladder: polynomial, sub-exponential, exponential",[1136,1838,1839],{},"The complexity ladder. ETH claimed the top rung could not be lower; this result pushes the upper bound down to the middle rung.",[24,1841,1843],{"id":1842},"what-did-openai-actually-do","What did OpenAI actually do",[15,1845,1846,1847,1850],{},"Their model found an algorithm that ",[44,1848,1849],{},"counts"," the satisfying assignments of a logical formula — counting them, not just deciding whether one exists, which is a stronger requirement. The running time is 2 to the n divided by the square root of the natural log of n, using polynomial space.",[15,1852,1853],{},"My friend pointed at the expression I had scribbled on a piece of paper: \"What does that mean?\"",[15,1855,1856],{},"\"It means the exponent is still there, but divided by a number that grows slowly. The bigger n is, the more it gets divided.\"",[15,1858,1859],{},"\"So it's faster?\"",[15,1861,1862],{},"\"It is. But faster than what?\"",[15,1864,1865],{},"The best known 3SAT algorithm runs in roughly 1.307 to the n.",[15,1867,1868],{},"Take n = 1,000. That algorithm takes about 2 to the 386. This new one takes about 2 to the 380.",[15,1870,1871],{},"It is only about 60 times faster.",[15,1873,1874],{},"Sixty times sounds like a lot, until you notice that 2 to the 380 is still 10 to the 114. The age of the universe in seconds is only 4 × 10 to the 17.",[15,1876,1877],{},"The real difference appears when n gets large. Take n = 1,000,000: one is 2 to the 269,000, the other is 2 to the 386,000. The gap widens, but both remain astronomical.",[15,1879,1880],{},"So the point here is not \"how much faster\". It is \"faster than that lower bound\".",[1124,1882,1128,1884,1128,1889],{"className":1883},[1127],[1130,1885],{"src":1886,"poster":1887,"autoPlay":492,"loop":492,"muted":492,"playsInline":492,"ariaLabel":1888},"\u002Fimages\u002Fblog\u002Feth-refuted-not-p-np\u002F05-magnitude.mp4","\u002Fimages\u002Fblog\u002Feth-refuted-not-p-np\u002F05-magnitude-poster.jpg","Magnitude comparison at n=1000: 2^386 versus 2^380",[1136,1890,1891],{},"At n = 1,000. This is not 2^n dropping to 2^380 — it is 2^386 dropping to 2^380. Sixty times faster, still infeasible.",[24,1893,1895],{"id":1894},"keep-upper-and-lower-bounds-straight","Keep upper and lower bounds straight",[15,1897,1898],{},"This is where people get confused.",[15,1900,1901,1902,1905],{},"An algorithm is an ",[44,1903,1904],{},"upper bound",": it tells you the most time you need to get something done.",[15,1907,1908,1909,1911],{},"ETH is a ",[44,1910,851],{},": it says the least time anything must take.",[15,1913,1914],{},"This result pushes the upper bound down to sub-exponential. For large enough n, that upper bound falls below the lower bound ETH claimed — so ETH is refuted.",[15,1916,1917],{},"My friend asked: \"Does that work in reverse too?\"",[15,1919,1920],{},"\"There are two kinds of 'reverse'.\"",[15,1922,1923],{},"P = NP would indeed imply ETH is false — but that is just the contrapositive of the same arrow, not a new deduction.",[15,1925,1926],{},"What does not hold is the other reverse: from \"ETH has been refuted\" you cannot conclude \"P = NP\". That arrow fails.",[15,1928,1929],{},"Back to the distance analogy: everyone thought it was at least two thousand kilometers; now someone proves it is only eight hundred. The distance got shorter, but your car is still too slow to arrive within an hour.",[15,1931,1932],{},"So whether P equals NP remains completely open today.",[1124,1934,1128,1936,1128,1941],{"className":1935},[1127],[1130,1937],{"src":1938,"poster":1939,"autoPlay":492,"loop":492,"muted":492,"playsInline":492,"ariaLabel":1940},"\u002Fimages\u002Fblog\u002Feth-refuted-not-p-np\u002F04-implication.mp4","\u002Fimages\u002Fblog\u002Feth-refuted-not-p-np\u002F04-implication-poster.jpg","Two arrows: the top one holds, the bottom one is crossed out",[1136,1942,1943],{},"The top arrow holds. The bottom one does not. This is the most commonly misread part of the story.",[24,1945,1947],{"id":1946},"then-why-does-it-matter","Then why does it matter",[15,1949,1950],{},"\"If P = NP is untouched, why is everyone excited?\"",[15,1952,1953],{},"\"Because it knocks out a lot of intuitions.\"",[15,1955,1956,1957,1962],{},"Ryan Williams ",[441,1958,1961],{"href":1959,"rel":1960},"https:\u002F\u002Ftechcrunch.com\u002F2026\u002F10\u002F27\u002Ffrontier-ai-labs-say-their-models-refuted-the-exponential-time-hypothesis-what-does-that-mean\u002F",[445],"told reporters"," that some parts of the proof are, you might say, routine — but there are two or three \"alien-looking\" parts, and those are exactly what make this something the whole community needs to work through.",[15,1964,1965],{},"He also said something honest: \"Every computer scientist should probably put a little more weight on the plausibility of P = NP, but one's weight may vary.\"",[15,1967,1968],{},"\"So has anyone checked it?\" my friend asked.",[15,1970,1971],{},"\"Yes, but they are not done.\"",[15,1973,1974],{},"About 42% of the top-line results carry Lean formalizations. Lean is a tool that lets a computer check a proof step by step. But a machine check is not the same as the result being true — it confirms the derivation has no gaps, not that the statement is the one everyone cares about, and not that the theorem is useful.",[15,1976,1977],{},"Three practical effects.",[15,1979,1980],{},"First, fine-grained complexity has papers to re-read. Those \"assuming ETH, problem X cannot be solved below Y\" conditionals lost their premise. The conclusions are not necessarily false, but they can no longer be used to derive unconditional lower bounds.",[15,1982,1983],{},"Second, cryptography is not broken. Today's systems rely on specific problems — factoring, discrete logarithms, lattices — not on the 3SAT family; and this algorithm is still exponential.",[15,1985,1986],{},"Third, engineering feels nothing in the short term. Anyone telling you this means \"AI inference is about to get faster\" is confusing a theoretical bound with a wall-clock time.",[24,1988,1990],{"id":1989},"back-to-the-group-chat","Back to the group chat",[15,1992,1993],{},"After lunch the next day, my friend asked one last question: \"So is it fake news?\"",[15,1995,1996],{},"\"No,\" I said. \"There is something real in it. What's wrong is turning it into 'P=NP has fallen'.\"",[15,1998,1999],{},"\"How should I read stories like this in the future?\"",[15,2001,2002],{},"I held up three fingers.",[15,2004,2005],{},"\"First, is it a claim or a proof? A manuscript on GitHub is not the same class of object as a journal paper — especially when OpenAI itself writes 'this is raw research data'.",[15,2007,2008],{},"Second, how far did the formalization go? Lean can check a derivation, but it cannot guarantee the problem is the one everyone thinks it is.",[15,2010,2011],{},"Third, what does it refute, and what does it not? This refutes the claim that 3SAT requires at least 2 to the cn steps. It does not refute P ≠ NP, and it does not hand anyone a usable algorithm.\"",[15,2013,2014],{},"He put his phone away and said: \"So the headline turned 'not that far' into 'we're there'.\"",[15,2016,2017],{},"Yes. That is exactly it.",[432,2019],{},[15,2021,2022],{},[437,2023,2024,2025,2030,2031,559],{},"Written on 2026-10-29, while academic review is still in progress. If independent verification appears, or the proof is found to have problems, I will come back and update this. The source material is family 378 in ",[441,2026,2029],{"href":2027,"rel":2028},"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fmath",[445],"openai\u002Fmath","; the definition of ETH and its implications are on ",[441,2032,1775],{"href":1773,"rel":2033},[445],{"title":472,"searchDepth":473,"depth":473,"links":2035},[2036,2037,2038,2039,2040,2041,2042],{"id":1739,"depth":473,"text":1740},{"id":1779,"depth":473,"text":1780},{"id":1814,"depth":473,"text":1815},{"id":1842,"depth":473,"text":1843},{"id":1894,"depth":473,"text":1895},{"id":1946,"depth":473,"text":1947},{"id":1989,"depth":473,"text":1990},"\u002Fimages\u002Fblog\u002Fen\u002Feth-refuted-not-p-np.svg","A complexity ladder showing the upper bound pushed down to sub-exponential, not yet to polynomial","2026-10-29","A friend sent me a news story and asked whether P=NP had fallen. The story is real, but it mixes up two things: it was ETH that was refuted, not P=NP. Here is the explanation I gave him.",{},"\u002Fimages\u002Fblog\u002Fen\u002Feth-refuted-not-p-np.jpg","\u002Fblog\u002Fen\u002Feth-refuted-not-p-np",{"title":1722,"description":2046},"eth-refuted-not-p-np","blog\u002Fen\u002Feth-refuted-not-p-np",[2054,2055,2056],"complexity","ai-research","mathematics","wq5KMOvcqergp4H5bMBJJNK9LUMe3vqhM8PeTxKhMLw",1793619494804]