FPGAでNeural Networkをフルスクラッチ実装している

まだまだ先は長いけれど。

誤差伝搬法のforward, backwardをVHDLで実装中で、forwardのところは、要素要素の部分についてはだいぶ形になってきて、あとは組み立てる作業をやっている。 ゼロから作るDeep Learning をそこそこ参考にしている。

データはMNISTの例の数字の画像のやつで機械学習させることを目標地点としている。

目下の悩みとしては、どのようなsequential logicにすればいいのか? MIPS architectureとかだと、教科書参考にしたこともあり、レジスタの配置についてはあまり考える部分ではなかったが、今回、入力データがそこそこ多いので、全部の入力データを一度にportで受ける訳にはいかない。そこで、clockで細かく切っていきつつ、sequentialに計算させる必要がありそうだ。

今の所、画像一枚ずづ読み取ってNNでforwardするのをclockの単位としているが、それだと、ユニットが大きすぎるかもしれない。

あとは、

  • 1d-array(array(natural range<>) of std_logic_vector(SIZE-1 downto 0)のこと)は、in portの型として許容されるのか

  • 重み行列をportで受けるとサイズが大きすぎで死にそうなので、memoryの読み書きで対応するべきところだよなぁ

とかいっぱい修正したい部分がある。

とりあえず、全くの白紙からそれっぽいのを作りつつあるので、まずは動くように持っていきたい。