IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社アクセルの特許一覧

特開2024-82974処理装置、学習済みモデル処理方法、及び学習済みモデル処理プログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024082974
(43)【公開日】2024-06-20
(54)【発明の名称】処理装置、学習済みモデル処理方法、及び学習済みモデル処理プログラム
(51)【国際特許分類】
   G06N 3/10 20060101AFI20240613BHJP
   G06N 3/048 20230101ALI20240613BHJP
   G06N 3/02 20060101ALI20240613BHJP
【FI】
G06N3/10
G06N3/048
G06N3/02
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2022197218
(22)【出願日】2022-12-09
【新規性喪失の例外の表示】特許法第30条第2項適用申請有り ウェブサイトへの掲載 掲載日:令和4年7月29日、 掲載アドレス等:https://medium.com/axinc/3f98aac6f2a1
(71)【出願人】
【識別番号】398034168
【氏名又は名称】株式会社アクセル
(74)【代理人】
【識別番号】110000279
【氏名又は名称】弁理士法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】道上 将志
(57)【要約】
【課題】学習済みモデルの処理で実行する層の数を容易かつ適切に低減できるようにする。
【解決手段】複数の処理層を含む学習済みモデルデータ51を処理する推論装置100であって、制御ルーチン10を実行するCPUは、学習済みモデルデータ51の入力を受け付け、学習済みモデルデータ51の中から、層の数がより少ない等価層に変換可能な複数の処理層の組を特定し、特定した複数の処理層の組を等価層として実行するように処理層の実行を規定する実行規定情報を生成する。
【選択図】図2
【特許請求の範囲】
【請求項1】
複数の処理層を含む学習済みモデルを処理する処理装置であって、
前記学習済みモデルの入力を受け付ける受付部と、
前記学習済みモデルの中から、層の数がより少ない等価層に変換可能な複数の処理層の組を特定し、特定した前記複数の処理層の組を前記等価層として実行するように処理層の実行を規定する実行規定情報を生成する生成部と、
を有する処理装置。
【請求項2】
前記実行規定情報に基づいて前記学習済みモデルを実行可能な推論部を更に有し、
前記生成部は、前記推論部が前記学習済みモデルに含まれる処理層を実行する際に、次に実行する処理層以降に実行される予定の複数の処理層の組を等価層に変換可能かを判定し、変換可能な複数の処理層の組を等価層として実行するように前記実行規定情報を生成し、
前記推論部は、前記実行規定情報に基づいて、変換可能な前記複数の処理層の組に変えて、前記等価層を実行する
請求項1に記載の処理装置。
【請求項3】
前記生成部は、前記処理層を実行する際に、すでに実行された処理層の処理結果を考慮して、次に実行する処理層以降に実行される予定の複数の処理層の組を等価層に変換可能かを判定し、変換可能な複数の処理層の組を等価層として実行するように前記実行規定情報を生成する
請求項2に記載の処理装置。
【請求項4】
前記等価層は、ReLU活性化関数層もしくは双曲線正接関数層の少なくとも1つと、乗算層もしくは加算層の少なくとも1つと、を含む処理層の組に等価な処理層である
請求項1又は請求項2に記載の処理装置。
【請求項5】
前記推論部は、プロセッサにより構成され、
前記等価層は、前記プロセッサが1命令で実行できる処理を実行する複数の処理層の組と等価な処理層である
請求項2に記載の処理装置。
【請求項6】
前記実行規定情報に基づいて前記学習済みモデルを実行可能な推論部を更に有し、
前記推論部は、複数の等価層の処理を選択して実行可能な演算回路を有し、
前記演算回路は、2以上の処理層の処理のいずれか1つを設定に応じて選択実行可能な回路要素を複数段有するとともに、各段の回路要素の接続関係を選択設定可能であり、
前記推論部は、実行する等価層の処理に応じて、前記演算回路における、前記回路要素で実行させる処理と、前記各段の前記回路要素の接続関係とを設定し、前記演算回路に前記等価層の処理を実行させる
請求項1に記載の処理装置。
【請求項7】
前記学習済みモデルは、所定の規格において予め用意されている処理層を組み合わせて構成されており、
前記等価層は、前記所定の規格において用意されていない処理を行う処理層である
請求項1に記載の処理装置。
【請求項8】
前記等価層に変換可能な複数の処理層の組の構成を示す構成情報を記憶する記憶部を有し、
前記生成部は、前記構成情報に基づいて、前記学習済みモデルにおける等価層に変換可能な複数の処理層の組を特定する
請求項1に記載の処理装置。
【請求項9】
前記生成部は、前記等価層に変換可能な複数の処理層の組であるか否かの判断条件を含む判断処理を実行することにより、複数の処理層の組が前記等価層に変換可能かを判断する
請求項1に記載の処理装置。
【請求項10】
複数の処理層を含む学習済みモデルを処理する処理装置による学習済みモデル処理方法であって、
前記学習済みモデルの入力を受け付け、
前記学習済みモデルの中から、層の数がより少ない等価層に変換可能な複数の処理層の組を特定し、特定した前記複数の処理層の組を前記等価層として実行するように処理層の実行を規定する実行規定情報を生成する
学習済みモデル処理方法。
【請求項11】
複数の処理層を含む学習済みモデルについての処理をコンピュータに実行させる学習済みモデル処理プログラムであって、
前記コンピュータを、
前記学習済みモデルの入力を受け付ける受付部と、
前記学習済みモデルの中から、層の数がより少ない等価層に変換可能な複数の処理層の組を特定し、特定した前記複数の処理層の組を前記等価層として実行するように処理層の実行を規定する実行規定情報を生成する生成部と、して機能させる学習済みモデル処理プログラム。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、例えば、学習済みモデルの構成を変換する技術に関する。
【背景技術】
【0002】
近年、画像や文字などの認識や分類などを行う際に、機械学習の一種である、ニューラルネットワークが用いられている。ニューラルネットワークは、畳み込み層、プーリング層、活性化関数層など様々な層で構成されており、これらを組み合わせることによりモデル構造が定義されている。定義されたモデルはそのままでは認識を行うことができないため、まず学習用の入力データとラベルデータなどを用いて各層のパラメータを設定(学習)し、学習済みモデルを得る必要がある。学習済みモデルを得ることができれば、その後は認識したいデータを学習済みモデルに入力し、各層を演算する(推論する)ことで、認識結果を得ることができる。
【0003】
学習済みモデルを使用して推論を行う推論装置は、一般に、各層に対応する処理を実行する処理ルーチン又は回路ブロック(以下、総称してルーチンということもある)と、その結果を一時的にストアするワークエリアとを備える。例えば、畳み込み層A、プーリング層B、及び活性化関数層Cの3つの層で構成されるニューラルネットワークを用いて推論する場合には、推論装置においては、畳み込み層のルーチンに入力データを与え、この畳み込み層の演算結果Aoをワークエリアにストアし、プーリング層のルーチンに演算結果Aoを入力して演算結果Boをワークエリアにストアし、活性化関数層のルーチンに演算結果Boを入力して最終結果を得るといった処理が行われることとなる。
【0004】
ニューラルネットワークモデルの構造を表現するフォーマットの1つとしてONNXモデル形式がある。ONNXモデル形式は、複数の推論装置やプログラムで利用可能な汎用のモデル形式となっており、ファイル構造の他各層の仕様などが規定されている。なお、ONNXモデル形式で利用可能な層は現在150種以上となっている。
【0005】
ニューラルネットワーク処理に関する技術としては、例えば、非特許文献1には、遅すぎるニューラルネットワーク処理の対処術が開示されている。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】遅すぎるCNN処理、日立の自動運転研究部が原因と対処術を発表、[検索日 2022/11/14],インターネット<URL:https://xtech.nikkei.com/atcl/nxt/column/18/01537/00465/>
【発明の概要】
【発明が解決しようとする課題】
【0007】
複数層で構成されたモデルを推論装置で実行する場合には、モデルを構成する各層に対応するルーチンが呼び出され、各ルーチンによる処理の結果をその都度メモリにストアされることとなる。したがって、ニューラルネットワークモデルを構成する各層のそれぞれについて、演算とストアが行われてしまうこととなり、処理時間がかかるという問題がある。
【0008】
例えば、非特許文献1に記載されているように、予め各層の処理を考慮して複数の層をまとめた層に最適化されたモデルを作成しておくことも考えられるが、どのように層を最適化すればよいかを特定してモデルを作成することは容易ではない。
【0009】
また、例えば、ONNXモデル形式などの予め決められたフォーマットを使用する場合においては、モデルで利用可能な層が予め限られているので、層を最適化することができないという問題がある。
【0010】
本発明は、上記事情に鑑みなされたものであり、その目的は、学習済みモデルの処理で実行する層の数を容易かつ適切に低減することのできる技術を提供することにある。
【課題を解決するための手段】
【0011】
上記目的を達成するため、一観点に係る処理装置は、複数の処理層を含む学習済みモデルを処理する処理装置であって、前記学習済みモデルの入力を受け付ける受付部と、前記学習済みモデルの中から、層の数がより少ない等価層に変換可能な複数の処理層の組を特定し、特定した前記複数の処理層の組を前記等価層として実行するように処理層の実行を規定する実行規定情報を生成する生成部と、を有する。
【発明の効果】
【0012】
本発明によれば、学習済みモデルの処理で実行する層の数を容易かつ適切に低減することができる。
【図面の簡単な説明】
【0013】
図1図1は、一実施形態に係る推論装置の構成図である。
図2図2は、一実施形態に係る推論装置の機能構成を説明する図である。
図3図3は、一実施形態に係る学習済みモデルの構成を説明する図である。
図4図4は、一実施形態に係る学習済みモデルデータのフォーマットを示す図である。
図5図5は、一実施形態に係る学習済みモデルデータの一例を示す図である。
図6図6は、一実施形態に係るルーチン割当情報の構成図である。
図7図7は、一実施形態に係る行列割当情報の構成図である。
図8図8は、一実施形態に係る推論処理のフローチャートである。
図9図9は、置換前の学習済みモデルにおける実行手順リストの一例の構成図である。
図10図10は、一実施形態に係る置換可能層グループの例を説明する図である。
図11図11は、置換後の学習済みモデルにおける実行手順リストの一例の構成図である。
図12図12は、一実施形態に係る層プロセス処理のフローチャートである。
図13図13は、一実施形態に係る置換可能層グループの他の例を説明する図である。
図14図14は、置換可能判定テーブルの前半部分の構成図である。
図15図15は、置換可能判定テーブルの後半部分の構成図である。
図16図16は、既知モデル構造対応情報の構成図である。
図17図17は、統合層の処理を実行する処理ルーチンの一例を説明する図である。
図18図18は、統合層の処理を実行する処理ルーチンの他の例を説明する図である。
図19図19は、変形例に係る汎用置換可能層グループの構成を説明する図である。
図20図20は、変形例に係る汎用置換可能層グループの一例の構成を説明する図である。
図21図21は、変形例に係る汎用置換可能層グループにおける置換可能層グループの構成例を説明する図である。
図22図22は、変形例に係る汎用置換可能層グループに対応する統合層を実現する演算回路の一例を説明する図である。
図23図23は、変形例に係る推論処理のフローチャートである。
【発明を実施するための形態】
【0014】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0015】
図1は、一実施形態に係る推論装置の構成図である。
【0016】
推論装置100は、処理装置の一例であり、例えば、PC(Personal Computer)やサーバ等のコンピュータ装置により構成されている。推論装置100は、例えば、Central Processing Unit(CPU)101と、メインメモリ102と、Graphics Processing Unit(GPU)103と、リーダライタ104と、通信インターフェース(通信I/F)105と、補助記憶装置106と、入出力インターフェース(入出力I/F)107と、表示装置108と、入力装置109とを備える。CPU101、メインメモリ102、GPU103、リーダライタ104、通信I/F105、補助記憶装置106、入出力I/F107、及び表示装置108は、バス110を介して接続されている。
【0017】
CPU101は、補助記憶装置106に格納された処理プログラムをメインメモリ102に読み出して実行する。
【0018】
メインメモリ102は、例えば、RAM、ROM等であり、CPU101に実行されるプログラム(学習済みモデル処理プログラム等)や、各種情報を記憶する。補助記憶装置106は、例えば、Hard DISK Drive(HDD)、Solid State Drive(SSD)等の非一時的記憶デバイス(不揮発性記憶デバイス)であり、CPU101で実行されるプログラムや、各種情報を記憶する。
【0019】
GPU103は、例えば、画像処理等の特定の処理の実行に適しているプロセッサであり、例えば、並列的に行われる処理の実行に適している。本実施形態では、GPU103は、CPU101の指示に従って所定の処理を実行する。
【0020】
リーダライタ104は、記録媒体111を着脱可能であり、記録媒体111からのデータの読み出し、及び記録媒体111へのデータの書き込みを行う。記録媒体111としては、例えば、SDメモリーカード、FD(フロッピーディスク:登録商標)、CD、DVD、BD(登録商標)、フラッシュメモリ等の非一時的記録媒体(不揮発性記録媒体)がある。本実施形態においては、記録媒体111に、学習済みモデル処理プログラムを格納しておき、リーダライタ104により、これを読み出して、利用するようにしてもよい。また、記録媒体111に、学習済みモデルデータや、学習済みモデルに入力する入力データを格納しておき、リーダライタ104により、これを読み出して使用するようにしてもよい。また、リーダライタ104により、学習済みモデルから出力される出力データを記録媒体111に格納するようにしてもよい。
【0021】
通信I/F105は、ネットワークに接続されており、ネットワーク50に接続された他の装置との間でのデータの送受信を行う。
【0022】
入出力I/F107は、例えば、マウス、キーボード等の入力装置109と接続されている。
【0023】
表示装置108は、例えば、液晶ディスプレイ等のディスプレイ装置であり、各種情報を表示出力する。
【0024】
次に、推論装置100の機能構成について説明する。
【0025】
図2は、一実施形態に係る推論装置の機能構成を説明する図である。
【0026】
推論装置100は、制御ルーチン10と、学習済みモデルの処理層の処理を実行可能な複数の処理ルーチン(畳み込み層ルーチン31、プーリング層ルーチン32、ReLU(Rectified Linear Unit)活性化関数層ルーチン33、加算層ルーチン34、乗算層ルーチン35等)と、複数の処理層のグループを統合した統合層の処理を実行可能な1以上の処理ルーチンである統合層ルーチン40とを、例えば、メインメモリ及び/又は補助記憶装置106に格納している。本実施形態では、推論装置100において、各処理ルーチンは、CPU101に実行される。なお、処理ルーチンの少なくとも一つを、専用の演算回路により実現してもよい。
【0027】
制御ルーチン10は、CPU101に実行されることにより、学習済みモデルデータ51を読み込んで、学習済みモデルにおける所定の複数の層の組(置換可能層グループ)を、この複数の層の組に対応する(等価な)統合層(等価層)に変換する処理を実行する。また、制御ルーチン10は、CPU101に実行されることにより、入力データ52をワークエリア20に読み出す。また、制御ルーチン10は、CPU101に実行されることにより、実行対象のモデルに従って、各層に対応する処理ルーチンを読み出して実行させる制御を行う。また、制御ルーチン10は、CPU101に実行されることにより、ワークエリア20のモデルによる処理結果を出力データ53として出力する。ここで、ワークエリア20は、例えば、メインメモリ102の一部の領域であってもよく、CPU101内にSRAMが設けられている場合には、SRAMの領域であってもよい。ここで、特許請求の範囲に記載の受付部及び生成部は、CPU101が制御ルーチン10を実行することにより構成され、推論部は、CPU101が制御ルーチン10を実行して他の制御ルーチンを制御することにより構成される。
【0028】
処理ルーチンは、CPU101に実行されることにより、処理に利用するデータをCPU101に読み込み(ロードし)、読み込んだデータを用いて処理を実行し、CPU101による処理結果をワークエリア20に格納(ストア)する。統合層ルーチンを除く処理ルーチンは、入力される学習済みモデルの仕様において使用可能な処理層の処理を実行するルーチンである。
【0029】
畳み込み層ルーチン31は、CPU101に実行されることにより、複数のフィルタデータのそれぞれを用いて畳込処理を行う。プーリング層ルーチン32は、CPU101に実行されることにより、入力されたデータについてダウンサンプリングする処理を実行する。ReLU活性化関数層ルーチン33は、CPU101に実行されることにより、入力されたデータをReLU活性化関数(ランプ関数)により変換する。加算層ルーチン34は、CPU101に実行されることにより、入力されたデータに対して加算演算を行う。乗算層ルーチン35は、CPU101に実行されることにより、入力されたデータに対して乗算演算を行う。
【0030】
統合層ルーチン40は、CPU101に実行されることにより、置換可能層グループによる処理を統合した統合処理を実行する。統合層ルーチン40は、CPU101に一度読み出されることにより、統合処理を実行することができる。本実施形態では、この統合層ルーチン40は、例えば、入力される学習済みモデルの仕様において使用が不可能な処理層である。
【0031】
統合層ルーチン40は、例えば、ReLU活性化関数層と、乗算層と、加算層とのくみを統合した統合層を実行するルーチンであってもよい。
【0032】
図3は、一実施形態に係る学習済みモデルの構成を説明する図である。
【0033】
学習済みモデル51Aは、定数61(constant_2)と、畳み込み層62(node_1)と、ReLU活性化関数層63(node_2)と、乗算層64(node_3)と、加算層65(node_4)と、プーリング層66(node_5)と、を有する。
【0034】
畳み込み層62は、入力データ52(tensor_i)を入力して、畳み込み処理を実行し、データ(tensor_1)を出力する。
【0035】
ReLU活性化関数層63は、畳み込み層62から出力されたデータ(tensor_1)を入力して、ReLU活性化関数による処理を実行し、データ(tensor_2)を出力する。
【0036】
乗算層64は、定数61(constant_2)と、畳み込み層62から出力されたデータ(tensor_1)とを入力して、乗算処理を実行し、データ(tensor_3)を出力する。
【0037】
加算層65は、ReLU活性化関数層63から出力されたデータ(tensor_2)と、乗算層64から出力されたデータ(tensor_3)とを入力して、加算処理を実行し、データ(tensor_4)を出力する。
【0038】
プーリング層66は、加算層65から出力されたデータ(tensor_4)を入力して、ダウンサンプリングする処理を実行し、出力データ53(tensor_o)を出力する。
【0039】
本実施形態では、例えば、ReLU活性化関数層63と、乗算層64と、加算層65との組を、これらの処理を統合した統合層70に変換することにより、学習済みモデルの層の数を削減するようにしている。
【0040】
図4は、一実施形態に係る学習済みモデルデータのフォーマットを示す図である。
【0041】
学習済みモデルの構造を示すデータ(学習済みモデルデータ)は、モデル全体がGraphで表記される。Graphは、モデル全体に対する入力データを示すInputと、出力データを示すOutputと、各層(ノード)を示すNodeと、定数データを示すDataと、使用する行列を示すTensorと、の要素を含む。Output、Inputには、データを示す行列名が記載される。
【0042】
Nodeは、その層に対する入力データを示すInputと、その層の出力データを示すOutputと、重みを示すWeightと、層の種別を示すTypeと、層の名前を示すNameとの要素を含む。なお、層の種類によっては、他の要素を含んでもよい。
【0043】
Output、Input、Weightには、層における対応するデータを示す行列名が記述される。Typeには、層の種類が記述され、例えば、層が畳み込み層であればConvolution、ReLU活性化関数層であればReLU、乗算層であればMul、加算層であればAdd、プーリング層であれば、Pool、双曲線正接関数層であればTanh、正弦関数層であればSin、余弦関数層であればCos、行列積層であればMatrix Mul、行列転置層であれば、Transpose、選択層であればSelectが記述される。Nameには、学習済みモデルにおける同一種別の層と識別可能な名前(層名、ノード名)が記述される。例えば、学習済みモデルが2つの畳み込み層を含んでいる場合には、一方の畳み込み層にconv_1が記載され、他方の畳み込み層にconv_2が記載される。
【0044】
Dataは、学習済みモデルにおいて使用される重みを示すNameと、その行列の値の配列を示すArrayとの要素を含む。Nameには、重みのデータを示す行列名が格納される。
【0045】
Tensorは、学習済みモデルにおいて使用される行列(テンソル)を示すNameと、Shapeとの要素を含む。Nameには、行列の行列名が格納される。Shapeには、行列の形状の配列が格納される。行列の形状の配列としては、例えば、次元とサイズとの情報であり、3×3の2次行列であれば、(2,3,3)となる。
【0046】
図5は、一実施形態に係る学習済みモデルデータの一例を示す図である。図5は、図3に示す学習済みモデルについて、図4に示すフォーマットにより記述した学習済みモデルデータ51Bを示している。
【0047】
例えば、学習済みモデルデータ51BにおけるReLU活性化関数層63についての記述部分51Baによると、ノード名がnode_2であり、種類がReLUであり、入力がtensor_1であり、出力がtensor_2であることが記述されている。
【0048】
この学習済みモデルデータ51Bによると、図3に示す学習済みモデル51Aの構造を適切に表現することができる。
【0049】
次に、制御ルーチン10の処理に利用する情報について説明する。制御ルーチン10は、ルーチン割当情報130と、行列割当情報ID140とを使用する。ルーチン割当情報130と、行列割当情報ID140とは、例えば、メインメモリ102に格納されて使用される。
【0050】
図6は、一実施形態に係るルーチン割当情報の構成図である。
【0051】
ルーチン割当情報130は、学習済みモデルの各層に対して設定される。ルーチン割当情報130は、ルーチン割当情報ID131と、モデル層情報132と、ルーチン名133と、入力割当情報配列134と、出力割当情報配列135と、局所モデル構造パターンマッチ処理済みフラグ136と、既知モデル構造対応情報ID137と、推論済みフラグ138とのフィールドを含む。
【0052】
ルーチン割当情報ID131には、ルーチン割当情報130を識別するID(ルーチン割当情報ID)が格納される。モデル層情報132には、ルーチンに対応付けられた学習済みモデルにおける層を特定する情報(例えば、ノード名)が格納される。ルーチン名133には、層に対応付けられたルーチン名が格納される。入力割当情報配列134には、層に対応するルーチンに入力される情報(行列)に割り当てられた1以上のID(行列割当情報ID)が格納される。出力割当情報配列135には、層に対応するルーチンから出力される情報に割り当てられた1以上のID(行列割当情報ID)が格納される。局所モデル構造パターンマッチ処理済みフラグ136には、ルーチン割当情報130に対応する層を含む複数の層の組について置換可能層グループとのパターンマッチング処理を行ったか否かを示すフラグが格納される。既知モデル構造対応情報ID137には、パターンマッチング処理によりマッチした既知モデル情報を示すID(既知モデル構造対応情報ID)が格納される。推論済みフラグ138には、モデルに従った推論処理において、ルーチン割当情報ID131に対応する層についての推論処理が行われたか否かを示すフラグが格納される。
【0053】
次に、行列割当情報ID140について説明する。
【0054】
図7は、一実施形態に係る行列割当情報の構成図である。
【0055】
行列割当情報140は、モデルにおいて使用される行列に対応して設けられる情報であり、行列割当情報ID141と、行列名142と、局所モデル構造パターンマッチ処理済みフラグ143と、格納場所情報144と、行列サイズ145とのフィールドを含む。
【0056】
行列割当情報ID141には、行列割当情報140に対応するID(行列割当情報ID)が格納される。行列名142には、対応する行列の行列名が格納される。局所モデル構造パターンマッチ処理済みフラグ143には、対応する行列が関係する層についてのパターンマッチング処理が行われたか否かを示す処理済みフラグが格納される。格納場所情報144には、対応する行列のワークエリア20上の格納場所を示す情報が格納される。行列サイズ145には、対応する行列のサイズが格納される。
【0057】
次に、推論装置100による推論処理について説明する。
【0058】
図8は、一実施形態に係る推論処理のフローチャートである。
【0059】
推論装置100の制御ルーチン10(厳密には、制御ルーチン10を実行するCPU101、以下、単に制御ルーチン10と記載することもある)は、学習済みモデルデータ51を読み込む(S11)。
【0060】
次いで、制御ルーチン10は、学習済みモデルデータ51に基づいて、モデル構造を解析するモデル構造解析処理を行う(S12)。ここで、モデル構造解析処理では、学習済みモデルデータ51に基づいて、図3に示すような学習済みモデルにおける各層の接続関係や、各層に対する行列の入出力の関係を特定する。
【0061】
次いで、制御ルーチン10は、学習済みモデルデータに規定されている層に対して、対応するルーチンを割り当てるルーチン割当処理を実行する(S13)。ルーチン割当処理では、制御ルーチン10は、学習済みモデルデータの各行列に対して行列割当情報140を作成する。この際、制御ルーチン10は、行列割当情報ID141には、新たな行列割当情報IDを割り当て、行列名142には、モデルデータにおける行列情報(Tensor)の行列名を格納し、行列サイズ145には、行列情報の行列の形状を格納する。なお、局所モデル構造パターンマッチ処理済みフラグ143については、この時点では、未設定としておく。次いで、制御ルーチン10は、学習済みモデルデータの各層に対して、ルーチン割当情報130を生成する。この際、制御ルーチン10は、ルーチン割当情報ID131には、新たなルーチン割当IDを割り当て、モデル層情報132には、モデルにおける層を特定する情報を格納し、ルーチン名133には、対応する処理ルーチンの名前を設定し、入力割当情報配列134及び出力割当情報配列135には、モデルデータにおいて対応する層に割り当てられた割当情報の行列割当情報IDを格納する。なお、局所モデル構造パターンマッチ処理済みフラグ136、既知モデル構造対応情報137、及び推論済みフラグ138については、この時点では、未設定としておく。
【0062】
次いで、制御ルーチン10は、ルーチン割当情報130を利用して、ルーチンの読み出し、ルーチンで使用するデータのワークエリア20からCPU101への読み出し、CPU101からワークエリア20への格納などの手順を決定し、実行手順リスト(図9参照)を生成する。
【0063】
図9は、置換前の学習済みモデルにおける実行手順リストの一例の構成図である。
【0064】
実行手順リスト80は、図5に示す学習済みモデルデータ51Bをそのまま実行する場合における実行手順のリストである。実行手順リスト80にあるように、学習済みモデルに含まれる各層毎に、層の処理を実行する処理ルーチンの呼び出しと、この処理ルーチンで使用する入力データのロード及び出力データのストアが発生する。実行手順リスト80に従って処理を行うと、処理ルーチンを呼び出す回数は、5回であり、ワークエリア20に対するロード・ストアの回数は、14回となる。
【0065】
図8の説明に戻り、次いで、制御ルーチン10は、学習済みモデルデータにおいて置換可能な複数層の組(置換可能層グループ)のパターンにマッチする構造があるか否か、すなわち、学習済みモデルデータ中に置換可能層グループがあるか否かを検出する局所モデルパターンマッチ処理(パターンマッチ処理)を実行する(S14)。
【0066】
ここで、置換可能層グループについて説明する。
【0067】
図10は、一実施形態に係る置換可能層グループの例を説明する図である。
【0068】
置換可能な複数層の組(置換可能層グループ)としては、例えば、ReLU活性化関数層、乗算層、及び加算層を含む組、乗算層及び加算層を含む組、乗算層、双曲線正接関数層、及び乗算層を含む組、減算層、余弦関数層、正弦関数層、及び乗算層を含む組等がある。なお、置換可能層グループとしては、ReLU活性化関数層もしくは双曲線正接関数層の少なくとも1つと、乗算層もしくは加算層の少なくとも1つと、を含む処理層の組であってもよい。
【0069】
ReLU活性化関数層、乗算層、及び加算層を含む組は、例えば、図10(A)に示すように、第1段に、入力層[0]の出力が入力されるReLU活性化関数層と、入力層[0]の出力及び定数[0]が入力される乗算層を有し、第2段に、ReLU活性化関数層から出力される内部行列[0]と、乗算層から出力される内部行列[1]とが入力される加算層を有する。ここで、第1段は、入力層から出力されるデータを入力として処理する層のグループであり、第n段は、第n-1段から出力されるデータを入力として処理する層のグループである。なお、入力層から出力されるデータを入力として処理する層であっても、別の段からのデータが入力される処理層であれば、データを入力する最も後段の次の段の処理層となる。
【0070】
乗算層及び加算層を含む組は、例えば、図10(B)に示すように、第1段に、入力層[0]の出力と、定数[0]が入力される乗算層を有し、第2段に、乗算層から出力される内部行列[0]と、定数[1]とが入力される加算層を有する。
【0071】
乗算層、双曲線正接関数層、及び乗算層を含む組は、例えば、図10(C)に示すように、第1段に、入力層[0]の出力と定数[0]とが入力される乗算層を有し、第2段に、乗算層から出力される内部行列[0]が入力される双曲線正接関数層を有し、第3段に、入力層[0]の出力と、双曲線正接関数層から出力される内部行列[1]とが入力される乗算層を有する。
【0072】
減算層、余弦関数層、正弦関数層、及び乗算層を含む組は、例えば、図10(D)に示すように、第1段に、入力層[0]の出力と入力層[1]の出力とが入力される減算層と、入力層[1]の出力が入力される余弦関数層とを有し、第2段に、減算層から出力される内部行列[0]が入力される正弦関数層を有し、第3段に、正弦関数層から出力される内部行列[2]と、余弦関数層から出力される内部行列[1]とが入力される乗算層を有する。
【0073】
次に、パターンマッチ処理の一例について説明する。
【0074】
まずは、置換可能層グループを所定の統合層に置換できることについて説明する。なお、学習済みモデルは、図3に示すモデルを例に説明する。
【0075】
ここで、多次元行列Xを2×2の2次元行列とし、多次元行列Xのi番目の要素をxiとすると、行列Xは、以下の式(1)に示すように表すこととする。
【0076】
【数1】
【0077】
また、行列に対して関数を実行した場合、各要素の操作内容は│で区切って示すものとする。例えば、行列AとBの各要素に対して、func(a,b)で操作を行うような行列操作FUNCの場合には、その結果の行列をCとすると以下の式(2)に示すように表すこととする。
C=FUNC(A,B)│ci=func(ai,bi) ・・・(2)
【0078】
ここで、ReLU活性化関数層に対する入力行列をXとし、行列X中の要素をxiとし、出力行列をYとし、行列Y中のi番目の要素をyiとすると、以下の式(3)に示すように表すことができる。
【0079】
【数2】
【0080】
また、加算層及び乗算層について、2入力とし、入力行列の一方をX1とし、入力行列の他方をX2とし、出力行列をYとし、各行列の要素をそれぞれ、x1i,x2i,yiとすると、加算層の出力行列Yは、式(4)に示すように表すことができ、乗算層の出力行列Yは、式(5)に示すように表すことができる。
Y=ADD(X1,X2)│yi=x1i+x2i ・・・(4)
Y=MUL(X1,X2)│yi=x1i×x2i ・・・(5)
【0081】
ここで、図3におけるReLU活性化関数層63、乗算層64、及び加算層65の組を、統合した統合層70として実行する場合を考える。統合層70の行列操作をFU_ACTとし、統合層70への入力行列をA、出力行列をB、乗算層の定数入力行列をCとし、それぞれの要素をai,bi,ciとすると、出力行列Bは、以下の式(6)に示すように表すことができる。
B=FU_ACT(A,C)=ADD(ReLU(A),MUL(A,C))・・・(6)
ここで、この処理における各要素の操作は、以下の式(7)に示すように表すことができる。
【0082】
【数3】
これにより、出力行列Bは、以下の式(8)に示すように表すことができる。
【0083】
【数4】
【0084】
したがって、ReLU活性化関数層63、乗算層64、及び加算層65の組に対して、式(8)の処理を実行する統合層70に置き換えることができることが分かる。
【0085】
このように、ReLU活性化関数層63、乗算層64、及び加算層65の組に対して、式(8)の処理を実行する統合層70に置き換えることにより、演算の効率化や中間データである行列のロード・ストアを減らすことで推論処理の高速化や、中間データ量の削減などが期待できる。
【0086】
次に、パターンマッチ処理の一例について説明する。このパターンマッチ処理では、所定の置換可能層グループであることの条件(判断条件)と、その条件を満たしているか否かを判定する判断処理とを制御ルーチン10に組み込んでおき、その処理を実行することによりパターンマッチを行う。ここでは、図3に示す学習済みモデルに、ReLU活性化関数層、乗算層、及び加算層の組にマッチする構造が存在するか否かを判定するパターンマッチを例として説明する。なお、行列の接続先をモデル出力方向のパス(行列が層の入力に接続されている箇所)とし、接続元をモデル入力方向のパス(行列が層の出力に接続されている箇所)とする。
【0087】
ここでは、ルーチン割当処理において、ルーチン割当情報130が構築され、初期化されているものとし、node_1の層に対応するルーチン割当情報130においては、局所モデルパターンマッチ処理済みフラグ136に処理済のフラグが設定され、それ以外の層に対応するルーチン割当情報130の局所モデル構造パターンマッチ処理済みフラグ136には、パターンマッチ処理済のフラグが未設定であり、各行列の行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143には、パターンマッチ処理済のフラグが未設定であるものとする。
【0088】
この場合には、制御ルーチン10は、モデル構造の入力側から層と行列とを探索し、行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143にフラグが未設定である行列を選択する。この例においては、行列tensor_1に対してはフラグが未設定であるのでtensor_1が選択される。
【0089】
次に、制御ルーチン10は、選択した行列を利用している層を列挙し、列挙した層が2つであって、1つがReLU活性化関数層であり、もう1つが乗算層であるとの条件を満たすか否かを判定することにより、1段目の条件を満たしているか否かを判定する。
【0090】
図3に示す学習済みモデルの場合には、行列tensor_1を利用している層は、node_2とnode_3の2つがあり、node_2は、ReLU活性化関数層であり、node_3は乗算層であるので、1段目の条件を満たしていると判定される。
【0091】
次に、制御ルーチン10は、ReLU活性化関数層が出力する行列の接続先が加算層である、乗算層が出力する行列の接続先が加算層である、及びReLU活性化関数層が出力する行列の接続先の加算層と、乗算層が出力する行列の接続先の加算層とが同一であるとの条件を満たしているか否かを判定することにより、2段目の条件を満たしているか否かを判定する。この条件を満たす場合は、2段目が条件を満たすとして特定する。
【0092】
図3に示す学習済みモデルの場合には、ReLU活性化関数層node_2が出力する行列tensor_2の接続先が加算層node_4であり、乗算層node_3が出力する行列tensor_3の接続先は加算層node_4であり、行列tensor_2と行列tensor_3との接続先は同一のnode_4であるので、条件を満たし、2段目の条件を満たすと特定する。
【0093】
このように、1段目の条件と、2段目の条件とを満たしている場合には、この処理で対象としたReLU活性化関数層node_2、乗算層node_3、加算層node_4は、置換可能層グループと同じパターンである、すなわち、置換可能層グループであり、これらの層の組と同一の処理を実行可能な統合層と置換可能であるので、制御ルーチン10は、これらの層についてのルーチン割当情報130の局所モデル構造パターンマッチ処理済みフラグ136と、これらの層に入力される行列についての行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143と、にパターンマッチ処理の処理済みフラグを設定する。
【0094】
図3に示す学習済みモデルの場合には、置換可能である複数の層であるnode_2、node_3、node_4に対応するルーチン割当情報130の局所モデル構造パターンマッチ処理済みフラグ136と、tensor_1、tensor_2、tensor_3に対応する行列割当情報140の局所モデル構造パターンマッチ処理済みフラグとに、パターンマッチ処理の処理済みフラグを設定する。
【0095】
一方、パターンマッチ処理において条件が成立しなかった場合には、その時点で、選択された行列に対する処理を打ち切って、最初に選択された行列に対応する行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143に、処理済みフラグを設定し、この行列の接続先のすべての層に対応するルーチン割当情報130の局所モデル構造パターンマッチ処理済みフラグ136に、処理済みフラグを設定する。
【0096】
なお、この処理においては、行列に着目し、行列を選択し、その行列の接続先となる層を辿っていくことによりパターンマッチ処理を行うようにしていたが、例えば、層に着目して、層を選択し、この層に接続される層を辿っていくことによりパターンマッチ処理を行ってもよい。具体的には、例えば、ルーチン割当情報130を参照し、パターンマッチ処理済みフラグが設定されていない層を探索し、その層が出力する行列の接続先の層について、置換可能層グループの条件を満たすかにより判定処理を行うようにしてもよい。また、上記パターンマッチ処理では、学習済みモデルの入力側から条件を満たすかを探索するようにしていたが、出力側から探索するようにしてもよい。
【0097】
図8の説明に戻り、制御ルーチン10は、パターンマッチ処理で置換可能層グループにマッチすると検出された複数層(置換可能層グループ)を、この複数層の組に対応する統合層に置換する既知モデル構造ルーチン置換処理を実行する(S15)。
【0098】
既知モデル構造ルーチン置換処理では、制御ルーチン10は、パターンマッチング処理において特定した置換可能層グループに基づいて、ルーチン割当処理で作成した実行手順リストにおける置換可能層グループに対する手順を、置換可能層グループに対応する統合層に対する手順に置換することにより、実行手順リスト(実行規定情報の一例)を生成する。
【0099】
図11は、一実施形態に係る実行手順リストの一例の構成図である。
【0100】
実行手順リスト81は、ルーチン割当処理で作成した実行手順ルールが図9に示す実行手順リスト80であり、ReLU活性化関数層、乗算層、及び加算層が置換可能層グループであると特定されている場合に作成される実行手順リストである。実行手順リスト81は、図11に示すように、実行手順リスト80における、ReLU活性化関数層、乗算層、及び加算層の手順(図9の手順05~15)が統合層に対する手順(手順05~08)に変換(置換)された実行手順リストである。実行手順リスト81に従って処理を行うと、処理ルーチンを呼び出す回数は、3回であり、ワークエリア20に対するロード及びストアの回数は、9回となり、実行手順リスト80に従って処理を行う場合に比して、演算回数を2回、ワークエリア20に対するロード・ストアの回数を5回削減でき、処理効率を向上することができる。
【0101】
図8の説明に戻り、次いで、制御ルーチン10は、実行手順リスト81に従って処理を実行する。具体的には、制御ルーチン10は、学習済みモデルに入力するデータ(モデル入力データ)を、例えば、補助記憶装置106から読み込み、ワークエリア20に格納する(S16)。
【0102】
次いで、制御ルーチン10は、実行手順リスト81の各層について、層に対応する処理ルーチンを読み出して、ループ1の処理(S17:層プロセス処理:図12参照)を実行させる。
【0103】
次に、ステップS17の層プロセス処理について説明する
【0104】
図12は、一実施形態に係る層プロセス処理のフローチャートである。
【0105】
制御ルーチン10に読み出された処理ルーチンは、処理対象の層について、層に入力するデータ(層入力データ)をワークエリア20からCPU101に読み込む(S21)。次いで、処理ルーチンは、処理ルーチンに記述されている演算処理(推論の一部の処理)を実行し(S22)、演算処理により得られるデータ(層出力データ)をワークエリア20に書き出して(S23)、層プロセス処理を終了する。
【0106】
図8の説明に戻り、制御ルーチン10は、ひとつの層による層プロセス処理が終了した場合には、次の層による層プロセス処理を実行させ、実行手順リスト81のすべての層のプロセス処理が終了した場合には、ループ1の処理を抜けて、ワークエリアに格納された最終的な演算結果(推論結果)をモデル出力データとして、例えば、補助記憶装置106に書き出す(S18)。なお、補助記憶装置106に書き出されたモデル出力データは、例えば、ネットワークを介して他の装置に出力される。
【0107】
置換可能層グループとしては、上記した図10に示す構成に限られず、以下に示すような構成でもよい。
【0108】
図13は、一実施形態に係る置換可能層グループの他の例を説明する図である。
【0109】
置換可能層グループとしては、例えば、行列積を実行する行列積層及び加算層を含む組、乗算層、加算層、及び行列積層を含む組、行列の転置を行う行列転置層及び加算層を含む組、複数の入力を選択する選択層及び加算層を含む組であってもよい。
【0110】
行列積層及び加算層を含む組は、例えば、図13(A)に示すように、第1段に、入力層[0]の出力と定数[0]とが入力される行列積層を有し、第2段に、行列積層から出力される内部行列[0]と定数[1]とが入力される加算層を有する。
【0111】
乗算層、加算層、及び行列積層を含む組は、例えば、図13(B)に示すように、第1段に、入力層[1]の出力と、定数[0]とが入力される乗算層を有し、第2段に、乗算層から出力される内部行列[0]と、定数[1]とが入力される加算層を有し、第3段に、入力層[0]の出力と、加算層から出力される内部行列[1]とが入力される行列積層を有する。
【0112】
行列転置層及び加算層を含む組は、例えば、図13(C)に示すように、第1段に、入力層[0]の出力が入力される行列転置層を有し、第2段に、行列転置層から出力される内部行列[0]と、入力層[1]の出力とが入力される加算層を有する。
【0113】
選択層及び加算層を含む組は、例えば、図13(D)に示すように、第1段に、入力層[0]の出力と、入力層[1]の出力と、入力層[2]の出力とが入力される選択層を有し、第2段に、入力層[0]の出力と、選択層から出力される内部行列[0]とが入力される加算層を有する。
【0114】
次に、パターンマッチ処理の他の例について説明する。このパターンマッチ処理では、置換可能層グループであるかを判定するための置換可能判定テーブル120(図14図15参照)と、既知モデル構造対応情報150(図16参照)とをメインメモリ102又は補助記憶装置106に格納し、これらテーブルを用いて、学習済みモデルにおける構成と、置換可能層グループとのパターンマッチを行う。
【0115】
まず、パターンマッチ処理を説明する前に、置換可能判定テーブル120及び既知モデル構造対応情報150について説明する。
【0116】
図14は、置換可能判定テーブルの前半部分の構成図である。図15は、置換可能判定テーブルの後半部分の構成図である。図14及び図15の置換可能判定テーブル120は、置換可能層グループが図10に示す4つの置換可能層グループである場合における例である。
【0117】
置換可能判定テーブル120は、パターン数121と、パターン毎フィールド122(122-1,122-2,122-3,122-4)とを含む。
【0118】
パターン数121には、置換可能層グループの数(パターン数)が格納される。パターン毎フィールド122は、それぞれの置換可能層グループのパターンの情報を格納する。パターン毎フィールド122は、段数1221と、入力数1222と、定数入力数1223と、内部行列数1224と、出力数1225と、置換ブロックルーチン1226と、段毎フィールド1227(1227-1,1227-2等)とを含む。
【0119】
段数1221には、パターンにおける層の段数が格納される。入力数1222には、パターンにおける入力の数が格納される。定数入力数1223には、パターンにおける定数の入力数が格納される。内部行列数1224には、パターンにおける内部行列の数が格納される。出力数1225には、パターンでの出力の数が格納される。置換ブロックルーチン1226には、パターンと置換可能な統合層の処理ルーチンの種類が格納される。
【0120】
段毎フィールド1227には、パターンにおける段についての各種情報を格納する。段毎フィールド1227は、例えば、段に含まれる要素(層)の数である要素数と、各要素に入力される行列の情報、各要素から出力される行列の情報、各要素の種別の情報を含む。
【0121】
図16は、既知モデル構造対応情報の構成図である。
【0122】
既知モデル構造対応情報150は、例えば、学習済みモデルに対応して設けられる情報であり、既知モデル構造対応情報ID151と、確定フラグ152と、候補数153と、候補毎情報154とのフィールドを含む。
【0123】
既知モデル構造対応情報ID151には、既知モデル構造対応情報150を識別するID(既知モデル構造対応情報ID)が格納される。確定フラグ152には、既知モデル構造対応情報150に含まれる候補のパターンについて置換可能であると確定したか否かを示すフラグが格納される。候補数153には、既知モデル構造対応情報150に含まれる候補の数が格納される。候補毎情報154には、候補となるパターンの情報が格納される。候補毎情報154は、候補となるパターンの候補の数だけ格納され、候補とならないパターンが判明した場合には、対応するパターンについての候補毎情報154は削除される。
【0124】
候補毎情報154は、入力数と、出力数と、要素数と、1以上の入力と、1以上の出力と、1以上の要素とを含む。入力数には、対応する候補のパターンにおける入力の数が格納される。出力数には、対応する候補のパターンにおける出力の数が格納される。要素数には、対応する候補のパターンにおける要素の数が格納される。入力には、対応する候補のパターンに入力されるデータ(行列)の行列割当情報のIDが格納される。出力には、対応する候補のパターンから出力されるデータ(行列)の行列割当情報のIDが格納される。要素には、対応する候補のパターンに格納されている要素の位置情報と、その要素に割り当てられているルーチン割当情報IDとが格納される。
【0125】
次に、パターンマッチ処理の他の例について説明する。
【0126】
上記した例では、条件を判定することによりパターンマッチングを行うようにしていたが、このパターンマッチ処理では、置換可能層グループを置換可能判定テーブル120に登録しておき、置換可能判定テーブル120と、既知モデル構造対応情報150とを利用して実行するパターンマッチングを行うようにしている。
【0127】
ここで、図3の学習済みモデルに対して、図14及び図15に示す置換可能判定テーブル120を利用する場合を例にパターンマッチ処理を説明する。
【0128】
まず、制御ルーチン10は、既知モデル構造対応情報150を候補数=0として初期化する。
【0129】
次いで、制御ルーチン10は、第1段判定処理を実行する。
<第1段判定処理>
制御ルーチン10は、学習済みモデルの入力側から層と行列とを探索し、行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143の処理済みフラグが未設定である行列を選択し、選択した行列を含む入力層候補リストを作成する。例えば、図3の学習済みモデルの場合には、行列tensor_1に対応する行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143の処理済みフラグが未設定であるためtensor_1を選択し、局所モデル構造パターンマッチ処理済みフラグ143に処理済みフラグを設定する。
【0130】
次に、制御ルーチン10は、学習済みモデルの構造に基づいて、選択した行列の接続先の層を列挙し、第1段構成要素候補集合としてメインメモリ102に記憶する。なお、同じ層が列挙された場合には、重複を除去して記憶する。例えば、図3の学習済みモデルの場合には、node_2(ReLU活性化関数層)と、node_3(乗算層)とが列挙されて、第1段構成要素候補集合に格納される。
【0131】
次に、制御ルーチン10は、第1段構成要素候補集合の層が置換可能判定テーブル120の各パターンの第1段の構成要素に含まれるか否かを判定し、部分一致する置換可能層グループのパターンを既知モデル構造対応情報150の候補毎情報154に候補として追加する。例えば、図3の学習済みモデルの場合には、ReLU/乗算/加算層グループ(図10(A)のパターン)が候補として追加される。
【0132】
次に、制御ルーチン10は、第1段構成要素候補集合のそれぞれの層の入力行列を特定し、行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143に処理済みフラグが設定されていない行列が存在するか否かを判定する。
【0133】
この結果、局所モデル構造パターンマッチ処理済みフラグ143に処理済みフラグが設定されていない行列が存在する場合は、制御ルーチン10は、その行列を選択し、この行列の接続先の層を特定して第1段構成要素候補集合へ追記し、既知モデル構造対応情報150に候補として記録されている各パターンの第1段の構成要素に含まれるか否かを判定する。なお、第1段構成要素候補集合へ追加した層がいずれのパターンにも含まれない場合は第1段構成要素候補集合からこの層を削除する。
【0134】
このようにして第1段構成要素候補の特定が完了した場合、制御ルーチン10は、既知モデル構造対応情報150に候補として追加したパターンのうち第1段の構成要素と部分一致をするか否かを判定し、部分一致しないパターンを既知モデル構造対応情報150の候補から削除する。また、制御ルーチン10は、部分一致するパターンのうち第1段のみで構成されるパターンが存在する場合は、そのパターンに対して後述する確定判定処理を実施する。
【0135】
既知モデル構造対応情報150の確定フラグ152に確定フラグが設定されておらず、既知モデル構造対応情報150に候補が存在する場合には、制御ルーチン10は、後述する第2段判定処理を更に実行する一方、候補が存在しない場合は、後述する打ち切り処理を実行する。
【0136】
例えば、図3の学習済みモデルの場合には、候補とされているReLU/乗算/加算層グループの第1段の構成要素であるReLU活性化関数層及び乗算層と、第1段構成要素候補集合のnode_2(ReLU活性化関数層)及びnode_3(乗算層)が完全一致するため、ReLU/乗算/加算層グループは候補として維持される。また、ReLU/乗算/加算層グループは、第1段のみで構成されるパターンではないため確定判定処理が実施されない。既知モデル構造対応情報150の確定フラグ152には、確定フラグが設定されておらず、候補が存在するため第2段判定処理がさらに実行される。
【0137】
次に、第2段判定処理について説明する。
<第2段判定処理>
制御ルーチン10は、第1段構成要素候補集合に属する各層が出力する行列を特定し、特定したそれぞれの行列について、行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143の処理済みフラグが未設定である行列を選択し、処理済みフラグを設定し、この行列の接続先の層を特定して第2段構成要素候補集合としてメインメモリ102に記憶する。
【0138】
例えば、図3の学習済みモデルの場合には、第1段構成要素候補集合の一つであるnode_2が出力する行列tensor_2が特定され、tensor_2の接続先のnode_4(加算層)が第2段構成要素候補集合に記憶され、第1段構成要素候補集合の別の候補であるnode_3が出力する行列tensor_3が特定され、tensor_3の接続先のnode_4(加算層)が特定されるが、node_4はすでに第2段構成要素候補集合に記憶されているので、追加されない。
【0139】
次に、制御ルーチン10は、第2段構成要素候補集合が、既知モデル構造対応情報150に候補として登録されているパターンの第2段の構成要素と部分一致するか否かを判定し、部分一致しないパターンを既知モデル構造対応情報150の候補から削除する。
【0140】
例えば、図3の学習済みモデルの場合には、候補とされているReLU/乗算/加算層グループの第2段の構成要素と一致するため、候補として維持される。
【0141】
次に、制御ルーチン10は、第2段構成要素候補集合に属するそれぞれの層の入力行列を特定し、行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143に処理済みフラグが設定されていない行列が存在するか否かを判定する。
【0142】
この結果、局所モデル構造パターンマッチ処理済みフラグ143に処理済みフラグが設定されていない行列が存在する場合は、制御ルーチン10は、その行列を選択し、この行列の接続先の層を特定して第2段構成要素候補集合へ追記し、既知モデル構造対応情報150に候補として記録されている各パターンの第2段の構成要素に含まれるか否かを判定する。なお、第2段構成要素候補集合へ追加した層がいずれのパターンにも含まれない場合は、制御ルーチン10は、第2段構成要素候補集合からこの層を削除する。
【0143】
また、制御ルーチン10は、行列の接続元の層を特定し、特定した層を第1段構成要素候補集合へ追記し、既知モデル構造対応情報150に候補として記録されている各パターンの第2段の構成要素に含まれるか否かを判定する。なお、第1段構成要素候補集合へ追加した層がいずれのパターンにも含まれない場合は、制御ルーチン10は、第1段構成要素候補集合から削除する。
【0144】
このようにして第2段構成要素候補の特定が完了した場合、制御ルーチン10は、既知モデル構造対応情報150に候補として追加したパターンのうち第2段の構成要素と部分一致をするか否かを判定し、部分一致しないパターンを既知モデル構造対応情報150の候補から削除する。また、制御ルーチン10は、部分一致するパターンのうち、すでに処理をした段(すなわち、第1段及び第2段)のみで構成されるパターンが存在する場合は、そのパターンに対して確定判定処理を実施する。
【0145】
既知モデル構造対応情報150の確定フラグ152に確定フラグが設定されておらず、既知モデル構造対応情報150に候補が存在する場合には、制御ルーチン10は、次の段nに対する判定処理(第n段判定処理)を更に実行する一方、候補が存在しない場合は、後述する打ち切り処理を実行する。なお、第n段判定処理は、第2段判定処理における第2段及びそれに関係する各段数を、第n段及びそれに関係する段数と読み替えればよい。
【0146】
例えば、図3の学習済みモデルの場合には、候補とされているRELU/乗算/加算層グループの第2段の構成要素である加算層と、第2段構成要素候補集合であるnode_4(加算層)とが部分一致するため、ReLU/乗算/加算層グループは、候補として維持される。このReLU/乗算/加算層グループは、第1段及び第2段で構成されているパターンである確定判定処理が実施されることとなる。
【0147】
次に、打ち切り処理について説明する。
<打ち切り処理>
制御ルーチン10は、既知モデル構造対応情報150の候補数が0となった場合、パターン判定処理において設定したルーチン割当情報130の局所モデル構造パターンマッチ処理済みフラグ136の処理済みフラグと、行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143の処理済みフラグとを解除する。なお、制御ルーチン10は、第1段判定処理で最初に入力層候補リストに登録した行列に対応する行列割当情報140の局所モデル構造パターンマッチ処理済みフラグ143については、処理済みフラグを解除しない。
【0148】
次に、確定判定処理について説明する。
<確定判定処理>
確定判定処理では、制御ルーチン10は、各構成要素候補の集合の組における入力層と出力層とを特定し、これらの構成と、パターン上の各層及び各要素との対応位置判定を行うことにより、構成要素候補がパターンと一致するのかを確定する処理を行う。
【0149】
制御ルーチン10は、第1段で列挙された入力層と、それ以外の段の構成要素候補の特定時に特定された行列のうち接続元の層がいずれかの段の構成要素候補集合に含まれていない行列を入力層候補として選択する。また、制御ルーチン10は、構成要素候補集合の層が出力する行列のうち、接続先の層が構成要素候補集合に含まれていない行列を出力層候補として選択する。
【0150】
次に、制御ルーチン10は、入力層候補から順にパターンと一致するかを判定する一致判定処理を行う。一致判定処理では、制御ルーチン10は、まず、構成要素候補における、パターンの対応する段の構成要素と種別が一致する層を優先的に対応付けすることにより確定する。例えば、パターンの対応する段の構成要素で同一種別のものが1つだけ含まれる場合は、種別のみで候補の構成要素とパターンの構成要素との対応を確定させることができる。
【0151】
制御ルーチン10は、確定した構成要素を構成要素候補集合から削除し、既知モデル構造対応情報150に記録する。具体的には、制御ルーチン10は、確定した構成要素が入出力層の場合には、対応するフィールドに行列割当情報IDを設定し、層である場合には、その層の要素位置(位置する段及び要素番号)とルーチン割当情報IDとを設定する。
【0152】
一方、パターンの対応する段の構成要素に同一種別のものが複数存在する場合は、制御ルーチン10は、前後の段の層で確定している要素との接続関係を参照して位置を確定する。なお、入力層、出力層については、入力、出力という種別の要素でパターンの層が構成されているものとして同様に処理を行う。
【0153】
制御ルーチン10は、これらの処理を入力層から出力層まで実施し、候補のパターンとの対応がすべて確定するまで、すなわち、各段の構成要素候補集合がすべて空になるまで同様の処理を繰り返し行う。
【0154】
この処理において、入力層から出力層までの処理を一度実行した際に、いずれの候補も確定しなかった場合、すなわち、各段の構成要素候補集合の要素が1つも削除されなかった場合は、パターンと対応しない要素が含まれていたことを意味するので、制御ルーチン10は、その時点で処理を打ち切る。
【0155】
このようにして、候補がすべて確定された場合には、制御ルーチン10は、既知モデル構造対応情報150の確定フラグ152に確定フラグを設定してパターンマッチ処理を終了する。
【0156】
なお、上記したパターンマッチ処理では、モデルの入力側から辿って各候補を確定していくようにしていたが、モデルの出力側から辿って各候補を確定していくようにしてもよい。その場合には、選択した行列へ出力している層を選択して処理を進めるようにすればよい。また、パターンマッチ処理では、層と行列とによる木構造と解釈をして処理を行うようにしていたが、モデルを層のみを含む木構造と解釈して部分木の一致判定を行って候補を確定するようにしてもよい。
【0157】
次に、置換可能層グループを置換した統合層の処理について説明する。
【0158】
例えば、図10(B)に示すような乗算/加算層グループに対応する統合層の処理について説明する。ここで、この統合層における処理の関数(統合関数FMA)は、入力層[0]を行列Aとし、乗算層に入力される定数[0]を行列Bとし、加算層に入力される定数[1]を行列Cとし、出力層[0]を行列Dとすると、行列Dは、以下の式(9)に示すように表される。
D=FMA(A,B,C)=ADD(MUL(A,B),C)
│di=ai×bi+ci ・・・(9)
【0159】
統合層の処理ルーチンは、乗算命令と加算命令の2命令で実現できるが、CPU101が乗算及び加算を統合した専用命令であるfmaを実行できる場合には、統合層の処理ルーチンにおいて、fmaの1命令で実行するようにしてもよい。このように、fmaを用いて実行することにより、処理ルーチンによる処理を高速化することができる。
【0160】
次に、図13(A)に示すような行列積/加算層グループに対応する統合層の処理について説明する。
【0161】
ここで、汎用行列演算ライブラリとしてのBLAS(Basic Linear Algebra Subprograms)には、GEMMという関数が提供されている。
GEMMは、転置フラグに応じて行列A,Bを転置した後に行列積を取り、その後に行列Cを加算する関数である。
GEMMによる演算結果行列Yは、以下に示す式(10)に示すように表される。
【0162】
【数5】
ここで、α,βは、重みであり、trA,trBは、行列A,Bに対する転置フラグである。
【0163】
例えば、trA=0、trB=0とした場合には、GEMMの処理は、図17に示すように表すことができる。
【0164】
ここで、図13(A)に示す行列積/加算層グループに対応する統合層の処理は、入力層[0]を行列A、定数[0]を定数行列B、定数[1]を定数行列C、出力層[0]を行列Dとすると、GEMM関数を用いると以下の式(11)に示すように表すことができる。
D=GEMM(A,B,C,1,1,0,0)=AB+C ・・・(11)
【0165】
したがって、図13(A)に示す行列積/加算層グループに対応する統合層の処理として、GEMMを用いた処理ルーチンとして作成することができる。
【0166】
次に、図13(B)に示す乗算/加算/行列積層グループに対応する統合層の処理について説明する。
【0167】
ここで、乗算/加算/行列積層グループにおける入力層[0]を行列A、入力層[1]を行列B、定数[0]を定数行列C、定数[1]を定数行列D、出力層[0]を行列Eとすると、行列Eは、以下の式(12)に示すように表すことができる。
【0168】
E=A ADD(MUL(B,C),D) ・・・(12)
【0169】
ここで、統合層の処理ルーチンでは、式(12)に示す処理を実行すればよいが、CPU101がfma命令を実行できる場合には、図18に示す処理ルーチンを実行するようにすることができる。このように、fma命令を実行することにより、統合処理の処理ルーチンにおける処理速度を向上することができる。
【0170】
また、乗算/加算/行列積層グループの処理は、入力層[1]又は定数[0]のすべての要素が1であり、加算層の定数[1]のすべての要素が0である場合には、入力層[0]と、入力層[1]又は定数[0]と、の行列積を行う処理となるので、乗算/加算/行列積層グループに対応する統合層の処理ルーチンを、対応する行列積を行う処理としてもよい。また、乗算/加算/行列積層グループの処理は、入力層[1]又は定数[0]のすべての要素が0である場合には、入力層[0]と定数[1]との行列積を行う処理となるので、乗算/加算/行列積層グループに対応する統合層の処理ルーチンを、対応する行列積を行う処理としてもよい。このようにすると、処理ルーチンにおいて内部行列への出力が不要となりメモリアクセスが削減できる。
【0171】
次に、図13(C)に示すような行列転置/加算層グループに対応する統合層の処理について説明する。
【0172】
ここで、行列転置/加算層グループにおける入力層[0]を行列A、入力層[1]を行列B、出力層[0]を行列Cとすると、行列Cは、以下の式(13)に示すように表すことができる。
C=ADD(A^(-1),B) ・・・(13)
ここで、通常の加算層の処理では、要素同士を線形にアクセスすることとなるが、例えば、行列Aの要素に対して、行列Aを転置させたときにアクセスする順番となるようにストライドアクセス可能な(所定のビットをあけてアクセス可能な)特別な加算層を用意しておくようにすることで、行列転置/加算層グループに対応する統合層の処理を実行することができる。このような加算層を用意しておくことで、メモリアクセスを低減することができる。
【0173】
また、行列転置/加算層グループの処理は、入力層[0]のすべての要素が0である場合には、入力層[1]を出力する処理となるので、行列転置/加算層グループに対応する統合層の処理ルーチンを、入力層[0]のすべての要素が0である場合には、入力層[1]をそのまま出力する処理としてもよく、また、入力層[1]のすべての要素が0である場合には、入力層[0]を転置する処理となるので、行列転置/加算層グループに対応する統合層の処理ルーチンを、入力層[0]を転置するだけの処理としてもよい。このようにすると、処理ルーチンにおいて内部行列への出力が不要となりメモリアクセスが削減できる。
【0174】
次に、図10(D)に示す減算/余弦/正弦/乗算層グループに対応する統合層の処理について説明する。
【0175】
減算/余弦/正弦/乗算層グループにおける入力層[0]を行列A、入力層[1]を行列B、出力層[0]を行列Cとすると、行列Cは、以下の式(14)に示すように表すことができる。
C=MUL(SIN(SUB(A,B)),COS(B))
│ci=sin(ai-bi)×cos(bi) ・・・(14)
【0176】
したがって、統合層の処理ルーチンでは、式(14)の処理ルーチン(第1処理ルーチン)を実行すればよい。
【0177】
ここで、行列Aの全ての要素がπ/2とすると、以下の式(15)の関係が満たされる。
【0178】
【数6】
【0179】
このため、式(14)は、以下の式(16)に示すように表すことができる。
【0180】
【数7】
【0181】
したがって、行列Aの全ての要素がπ/2である場合には、統合層の処理ルーチンでは式(16)の処理ルーチン(第2処理ルーチン)を実行すればよいこととなる。この第2処理ルーチンによると、第1処理ルーチンに比べて高速に処理を行うことができる。
【0182】
そこで、パターンマッチ処理を行う際に、行列Aの全ての要素がπ/2である場合には、第2処理ルーチンに置換するようにし、それ以外の場合には、第1処理ルーチンに置換するようにしてもよい。
【0183】
次に、図13(D)に示す選択/加算層グループに対応する統合層の処理について説明する。
【0184】
選択/加算層グループにおいては、選択層は、2つの入力と、選択用入力(1×1行列)とを受け取り、選択用入力の値が0か1かに応じて入力された行列のいずれを出力するかを選択する。ここで、選択/加算層グループにおける入力層[0]を行列A、入力層[1]を行列B、入力層[2]を行列C(1×1行列)とし、選択層の出力である内部行列[0]を行列Dとし、出力層[0]を行列Eとすると、行列Dは、以下の式(17)に示すように表すことができ、行列Eは、以下の式(18)に示すように表すことができる。
【0185】
【数8】
【0186】
選択/加算層グループに対応する統合層の処理としては、通常は、式(17)及び式(18)の処理を実行すればいい。
【0187】
ここで、行列Cの値が0の場合には、E=A+A=2Aとなり、乗算処理を実行すればよいこととなり、行列Cの値が1の場合には、E=A+Bとなり、加算処理を実行すればよいこととなる。
【0188】
そこで、統合層の処理ルーチンを、行列Cの値に応じて、加算処理とするか乗算処理とするかを切り替えるようにしてもよい。このようにすると、処理ルーチンにおいて内部行列への出力が不要となりメモリアクセスが削減できる。
【0189】
次に、置換可能層グループは、例えば、以下に示す汎用的な置換可能層グループ(汎用置換可能層グループ)としてもよい。
【0190】
図19は、変形例に係る汎用置換可能層グループの構成を説明する図である。
【0191】
汎用置換可能層グループ190は、複数の入力が可能な入力層と、N段(Nは、2以上)の処理層と、出力層とを有する。
【0192】
第1~N-1段の各段は、活性化関数層又はEltwise層(乗算又は加算といった要素単位の演算を行う層)を1つと、活性化関数層、Eltwise層、又はパススルー層(入力をそのまま出力する層)を0以上含む。第N段は、直前の段の結果を集約するEltwise層、又は、直前の段で1行列のみ出力された場合にそのまま出力するパススルー層を1つ含む。汎用置換可能層グループ190は、前段と後段との間では、任意の層から任意の層へ出力できる接続経路を有している。
【0193】
汎用置換可能層グループ190を用いることにより、汎用置換可能層グループ190により表現される複数の置換可能層グループを一つの表現として用いることができる。なお、汎用置換可能層グループ190を置換可能判定テーブル120で管理する場合には、汎用置換可能層グループ190を一つのパターンとして管理してもよく、汎用置換可能層グループ190で表現される全ての組み合わせに対応する置換可能層グループの全てをパターンとして管理してもよい。
【0194】
図19に示す汎用置換可能層グループ190では、含まれる置換可能層グループが多数となるので、例えば、以下に示すように一部を限定した汎用置換可能層グループ191としてもよい。
【0195】
図20は、変形例に係る汎用置換可能層グループの一例の構成を説明する図である。
【0196】
汎用置換可能層グループ191は、図19に示す汎用置換可能層グループ190において、N=3とし、第1段を3つの層とし、第2段を2つの層とし、第1段の第3層と、第2段の第1層との間には、接続経路を有していないものとしている。
【0197】
図21は、変形例に係る汎用置換可能層グループを用いて構成した置換可能層グループの構成を説明する図である。
【0198】
汎用置換可能層グループ191を用いると、図10(A)、図10(B)、図10(C)に示す置換可能層グループは、それぞれ図21(A)、図21(B)、図21(C)に示すように表現できる。
【0199】
次に、汎用置換可能層グループ190に対応する統合層の処理を専用の演算回路で実現する場合における演算回路について説明する。
【0200】
図22は、変形例に係る汎用置換可能層グループに対応する統合層を実現する演算回路の一例を説明する図である。
【0201】
演算回路220は、第1~N-1段の各段として、活性化関数層又はEltwise層に対応する処理を選択して実行可能な回路要素を1つと、活性化関数層、Eltwise層、又はパススルー層に対応する処理を選択して実行可能な回路要素をM-1個(Mは、1つの段で想定している最大の個数)含む。第N段は、直前の段の結果を集約するEltwise層又は直前の段で1行列のみ出力された場合にそのまま出力するパススルー層を選択して実行可能な回路要素を1つ含む。演算回路202は、前段と後段との間の各回路要素を選択して接続可能な接続経路を有している。
【0202】
この演算回路220を用いる場合には、汎用置換可能層グループ190で表される特定の置換可能層グループ(特定置換可能層グループ)に対応する統合層の処理を実行する場合には、制御ルーチン10は、演算回路220の各回路要素の処理を特定置換可能層グループの各層に対応する処理を選択して実行するとともに、回路要素間の接続回路を特定置換可能層グループにおける各層の接続関係となるように設定する。これにより、汎用置換可能層グループ190で表現される置換可能層グループに対応する統合層の処理を演算回路220で実現することができる。
【0203】
なお、汎用置換可能層グループ190に対応する統合層の処理を処理ルーチン(プログラム)で実行する場合には、演算回路220における各回路要素と同様な処理を実行するプログラム要素とともに、プログラム要素間の接続関係を設定可能な汎用的な処理ルーチンを予め用意し、この処理ルーチンを特定置換可能層グループにおける各層の構成及び各層の接続関係に対応するように設定することにより、統合層の処理ルーチンを構成するようにしてもよい。これにより、汎用置換可能層グループ190で表現される置換可能層グループに対応する統合層の処理を1つの処理ルーチンで実現することができる。なお、各層の構成に対応するよりルーチン部品を用意しておき、特定置換可能層グループにおける各層に対応するルーチン部品を、各層の接続関係に対応するように組み合わせて特定置換可能層グループ用の処理ルーチンを生成して実行するようにしてもよい。
【0204】
上記した実施形態では、推論の演算を実行する前に、学習済みモデルデータにおける置換可能層グループを統合層に置換した実行手順リストを作成するようにしていたが、以下に示すように、各層の推論の演算を実行する直前に、動的に置換可能層グループを統合層に置換した実行手順を作成するようにしてもよい。
【0205】
図23は、変形例に係る推論処理のフローチャートである。なお、図8に示す推論処理と同様なステップには同一の符号を付す。
【0206】
ステップS16では、制御ルーチン10は、実行手順リスト80に従って処理の実行を開始する。具体的には、制御ルーチン10は、学習済みモデルに入力するデータ(モデル入力データ)を、例えば、補助記憶装置106から読み込み、ワークエリア20に格納する。
【0207】
次いで、制御ルーチン10は、その時点の実行手順リストにある次の処理層に対して、ループ2の処理(S31,S32,S17)を実行させる。
【0208】
まず、制御ルーチン10は、学習済みモデルデータにおいて次に実行する処理層を含む未処理の処理層において、置換可能層グループのパターンにマッチする構造があるか否か、すなわち、未処理の処理層に置換可能層グループがあるか否かを検出する局所モデルパターンマッチ処理を実行する(S31)。なお、ステップS31は、ステップS14におけるパターンマッチ処理とは、次に実行する予定の未処理の処理層につながる未処理の処理層を対象にすることと、既に実行された処理層については、実際に行列が確定しているので定数を入力する層として処理を行うこととが違うが、他は同様な処理とすることができる。なお、パターンマッチを行う未処理の層の範囲については、次に実行する予定の処理層に対して直近の所定数(N)の層の範囲に限定してもよい。このように限定することにより、処理の負荷等を軽減することができる。
【0209】
次いで、制御ルーチン10は、ステップS31で、置換可能層グループがあると検出された場合、実行手順リストにある置換可能層グループを、この置換可能グループに対応する統合層に置換する割当済みルーチン置換処理を実行する(S32)。なお、置換可能層グループがない場合には、制御ルーチン10は、そのまま処理をステップS17に進める。
【0210】
割当済みルーチン置換処理では、制御ルーチン10は、検出された置換可能層グループに基づいて、実行手順リストにおける置換可能層グループに対する手順を、置換可能層グループに対応する統合層に対する手順に置換することにより、実行手順リストを作成する。
【0211】
ステップS32の次に、制御ルーチン10は、処理をステップS17に進める。
【0212】
制御ルーチン10は、実行手順リストに次の未処理の処理層がある場合には、ループ2の処理を実行し、実行手順リストに次の未処理の処理層がない場合には、ループ2の処理を抜ける。
【0213】
上記した推論処理によると、ステップS31において、既に実行された処理層については、定数を入力する層として処理を行うことができるので、図8に示す推論処理では、置換可能層グループとして判断できなかった処理層のグループについても置換可能層グループとして判断される可能性があり、より効果的に複数の処理層を統合層に置換して処理を行うことができる。これにより、学習済みモデルの処理の実行における処理層の数をより効果的に低減できる。したがって、メモリに対するアクセス回数をより効果的に低減することができる。
【0214】
なお、本発明は、上述の実施形態及び変形例に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【0215】
例えば、上記実施形態では、推論装置において、学習済みモデルの置換可能層グループを統合層に変換するようにしていたが、本発明はこれに限られず、例えば、学習済みモデルによる推論を実行しない処理装置において、学習済みモデルデータにおける置換可能層グループを統合層に変換して変換後学習済みモデル(事項規定情報の一例)を作成するようにしてもよい。この場合には、変換後学習済みモデルを推論装置に送信し、推論装置は、変換後学習済みモデルにより推論処理を実行すれば、上記した推論処理と同様の推論処理を実行することができる。なお、この場合には、推論装置は、統合層に対応する処理ルーチンを実行可能である必要がある。
【0216】
また、上記実施形態では、処理ルーチンをCPUが実行する例を示していたが、少なくとも1つの処理ルーチンをGPU等の他のプロセッサにより実行するようにしてもよい。
【符号の説明】
【0217】
10…制御ルーチン、20…ワークエリア、31…畳み込み層ルーチン、32…プーリング層ルーチン、33…ReLU活性化関数層ルーチン、34…加算層ルーチン、35…乗算層ルーチン、40…統合層ルーチン、100…推論装置、101…CPU、102…メインメモリ、108…表示装置、111…記録媒体
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23