はじめに
前回の記事 で書いたSRA(Synaptic Routing Architecture)というモデルに関して、興味深い現象を発見したので共有しておきます。
GitHub: SynapticRouter
概要
SRAモデルは、複数のシナプス(実体は小規模なTransformer等)を組み合わせたモデルです。詳しくは前回の記事を参照してください。
SRAモデルでは、シナプスごとに別々の専門知識を身につけていきます。
となると、特定の知識を持ったシナプスだけ破壊(学習のリセット)すれば、「ある知識は破壊できるけど、別の知識は残せるのではないか?」という疑問がわきますよね?
実際に試してみました。
実験の概要
今回の実験では、CopyとReverseという2種類のタスクを学習させて推論結果を出力させてから、Reverseに関連しているシナプスを破壊(リセット)しました。
その後、推論結果を出力させると、明らかにReverseの正答率が下がります。
実際に実行してみた結果が以下になります。
| 状態 | 📝 COPYタスク | 🔄 REVERSEタスク |
|---|---|---|
| 🛡️ 破壊前 (Before) | 100.0% | 94.6% |
| 💥 破壊後 (After) | 100.0% (無傷✨) | 63.9% (崩壊💦) |
乱数の関係で、実行ごとに数値の差が生じます。
余談(ちょっとした解説)
既存モデルの場合
もし標準的な Transformer の一部(特定の層や重み)をゼロで破壊した場合、ネットワーク全体が機能不全に陥り(破滅的忘却)、すべてのタスクが壊滅してしまいます。しかし SRA ではそうならないのは、見ていただいたとおりです。
SRAではなぜCopyタスクが壊れないのか
SRA では、ルーターが入力タスクに応じて使うシナプス(専門家)を動的に切り替えます。つまり、Copyタスクの処理ルートとReverseタスクの処理ルートが内部で完全に分離されているため、Reverse用のシナプスを破壊しても、Copy用のシナプスには全く影響が出ないのです。
で、どうやって破壊したのか
具体的には、Reverseタスクで最も頻繁に呼び出されるシナプスの重み(Weight)を、 tensor.zero_() で強制的にすべてゼロにするというハッキング的な操作を行いました。
Jupyterノートブック
どなたでも簡単に追試できるように、JupyterNotebook形式にしておきました。
以下のリンクで、実際にGoogle Colabを使って試してみることが出来ます。