人工ニューラルネットワークを学習用データで学習させ、各層での計算に使われるパラメーターを調整する。例えば学習用データにある手書きパターンを入力し、出力された数字を学習用データの期待するラベルと比較する。それが一致しない場合は、人工ニューラルネットワークの各層へ戻って、再度パラメーターを調整する。これを繰り返してパラメーターを最適化する。このパラメーターの調整が「学習」と呼ばれる。
例えば「3」の手書きパターンの1つが入力されたとする、人工ニューラルネットワークの中の各層の人工ニューロンによる計算結果が、「3」である確率が100%という出力になれば問題がないのだが、学習前の人工ニューラルネットワークでは、例えば「8」の確率が35%、「2」の確率が30%、「5」の確率が25%、「9」の確率が10%という結果を出すかもしれない。この時、「8」の確率が最も高いため、出力結果としては「8」が得られる。しかし期待されるラベルは「3」であるので、学習の段階では間違いと判断される。「8」が間違いだと判断されたため、「8」の確率を高めた人工ニューロンの「重み付け」を下げて、再度入力パターンを「重み付け」も加味してチェックする。すると次は「5」という結果が得られたとする。しかし、これも間違いだと分かる。そこで、今度は「5」の確率を高めた人工ニューロンの「重み付け」を下げて、もう一度入力パターンをチェックする。この操作を繰り返すと、「3」以外の確率を高める人工ニューロンの「重み付け」が下げられるため、最終的に「3」という結果が出る。これを、多数の異なった、全ての数字の手書きパターンで、期待されるラベルと同じ結果を出力するように調整する。
これがパラメーターの最適化のルーティーンである(図4)
人工ニューラルネットワークの学習が終われば、推論アルゴリズムが構築されたことになる。しかし、このままでは、マイコンに推論アルゴリズムを適用することはできない。この推論アルゴリズムをマイコン向けに変換する必要がある。
マイコンに搭載されているCPUはGPUほどパフォーマンスが高くなく、また搭載されているメモリにも、外付けできるメモリにも制限があり、人工ニューラルネットワークの学習で構築された推論アルゴリズムをそのまま移植することはできない。通常、人工ニューラルネットワークには、Pythonというプログラミング言語が使用されている。このPythonで直接マイコン用のプログラム作ることはできない。そこで、推論アルゴリズムをマイコン用コードに変換する必要がある(図5)
この工程が、通常のAIと、マイコンを使った組み込みAIで最も違う点だ。
マイコンが動作する言語*1)は、マイコンによって異なる。したがって、この工程は各マイコンメーカーまたはマイコンを使ったシステム開発を手掛ける企業のサービスを活用するのが便利だ。
マイコンメーカーのサービス例を紹介する。STマイクロエレクトロニクスは、マイコン製品ファミリ「STM32」用に「STM32Cube.AI」*2)というツールを無償で提供している。このツールを使うと、人工ニューラルネットワークの学習で構築された推論アルゴリズム部分は、オブジェクトコードに変換でき、その推論アルゴリズムとマイコンとのインタフェース部分はC言語で生成される。C言語はマイコンのAPI(Application Programming Interface)としてマイコンに取り込まれる。
*1)参考記事:マイコン入門!! 必携用語集(7):マイコンにも言語力が必要!?
*2)Neural Networks on the STM32 with STM32Cube.AIの詳細
Copyright © ITmedia, Inc. All Rights Reserved.