ニューラルネットワーク型コンピューティングに向けたプログラムデザインについて
たまたまIBMが脱ノイマン型CPUを作ったというニュースを見て、いよいよ始まったかという気持ちになった。
でもPICのハーバード・アーキテクチャだとかPLCのサイクルコンピュータなど色々あり、これらも含めて
考え方のスケールを1つ上げて見ると、ニューラルネットワーク型CPUもノイマン型の派生品となるだろう。
さらに2015年6月1日にインテルはアルテラ社を買収したという事から、今後どういうコンピュータが生まれるかが想像できる。
インテルはCPU(ノイマン型)、アルテラはFPGA(ステートマシン型)、合わせるとサイプレス社のPSoC(ノイマン型+GALロジック)と似たものができる。
IBMはCPU設計のデザインを新しいニューロン型(ステートマシン型)にしたのに対して、インテルはハイブリッド路線に舵を切ったといえる。
インテルの場合は既存の資源が流用できる構図で進化するが、IBMは今までと違う進化なので下位互換は無いと思える。
そこでIBMのCPUが登場した時、プログラムはどういうアプローチになるのかを考えてみた。
ニューラルネットワークとは
https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF
簡単に言えば、人間のニューロンが数億個繋がったものを差す。
ニューロンは、1個の外部入力がありN個の値が異なる外部出力を行うもの。
当然ノイマン型でもコンピュータ5大要素で説明ができる。(それくらい影響力が強い)
プログラムデザインはどうなるのか
今回みた記事によると100万ニューロンがCPUになったというだけで、プログラミングはどういった手法で行うのかは書かれていない。
ここからは推測だが、PLCみたくラダーでステートマシンで表現する方法になるんじゃないだろうか。
ニューラルネットワークの解釈
ニューロンが1入力N出力であることから、それらを繋がったニューラルネットワーク自体も巨大な1入力N出力の塊であるといえるので、ニューラルネットワークは1つのニューロンと同等といえる。
内部構造は木構造で互いに接続しあう感じになり、ある入力からある出力までを1本道にして見た時、それはラダー図で表される。
ラダー図だとリレーのON/OFFしか情報がないから、カメラ画像を入力した時、出力結果は?って思う人もいるだろう。
そこはオブジェクト思考を取りいれて考えてみて欲しい。
リレーのON/OFFを1つのオブジェクトだとすると、カメラ画像も1つのオブジェクト。つまりラダー図で描かれているが流れてくるデータはオブジェクトである。
つまりプログラマが実装する場合は、ステートマシンで実装で完結する。
もし機械学習(パターンマッチング)を視野に入れた場合、すべての組み合わせの中から最適解を見つける事になるので、
すべての事象を含めた入力値を与えて、パラメータの最適値を見つけさせて、結果を出力させる、ということになる。
ここで1つポイントになるのが、しきい値。入力値に対して、条件式があってしきい値で分岐する。
これが階層Nを持ち、最終段で結果を得るとされるのだが、プログラム的に見て適正値であるかなんて判断が付かない。
どうすればいいか、インテルが買収したアルテラ社を思い出して欲しい。
フリップフロップ回路を構成する、AND、OR、NOT、NOR、NAND回路を登場させてみよう。
ロジック回路の最適解を求める方法は既存技術で利用されているものである。
入力値とパラメータのテーブルがあって、出力側に正解となる教師データを設定できる。
入力値は操作できないにしても、教師データ入力して、出力結果を人手で設定して正解を導いてあげることで、パラメータが確立され、ロジックを形成することができる。
インテルのアプローチを考えると、入力値には外部入出力の結果をすべてプロパティで表現できるモデル構造を構築しておくことで
教師データで得られたニューラルネットワークのロジック回路をCPUに内蔵したFPGA書いて、条件判断をさせ結果を書き込む。こういった事が考えられる。
インテル:CPU+FPGA方式
既存のプログラミング+FPGAで条件判断を専用ロジック化(数千クロックかかった処理を1クロックで結果出力に導くので超高速化が得られる)
void FPGA(Model);
FPGA内部には入力値パラメータと教師データで得られたロジック回路が入っている条件判断部
Modelにはプロパティには外部入出力と条件判断で使用するパラメータ。
IBM方式:PLC的なステートマシンで構築。
すべてのプログラムがケースツールで表現できるようになって、CPU自身が仮想の専用回路となるため、すべての動作が快適になる。
まとめると、 既存のノイマン式はあらゆる事が自在にできる構造だったが、
言語の進化と共にハードウェアを抽象化してプログラマが直接操作できないようになってオーバーヘッドが生じていくらCPUが早くなっても速度が変わらない問題が発生している。
そこでGPCPUのように単純な演算は専用回路でやった方が早い、そんなアプローチが出始めてきた現在、その延長線上に今回のIBMやインテルの技術の進化がある。
どのように進化するかといえば、原点回帰ともいえるハードウェアに近いレイヤーでプログラミングするという手法になっていくと考えられる。
実現方法はまだ模索している段階で、ビジネスとして成功する鍵は速度はもちろん既存技術が流用できるかである。
インテルは既存技術の組み合わせで、汎用CPUと専用ロジックのハイブリッドで高速化。
順当な進化ともいえる。
IBMはCPUの構造に手を加えて、条件命令と外部入出力をまとめたモデルオブジェクト用の宣言命令だけになって、ノイマンの無限のチューリングマシンから
CPUサイズによってできる事が決まる有限のチューリングマシンになって、今のCPUでいうスレッド数だとかメニーコアの概念から外れてGPUみたく処理ユニット数(ニューロン数)で数えられるようになるんじゃなかろうか。
既存技術からはだいぶ離れた位置に存在していて、x86からx64へ以降した以上の摩擦が生じることだろう。
ただし、こういった考えはCPUに役目を与えていくプラグイン方式なので、汎用OSの役目はモデルのタスクマネージャーとコンパネでモデルオブジェクトの管理とGUI環境、つまり今と見た目は変わらないけどCPUアーキテクチャは進化を遂げてることができる。
どちらも共通することは外部入出力の扱い方で、すべての事象をまとめたモデルを宣言し、入力値とすることで、教師データによって入力・出力値のテーブルが構築でき、機械的にロジックの最適解を求めていく、またはロジックを書いていく構造になるんだろう。
0 件のコメント:
コメントを投稿