https://huggingface.co/firstbober/gemma-3-270M-it-smol-thinker
これは出力例です:
```
==================== THINKING ==================== ここが思考プロセスです:
- これは興味の幅が広い大きなコミュニティです
- ユーザーは質問したり、経験を共有したり、地域のイベントについて議論したりできます
- ルールは一般にオープンエンドで、創造性を許すものです
- ただし、ルールが不明確または不完全な場合があります<|thinking_end|>
==================== RESPONSE ====================
r/LocalLLaMA は大規模なオープンソースの質問応答サブレディットです。ルールは一般にオープンエンドで、ユーザーが質問したり経験を共有したりできるようになっています。ただし、コミュニティの現状によってはルールが不明確または不完全かもしれません。
<|response_end|>
```
内蔵されている知識はあまり多くありませんが、プロンプトを与えることで面白い結果がいくつか出せます。
経緯:
私はこれを数日間取り組んでいました。まず、FunctionGemmaを使わずに関数呼び出し用にローカルで適応したいと思ったのです。うまくいった(ある程度)ので、そこから「思考」を追加することに移りました。データセットは手続き的に生成したものに加え、Qwen 3.6 35B A3B(Q4量子化)とGLM 5.1のものも少し混ぜています。
最大のハードルは、フォーマットを維持させる方法を突き止めることでした。私は学習データのために rank 24、最大長 768 を採用し、適切なタグを使わなかった場合に20倍の損失になるように損失関数をカスタムしました。それにより損失はおよそ7のあたりで推移しましたが、効果はちゃんと出ています。
もっと長い例を追加したいと思っていますが、私のRTX 3050 4GB Mobileではちょっと足りません。学習バッチサイズが1で、グラディエント蓄積ステップが2なので、これが私にできる最良のところです。
もう一つ面白い点として、Claude/Geminiが言っていたのは、より大きいgradient_accumulation_stepsは本質的にはバッチサイズが大きくなることを意味するが、実際にはバッチサイズを増やさない、ということでした。これは私の悩みの40%くらいを占めていて、モデルが完全に意味のないゴミを吐いたり、ランダムな中国語の文字の塊みたいなものが出てきたりしていました。
さて、これで全部だと思います。関連する学習パラメータはすべて以下です:
```
SFTConfig:
per_device_train_batch_size=1, gradient_accumulation_steps=2, per_device_eval_batch_size=1, learning_rate=1e-4, lr_scheduler_type="cosine", warmup_ratio=0.10, weight_decay = 0.1, load_best_model_at_end=True,
LoraConfig:
n_rank = 24 r=n_rank, lora_alpha=n_rank, target_modules=["q_proj", "v_proj", "k_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], lora_dropout=0.15, task_type="CAUSAL_LM",
```
あ、あと論文で推奨されていたとおり alpha をランクの2倍に増やしたら、なんだか全部が壊れてしまいました。これも、かなり突き止めるのが大変だった別の要因です。
今後も続けて、別のアイデアでいくつか追加のアダプタを学習するつもりです。十分なVRAMのあるカードを買ったら、Qwen 3.5 0.8Bに切り替えるかもしれません。どうなるかは分かりません。確実にやることの一つは、FunctionGemma用の「思考アダプタ」を作ることです。そうすれば、ある程度は関数呼び出しに関する私の問題が解決するはずです。
[link] [comments]


