DeepSeek-R1の蒸留版が私の環境でも動くようになった。OpenAI o1と同程度の性能と言われるほどなのでいろいろ試している。
暗号を解かせてみた
o1のプレビュー版が公開された時の説明資料に「Chain of Thought」の概念の説明があり、そこで「Chain of Thought」(思考の連鎖)で難しい問題を解いた例がいくつか示されていた。暗号の解読やクロスワードパズルなどである。
DeepSeek-R1がo1と同程度の性能があるならこれらの問題も解けるはずだ。
暗号の問題は以下の内容だった。
oyfjdnisdr rtqwainr acxz mynzbhhx -> Think step by step
Use the example above to decode:(上の例を使って以下を解読せよ)
oyekaijzdf aaptcg suaokybhai ouow aqht mynznvaatzacdfoulxxz
正解は「THERE ARE THREE R’S IN STRAWBERRY」。解読方法は、先頭から2文字づつ区切り、各文字のAからの位置を足して2で割った位置の文字を繋ぐという方法だ。答えを知ってしまうと簡単に思えてしまうが、初めから自分で見つけるとすれば相当難しいことだ。
以下のローカル環境で試してみた。
- Jan v0.5.14
- DeepSeek-R1-Distill-Qwen-32B-Q3_K_S.gguf 13.40GB
実行結果は以下の通り。プロンプトで「上の例を使用してデコードしてください。」と日本語でお願いしたら、日本語で回答してきた。
この問題は、文字列を特定のルールに従ってデコードする必要があるようです。例として与えられたものを見ると、「oyfjdnisdr rtqwainr acxz mynzbhhx」が「Think step by step」という意味になっていることがわかります。
まず、具体的なルールや方法を特定する必要があります。以下にいくつかの可能性があります:
- 文字置換:各文字が一定の規則で置き換えられている場合。
- Caesar Cipher(ローテーション暗号):各文字を固定数だけシフトさせている場合。
- 単語の意味を逆転させる:例では「oyfjdnisdr」が「Think」となっているため、文字列全体ではなく単語ごとに意味がある可能性があります。
1. 文字置換
例を見ると、「oyfjdnisdr」→「Think」です。各文字を対応させると:
- o → T
- y → h
- f → i
- j → c
- d → k
このように、各文字が特定の文字に置き換えられている可能性があります。
2. Caesar Cipher
Caesar Cipherでは、各文字を固定数だけシフトさせます。例として、右方向に何個シフトしているかを確認します:
- o (15) → T (20):+5
- y (25) → h (8):+5(25 + 5 = 30 → 30 mod 26 = 4 → E? 一致しない)
この場合、Caesar Cipherではない可能性があります。
3. 単語の意味を逆転させる
例では「oyfjdnisdr」→「Think」です。文字列全体ではなく単語ごとに意味がある可能性があります。具体的な解法
文字置換表を作成:
- o → T
- y → h
- f → i
- j → c
- d → k
同じルールを「oyekaijzdf aaptcg suaokybhai ouow aqht mynznvaatzacdfoulxxz」に適用します。
デコード例:
結論
- oyekaijzdf:
o → T
y → h
e → ?
(この段階で文字置換表が不十分なため、具体的なデコードは困難です。)
上記の分析から、具体的なルールを特定することができませんでした。例を参考にし、文字置換表を作成してデコードする必要があります。
正解にたどり着けず、途中で諦めたようだ。思考中に出る単語もTHINKをTHICKと間違えるという不注意な面が見られる。
英語のまま出題して英語で思考させたり、70Bのモデルを試したりしたが、この暗号の問題で正解に至ることはなかった。その他に「クロスワードパズル」の問題も試してみたが解くことはできなかった。
蒸留版でかつ量子化したモデルはこんなものなのか、正式版で評価しないとだめなのかな~と思っていたそんな時、本日、shi3z氏のNoteでCyberAgentによる蒸留版のDeepSeek-R1を評価されている記事を見た。
shi3z氏の環境でも蒸留版の性能は、元のモデルよりも下がっているようだった。であればそれはそれで仕方ないとして、私が興味を持ったのは、shi3z氏が試していた「マンデルブロ集合を描く」というテーマである。
マンデルブロ集合を描かせてみた
なるほどこの手があった。今から30年以上前だと思うが「フラクタル」という言葉が流行った時があった。「フラクタル」とは一部分を抜き出しても全体と似た形になる「自己相似性」を示すもので、自然界にはよく見られる。フラクタルを数学的にモデル化したものが「マンデルブロ集合」であり、マンデルブロ集合をプログラムで描くことができることを当時知ったのだが、私の頭では内容を理解することもプログラムを書くこともできなかった。このテーマを理解して「マンデルブロ集合」を描くプログラムを書くには、おそらく大学数学科卒、理工系大学院生レベルの知能がないと難しい、と私は思う。このテーマはLLMの数学能力、コーディング能力を測るには最適かもしれない。(shi3zさん、有り難くパクらせていただきます😋)
早速、私のローカル環境で動くLLMのいくつかのモデルで試してみた。プロンプトは以下の通り。
DeepSeek-R1-Distill-Qwen-32B君のプログラムによる作品が以下である。
他にもQwenのQWQ-32Bや、MicrosoftのPhi-4でも試してみたところ、動くPythonプログラムができている。
マンデルブロについては、実のところよく理解できていないので、私にその解説はできない。しかし動き始めるとそれなりに面白く、AIの力を借りながらもう少し遊んでみたいと思っている。その結果は別の記事にまとめてみたい。