目次
背景
- Xで論理ゲート型ニューラルネットワークがタイムラインに流れてきた
- 気になったので、AIに調べてもらってMNISTで試してみた
仕組み
論理ゲート型ニューラルネットワーク(Differentiable Logic Gate Networks)とは
- 通常のニューラルネットは、重み付き和と活性化関数の組み合わせでニューロンを構成する
- 一方、論理ゲート型ニューラルネットワークは、AND・XORといった実際の論理ゲートそのものをニューロンとして使う設計
- 推論時には本物のブール回路として動作するため、浮動小数点演算が不要になり、圧倒的に高速・省電力な推論が可能になるというのが最大の魅力
通常のニューロンとの違い
違い:
- 通常のニューロン:
- 入力$x$に対して$y=f(w\cdot x+b)$(重み付き和+活性化関数)を計算する
- 論理ゲート型のニューロン:
- 2つの入力$a,b$(0か1の値)に対して、AND・OR・XORなどの論理ゲートをそのまま適用する
つまり、学習によって最適化される対象が「重み$w$の値」ではなく「どの論理ゲートを使うか」に変わる。
16種類の2入力論理ゲート
- 2値の入力$a,b$の組み合わせは$(0,0),(0,1),(1,0),(1,1)$の4通りある
- それぞれに0か1を割り当てる関数は$2^4=16$通り存在する
全16種類論理ゲート:
- AND・OR・XOR・NAND・NOR・XNOR
- TRUE(常に1)・FALSE(常に0)
- $A$・$B$
- $\lnot A$・$\lnot B$
- さらに4つの非対称なゲート($A \land \lnot B$等)
微分可能な緩和
離散的な論理ゲートはそのままでは微分できず、勾配降下法で学習できない。そこで、実数値$[0,1]$上のファジー論理(t-norm/t-conorm)を使って各ゲートを連続的に緩和する。
- $\mathrm{AND}(a,b) = ab$
- $\mathrm{OR}(a,b) = a+b-ab$
- $\mathrm{XOR}(a,b) = a+b-2ab$
- $\mathrm{NAND}(a,b) = 1-ab$
といった形で、16種類全てのゲートに実数値の緩和版を用意する。各ニューロンは、この16種類のゲートに対する学習可能な重みベクトル$w\in\mathbb{R}^{16}$を持ち、ソフトマックスで確率分布$p=\mathrm{softmax}(w)$に変換する。ニューロンの出力は、16個の緩和ゲート出力$f_i(a,b)$の確率加重和として計算される。
$$ y = \sum_{i=1}^{16} p_i \, f_i(a,b) $$これにより、ゲートの選択そのものが確率分布として微分可能になり、通常の誤差逆伝播で学習できるようになる。
学習と離散化
- まず、このソフトな(確率的な)ネットワークを通常の勾配降下法で学習する
- 学習後、各ニューロンは最も確率の高いゲート($\arg\max_i p_i$)に離散化され、接続も固定される
- 結果として、実際に動作するブール回路(本物のAND・XOR等の組み合わせ)が得られる
- 元の提案論文では、ソフトな状態での精度と、離散化後の精度の差は0.1%未満に収まると報告されている
ネットワーク構造
論理ゲート型ネットワークは全結合ではなく、疎な結合を持つ。各ニューロンは前の層のちょうど2つのニューロン(または入力)にランダムに接続され、この配線は初期化時に決まり学習中は変化しない。学習によって最適化されるのは、あくまで各ニューロンのゲート選択の重みだけになる。
研究の系譜
Deep Differentiable Logic Gate Networks(NeurIPS 2022)
この設計を提案した最初の論文が、Felix Petersen, Christian Borgelt, Hilde Kuehne, Oliver DeussenによるDeep Differentiable Logic Gate Networks(arXiv:2210.08277)。
- MNISTにおいて、単一のCPUコア上で1秒間に100万枚以上の画像を処理できる推論速度を報告している
- UCIのAdultやBreast Cancerのような表形式データでも、ロジスティック回帰や小型ニューラルネットに匹敵する精度を、ナノ秒オーダーの推論時間で達成している
- 一方、CIFAR-10については、この時点では畳み込み構造を持たない小規模なネットワークしか試されておらず、精度はCNNに遠く及ばない水準に留まっていた
Convolutional Differentiable Logic Gate Networks(NeurIPS 2024, Oral)
続く論文Convolutional Differentiable Logic Gate Networks(Petersen, Kuehne, Borgelt, Welzel, Ermon、arXiv:2411.04732)では、論理ゲート型ネットワークに畳み込み構造を導入している。
- 論理ゲートを木構造に組み合わせた畳み込みカーネル
- 通常のmaxプーリングに相当する、微分可能な緩和版の論理ORプーリング
- 深い層でも学習が安定するような、恒等写像に近い初期化
これらにより、CIFAR-10において86.29%の精度を、わずか6,100万個の論理ゲートで達成したと報告されている。これは、同等の精度を持つXNOR-Net(2値化ニューラルネットの代表的手法)と比べて、29倍小さい構成だとしている。
実装
Petersen自身が公開しているPyTorchベースのライブラリdifflogic(GitHub、MITライセンス)が、上記の手法の公式実装として利用できる。
限界・課題
- 緩和されたブール演算を何層も重ねると、勾配が消失しやすくなる
- ソフトマックスの温度に敏感で、低すぎると数値が不安定になり、高すぎると勾配の信号が弱くなる
- ソフトな学習時と、離散化した推論時との間のギャップ(discretization gap)が、設定によっては完全には解消しない場合がある
- 各ニューロンで16種類のゲート関数を毎回評価する必要があるため、通常のネットワークより学習コスト自体は高くなりやすい
- 単純に層を深くするだけでは精度が向上しないという「深さのスケーラビリティ」の問題が、2025〜2026年の後続研究でも指摘されており、まだ解決していない課題として残っている
実際にMNISTで論理ゲートCNNを作ってみた
理論の紹介だけで終わらせず、実際に手元で学習させて、回路にまで変換してみた。
前提知識
FPGAとは
- Field-Programmable Gate Arrayの略で、製造後に内部の論理回路を何度でも書き換えられる集積回路
- 基本単位はLUT(後述)で、これを大量に組み合わせて任意の論理回路を実現する
- 配線を固定して製造するASIC(特定用途向け集積回路)と違い、量産前の検証や、少量生産、頻繁な設計変更が必要な用途に向く
LUT(Look-Up Table)とは
- FPGAの中で実際に論理演算を行う、最小単位の回路
- 入力の組み合わせパターンに対して、あらかじめ設定しておいた出力を返す、小さなメモリのようなもの
- 一般的なFPGAでは4入力LUTが基本単位で、これを大量に組み合わせることで複雑な回路を実現する
- FPGAの規模は、このLUTを何個持っているかでおおまかに表される(例: 数千LUT程度の小型FPGAから、数十万LUT級の大型FPGAまで)
RISC-Vとは
- カリフォルニア大学バークレー校で開発された、オープンでロイヤリティフリーの命令セットアーキテクチャ(ISA)
- ARMやx86と違い、誰でも自由に実装・改変・製造できる
- PicoRV32のような、FPGA上にLUTの組み合わせとして実装できる、軽量な「ソフトコア」実装も複数公開されている
Verilogとは
- デジタル回路の構造や動作を記述するための、ハードウェア記述言語(HDL)の一つ
- 記述したVerilogコードは、Yosysのような論理合成ツールによって、FPGAやASIC向けの実際の回路(ゲートの接続情報)に変換される
- 論理ゲート型ニューラルネットワークは、学習後にそのまま本物の論理回路になるため、このVerilogへの変換と相性が良い
使ったライブラリ
- 論文の公式実装
difflogicには、実はConvolutional版(2024年論文)のコードは含まれていない - 代わりに、
difflogicを拡張したtorchlogix(ligerlac/torchlogix、MITライセンス)を使用。LogicConv2d・OrPooling2d・LogicDense・GroupSumといった、畳み込み版に必要な部品が揃っている - 学習済みモデルを、そのまま
CやVerilogのコードにコンパイルできるCircuitという仕組みも内蔵している
実験結果
3種類の構成でMNISTを学習させ、離散化した状態(discrete、実際の回路と同じ精度)での結果を比較した。
| 構成 | クラス数 | イテレーション数 | ゲート数(simplify後) | 精度(discrete) |
|---|---|---|---|---|
| カーネル4・隠れ層100 | 2(0 vs 1) | 600 | 973 | 99.27% |
| カーネル8・隠れ層400 | 10(0〜9) | 3,000 | 2,961 | 66.9%(頭打ち) |
| カーネル16・隠れ層4,000×2 | 10(0〜9) | 30,000 | 12,207 | 94.85% |
- 2クラスの最小構成は、973ゲートという小さい回路で99.27%まで到達できた
- 同じ発想のまま10クラスに拡張すると、隠れ層400ゲートでは66.9%で頭打ちになった。原因は最終層の「投票権」不足で、400ゲートを10クラスで分け合うと1クラスあたり平均40ゲート程度しか使えない
- 論文のデフォルトに近い規模(カーネル16枚・隠れ層4,000ゲート×2層)まで増やすと94.85%まで伸びた(論文の元の学習では、学習率スケジュールを使ったさらに長時間の学習で精度を詰めている)
つまり、少ないゲート数で済ませようとすると、クラス数が増えるほど精度が頭打ちになりやすい。
Verilogへの変換とFPGAとの相性
torchlogixのCircuitは、学習済みモデルをそのままget_verilog_code()で実際のVerilogコードに変換できる- 0 vs 1モデルの973ゲートという規模は、Lattice iCE40 UltraPlus(2,800〜5,280 LUT)のような小型FPGAに、RISC-Vソフトコア(PicoRV32など)と同居させられる可能性がある規模
- 一方、10クラスモデルの12,207ゲートは、この小型FPGAには収まらない規模になる
考察
パラメータ数と効率の関係
- 同じ精度を出すのに必要なゲート数は、通常のニューラルネットの重みの数より多くなりやすい
- 一見非効率に思えるが、1つの論理ゲートは2入力・16種類のどれかを選ぶだけの最小単位の回路である一方、通常のニューラルネットの1つの重みは、実際にハードウェア化すると乗算器・加算器を必要とする、桁違いに高コストな回路になる
- CIFAR-10の86.29%・6,100万ゲートという構成が、同等精度のXNOR-Net(2値化ニューラルネット)より29倍小さいという結果は、この「1ユニットあたりのコストの差」が「ユニット数の差」を上回ることを示している
大規模モデルへの適用の限界
- 数十億パラメータ級の大規模言語モデルをこの手法で論理ゲート化できないか、という話も出たが、現実的ではないという結論になった
- 理由は規模だけでなく、Attention(可変長系列に対するsoftmaxでの重み付け)やLayerNormのような、固定サイズの2入力論理ゲートでは表現しづらい演算が中心にあるため
- 今のところこの手法が実証されているのは、畳み込み+全結合で表現できる、固定サイズの分類問題に限られる
まとめ
- 論理ゲート型ニューラルネットワークは、重み付き和ではなく実際の論理ゲートをニューロンとして使う設計
- 学習時は16種類のゲートを確率的に混合する微分可能な緩和を使い、学習後は最も確率の高いゲートに離散化して本物のブール回路にする
- 推論時は浮動小数点演算が不要になるため、MNISTでは単一CPUコアで毎秒100万枚以上という圧倒的な速度を達成している
- 畳み込み構造を導入したConvolutional版では、CIFAR-10でも86.29%という実用的な精度に、XNOR-Net比29倍小さい構成で到達している
- 実際に
torchlogixでMNISTの2クラス識別を試したところ、973ゲートで99.27%を達成できた一方、10クラス全部では小さい構成だと精度が頭打ちになり、クラス数とゲート数のトレードオフを実感した - 一方で、深さのスケーラビリティや学習の不安定性、Attentionのような演算への非対応など、まだ発展途上の課題も残っている
参考文献
- Petersen, F., Borgelt, C., Kuehne, H., Deussen, O. (2022). “Deep Differentiable Logic Gate Networks.” NeurIPS 2022. arXiv:2210.08277
- Petersen, F., Kuehne, H., Borgelt, C., Welzel, J., Ermon, S. (2024). “Convolutional Differentiable Logic Gate Networks.” NeurIPS 2024 (Oral). arXiv:2411.04732
- difflogic - GitHub
- “Mind the Gap: Removing the Discretization Gap in Differentiable Logic Gate Networks”
- “On the Depth Scalability of Logic Gate Networks”
- torchlogix - GitHub
