Open yoheikikuta opened 6 years ago
この論文は twitter かどっかで見かけた。 自分がすぐに使うことはなさそうだが、発想は面白そうだと思い、誰か解説してるのはないかなーと思ったけど自分の観測範囲ではなかった。 まあ自分で読むのが早かろうということでちょっと読んでみる。
Rayleigh-Sommerfeld の回折の式などが出て、レーザー物理とか光学系のことを勉強した時にやったことあるなぁという感じのものがちょこちょこ出てくる。
左が DDNN で右が普通の DNN である。 まず bias の与えられ方が異なる。普通は bias 項を加えるが、DDNN ではこれはニューロンの位置での二次波の回折が掛け算で効いてくる(論文では multiplicative bias と呼ばれている)。 weight が光の干渉によって表現される。すなわち layer 毎にどんな位置で光を透過させるかを調整することで干渉具合を変えて重みとしての効果を実現するというわけである。 回折の式はよく知られているし、逆問題としてもよく知られていて、出力の結果から back propagation で少しずつ回折などを update していくことができるという算段である。
干渉とか使うし当然だが、重要なこととして、光は ampitude と phase で表現されるもので、複素数として扱われる。
学習のときは数値シミュレーションによってこの構造を決定し、一旦決まった後は 3D プリンターで実際に制作して、あとはそれを推論に使うという具合である。
面白いのは推論時には文字通り光の速さで推論ができるということだ。
当然、入力をどうやって準備するかとか、光学的に安定している条件が必要だとか、3D プリンタで制作するときに精度の問題で誤差が出たりとか、色々大変なことはあるが、このアイデアは賞賛されるべきだろう。面白い。
論文に出てくる数式はそんなに難しいものではないが、光学をやったことがなければ理解するのは結構厳しそう。ちなみに論文では透過波のみを使ったネットワークを解説している。
l 番目の layer の $ (x_i, y_i, z_i) $ にあるニューロンは二次波の光源として、以下の optical mode で構成される。λ は波長で j は虚数(工学系だ!)。
式から明確だが、 z 方向が layer を重ねる方向となっている。
これが理解できればあとは入力波 $ \sum_k n_k^{l-1} $と透過係数 $ t_i^l $ を使って以下が得られる。
phase のみに注目した定式化をするために、光学的なロスはないとして透過係数の amplitude を 1 に固定するが、discussion でも述べられているように、実際はそうではなく、ニューロンのところで吸収されたりもする(それは dropout や!とかも言ってる。まあそうだな)。
普通の DNN と違うところ
MNIST を 5 layers network で解く。以下のモデルが得られる。
これを使った実験装置の概要が下図。いかにも光学実験ですという感じでいいね。全く関係ないが大学の物理実験で一番面白かったのは光学実験だったことを思い出す。
ちなみに予測は各数字に対応した領域に光が集まるように設計することで実施する。 こうやって解いた結果が最初に載せた図で、数値シミュレーションではテストデータで 95.08% という中々の数字を叩き出している。
他にも色んなことが書かれているが、自分が知りたいと思うことは大体知れた気がする。
時にこの論文は See the Methods section for further details
と言っているけどそれが書いてないんだが... なので確かに細かいところ(例えば loss function が具体的にどうなっているのか)などがわからない。
論文リンク
https://arxiv.org/abs/1804.08711
公開日(yyyy/mm/dd)
2018/04/14
概要
Diffractive Deep Neural Network という、光の回折と干渉によって neural network をモデル化し、実際に 3D プリンターでそのような光学系を作って推論を可能にしたという論文。 各ニューロンを二次波のソースだと捉え、透過波や反射波を定式化。 入力(MNISTなら数字の部分をくりぬいたものに対して光を照射した回折光)に対して出力が対応する領域(数字の1ならこの領域、他の数字なら他の領域)に集まるように構造(layerのどのあたりに穴を開けるか)を学習し、その結果を3Dプリンタで出力することで実際に物理的な光学系ネットワークを作る。 MNISTで良い結果(下図)。左が50個の数字を実際に3Dプリンタで作成した結果で、右が10000のテストデータに関する数値シミュレーション。