記事についてのディスカッション

 

新しい記事「ニューラルネットワークが簡単にできるように(その5).OpenCLでのマルチスレッド計算」はパブリッシュされました:

ニューラルネットワークの実装のいくつかのタイプについては、これまで説明してきました。 これまで考慮されたネットワークでは、各ニューロンに対して同じ操作が繰り返されます。 さらに論理的な進展としては、ニューラルネットワークの学習プロセスを高速化するために、現代の技術が提供するマルチスレッドコンピューティング機能を利用することです。 可能な実装の1つは、この記事で説明しています。

どの技術を使うかは選択しました。 あとは、計算をスレッドに分割する処理を決める必要があります。 フィードフォワードパス中の完全接続パーセプトロンアルゴリズムを覚えていますか? シグナルは、入力層から隠しレイヤーへ、そして出力層へと順次移動します。 計算は順次実行されなければならないので、各レイヤーにスレッドを割り当てる意味がありません。 レイヤーの計算は、前のレイヤーの結果を受信するまで開始できません。 ある層の個々のニューロンの計算は、その層の他のニューロンの計算結果には依存しません。 各ニューロンに別々のスレッドを割り当てて、あるレイヤーのすべてのニューロンを並列計算のために送ることができるということです。  

完全に接続されたパーセプトロン

1つのニューロンの動作にまで踏み込んで、入力値の重み係数による積の計算を並列化することも考えられます。 しかし、結果として得られた値のさらなる集計と活性化関数値の計算は、1つのスレッドにまとめられています。 これらの操作をベクトル関数を使って1つのOpenCLカーネルで実装することにしました。

作者: Dmitriy Gizlyk