Lichess 分析漏掉了什麼
簡而言之
- Lichess 以每著一百萬節點的一次伺服器分析為你的著法貼標。我以兩千萬節點重新分析了 300 局隨機對局,並比對每一個標記。
- 每十個標記就有一個改變。「不精確」是最不穩定的那一個:57% 成立,28% 其實毫無問題,15% 其實更糟。
- 每二十局就有一局存在完全沒被標出的失誤,多半落在半個兵到三個兵之間,也就是勝負的分界處。
- 其中三十二個未被標出的失誤,取自有頭銜棋手的對局,做成了一份謎題研究。
上週一局快棋,Lichess 標出了我的八著。第 20 著不在其中,而它是個失誤,是那局中報告從未提及的三個失誤之一。伺服器認為 20.Qd1 之前是 +1.2,之後是 +0.9,跌幅太小不足以標記。給 Stockfish 二十倍的時間,結果是之前 +2.0、之後 +0.7。
同一局棋評估兩次。Lichess 的曲線就是它圖表上顯示的內容;圓點是它標出的著法,雙方都有。圓圈是較深搜尋判為失誤、而它沒有標出的三著:20、24 與 26。
我想知道這種情形有多常發生,於是以伺服器預算的二十倍重新分析了 300 局隨機對局,並以四倍分析了九位有頭銜棋手的 800 局,比對每一個標記。十個裡有一個改變。「不精確」標記是最該存疑的那個。而每二十局就有一局存在完全沒被標出的失誤,謎題就是從那裡來的。
標記是怎麼產生的
伺服器分析(fishnet,跑在捐贈 CPU 上的 Stockfish)對局中每個局面評估一次,每著 1,000,000 節點,大約是一個核心一秒的量。每個標記都是兩個數字之差:你走著法之前的局面與之後的局面,換算成勝率,所以在 0.00 處失手半個兵,比在 +5 處失手半個兵更嚴重。勝率下降 0.1 為不精確,0.2 為失誤,0.3 為嚴重失誤。
所以標記只看得見一百萬節點看得見的東西,前後兩端都是。如果搜尋始終找不到反駁手段,「之前」那個數字就從未知道你手上有什麼,而你的著法相對於它也就沒有損失。我的 20.Qd1 正是這種情形:更好的格子只差一路,而懲罰要比一秒搜尋所能看到的再晚三著才開始。
兩千萬節點下有什麼改變
以 300 局隨機的積分對局(1600 至 2400,取自 2026 年 8 月資料庫),用同樣的公式在 20,000,000 節點下重新評估:
- 每十著就有一著改變標記。 改變的方向兩邊數量相當,所以對局摘要裡的總數幾乎不動,底下的著法卻變了。
- 「不精確」是最不穩定的標記。 1,805 個 Lichess 判定的不精確中,57% 在深搜下仍是不精確,28% 其實毫無問題,15% 其實是失誤或嚴重失誤。嚴重失誤有 84% 站得住腳。
- 每二十局就有一局存在完全沒被標出的失誤,而每八局就有一局有被標成失誤、但深搜下毫無問題的著法。兩者都集中在半個兵到三個兵之間,也就是決定勝負的區間。
同一套流程套用在九位有頭銜棋手各約一百局的自身著法上:Lichess 掛在 Magnus Carlsen 身上的失誤有四分之一在深搜下並非失誤,而其他人則是相反方向,每五個真正的失誤就有一個被貼上比實際更輕的標記。
| 棋手 | 對局數 | Lichess 判失誤+嚴重失誤 | 標記過輕 | 標記過重 |
|---|---|---|---|---|
| Magnus Carlsen | 104 | 195 | 18 (11%) | 50 (26%) |
| Alireza Firouzja | 104 | 215 | 45 (20%) | 35 (16%) |
| Eric Rosen | 102 | 225 | 45 (20%) | 43 (19%) |
| Jerry(ChessNetwork) | 104 | 287 | 45 (16%) | 46 (16%) |
| Oleksandr Bortnyk | 102 | 184 | 51 (25%) | 30 (16%) |
| Sergei Zhigalko | 103 | 218 | 53 (22%) | 29 (13%) |
| Dmitry Andreikin | 104 | 165 | 33 (19%) | 26 (16%) |
| Ediz Gürel | 61 | 117 | 37 (27%) | 15 (13%) |
| Anish Giri | 20 | 12 | 3 | 1 |
分析放過的五個漏網之魚
以下每個局面都出自那些對局。棋手走了圖上那一著,分析沒給任何標記,而兩千萬節點的搜尋判定它是失誤或更糟,且最佳著法是唯一的。棋盤一開始停在該著之前的局面,所以你可以先自己找更好的著法;往前走一步就會看到對局實走的著法連同它本該有的標記,而反駁手段是研究裡的變例,就在每個棋盤下方點一下即可。
Zhigalko,黑方走。 白方剛走 Be5,攻擊 c7 的后,黑方做了最自然的事:20…Qd7,讓后脫離攻擊。分析給出之前 −1.38、之後 −1.30,沒有損失。但那個后根本不需要救。20…Rxd2!棄掉這個兌換,21.Rxd2 後,兵著 21…c3!同時捉住 b2 的后與 d2 的車。白方把后拿回來(22.Bxc7 cxb2 23.Rxb2 Rxc7),最後剩下一個車對黑方的雙象加一馬:深搜下 −3.2,而退后只有 −1.3。反駁手段的第一著是丟失子力的一著,這正是一秒搜尋永遠看不到它的原因。
Bortnyk,黑方走。 20…b5 攻擊 c4 的象,分析從 −0.63 變成 −0.41。f5 的象本來可以直接吃馬:20…Bxe4!21.dxe4,接著另一隻馬落到 f4,再跟上 …e5 把象從 d4 趕走。黑方五著之內贏得子力,深搜下 −2.7;次佳著法 20…Nf4 立刻走,只有 −0.6。
Bortnyk,黑方走,后類殘局。 后加馬對后加車,白方的 a 兵是白方唯一的本錢。黑方走了 54…Qf6;分析說是 −1.58 到 −1.03。深搜下 Qf6 之後的局面是徹底的和棋。54…Qa7+!55.Kg3 Qxa4 帶將吃掉那個兵,殘局是 −2.1,勝勢。
Carlsen,黑方走。 白后在 g4,馬在 e4。Carlsen 走了 15…Ne5 攻擊后,分析從 −0.94 變成 −0.43。兵著 15…f5!同時攻擊兩者:16.Qh3 fxe4 17.Bxe4 之後,黑方用一兵換到一馬,局面 −1.9,而次佳著法(15…g6)落後一個半兵。淺層搜尋把 …f5 讀成鬆動王翼,把退馬讀成安全,兩種判讀都錯。
Gürel,白方走。 車類殘局,各有一馬;黑方 a3 的馬懸空,白方的 d 兵在 d5。白方走了 31.Nd4,分析給出 +1.42 到 +1.06。31.d6!才是正著:車必須擋住這個兵(31…Rxd6),接著 32.Nxa3 白吃一馬。深搜下 +3.9,而實走著法之後是 +0.9。
全部 32 個都收在這份研究裡,做成謎題:先是局面,接著標出實走著法,反駁手段作為變例並附上引擎數字,此外對局後續每一著只要 20M 搜尋判定有問題,都各自帶著標記與引擎變例。強制性解法排在前面,因為超出淺層視界的長戰術是人找得到的;平穩的那些排在後面。
讀懂你自己的報告
「零失誤」的意思是在一百萬節點下看不到失誤。嚴重失誤是真的,不精確只有一半是真的,而那些讓對手重新回到你原本領先一兩個兵的棋局裡的著法,最可能完全沒有標記。如果一局棋很重要,就用你自己的引擎跑它,讓它在 +0.5 到 +3 之間的局面上跑過搜尋深度 25。
測量方式
隨機樣本取自2026 年 8 月 Lichess 資料庫中每第十局已分析、且雙方積分都在 1600 到 2400 之間的對局:300 局,20,227 著帶有伺服器評估值。每個局面都經過 Stockfish 18(fishnet 所執行的主要版本),單執行緒 20,000,000 節點,再用 lila 自己的公式(Advice.scala:勝率差 0.1、0.2、0.3)產生第二套標記。那個公式套用在 Lichess 自己的評估值上時,能以 99.07% 的比例重現 Lichess 自己的標記,所以比較的兩邊都使用它。兩端任一有強制將死的 842 著被排除;lila 對那些採用另一套規則判定。節點預算寫在 lila 的 Work.Origin 裡:使用者請求的分析為 1,000,000,官方轉播為 5,000,000,自動分析則為 300,000 與 100,000。
| Lichess 標記 | 20M 下無標記 | 不精確 | 失誤 | 嚴重失誤 |
|---|---|---|---|---|
| 無 | 15,281 | 496 | 13 | 2 |
| 不精確 | 504 | 1,033 | 233 | 35 |
| 失誤 | 27 | 190 | 367 | 151 |
| 嚴重失誤 | 12 | 18 | 134 | 889 |
九位棋手的對局取自公開 API 中他們最近一百局已分析的積分快棋與中速棋(七位在 2026 年仍活躍;Carlsen 與 Firouzja 今年在 Lichess 上沒有已分析的對局,所以他們的往回追到 2021 與 2023 年),採用較省的 4,000,000 節點分析。在隨機樣本上,4M 找出的約略略多於 20M 所找出的一半,所以棋手的比率是下限。一個謎題要能成立,必須是實走著法在 20M 下損失至少 0.2 勝率,而最佳著法比第二變例好 0.1 以上,搜尋三條變例;然後還要在對該局面的第二次獨立 20M 搜尋中,依然把實走著法判為失誤:35 個通過第一關,32 個通過第二關。這就是 20M 搜尋中雜訊的量級,也是為什麼較深的那次分析被視為離真相近二十倍,而不是視為真相本身。
資源:
- 這份研究:全部 32 個謎題,含解答與引擎數字
- lila
Advice.scala:判定門檻 - lila fishnet
Work.scala:各分析來源的節點預算 - Lichess 開放資料庫:每月匯出檔