以下、本発明に係る実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
以下に説明する発明の構成において、同一部分又は同様な機能を有する部分には同一の符号を異なる図面間で共通して用い、重複する説明は省略することがある。
実施例中、等価とみなせる構成要素が複数個存在する場合には、同一の記号や番号に添え字を付けて区別することがある。ただし、特に区別する必要がない場合は、添え字を省略して記載することがある。
本明細書等における「第1」、「第2」、「第3」などの表記は、構成要素を識別するために付するものであり、必ずしも、数または順序を限定するものではない。また、構成要素の識別のための番号は文脈毎に用いられ、一つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
図1Aで本実施例の基本概念を説明する。複数の端末とサーバとの間での階層的なDNNを構成する場合、最もシンプルな例としては、図1A(A)に示すような、サーバ側で学習を実施し、その学習結果を端末側へ送り、端末側で認識を実施するシステムであろう。しかし、本願発明者らがDNNの検討を進めた際、認識部でのDNN演算の中間データを活用することで、上位のサーバ側での学習が効率化することを見出した。
すなわち、図1A(B)に示すように、端末側のデータを活用しながら、端末側の入力データや端末側で認識を実施している際のDNNの中間層データをサーバ側へ送り、サーバ側で学習を実施し、サーバでの学習結果をしかるべきタイミングで、端末側へ送信し端末での認識動作を進めることである。サーバ側のDNNの入力は、端末のDNNの中間層のデータ出力を用い、それぞれの階層においてDNNで学習することである。学習方法としては、端末のDNNの教師有り学習を行った後、サーバのDNNの教師有り学習を行う。
端末側のDNN装置は、小型、小面積、低電力なデバイスで構成し、サーバ側のDNN装置は、高速演算かつ大容量メモリを有する、いわゆるサーバで構成する。
図1Bは本願発明の主たる実施の形態を示す図である。図1B(a)には、複数の機械学習装置(DNN1-1〜2-1)で構成されるシステムを示している。機械学習装置において、nd011 〜 nd014, nd021 〜 nd024, nd031 〜 nd034 で示される経路は各ニューラルネットの階層を接続する経路を示している。
本実施例では、システム構成として、第一の階層(1st HRCY)の機械学習・認識装置と第二の階層(2nd HRCY)の機械学習・認識装置が階層的に接続されている。各機械学習・認識装置DNNは、入力層IL,中間層HL,出力層OLを備える。さらに、第一階層機械学習・認識装置と第二階層機械学習・認識装置との接続として、第一階層機械学習・認識装置を構成するディープニューラルネットワークにおいて、認識時の出力層OLのデータではなく、認識処理中に生成される、いわゆる隠れ層と呼ばれる中間層HLのデータ(nd014,nd024)を第二階層機械学習・認識装置の入力としている。
一般に、出力層OLからのデータは、あらかじめ分類されたカテゴリごとに認識結果をヒストグラム等で提示するデータとして出力され、入力データが認識の結果どのように分類されたかを示すデータで構成される。中間層(隠れ層)HLからのデータは、入力データの特徴量を抽出したデータである。本実施例で、この中間層データを活用する理由は、この中間層データは、入力データの特長が抽出されたデータであり、第二階層機械学習・認識装置での学習における質の良い入力データとして利用できるからである。
第二階層学習・認識装置から第一階層学習・認識装置への信号(nd015,nd025)は、第一階層学習・認識装置のネットワークや重み、もしくは、それらの変更を指示する信号等である。これは、第一、第二のそれぞれの階層での学習・認識における処理において、第一階層学習・認識装置の認識ネットワークの変更が必要となった際に、変更信号が発行される。これにより、実運用状況において、第一階層学習・認識装置の認識率を向上させることが可能になる。
深層型ニューラルネットワーク(DNN)は、様々な方式が提案されているが、近年、もっとも活発に研究されているものとして、畳込型ニューラルネットワーク(CNN: Convolutional Neural Network)というものがある。このCNN型ネットワークでは、隠れ層に相当する部分について、元画像の一部を切り出して(カーネルと呼ぶ)、それと同じ画像サイズの重みフィルタとの画素単位の積和演算により、いわゆる画像の畳込みを実施した後、さらにその画像を粗視化するプーリング演算を実施して、より小型の複数のデータを生成することが特徴である。隠れ層には、元画像の特長となる情報が効率的に抽出されていることが特徴である。
発明者らは、機械学習におけるデータの変換を検討していく上で、例えば、CNNの隠れ層に現れる特徴が抽出されたデータをうまく活用することで、学習の効率化ができることを見出した。
例えば、画像認識学習を考える。画像データは、一般的に、人間が見れば、そこに表されているものの意味を理解できるものであっても、機械にとってはなかなか意味をくみ取ることが難しいことが多い。上記の隠れ層のデータは、重みデータとの畳み込み演算や周囲の画素の間との統計処理による粗視化により情報を圧縮すると同時に、その画像の特長を際立たせて示すように処理されることが特徴である。CNNでは、そのような特徴抽出過程を複数持たせることで、特徴量を際立たせることができ、その特徴量を処理することで画像の判断が高確率で正解に近付けられる特徴がある。十分に学習された認識装置であれば、中間層のデータは特徴を際立たせた価値のあるデータとも言える。
学習においては、大量のデータを用いることが重要と言われており、効率的な学習においては、一般的に、
(1)学習を実施するための十分な入力データが揃っていること
(2)ニューラルネット型学習機であれば、ニューロン数に比例した演算が必要であり、計算資源(演算性能、ハード規模等)が潤沢であること
が重要視される。
一方で、IoTへ適用するに当たって、端末側の状況は刻一刻と変化するので、組み込み側システムとの連携を考える上では、
(3)柔軟な適応(低レイテンシ、高速フィードバック)
等の要件も必要である。しかも、IoTとして、多数の端末を考える上では、
(4)いわゆる複雑系としての対応が必要となる。
本実施例にて説明されるように、第一階層1st HRCYと第二階層2nd HRCYを設けることによって、例えば末端側の第一階層では、上記(3)の要件を満たすべく、低レイテンシ、高速フィードバックが可能な小型でかつ機能の制限がなされた機械学習・認識装置で構成する。第二階層では、高性能CPU等を具備し、大容量のメモリシステムを使うことができる計算資源を利用することができるので、上記(2)の要件も満たされる。
図1B(b)には、第一階層と第二階層に用いる4種類のハードウエアの組み合わせ構成例を示している。これらの例では、第二階層側のハードウエア規模を第一階層側より大きくしている。ハードウエア規模が大きい場合には、一般的に、より情報処理能力が高くなる。
また、複数の第一階層機械学習・認識装置の隠れ層のデータを用いて、第二階層機械学習・認装置での学習を実施することで、各第一階層機械学習・認識装置からの情報を使い、それらの最適化を機械学習で実現できるので、上記(4)の要件も満たされる。しかも、複数の第一階層の機械学習装置からの特徴が効率的に抽出されたデータを入力として活用することができるので、第二階層での学習は、従来の、入力データを用いる第一階層での認識と同様な学習と比較して、前出の要件(1)について質的な改善ができる。第一階層機械学習・認識装置の出力層ではなく、隠れ層から値をとることにより、より多くの情報量が第二階層機械学習・認識装置の入力となるからである。
第一階層機械学習・認識装置と第二階層機械学習・認識装置は、それぞれ学習機能を持たせることができる。一例として、第一階層機械学習・認識装置にて教師有り学習を行った後、第二階層機械学習・認識装置の教師有り学習を行う。このようにすることで、全体を一つのDNNとするよりも学習が容易である。しかも、第二階層機械学習・認識装置の学習は、他の第一階層機械学習・認識装置からのデータも入力データとしながら実施できるので、データ量の効率的な積み増しが可能となり、学習効率と学習成果の向上が実現できる。
また、第二階層機械学習・認識装置では、第一階層機械学習・認識装置で演算された隠れ層の値を入力として教師有り学習を行うので、第二階層機械学習・認識装置において学習を繰り返し行う際に、第一階層機械学習・認識装置にて再度演算実行する必要がない。したがって学習時の演算量が小さくできる効果もある。
図2は、第一階層機械学習・認識装置(DNN1)の具体的構成を示したものである。図2(A)に示すように、一般に、ニューラルネットワーク型の機械学習・認識装置は、入力層IL1のノード(i1〜iL)、出力層OL1のノード(o1〜oP)、そして、隠れ層HL11〜HL13の各ノード(n2 1〜n2 M、n3 1〜n3 N、n4 1〜n4 O)で構成され、各ノード間の接続は、図2(B)に示すように、ni jとni+1 kとの接続には、重みwi j、kと入力ノードni jとの算術演算(AU)が入る。
DNNネットワーク構成制御部(DNNCC)はDNNのネットワーク構成を制御する制御回路である。ニューラルネットワーク構成情報データ伝送線(NWCD)や重み係数変更線(WCD)の情報としての、DNNコンフィギュレーションデータを格納し、必要に応じてその情報をDNN装置に反映させる。このコンフィギュレーションデータは、後述するFPGA (Field Programmable Gate Array)を活用する場合には、いわゆるコンフィギュレーションメモリに対応させることができる。
DNNネットワーク構成制御部(DNNCC)は、第二階層機械学習・認識装置(DNN2)と通信がを可能である。DNNコンフィギュレーションデータの内容を第二階層機械学習・認識装置に送信することができ、また、第二階層機械学習・認識装置からDNNコンフィギュレーションデータの内容を受信することができる。通信のためのデータについては、後に図3Bで説明する。
また、データ蓄積メモリ(DNN_MIDD)は、ニューラルネットワークの各層のデータを保持し、第二階層機械学習・認識装置へ出力する機能を持つ。図1Bの例では、nd014、nd024のデータを第二階層機械学習・認識装置へ送信する形で述べたが、図2(A)の例では、各層のデータnd011〜nd016をデータ蓄積メモリ(DNN_MIDD)に保持できるようにしておくことで、入力層、中間層、出力層のうち任意の層のデータnd011〜nd016を第二階層機械学習・認識装置へ送信することができ、柔軟なシステム設計ができる。
図1Bには明に記載しなかったが、学習を実施する上では、学習モジュール(LM)が必要である。これは、一般に教師あり学習と呼ばれる公知技術になるが、DNN1で演算した結果の出力結果が、正解と考えられる、いわゆる教師データ(TDS1)と比較してどれだけずれているかを評価することが重要で、そのずれ量をもとに、ニューラルネットワークの重み係数を変更していくことが学習である。図2では、誤差検出部(DD:Deviation Detection)部にて、DNN1の演算結果と教師データ(TDS1)を突き合わせ誤差量(DDATA)を算出し、必要に応じて正解情報との比較結果情報や認識結果レーティング情報を生成、記憶する。その結果に基づいて、重み係数調整回路(WCU:Weight Change Unit)にて重みを決定、格納し、重み係数を重み係数変更線(WUD)にて設定し、各ニューラルネットワークni jとni+1 kとに定義される重みwi j、kを変更する。
図3Aは第一階層機械学習・認識装置(DNN1)の他の構成例である。図3Aに示すように、機械学習の対象によっては、認識処理(Recognition)を進めた最終段出力層OL1のデータを入力として、認識演算の逆演算(Learning)を実施し、入力層IL1まで戻して誤差検出部(DD)で演算する、いわゆる逆プロパゲーション手法も存在する。この場合、教師データが入力データ(i1〜iL)自身で実現できるので、新たに教師データを準備することなく、対象とする入力データと逆プロパゲーションで生成されたデータとを比較することで適宜状況に応じた認識の性能を実現できる効果がある。
これらの学習モジュール(LM)は、敢えて設けない設定も可能である。それは、第一階層機械学習・認識装置は非常に制限された演算資源での運用が必要となる場合が想定されるので、認識処理に特化したハード構成にしておくことが望ましい場合があるからである。その場合でも、教師データとの突き合わせにて誤差の単純評価は可能であり、その結果得られる認識に対する認識結果のスコア情報を、例えばデータ蓄積メモリ(DNN_MIDD)の一部に保持しておくことは効果的である。なぜなら、そのスコア情報が悪いデータ処理に関するデータ(ニューラルネットワーク構成情報、重み係数情報、入力データ、中間データ、スコア情報等)をしかるべきタイミングで第二階層機械学習・認識装置へ送信し、第二階層での効率的な学習によって、第一階層機械学習・認識装置を再構成することも可能である。
構成例としては、第一階層機械学習・認識装置(DNN1)は、認識処理を実施すると同時に、認識処理の認識結果のスコアを記憶する手段を設け、認識結果があらかじめ決められたしきい値1よりも大きくなった場合、もしくは、あらかじめ決められたしきい値2よりも小さくなった場合、もしくは、認識結果のヒストグラムを作成した際に分散があらかじめ決められた値より大きくなった場合に、第二階層機械学習・認識装置に対して、第一階層機械学習・認識装置のDNNのニューラルネットワーク構造および重み係数に対して更新リクエスト信号を送信する更新リクエスト送信手段を設ける。
第二階層機械学習・認識装置(DNN2)は、第一階層機械学習・認識装置の更新リクエスト信号を受取ると、第一階層機械学習・認識装置のDNNのニューラルネットワーク構造および重み係数の更新を実施し、その、更新データを第一階層機械学習・認識装置へ送信する。第一階層機械学習・認識装置(DNN1)では、更新データをもとに、新たなニューラルネットワークを構築する。
図2(A)、図3Aは第一階層機械学習・認識装置(DNN1)の具体例を示した。第二階層機械学習・認識装置(DNN2)も基本的な構成は同様である。ただし、第二階層機械学習・認識装置(DNN2)の入力としては、第一階層機械学習・認識装置(DNN1)の隠れ層HLからのデータを用い、教師あり学習を行う。また、第一階層機械学習・認識装置(DNN1)のDNNネットワーク構成制御部(DNNCC)や、データ蓄積メモリ(DNN_MIDD)とデータの通信を行うインタフェースを備える。
図3Bは、第一階層と第二階層の通信プロトコルを示す図である。第一階層機械学習・認識装置にて学習する場合と、学習をしない場合の両状況において、第一階層に保持するデータの構造を示している。
この図3Bには、第一階層機械学習・認識装置の特長を表す情報として、ニューラルネットワークの構成情報(DNN#)、重み係数情報(WPN#)、正解情報との比較結果情報(RES_COMP)、認識結果情報(認識正解率等、Det_rank)、第一階層機械学習・認識装置の構成更新要求信号(更新リクエスト)(UD Req)で構成される。
特に、第一階層機械学習・認識装置の構成更新要求信号は、高々数ビットの構成であり、定期的に第二階層機械学習・認識装置はこの第一階層械学習・認識装置の構成更新要求信号をチェックし、更新が必要かどうかを把握する。この情報が更新必要要求を示す場合は、第二階層機械学習・認識装置で追加学習した最新データを第一階層機械学習・認識装置へ転送する準備を実施し、データ更新情報の転送準備が可能になったら、第一階層機械学習・認識装置のへ要求アップデート準備完了信号データを送信し、第一階層機械学習・認識装置のデータへ格納する。このデータは、UD_Prprdとして格納する。
この構成情報の更新については様々な場合が想定される。第一階層機械学習・認識装置で一定期間の認識処理を経過後、たとえば平均認識率(例えば認識結果レーティング情報)を算出し、あるしきい値を超えた場合に第二階層機械学習・認識装置との通信を確立させる。そして、更新に必要な集積データを第一階層から第二階層へ送信し、第二階層機械学習・認識装置で効率的に学習を実施する。その後、新たなニューラルネットワークや重み係数が決定後に、第一階層機械学習・認識装置の運用状況に応じて、適切な時期に第一階層機械学習・認識装置への更新を実施する。更新時期は、第一階層機械学習・認識装置がシャットダウン後のリブート時に第二階層機械学習・認識装置との通信を確保し、更新データのダウンロードが可能かどうかを問い合わせるプログラムを記述しておけばよい。
第二階層機械学習・認識装置内でDNN学習を実施するが、その学習が所望の認識率を実現できなかった場合には、第一階層機械学習・認識装置での学習を再実行することも考えられる。その場合でも、学習の階層化を実施しているので、全体として効率的な演算が可能になる効果がある。
図4に、第一階層機械学習・認識装置の構成を変更するためのプログラムシーケンスを記載する。この場合、第一階層機械学習・認識装置と第二階層機械学習・認識装置間で、必要最小限のデータを送受信するプロトコルを準備しておくことが都合がよい。例えば、第一階層機械学習・認識装置で認識スコアが著しく低下した場合や、ニューラルネットワークや重み係数の定期更新期限が近付いた場合など、第一階層機械学習・認識装置から第二階層機械学習・認識装置へ第一階層機械学習・認識装置の更新依頼情報を送信しておく。そのようにすることで、第二階層機械学習・認識装置での学習更新作業が始まり更新済データが準備できた段階で、第一階層機械学習・認識装置へデータ準備完了信号、もしくは、更新ビット情報を送信しておく。その結果、第一階層機械学習・認識装置がリブートされる状況において、図4記載のブートシーケンスを走らせる。
データ準備完了信号、もしくは、更新ビット情報を確認することで、第二階層機械学習・認識装置へのデータ更新アクセスが必要かどうかを判定し、必要に応じて、第二階層機械学習・認識装置へのデータダウンロード要求信号を送信し(S401)、アップデートデータが到着を検出後、アップデートデータのダウンロード完了(S402)をまって、データの正常性をパリティやCRC(Cyclic Redundancy Check)を活用して検査する(S403)。その後、FPGAの構成情報を再構成する(S404)。その後、FPGAをブートし(S405)、通常動作に入る(S406)。
図5にDNNをFPGAで構成した際に、FPGA(501)へ適用する場合の構成を示す。FPGAの再構成には、FPGA内部のコンフィグレーションメモリ(CRAM)の動的な書き換え技術を利用する。FPGA内には、ルックアップテーブルユニット(LEU)とスイッチユニット(SWU)および、ハードウエアで構成された積和演算等を実施する演算ユニット(DSP)およびメモリ(RAM)で構成される。
本実施例のDNNネットワーク等の論理回路は、LEU、SEU、DSP、RAMに実装され通常動作を実施する。一方、上記のようにDNNの内容を更新する場合は、第二階層機械学習・認識装置より送信された更新データを、CRAM制御回路(CRAMC)でCRAMへ書き込むことで実現できる。FPGAが再構成された後は、通常通りFPGAを起動させ、第一階層機械学習・認識装置の通常オペレーションを実施する。
本実施例の機械学習装置を用いた場合の、第一階層と第二階層の間のデータとしては、
(1)第一階層機械学習・認識装置で生成された中間層データ
(2)機械学習装置をFPGAで構成した場合のニューラルネットワーク構造
(3)ニューロン間演算の重み係数
(4)第一階層機械学習・認識装置で入力データを弁別する際の識別率および弁別スコア(ヒストグラム)情報
(5)第一階層機械学習・認識装置でOn the Job Trainingを実施する際の教師あり学習による矯正情報、等が考えられる。
特に、FPGAでこの第一階層機械学習・認識装置を構成する場合、メモリ内に格納している中間層のデータ、および、ネットワークの構成情報(FPGAのスイッチ部を記述するコンフギュレーション情報)、重み情報、第一階層学習・認識装置で認識を実施した認識情報の弁別情報等を第二階層学習・認識装置へ送信することが考えられる。
このようにすることで、入力データを全て第二階層学習・認識装置へ送るよりも少ないデータで、第二階層学習・認識装置が学習する上で効率的な、質の良いデータが送れるので、第二階層での学習効率が高まる効果がある。
本実施例の構成によれば、第一階層と第二階層とでニューラルネットワークのタイプを制限することは必然ではない。例えば、第一階層と第二階層で同様のネットワークを組む場合、全体としてより大型のニューラルネットワークが構築できる効果がある。一方で、第一階層で画像認識処理のニューラルネットワークを構成し、第二階層では自然言語処理のニューラルネットワークを組む場合、第一階層と第二階層とで連携した効率学習が可能になる効果がある。
図6は、第二階層機械学習・認識装置DNN2から第一階層機械学習・認識装置DNN1へデータを送致する手段を設けていないことが特徴の実施例である。実施例では最もシンプルな構成になる。
この方式の利点としては、第二階層機械学習・認識装置DNN2は第一階層機械学習・認識装置DNN1の演算結果を利用して学習および認識演算を実施するが、第二階層機械学習・認識装置DNN2から第一階層機械学習・認識装置DNN1へのフィードバック経路を有せず、したがって、構成として、第一階層機械学習・認識装置DNN1と第二階層機械学習・認識装置DNN2とを独立とすることができる点である。
第二階層機械学習・認識装置DNN2では、第一階層機械学習・認識装置DNN1で演算された隠れ層HL13、HL23の値を入力として教師有り学習を行う。したがって、第二階層機械学習・認識装置DNN2において学習を繰り返し行う際に、第一階層機械学習・認識装置DNN1にて再度演算実行する必要がないので、第二階層機械学習・認識装置DNN2での学習においては、第一階層機械学習・認識装置DNN1で実行する学習を再度実施する必要がなく、全体として演算量を小さくできる効果もある。
また、第二階層機械学習・認識装置DNN2へ入力させる学習時入力データを第一階層機械学習・認識装置DNN1で生成して転送することで、学習演算の場合でも第二階層機械学習・認識装置DNN2へ渡すデータは少なくて済む効果もある。
図7により、本実施例の階層型DNN方式を効率よく運用する上での、データ運用手法について説明する。図7は、第一階層機械学習・認識装置DNN1にて、認識処理を進める場合を想定したものである。以後の実施例を説明する図では、煩雑さを避けるために、上位階層から下位階層への信号線を設けない図で説明するが、第一の実施例で示したように、上位階層からの信号接続がある場合にも容易に拡張できる。
第一階層機械学習・認識装置DNN1は外部センサデバイス等や、データベースからの入力を受けて、DNN1内部で認識処理を実行する。その際、中間層のデータ、ここでは、nd014 のデータをDNN1に付属するデータストレージSTORAGE 1(HDD、Flashメモリ、DRAM等)に保持する。第一階層機械学習・認識装置DNN1は、ハードウエア規模が制限される場合が多いと想定しており、この階層でのデータ格納には限界があると考えられる。そのため、この階層には、FIFOのような一時メモリ的な構成を実施することが望ましく、そのデータを第二階層機械学習・認識装置DNN2に間欠的に送信することで、第二階層において、データベースClass DATAを構築する。
このとき、DNN1にて認識処理を進める上で得られる認識スコア情報および、DNN1装置のニューラルネットワーク構成情報、重み係数情報を同時に格納しておくと、第二階層機械学習・認識装置DNN2での追加学習に際して効率がよい。例えば、ニューラルネットワーク情報や重み係数情報は、第一階層と第二階層で相互に認識できる情報であればよく、例えば、64 bit単位のデータで共有することが考えられる。また、第一階層は、ネットワークの構成情報や重み係数情報の詳細は理解する必要がなく、実行しているネットワークと重み係数情報を忘れなければよい。一方で、第二階層機械学習・認識装置DNN2は、第一階層機械学習・認識装置DNN1がどのようなネットワークでどのような重み係数のパターンを用いて実行しているかを知る必要があるので、対応する第一階層機械学習・認識装置DNN1との対応テーブルを用意しておく必要がある。
この図には記載していないが、図1Bに記載のように第二階層から第一階層への情報伝達手段を設けて構成することも可能である。
図8は、第一階層機械学習・認識装置DNN1が3つ以上ある場合を示している。本実施例によれば、第一階層機械学習・認識装置DNN1はそれぞれ独立して学習および認識演算を実施するので、数を増やしても、第二階層機械学習・認識装置DNN2にての学習実行に対する拡張も容易である。
前記の実施例1〜3では、第一階層と第二階層の接続について、2つの階層間では単なる情報の接続だけを示した記載としたが、第一階層の数が増えるに従い、効率的な接続方法が重要になる。この実施例では、ネットワークNWを活用してデータの授受を実施する実施例を示した。通常、ネットワークNWでは、パケットを単位としてデータ授受がなされるので、送り手のアドレスや受けてのアドレス、および通信情報等をまとめて、送付することが可能である。このネットワークNWは、無線でも有線でも不問であり、このシステムが設置される場所や状況に応じて適切に接続すればよい。
図9は、変形の実施例を示した図である。この図での特徴は、第一階層機械学習・認識装置DNN1を異なる第二階層機械学習・認識装置DNN2-1、DNN2-2で共有することも可能であることを示している。
また、この図に示さないが、図8に記載したように、第一階層機械学習・認識装置DNN1と第二階層機械学習・認識装置DNN2間にネットワークNWを設けることで、第一階層機械学習・認識装置DNN1と第二階層機械学習装置DNN2との間の接続が柔軟に実施できる。これは、第一階層と第二階層で独立した演算を実施している特徴を生かした構成である。
このような構成によって、第一階層および第二階層の機械学習・認識装置で全体の機械学習ネットワークを構成することも可能である。
図10は、他の変形の実施例を示した図である。この図での特徴は、第一階層機械学習・認識装置DNN1から第二階層機械学習・認識装置DNN2へ入力するデータとして、複数設けられている中間隠れ層の中から、最適な層のデータを送信できることが特徴である。この図では、HL12およびHL22層の出力から取り出している図を示したが、HL11やHL21等の出力からでもかまわない。
この接続の切り替えは、第一階層機械学習・認識装置DNN1が他の第一階層機械学習・認識装置DNN1、および、第二階層機械学習・認識装置DNN2とは独立に設定することができる。
この場合、第二階層機械学習・認識装置DNN2への送信データは、中間層のデータとともに、ネットワーク構造および重み係数情報を送信することが望ましい。データの送受信手段は、実施例1で述べた手段を用いればよい。
また、出力データの切り替えを、他の第一階層機械学習・認識装置DNN1、および、第二階層機械学習・認識装置DNN2と協調して設定することも可能である。その場合は、他の第一階層機械学習・認識装置DNN1、および、第二階層機械学習・認識装置DNN2とのインターフェースとして、他の機械学習・認識装置からの学習・認識精度情報から、第二階層機械学習・認識装置DNN2への送信データの取り出す層を切り替えるか否かの信号授受を設けると効果的である。
さらに、第二階層機械学習・認識装置DNN2にて、データを出力する中間層を変更した場合、当該データに基づく学習を実行した際の認識率の評価を実施し、関連する第一機械学習・認識装置群の出力制御切り替え制御を実行すればよい。
このようにすることで、刻々と変化する環境に対応した柔軟な学習・認識システムが提供できる効果がある。さらに、設計で追い込めない最適化について実際のデータに基づきデータ収集と学習・認識を運用実施中に適切に変更することで、認識・学習を効率化できる効果がある。
図11は、演算階層を3階層に設けた実施例である。演算階層を複数設ける理由は、演算能力と効率を考えている。第一階層機械学習・認識装置DNN1は、組込システムへの搭載を念頭においており、非常にコンパクトな実装並びに、電力制約等が大きく、演算量の多さは期待できない。
一方、第二、第三の階層DNN2、DNN3の演算は、演算ハードウエアの制約が緩くなり、大型化、電力制約緩和等のメリットを活かして、大規模・高速演算が可能となる。
ただし、一般的に、クラウドコンピューティングと呼ばれる階層は、設置場所が不明で、場合によっては、地球の裏側に設置された機材を使うことになる。その場合、物理的距離の影響による遅延並びに、クラウドサーバへの接続に対してネットワーク的な関門(各種ゲートウエイやルータ装置)を通過する遅延等により、リアルタイム制御が難しいという課題がある。
そこで、クラウドコンピューティングによる第三階層DNN3の前に、中規模の第二階層DNN2を設けて低レイテンシ、および、ある程度の高速・大容量演算を実現する階層を設けると都合がよいことがある。これによる負荷分散が効率化できる効果がある。
以下の実施例にて、第一階層機械学習・認識装置での学習機能がない場合の実施例について説明する。
図12に記載の実施例は、第一階層機械学習・認識装置DNN1のニューラルネットワーク構造、および、重み係数情報の複製DNN1Cを第二階層機械学習・認識装置にもたせ、第二階層機械学習・認識装置にて学習演算を実施させる。
学習結果のニューラルネットワーク構造、および、重み係数情報は、データnd015により第一階層機械学習・認識装置DNN1に適宜反映させる。
本実施例によれば、端末側の機能が少なくて済み、実装するハード物量が削減できる効果がある。また、第二階層の高性能な機械学習・認識装置で学習することで、第一階層機械学習・認識装置DNN1の学習に要する時間が短くできる効果もある。
第二階層機械学習・認識装置DNN1Cにおける学習演算については、第一階層機械学習・認識装置DNN1で隠れ層の値を演算しておき、それの結果nd014を第二階層機械学習・認識装置DNN1Cへ入力し、第二階層機械学習・認識装置DNN1Cにて教師有り学習を行う。
第二階層での学習では、第一階層機械学習・認識装置DNN1の中間層データを用いて繰り返し実施する。第二階層機械学習・認識装置DNN1Cでの学習結果としてえられた、ニューラルネットワークの構造と重み係数等のデータは、しかるべきタイミングで該一階層機械学習・認識装置DNN1へ送信する。第一階層機械学習・認識装置DNN1では、更新された構成情報を反映後、認識処理を実施する。
このように、第二階層機械学習・認識装置の学習を繰り返し行う際に、第一階層機械学習・認識装置DNN1では再度演算をする必要がないので、学習時の演算量が削減できるという省力化および装置小型化が実現できるメリットがある。
図13を用いて、学習法の別の変形例について説明する。この実施例では、実施例8で説明したように、第一階層機械学習・認識装置DNN1での学習機能は、通常認識演算時には使用せず、初期化時や更新時等のタイミングで学習することが特徴である。
第二階層機械学習・認識装置内に第一階層機械学習・認識装置の複製を持ち、そこで学習した後に、第一階層機械学習・認識装置にニューラルネットワーク構造や重み係数等を反映させる。
第一階層機械学習・認識装置へ新しいニューラルネットワーク構造や重み係数情報が更新された後、第一階層機械学習・認識装置にて教師有り学習を行った後、その学習結果のデータを初期値として用いて、実施例1にて示したように、第一階層および第二階層を含めた全体系での教師有り学習を行う。
このような構成をとることによって、第一階層機械学習・認識装置と第二階層機械学習・認識装置の全体を一つの深層型ニューラルネットワークとして一気に学習するよりも、学習が容易であるとういう効果がある。
また、上述の他の基本的な実施例と同様に、第一階層機械学習・認識装置の出力層ではなく、隠れ層から値をとることにより、より多くの情報量がサーバのDNNの入力となる。
基本的な実施例と比べた場合、第一階層機械学習・認識装置だけで使うことはできなくなるが、第一階層および第二階層を含めた全体システムとしての最適化が実現できる効果がある。
図14は、Convolutional Neural network(CNN)に適用した場合の具体的な実施例である。CNNの場合、隠れ層は、畳込み層(Convolution Layer:CL)とプーリング層(Pooling Layer:PL)にて構成され、その組み合わせが複数段設けられている。この場合、隠れ層のデータとしては、nd111乃至、nd115等のデータである。
この実施例では、同一対象物を複数のカメラでとらえ、映像の認識処理を実施する例を示した。カメラ1でとらえた映像と、カメラ2でとらえた映像は、位置が異なるので、同一被写体をとらえても被写体の形状が異なる。したがって、同一の被写体を入力データとしつつも、撮影角度や光線の当たり具合などの異なる条件下での情報を同時に取得し認識・学習できるので、効率的である。
さらに、注目被写体と背景被写体の画像情報が位置ずれ等で変化するので、特徴量抽出に関する情報の切り出しにおける重み係数の算出等の学習に対して効率化できる。
このとき、全結合層FL11、FL21の前の情報を第二階層機械学習・認識装置DNN2に送ることで、位置情報を持った情報を第二階層機械学習・認識装置DNN2に入力でき、複数のカメラおよびCNN認識処理結果を用い、かつ、複数の第一階層機械学習・認識装置DNN1での中間データを相互に組み合わせる演算を実施することで、より高度な学習が実現できる。また、位置情報や時刻同期情報なども同時に持たせることで、対象とする認識物体への解析情報量が増すことで、より正確な認識の実現に向けた学習が実現できる効果がある。
さて、本実施例では、第一階層機械学習・認識装置DNN1にFPGAを活用し、第二階層機械学習・認識装置にCPUおよびGPUからなる装置で構成することが考えられる。CNNはその構造上、入力画像に関して小型の画素ブロック(カーネルと呼ぶ)に分解し、その単位で元画像をくまなくスキャンしながら、同じ画素数に対応する重み係数行列との内積演算を実施する。この内積演算に関しては、ハードウエアでの並列処理が効果的であり、LSI内部に多数の演算ユニットとメモリを有するFPGAによる実装が低電力化・高性能化で非常に効率的である。一方で、第二階層においては、複数の第一階層からのデータを効率的に複数の演算ユニットにバッチ処理として分散演算させることが効果的であり、ソフトウエア処理による低コストな分散演算システムを利用することが望ましい。この例のように各種のDNNに容易に適用可能である。
図15は異なるセンサ(たとえばカメラとマイク)を用いた機械学習システムへの適用の実施例である。この場合、画像処理のニューラルネットワークDNN1-11と音声処理のニューラルネットワークDNN1-13処理を融合したシステムである。ロボットなどでの認識を考える場合、画像と音声の両者を併せて特徴づけることが、様々な認識の上で効果が高いと考えられる。人間が物事を理解する上で、視覚情報と聴覚情報が合わさる方がどちらか単一の場合に比べて、飛躍的に情報量が多いため、認識効率が高まるからである。
また、この例では、画像はCNNで処理を実施し、音声は全結合のニューラルネットワークで構成することも考えられる。このように、画一的でない様々な方式のニューラルネットワークを用いて、それぞれの長所を融合させることで認識率の向上を目指す構成である。なお、この場合は、学習自体は別々に学習できるので、複雑なシステムであっても、学習自体は容易となる効果がある。
図16に、このようなシステムを適用した物体認識のためのデータベース構築システムを含む、本実施例のシステム適用および運用方法について示す。
図14(実施例10)に記載したように、画像情報については複数の第一階層機械学習・認識装置からの情報を第二階層機械学習・認識装置へ送信し、第二階層機械学習・認識装置での効率的な学習の実施例について述べた。
その応用として、ある物体についての学習を強化させ、そのデータベースを構築し、第二階層機械学習・認識装置の学習効率および認識効率を向上させることが効果的である。
その場合、ひとつの対象について同時に複数の第一階層機械学習・認識装置で認識・学習を実施し、その第一階層機械学習・認識装置で演算した隠れ層データを第二階層機械学習・認識装置へ伝達する。
この実施例では、まず、画像認識の例として、センサとしてのカメラとその出力データを認識解析するための第一階層機械学習・認識装置DNN 1〜DNN 8で構成される複数のシステムで同時観察する構成を示した。本図には、8個の第一階層機械学習・認識装置を記載したが、本願発明に関しては、その数に制約は設けなくても運用は可能である。
このように、認識対象を多角的に観察しその基本的な動作や特徴を抽出し、第二階層機械学習・認識装置にてさらに解析し、その観察対象の動作や特徴をうまく抽出するためのニューラルネットワーク構造並びに、重み係数を抽出し、データベース化する。
本願発明によれば、この対象は画像データに制約されることはなく、例えば、音声情報、温度情報、匂い情報、質感情報(硬さや組成)、等の様々な角度からのデータを入力として扱うことが可能であり、第一階層機械学習・認識装置において情報処理を実施後、効率的な情報を第二階層機械学習装置へ伝送し、さらに詳細な多センサ連携の学習・認識を実施する。
学習強化期間は、このように、実験室レベルで詳細な観察を実施することが特徴である。さらに、その結果を実運用に供する必要がある。その期間を実運用期間と定義する。
この期間には、第二階層機械学習・認識装置から第一階層機械学習・認識装置への再構成データを伝送し、第一階層機械学習・認識装置が単体でも効率的な認識が実現できるように設定される。
この状況は、常に変化する環境に対する認識結果を適宜第二階層機械学習・認識装置へ伝達するなどの、本願第一の実施例に基づく運用を実施し、効率的な認識に向けた更なるデータ収集を実施する。
このようなシステムを構築することで、実運用期間に供する際、最初のデータの質(高い認識率や効率的なニューラルネットワーク形態等)を高められるので、市場での不具合の低減等の効果が期待できる。
図17を用いて商用適用する上での実施形態について、説明する。この実施例では、前提として、第一階層機械学習・認識装置DNN 1〜DNN Nは、小型の学習・弁別機を想定しており、第二階層機械学習・認識装置DNNは大型の学習機を想定している。
1st ステップとしては、第二階層機械学習・認識装置DNNでの学習を実施する。ここは最初の学習フェーズである(学習I)そのため、計算資源の潤沢な第二階層機械学習・認識装置DNNでの学習が効率的である。この場合、入力データは2nd STEPで実施する運用状況に即したデータで学習する。例えば、自動運転等を考える場合、自動車に備え付けられたカメラで撮影した動画データ等が考えられる。ある意味、この段階の学習は、限られた状況下のデータを使うことになり、データ量としては制限のある学習になるが、第一階層機械学習・認識装置の基本的なDNNネットワークを構築するための基本的な構成を構築する学習と位置づけられる。
ついで、2nd ステップについて説明する。弁別機を第一階層機械学習・認識装置DNN 1〜DNN Nに搭載し、実際の運用状況下での実地訓練による認識・学習(教師あり学習)を実施する。この段階での学習は、まさに、自動車運転免許を取得する際の、運転免許取得に向けた実地訓練に相当する。
この段階では、まずは、認識率向上に向けたデータ収集が主たる目的であり、1st ステップで構築したDNNについて、教師データとのかい離状況を把握することが目的である。例えば、自動運転システムに適用する場合、実際の自動車に搭載し、ドライバ(人間)の判断を教師データとし、その乖離をスコア化してデータ収集を実施する。その際、DNN 1〜DNN Nの隠れ層のデータを適宜第二階層機械学習・認識装置DNNへ送信し、第二階層機械学習・認識装置DNNで更なる学習を積み上げ、第一階層機械学習・認識装置DNN 1〜DNN Nへ更新データを反映させ、さらに、第一階層機械学習・認識装置DNN 1〜DNN Nで教師あり学習を推進する。
このとき、特にスコアがよい状態や、スコアが悪い場合、もしくは、判定にまよいが生じた場合を分別して整理し、第二階層機械学習・認識装置DNNへ送信すると、第二階層機械学習・認識装置DNNでそれらの情報も用いながら多角的な学習が可能となる。
最後に、3rdステップについて述べる。この段階は、第一階層機械学習・認識装置DNN 1〜DNN Nの弁別機が十分に学習された場合に相当し、制御権を付与される段階である。この段階では、基本的に第一階層機械学習・認識装置では学習はせずに、認識処理を中心に実施する。ただし、基本的な事項について、教師データとの比較を実施し、比較結果のレベルを保持する簡易的なチェック機構を設けて、適宜第二階層機械学習・認識装置DNNへ伝達し、第二階層機械学習・認識装置DNNにて継続学習を実施する。
このように、継続的に機械学習システムも更新させていくことで、自動運転等の高度な制御を実現することができる。
図18は、ニューラルネットワークの完全結合層をFPGAで実装するための一実施例である。CNN方式の最終出力層やGRBM(Gaussian Restricted Boltzmann Machine)方式等のニューラルネットワークで使用される接続形態であるが、FPGA化する上で高効率な実装が必要である。特に、下層(可視層)から上層(隠れ層)への接続の演算と、その逆の上層(隠れ層)から下層(可視層)への演算では、重み係数の演算順序が異なる。下層から上層、および、上層から下層の両者を高速に演算するためには、重み係数を両者の読み出しが高速になるように、最適配置しておく必要がある。
つまり、下層から上層への変換に関する演算では、重み係数行列をWと置くと
H = W ・ V ・・・ (1)
の内積演算が必要になるが、逆に、上層から下層への演算においては、
V = WT ・ H ・・・ (2)
のWの転置行列との内積演算が必要になる。図18(A)に示すネットワークを例に演算を具体的に説明する。
ここでは、下層はVo〜V3の4つのノードで構成され、上層はh0〜h2の3つのノードで構成されており、下層のノードはすべて上層のノードと接続され、その接続は、入力側のノードの値に重み関数を掛け合わせて出力側のノードの値を求める演算になっている。
すなわち、下層4ノード、上層3ノード間を夫々の層間で完全に接続が出来る構成となっているので、重み係数は、4x4=16通りの値を持っている。この値を行列形式で表現すると、4x4行列で表される。上記(1)式、(2)式より明らかに、両式の間には、W行列を転置する演算が必要になり、ハードウエアで構成する場合、高速化を考えると、演算に最適化したメモリ配置にしておく必要がある。すなわち、式(1)、式(2)を計算する場合には、両者で独立したW行列用のレジスタやメモリを用意しておく必要がある。
しかしながら、重み係数は、非常に大きな次元を持つ行列になるので、そのような行列を2つ用意して演算することは、特に、第一階層機械学習・認識装置においてはコスト的に不利になる。そこで、演算の高速性を維持しつつ、面積低減が可能なこの重み係数を保持するメモリ構成が重要になる。
これを実現する手段は、まず、重み係数を格納する際、図18(B)に示すように、一般的には、下記の行列表現になろう。
とあらわすことになるが、それを、図18(B)のように、ずらした形で記述する。これと同時に、演算回路としては、図18(C)に示すような、積和演算回路に、入力セレクタ部に本回路での演算結果をアキュムレータへの入力経路にある乗算部、加算部に入れる経路と、隣の積和演算回路の乗算部、加算部に入れる経路とを有していることが特長である。
ここでは4つの演算ユニット(eu0〜eu3)を示している。各演算ユニットには、乗算部(pd0〜pd3)と、加算部(ad0〜ad3)と、アキミュレータ(ac0〜ac3)を有し、加算部の入力は、セレクタによって、第一入力は3入力(i000,i001,i002)、第2入力は、(i010,i011,i012)、加算部の入力は、乗算部の出力を第一入力とし、第二入力は、セレクタで切り替え可能な4入力(i020,i021,i022,i023)とする例を示した。ここで、i020は“0”、i021はレジスタからの入力、i022はアキュムレータ出力、i023は乗算部入力の一部(i012)と入力を共有化する例を示した。
演算方法としては、
(1)下層から上層の値を求める場合:
Vレジスタに入力されたデータを各加算部に入力し(i010,i020,i030,i040)、対応するWアレイの重み係数を乗算部に入力し(i000,i100,i2000,i300)、乗算を実施後、最初は”0”を”i020, i120 i220 i320 へ入力し加算する。次に、Vレジスタの値を左にシフト(ローテート)し、対応するVレジスタの値を乗算部に入力する。これにより、実質的にWレジスタのアドレスがインクリメントしたアドレスのデータを乗算部へ入力することができる。乗算後、sw01、sw11、sw21、sw31をOFFにし、sw02、sw12、sw22、sw32をONにして、アキュムレータに格納されているデータを加算部に入力して加算する。これを全てにわたって実行する。その結果、
V0*W00+V1*W10+V2*W20+V3*W30 ・・・ (3)
V0*W01+V1*W11 +V2*W21+V3*W31 ・・・ (4)
V0*W02+V1*W12 +V2*W22+V3*W32 ・・・ (5)
を得る。このモードは隣の演算ユニットの結果を利用しないので、セルフ演算モードとよぶ。
(2)上層から下層の値を求める場合:
この場合は、アキュムレータに格納されたデータを隣の積和演算回路の加算部に渡すことで、実質的に、Wアレイの斜めシフト演算を実行するものである。
まず、Wアレイからアドレス#3の情報を読み出し、乗算部に入力する(i000,i100,i2000,i300)。Hレジスタの対応するユニットを乗算部に入力し(i010,i020,i030)、その後乗算し、最初は”0”を加算後、アキュムレータ へ格納する。2回目以降は、アキュムレータの格納データを隣の演算ユニットの加算回路に入力するので、sw01、sw11、sw21、sw31をONにし、sw02、sw12、sw22、sw32をOFFにして演算を実施する。最初の演算でも、アキュムレータをリセットしておけば、隣の積和演算回路のアキュムレータ出力を入力することで、実質的な”0”加算が実施することができる。
上記の演算を繰り返し、以下を得る。
H2*W32+H1*W31+H0*W30 ・・・ (6)
H0*W00+H2*W02+H1*W01 ・・・ (7)
H1*W11+H0*W10+H2*W12 ・・・ (8)
H2*W22+H1*W21+H0*W20 ・・・ (9)
このモードはとなりの演算ユニットの結果を利用するので、相互演算モードとする。
このように演算することで、下層から上層の演算を実施する場合でも、その逆で、上層から下層の演算を実施する場合でも省面積でかつ高速な演算が実現できる。
以上の実施例では、DNN装置を階層化させて、端末側処理部とサーバ側処理部を設ける例を説明した。さらに、端末側の入力データや端末側で認識を実施している際のDNNの中間層データをサーバ側へ送り、サーバ側で学習を実施し、サーバでの学習結果をしかるべきタイミングで、端末側へ送信し端末での認識動作を進める例を説明した。サーバ側のDNNの入力は、端末のDNNの中間層のデータ出力を用い、それぞれの階層においてDNNで学習することである。学習方法としては、端末のDNNの教師有り学習を行った後、サーバのDNNの教師有り学習を行う。端末側のDNN装置は、小型、小面積、低電力なデバイスで構成し、サーバ側のDNN装置は、高速演算かつ大容量メモリを有する、いわゆるサーバで構成した。
以上詳細に説明した実施例によると、端末のDNNの出力層ではなく、隠れ層から値をとることにより、より多くの情報量がサーバのDNNの入力となることで、全体として効率的な学習が可能になる効果がある。
また、階層的な学習とすることで、全体を一つのDNNとするよりも、学習時間が短縮、および、学習自体が容易化する効果がある。
さらに、IoTを活用した複数端末の協調動作を考える場合、設計者が当初考えた制御変数が最適であるとは必ずしも言えないが、このような最適化が困難である複数の端末とサーバ間での階層的なDNN構成することで、全体としての最適化ができる効果もある。
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の実施例の構成の追加・削除・置換をすることが可能である。
機械学習を適用できる技術分野全般、例えば、社会インフラシステム分野に利用することができる。