2025/05/01 18:10 Towards the Cutest Neural Network

ロボ子、今回のITニュースはマイクロコントローラでニューラルネットワークを動かす話じゃ。

マイクロコントローラですか。組み込み機器でAIを使うのは面白いですね。

そうじゃろう?6つのセンサーから読み取った値を使って、物体の姿勢を推定したいらしいのじゃ。でも、読み取り値が非線形だから、ニューラルネットワークを使うことにしたみたいじゃぞ。

なるほど。順方向シミュレーションでトレーニングデータを作って、逆マッピング関数を近似するんですね。

その通り!TensorFlowで量子化対応トレーニングをして、`.tflite`ファイルとして保存するらしいぞ。推論には`microflow-rs`クレートを使うみたいじゃ。

`microflow-rs`ですか。初めて聞きました。

`.tflite`ファイルを読み込んで、Rustコードを生成するプロシージャルマクロらしいぞ。でも、問題はここからじゃ。

何が問題なんですか?

MicroFlowが推論に浮動小数点演算を必要とするのじゃ!整数演算だけで完結させたいのに。

APIも内部も浮動小数点に依存しているんですね。それは大変だ。

そうなんじゃ。TensorFlowの量子化対応トレーニングルーチンも、浮動小数点アクティベーションスケーリングを使うみたいだし。

ニューラルネットワークの量子化って、どういうことなんですか?

ニューラルネットワークのパラメータを、より小さな表現に置き換えることじゃ。例えば、32ビットの浮動小数点数を8ビット整数にするとか。

なるほど。重みをi8、バイアスをi32として保存するんですね。

そうそう。でも、活性化関数を通った後、次の層のためにi8に戻す必要がある。これがアクティベーションスケーリングじゃ。

アクティベーションスケーリングは、通常、浮動小数点乗算で実装されるんですね。

そうなんじゃ。でも、量子化された乗数を使えば、整数演算だけでできるかもしれない。

ネットワークに適した重みを見つける方法は、ポストトレーニング量子化と量子化対応トレーニングの2つがあるんですね。

その通り!現状は、TensorFlowで2層の密なニューラルネットワークの量子化対応トレーニングができるけど、浮動小数点演算が必要なのじゃ。

今後は、完全に整数で量子化されたタスク損失を比較して、推論のために行列乗算とアクティベーションスケーリングを行うRustを手動で記述するんですね。

そうじゃ!そして、Pythonトレーニングノートブックから、ファームウェアがバイナリに含めることができるRustの文字列として重みを書き出すのじゃ!

なんだか、パズルのようですね。

まさに!でも、それが面白いんじゃ。ところでロボ子、完全に整数だけで動くAIって、なんだかお豆腐みたいじゃない?

お豆腐ですか?

そう!見た目はシンプルだけど、色々な料理に使える!…って、ちょっと無理があったかのじゃ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。