![]()
4月1日,開發者社區 dev.to 上出現了一道謎題。發帖人 @francistrdev 用凱撒密碼(Caesar cipher,一種字母移位替換加密法)藏了一首多行詩——但每行用了不同的密鑰。
這不是標準考題。傳統凱撒密碼用單一移位值(比如所有字母+3),但這首詩的7行里,第2、3、6行用了+17,其余用了+9。破解者后來給這個項目取名 DecipherLM,記錄了三周的迭代翻車史。
第一版:把詩當整段處理,直接崩盤
團隊最初的想法很直接:用大型語言模型(LLM, Large Language Model)的困惑度(Perplexity/PPL,衡量模型對文本序列"驚訝程度"的指標)打分。把整首詩試25種移位,選平均困惑度最低的那個。
結果慘敗。因為+9的行數和+17的行數互相"投毒",模型找不到能讓全文通順的單一密鑰。就像用一把鑰匙開一整串鎖,其中三把鎖的齒孔完全不同。
「整段平均的思路,在混合移位面前就是自殺。」——這是團隊在文檔里的原話。
第二版:逐行破解,但模型開始 hallucinate
轉向逐行評分:每行獨立試25種移位,選困惑度最低的。這次部分成功了——至少能讀出幾個完整的句子。
但問題變成了"噪聲"。135M 參數的 Hugging Face 小模型經常選中奇怪的移位值(+14、+4 等),拼出一些看似合理實則胡扯的單詞。團隊稱之為"幻覺移位":模型被訓練來預測最可能的下一個詞,而不是最正確的解密結果。
團隊懷疑是模型容量問題,但不想碰云端大模型——本地跑不動,隱私也有顧慮。他們決定深挖小型語言模型(SLM, Small Language Model)的潛力,最終選了 Qwen2.5-0.5B。
第三版:信任池+上下文共識,終于100%
關鍵洞察來自謎題本身:移位值不是隨機的。它們會聚成少數幾組,每組內部有規律(統計學上的"眾數"概念)。
新策略分兩步:
第一步,用 Qwen2.5-0.5B 的字符級感知能力,從25個候選中篩出高頻出現的"信任池"。在這個案例里是 [9, 17] 兩個值。
第二步,強制每行只能從信任池里選,再結合上下文共識——讓相鄰行的語義連貫性參與最終決策。
Qwen2.5-0.5B 的優勢在于字符級處理。大模型往往把文本切成子詞(subword)token,對單個字母的移位不敏感;0.5B 的小模型反而保留了更細粒度的字符關系,能識別 "umu wzg" 這種明顯不像英語的拼寫錯誤。
最終解密結果前6行完全可讀:
Eager clicks often spoil the claim.
Vows are made I refuse to break,
Games of trust begin again.
Once you choose to follow through,
I umuwzg pcua i aqtdmz axwwv.
Gentle words, familiar flow,
第5行仍有殘碼,但團隊確認這是原帖的印刷錯誤——@francistrdev 在評論區承認過這一行有手誤。
一個反直覺的發現
整個項目最諷刺的轉折:更大的模型表現更差。團隊試過云端大模型,困惑度評分反而更不穩定——因為大模型的訓練目標是對話流暢度,不是密碼學正確性。
SLM 的"缺陷"成了優勢。0.5B 參數的限制迫使它專注字符模式,而不是用世界知識去"腦補"一個看似合理但錯誤的答案。
DecipherLM 的代碼已開源。團隊正在測試這套架構對其他古典密碼的適應性——維吉尼亞密碼(Vigenère cipher,多表替換加密)是下一個目標。但有個問題他們還沒想明白:如果移位值本身也加密了,信任池機制會不會失效?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.