(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-01-20
(45)【発行日】2025-01-28
(54)【発明の名称】データ変換装置、データ変換方法、及びプログラム
(51)【国際特許分類】
G06N 3/082 20230101AFI20250121BHJP
G06N 3/063 20230101ALI20250121BHJP
【FI】
G06N3/082
G06N3/063
(21)【出願番号】P 2023550805
(86)(22)【出願日】2021-09-28
(86)【国際出願番号】 JP2021035710
(87)【国際公開番号】W WO2023053222
(87)【国際公開日】2023-04-06
【審査請求日】2024-03-06
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100103894
【氏名又は名称】家入 健
(72)【発明者】
【氏名】佐田 悠生
【審査官】今城 朋彬
(56)【参考文献】
【文献】中国特許出願公開第106650922(CN,A)
【文献】特開2017-107568(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-20/00
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワークの構造を表すデータである構造データを取得する構造データ取得手段と、
前記構造データから、行列ベクトル積についてのノードを複数抽出するノード抽出手段と、
抽出した複数のノードを畳み込み層のノードに変換する
ことにより、行列ベクトル積のノード群を行列行列積のノードに置き換える変換手段と、
変換が行われた前記構造データを出力する構造データ出力手段と
を有する
データ変換装置。
【請求項2】
前記ノード抽出手段は、各ノードの入力の要素数が同じであり、かつ、各ノードの出力の要素数が同じであり、かつ、各ノードで使用するパラメータが同じであり、かつ、各ノード間に依存関係が無い、という条件を満たすノードを抽出する
請求項1に記載のデータ変換装置。
【請求項3】
前記変換手段は、変換された前記畳み込み層のノードの前段及び後段に、データ形式を調整する調整ノードを挿入する
請求項2に記載のデータ変換装置。
【請求項4】
前記変換手段は、変換された前記畳み込み層のノードが直列に連続する場合、直列に連続する当該複数の前記畳み込み層のノードに共通の前記調整ノードを挿入する
請求項3に記載のデータ変換装置。
【請求項5】
前記ノード抽出手段は、行列ベクトル積についてのノードとして、全結合層のノードを抽出する
請求項1乃至4のいずれか一項に記載のデータ変換装置。
【請求項6】
前記ノード抽出手段は、行列ベクトル積についてのノードとして、RNN(Recurrent Neural Network)層のノードを抽出し、
前記データ変換装置は、抽出されたRNN層のノードを、行列ベクトル積のノードである第1種のノードと、行列ベクトル積以外のノードである第2種のノードとに分解する分解手段をさらに有し、
前記変換手段は、前記第1種の複数のノードを前記畳み込み層のノードに変換する
請求項1乃至5にいずれか一項に記載のデータ変換装置。
【請求項7】
前記第1種のノードは、非線形活性化関数として恒等関数を用いる全結合層のノードであり、
前記第2種のノードは、前記全結合層のノードの前段のノードであってデータを連結する連結ノードと、前記全結合層のノードの後段のノードであってデータを分割する分割ノードと、前記分割ノードの後段のノードであって所定の演算を行う要素演算ノードである
請求項6に記載のデータ変換装置。
【請求項8】
前記変換手段は、異なるRNN層のノードに由来する複数の前記分割ノードの処理を一つのノードの処理として表し、異なるRNN層のノードに由来する複数の前記要素演算ノードの処理を一つのノードの処理として表す
請求項7に記載のデータ変換装置。
【請求項9】
ニューラルネットワークの構造を表すデータである構造データを取得し、
前記構造データから、行列ベクトル積についてのノードを複数抽出し、
抽出した複数のノードを畳み込み層のノードに変換
することにより、行列ベクトル積のノード群を行列行列積のノードに置き換え、
変換が行われた前記構造データを出力する
データ変換方法。
【請求項10】
ニューラルネットワークの構造を表すデータである構造データを取得する構造データ取得ステップと、
前記構造データから、行列ベクトル積についてのノードを複数抽出するノード抽出ステップと、
抽出した複数のノードを畳み込み層のノードに変換する
ことにより、行列ベクトル積のノード群を行列行列積のノードに置き換える変換ステップと、
変換が行われた前記構造データを出力する構造データ出力ステップと
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ変換装置、データ変換方法、及びプログラムが格納された非一時的なコンピュータ可読媒体に関する。
【背景技術】
【0002】
深層ニューラルネットワーク(DNN: Deep Neural Network)による自然言語処理や画像認識等に関する技術開発が活発に行われている。静止画像を扱う画像認識分野では、畳み込みニューラルネットワーク(CNN: Convolutional Neural Network)が多く用いられる。また、動画や音声などの時系列データを扱う画像認識分野や自然言語処理分野では再帰型ニューラルネットワーク(RNN: Recurrent Neural Network)が多く用いられる。
【0003】
大量の学習データを用いて大規模なサーバで訓練することで、DNNは非DNNの手法と比較して高い認識を達成することができる。一方でDNNの推論では、エッジデバイスやモバイル端末など電力の限られた環境下でリアルタイムに処理を実行する必要がある。そのような環境下でDNNを効率的に実行できるハードウェアとして、ASIC(Application Specific Integrated Circuit)デバイスが注目されている。ASICデバイスは畳み込み専用回路を搭載することで汎用のGPU(Graphics Processing Unit)やCPU(Central Processing Unit)よりも電力効率に優れている。
【0004】
非特許文献1は、RNN向けのシストリックアレイを提案した。この文献に記載された技術は、隣接する時間tおよびt+1における2つの時間のMV積(Matrix Vector product:行列ベクトル積)において計算順序を変更することで、重みへのメモリアクセス回数を削減し、この技術を用いない場合と比較して2.1倍の高速化を実現した。また、非特許文献2に記載された技術は、ベクトル要素のゼロ値と重みの乗算をスキップすることで積和演算数を削減し、処理の高速化を実現した。また、非特許文献3及び非特許文献4によって、汎用のGPUやCPUにおいてRNN層の演算の高速化が報告されている。
【先行技術文献】
【非特許文献】
【0005】
【文献】Naebeom Park et al., “Time-Step Interleaved Weight Reuse for LSTM Neural Network Computing”, ISLPED 2020.
【文献】Chang Gao et al., “DeltaRNN: A Power-efficient Recurrent Neural Network Accelerator”, FPGA 2018.
【文献】Connor Holmes et al., “GRNN: Low-Latency and Scalable RNN Inference on GPUs”, EuroSys 2019.
【文献】Minjia Zhang et al., “DeepCPU: Serving RNN-based Deep Learning Models 10x Faster”, USENIX ATC 2018.
【発明の概要】
【発明が解決しようとする課題】
【0006】
例えば、RNNでは膨大な数のRNN層やFC層(Fully Connected Layer:全結合層)の処理が要求される。RNN層やFC層はMV積で構成され、これらの層を含むニューラルネットワークをリアルタイムに処理するためにはMV積の計算の高速化が必要となる。
【0007】
問題点は、ニューラルネットワークのための既存のASICデバイスやGPUでは、MV積の実行効率がMM積(Matrix Matrix product:行列行列積)よりも悪く、大量のMV積を高速に実行することは困難ということである。既存のGPUやASICデバイスは、MM積に特化したものが多く、十分に大きな行列を入力に想定し、重みを参照するためのメモリアクセスに要する時間は入力行列と重みの積和演算の時間に比べ十分に小さくなるように設計されている。MV積は、入力データがMM積とは異なり、小さな一次元ベクトルである。そのため、入力ベクトルと重み行列との積和演算に要する時間よりも、頻繁に発生する重み行列に対するメモリアクセスに要する時間が長くなる。
【0008】
上述した非特許文献1及び非特許文献2は、RNN専用の回路の提案であり、広く用いられているDNN向けデバイスに適用することはできない。また、これらの文献に記載された回路はRNN層専用の回路であるため、FC層や畳み込み層については追加の回路変更なしに実行できない。また、非特許文献3及び非特許文献4では、汎用のGPUやCPUにおいてRNN層の演算の高速化が報告されている。しかし、これらの研究は、消費電力が大きく、大きなメモリを持つサーバ向けの高速化手法(デバイス上でのタイリング等)である。このため、そのような高速化手法を、基本的な畳み込み層やFC層のみを実行するための命令しか受け付けず、メモリの制御など細かい命令を扱うことが難しいASICデバイスに適用することは難しい。
【0009】
このような背景に鑑み、MV積を有する層を含むニューラルネットワークを高速に処理するための技術は依然として求められている。そこで、本明細書に開示される実施形態が達成しようとする目的の1つは、MV積を有する層を含むニューラルネットワークを高速に処理することが可能な新規な技術を提供することである。
【課題を解決するための手段】
【0010】
本開示の第1の態様にかかるデータ変換装置は、
ニューラルネットワークの構造を表すデータである構造データを取得する構造データ取得手段と、
前記構造データから、行列ベクトル積についてのノードを複数抽出するノード抽出手段と、
抽出した複数のノードを畳み込み層のノードに変換する変換手段と、
変換が行われた前記構造データを出力する構造データ出力手段と
を有する。
【0011】
本開示の第2の態様にかかるデータ変換方法では、
ニューラルネットワークの構造を表すデータである構造データを取得し、
前記構造データから、行列ベクトル積についてのノードを複数抽出し、
抽出した複数のノードを畳み込み層のノードに変換し、
変換が行われた前記構造データを出力する。
【0012】
本開示の第3の態様にかかるプログラムは、
ニューラルネットワークの構造を表すデータである構造データを取得する構造データ取得ステップと、
前記構造データから、行列ベクトル積についてのノードを複数抽出するノード抽出ステップと、
抽出した複数のノードを畳み込み層のノードに変換する変換ステップと、
変換が行われた前記構造データを出力する構造データ出力ステップと
をコンピュータに実行させる。
【発明の効果】
【0013】
本開示によれば、MV積を有する層を含むニューラルネットワークを高速に処理することが可能な新規な技術を提供できる。
【図面の簡単な説明】
【0014】
【
図1】畳み込み層の計算方法について説明する模式図である。
【
図2】FC層の計算方法について説明する模式図である。
【
図3】実施の形態1にかかるデータ変換装置の構成の一例を示すブロック図である。
【
図4】二つのFC層を含んで構成されるニューラルネットワークの構造データの例を示す表である。
【
図5】
図4で示される構造データで表されるノードの接続関係を示す模式図である。
【
図6】二つのRNN層(LSTM層)を含んで構成されるニューラルネットワークの構造データの例を示す表である。
【
図7】
図6で示される構造データで表されるノードの接続関係を示す模式図である。
【
図8】
図6に示した構造データで表されるニューラルネットワークに対して分解処理を行った後のニューラルネットワークの構造を表す構造データの例を示す表である。
【
図9】
図8で示される構造データで表されるノードの接続関係を示す模式図である。
【
図10】二つのFC層からなるセットが抽出されるニューラルネットワークに対してMV積変換部が生成した構造データの例を示す表である。
【
図11】
図10で示される構造データで表されるノードの接続関係を示す模式図である。
【
図12】二つのLSTM層からなるセットが抽出されるニューラルネットワークに対してMV積変換部が生成した構造データの例を示す表である。
【
図13】
図12で示される構造データで表されるノードの接続関係を示す模式図である。
【
図14】実施の形態1にかかるデータ変換装置の動作例を示すフローチャートである。
【
図15】実施の形態1にかかるデータ変換装置のハードウェア構成の一例を示すブロック図である。
【
図16】FC層の第1のセットと第1のセットと直列に接続しているFC層の第2のセットとを含んで構成されるニューラルネットワークの構造の例を示す模式図である。
【
図17】
図16に示す構造についての変換後の構造の例を示す模式図である。
【
図18】実施の形態2にかかるデータ変換装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【0015】
実施の形態の説明に先だって、実施の形態の説明の理解を助けるための説明を行う。
CNNには、主に、畳み込み層、全結合層(FC層)が含まれる。また、RNNには、主に、RNN層、FC層が含まれる。まず、
図1を用いて、畳み込み層の計算方法について説明する。
【0016】
図1は、畳み込み層の計算方法について説明する模式図である。ここでは、説明の簡略化のため、バッチサイズが1であり、入力データの高さと出力データの高さが同じ大きさHかつそれらの幅が同じ大きさWの場合について説明する。ここで、Mを入力データのチャネル数、Nを出力データのチャネル数、kをカーネルサイズ、bをバイアス値とする。
図1の上図に示すように畳み込み層の計算では、N個の重みフィルタと入力データとの畳み込みが計算され、その結果にバイアス値が加算され、さらに非線形活性化関数f
actが適用される。
【0017】
一方で、三次元の入力データと三次元の重みで畳み込みを実行することは複雑である。そのため一般的には、入力データおよび重みを二次元行列に変換し、二次元行列同士の行列行列積(MM積)を計算することで畳み込みが実現される。
図1の下図に示すように、畳み込み層は二次元の入力行列Dと二次元の重み行列FとのMM積とバイアス値の加算と、非線形活性化関数f
actの計算で表現できる。入力行列Dは、入力データの一部分((チャネル数, 縦, 横) = (M,k,k))だけ切り出して一次元に並べたベクトル
を用いてD[i][j]=d
i,jで表される。同様に、重み行列Fは、重みフィルタを一次元に並べたベクトル
を用いてF[i][j]=f
i,jと表され、出力行列Rはベクトル
を用いてR[i][j]=r
i,jと表される。畳み込み層は、前述の入力行列D、重み行列F、バイアス値
、非線形活性化関数f
actを用いて、以下の式(1)のように定義できる。なお、f
actは一般的にReLU(Rectified Linear Unit)関数などが用いられる。
【0018】
【0019】
次に、
図2を用いてFC層について説明する。
図2は、FC層の計算方法について説明する模式図である。
図2の上図に示すようにFC層の計算では、二次元の重みと一次元の入力ベクトルdの畳み込みが計算され、その結果にバイアスが加算され、さらに非線形活性化関数f
actが適用される。FC層での畳み込みは、行列ベクトル積(MV積)と等価である。FC層は入力ベクトルdと重み行列F、バイアス値b、非線形活性化関数f
actを用いて、以下の式(2)で表される(
図2の下図参照)。ただし、d[i]は入力ベクトルのi番目の要素d
i、r[i]は出力ベクトルのi番目の要素r
iとする。
【0020】
【0021】
次に、RNN層の一種であるLSTM層(Long short-term memory)について説明する。LSTM層は、以下の式(3)~式(5)で表される。
【0022】
【0023】
ただし、Pは入力ベクトルxの要素数、Qは出力ベクトルhの要素数、bはバイアス値である。LSTM層では、入力重みFiと時間tにおける入力ベクトルxtとのMV積とリカレント重みGiと時間t-1の出力ベクトルht-1とのMV積とバイアスbiの和gi,tをi = 0,...,3について計算する。さらに、g0,t~g3,tに対して要素演算を行い出力ベクトルhtが計算される。なお、要素演算とは、テンソルの要素ごとに独立して行う演算であり、MV積及びMM積以外の演算をいう。LSTM層の場合、シグモイド関数σ、双曲線正接関数tanh、要素ごとの積、および要素ごとの和が要素演算に該当する。また、内部状態ct、出力ベクトルhtの初期値はj = 0,...,Q-1についてc0[j] = 0, h0[j] = 0である。
【0024】
ここで、入力重みF0,...,F3及びリカレント重みG0,...,G3を連結した4Q行P+Q列の行列Fcatとxtとht-1を連結した要素数P+Qのベクトルx'tとバイアス値b0~b3を連結したベクトルb'を用いて、式(3)のLSTM層の計算は、以下の式(7)のように表すことができる。なお、Fcat、x't、b'は以下の式(6)のように表される。
【0025】
【0026】
【0027】
さらに、式(4)及び式(5)は、以下の式(8)のように表される。
【0028】
【0029】
ただし要素演算few1, few2は、以下の式(9)のように定義される。
【0030】
【0031】
要素演算few1, few2の実行時間はMV積と比較して短く、RNNの実行時間の多くはMV積が占める。そのため、RNNをリアルタイムに処理するためには、MV積の高速化手法が求められている。なお、本明細書ではRNN層の計算の例としてLSTM層の計算を説明するが、GRU(Gated Recurrent Unit)層などその他の種類のRNN層について発明の適用対象外ということではない。その他のRNN層も同様にMV積と要素演算を用いて表すことができ、本発明の適用対象である。
【0032】
以下、実施の形態について説明する。実施の形態では、MV積を有する層を含むニューラルネットワークの構造データを、MM積の計算が適用できるよう変換する。これにより、CPU, GPU, ASICなどのデバイスにおいて、このニューラルネットワークを高速に処理することを可能にする。
【0033】
<実施の形態1>
図3は、実施の形態1にかかるデータ変換装置100の構成の一例を示すブロック図である。
図3に示すように、データ変換装置100は、ノード抽出部101とノード分解部102とMV積変換部103を有する。データ変換装置100は、入力された構造データ91に対して、MV積の計算をMM積の計算により実現するための変換処理を行って、変換後の構造データ92を出力する。
【0034】
ここで、構造データとは、ニューラルネットワークの構造を表すデータであり、具体的には、ニューラルネットワークのノード間の接続関係及び各ノードの処理内容を定義するデータである。
図4は、二つのFC層を含んで構成されるニューラルネットワークの構造データの例を示す。
図5は、
図4で示される構造データで表されるノードの接続関係を示す模式図である。また、
図6は、二つのRNN層(LSTM層)を含んで構成されるニューラルネットワークの構造データの例を示す。
図7は、
図6で示される構造データで表されるノードの接続関係を示す模式図である。
図7のLSTM層のノードの三つの入力(入力0,入力1,入力2)は順に、入力ベクトルx
t、出力ベクトルh
t-1、一つ前の時間の内部状態c
t-1を示し、二つの出力(出力0,出力1)は順に出力ベクトルh
t、内部状態c
tを示している。
【0035】
ニューラルネットワークの構造データは、具体的には、
図4及び
図6に示すように、複数のノードを含む表で表現され、各ノードについて次のような情報を有する。すなわち、構造データは、ノードの識別子であるノード番号、演算子名、入力ノード番号、演算等のために参照される付加的な情報である属性情報を含む。なお、以下の説明では、ノード番号がi(ここで、iはノード番号を示すインデックス番号である)のノードをノードiと表記することがある。例えば、ノード番号が10のノードをノード10と表記する。
【0036】
演算子名は、ノードにおいて実行する演算を特定するための情報であり、当該ノードで用いられる演算の種類を示している。ニューラルネットワークを処理する任意のデバイスが構造データに基づいて実際に処理を実行する前には、構造データにおける演算子名が読み出され、読み出された演算子名が、この演算子名に対応する機械語に変換される。データ変換装置100による構造データの変換は、抽象度の高いニューラルネットワーク構造の変形であり、演算子自体の実装の変更を行わない。そのため、データ変換装置100による変換結果はCPU、GPU、ASICなどの機械語が全く異なるいずれのデバイスであっても適用することが可能である。
【0037】
入力ノード番号は、入力側の接続関係を示す。具体的には、入力ノード番号は、ノードに対する入力のそれぞれについて、いずれのノードのいずれの出力であるかを示す情報である。例えば、構造データに示される入力ノード番号が「x1:y1, x2:y2」である場合、入力の0番目がノード番号x1のノードのy1番目の出力と接続されており、入力の1番目がノード番号x2のノードのy2番目の出力と接続されていることを示す。
【0038】
属性情報は、パラメータ、入力の形状、及び、出力の形状を含む。属性情報のパラメータは、重みやバイアス値、カーネルサイズ(畳み込み層の演算が行われる場合)など、演算時に必要なパラメータを示している。すなわち、属性情報のパラメータは、演算のためのパラメータである。具体的には、例えば、
図4及び
図6の重みID、バイアス値IDは、重みパラメータFやF
cat、バイアスパラメータbやb'の格納されているファイルまたはメモリのポインタアドレスであり、実際にデバイスでLSTM層またはFC層が計算されるときに参照される。また、
図4のパラメータf_actは活性化関数の種類を表している。
【0039】
入力の形状は、ノードに入力されるデータの形状を示し、出力の形状は、ノードから出力されるデータの形状を示す。ここで、入力又は出力されるデータの形状とは、テンソルとしてのデータの形状である。属性情報における入力の形状は、ノードへの入力のそれぞれについてのデータの形状を示す情報であり、属性情報における出力の形状は、ノードからの出力のそれぞれについてのデータの形状を示す情報である。例えば、構造データに示される入力(出力)の形状が「x’:y’」である場合、ノードのx’番目の入力(出力)のデータの形状がy’であることを示す。ここで、本稿における形状の表記について説明する。本稿では、「(x’)」は、要素数がx’であるベクトルを表し、「(y’,x’)」は、y’行x’列の二次元行列を表し、「(z’,y’,x’)」は、チャネル数z’、高さy’、幅x’のテンソルを表す。例えば、
図4に示される入力の形状「0:(512)」は、0番目の入力が、要素数512の一次元のベクトルであることを表している。
【0040】
ノード抽出部101は、行列ベクトル積についてのノードであって、所定の条件を満たす複数のノードを、入力された構造データ91から抽出する。具体的には、ノード抽出部101は、次の3つの条件を全て満たす2以上のRNN層(もしくはFC層)からなるセットを一組抽出する。すなわち、ノード抽出部101は、以下の条件1から条件3を満たす複数のRNN層からなるセットを抽出する。または、ノード抽出部101は、以下の条件1から条件3を満たす複数のFC層からなるセットを抽出する。
【0041】
条件1:それぞれのRNN層(またはFC層)において、相互に対応する入力ベクトルの要素数が同じであり、かつ、相互に対応する出力ベクトルの要素数も同じである。ここで、相互に対応する入力ベクトル(出力ベクトル)とは、第1のRNN層(FC層)におけるi番目の入力ベクトル(出力ベクトル)と第2のRNN層(FC層)におけるi番目の入力ベクトル(出力ベクトル)をいう。なお、RNN層(FC層)への入力が行列などのように多次元のデータである場合には、条件1は、各次元の要素数が同じであることを要求する。
条件2:それぞれのRNN層(またはFC層)で使用する重みやバイアス値が同じである。
条件3:それぞれのRNN層(またはFC層)において入出力に依存関係が無い。
【0042】
図4に示す例では、相互に対応する入出力の要素数が同じであり(すなわち、条件1を満たし)、かつ、同じ重み(ID:1)及び同じバイアス(ID:2)を使用している(すなわち、条件2を満たす)2つのFC層(ノード10、11)が抽出される。同様に、
図6に示す例では、相互に対応する入出力の要素数が同じ(すなわち、条件1を満たし)、かつ、同じ重み(ID:1)及び同じバイアス(ID:2)を使用している(すなわち、条件2を満たす)2つのLSTM層(ノード10、11)が抽出される。ただし、
図4に示す例及び
図6に示す例において、ノード10及びノード11は、上述した条件3を満たすものとする。
【0043】
条件3は、抽出されるノードの出力が、抽出される他のノードの入力に直接的又は間接的に接続していないことを要求する条件である。ノード抽出部101は、条件1及び条件2を満たすノードのそれぞれについて、子のノードの探索を再帰的に繰り返し、条件1及び条件2を満たす他のノードの入力に接続していないことを確認する。例えば、ノード抽出部101は、ノード10の子ノード、孫ノードなどを順番に探索していき、ノード10の出力がノード11の入力に接続していないことを確認する。同様に、ノード抽出部101は、ノード11の子ノード、孫ノードなどを順番に探索していき、ノード11の出力がノード10の入力に接続していないことを確認する。ノード抽出部101は、条件1及び条件2を満たすノードについて、条件1及び条件2を満たす他のノードの入力に接続していないことを確認すると、このノードが条件3を満たすと判定する。
【0044】
条件1及び条件2を満たすFC層は、以下の式(10)を満たす。すなわち、ノード抽出部101は、式(10)を満たすL個(Lは2以上の整数であり、
図4に示した例ではL=2である)のFC層のノードを抽出する。
【0045】
【0046】
ここで、d
lおよびr
lはインデックスl(lはアルファベットのエルを表している)で特定されるノードの入力ベクトルdおよび出力ベクトルrである。式(10)において、入力ベクトルd
lの要素数は抽出されたノード(
図4に示した例では、l=0,1)の全てで同じMであり、出力ベクトルr
lの要素数は全てのノードで同じNである。このことは、条件1が満たされていることに対応している。また、式(10)において、抽出されたノードで使用される重み行列F、バイアス値bは、lに関わらず同じである。このことは、条件2が満たされていることに対応している。
【0047】
条件1及び条件2を満たすRNN層(LSTM層)は、以下の式(11)~式(15)を満たす。すなわち、ノード抽出部101は、これらの式を満たすL個(
図6に示した例ではL=2である)のRNN層のノードを抽出する。
【0048】
<式(11)>
<式(12)>
<式(13)>
<式(14)>
<式(15)>
【0049】
ここで、x
l,t, h
l,t,
c
l,tはインデックスlで特定されるノードの入力ベクトルx
t、出力ベクトルh
t、内部状態c
tを示す。また、x'
l,t, m
l,t,
g
i,l,tは計算過程の一時的な計算結果を保存するベクトルであり、x'
l,tは入力ベクトルと出力ベクトルを連結したベクトル、m
l,tは積和演算とバイアス加算の計算結果、g
0,l,t~g
3,l,tはm
l,tを要素数Qごとに分割したベクトルを示す。これらの式において、ノードの入力ベクトルx
l,tの要素数は抽出されたノード(
図6に示した例では、l=0,1)の全てで同じPである。また、ノードの入力ベクトルh
l,t-1の要素数は抽出されたノードの全て同じQである。また、ノードの入力ベクトルc
l,tの要素数は抽出されたノードの全てでQである。さらに、ノードの出力ベクトルh
l,tの要素数は全てのノードで同じQである。これらのことは、条件1が満たされていることに対応している。また、抽出されたノードで使用される重み行列F
cat、バイアス値b'は、lに関わらず同じである。このことは、条件2が満たされていることに対応している。
【0050】
ノード分解部102は、ノード抽出部101によってRNN層のノードが抽出された場合、抽出されたRNN層のノードを、行列ベクトル積のノードである第1種のノードと、行列ベクトル積以外のノードである第2種のノードとに分解する。すなわち、ノード分解部102は、ノード抽出部101が抽出したL個のノードがRNN層のノードの場合に、以下で説明するRNN層のノード分解処理を実行する。したがって、ノード抽出部101が全結合層(FC層)のノードを抽出する場合には、データ変換装置100においてノード分解部102は省略されてもよい。
【0051】
ノード分解部102は、ノード分解処理として、上述した条件1から条件3を満たす複数のRNN層のノードのそれぞれを、MV積のノード(第1種のノード)とその他の計算ノード(第2種のノード)に分解する処理を行う。ノード分解処理後のノード数や演算子名はRNN層の種類によって異なる。LSTM層の場合、ノード抽出部101によって抽出された各ノードは、式(12)に示すMV積のノードと、式(11)および式(13)~式(15)に示すその他の演算(要素演算)のノードに分解される。ここで、式(12)で示される演算は、factとして恒等関数を用いた場合のFC層の演算と同じである。したがって、ノード分解部102は、ノード抽出部101によって抽出されたノードを、要素演算を行うノードと、非線形活性化関数として恒等関数を用いる全結合層のノードとに分解する、と説明することもできる。
【0052】
ノード分解部102は、入力された構造データ91から、分解処理後のニューラルネットワークの構造を表す構造データを生成する。
図8は、
図6に示した構造データで表されるニューラルネットワークに対して分解処理を行った後のニューラルネットワークの構造を表す構造データの例を示す。また、
図9は、
図8で示される構造データで表されるノードの接続関係を示す模式図である。なお、分解によって置き換えられた新たなノードの番号はその他のノードの番号と重複しないように選択される。
【0053】
図8及び
図9におけるノード10-1及びノード11-1で行われる連結処理は、上述した式(11)に対応している。また、ノード10-2及びノード11-2で行われるFC層の処理は、上述した式(12)、すなわちMV積とバイアス加算に対応している。また、ノード10-3及びノード11-3で行われる分割処理は、上述した式(13)に対応している。さらに、ノード10-4及びノード11-4で行われる要素演算処理は上述した式(14)に対応し、ノード10-5及びノード11-5で行われる要素演算処理は上述した式(15)に対応する。したがって、この場合、ノード分解部102は、RNN層のノードを、次のような第1種のノードと第2種のノードに分解するといえる。すなわち、この場合、第1種のノードは、非線形活性化関数として恒等関数を用いるFC層(全結合層)のノード10-2、11-2である。また、第2種のノードは、FC層のノードの前段のノードであってデータを連結する連結ノード10-1、11-1と、FC層のノードの後段のノードであってデータを分割する分割ノード10-3、11-3と、分割ノードの後段のノードであって所定の演算を行う要素演算ノード10-4、11-4、10-5、11-5である。
【0054】
ここで、変換後のノードについて具体的に説明する。なお、
図6及び
図7に示したLSTM層のノード10の変換後のノードについて説明し、同様な説明が可能なLSTM層のノード11の変換後のノードについては、適宜、説明を省略する。ノード10-1は、LSTM層のノード10に対する入力の一部(具体的には、x
t、h
t-1の2つの入力)が入力されるノードであり、入力されたベクトルを連結する連結処理を行う。
図8の連結処理のパラメータに記載されているdim: 0は、このパラメータを有するノードが行う処理が0番目の次元に対する連結処理であることを表しており、このノードに対する二つの入力ベクトルが
の場合に出力ベクトル
はy' = (u' v') = (u'
0,...,u'
q-1,v'
0,...,v'
s-1)となる。ただし、q,sはそれぞれu', v'の要素数であり、ノード10-1およびノード11-1ではq = s = 512である。1次元以上の場合の連結処理、例えばn'次元の入力データ
に対するdim: p'の連結処理は、p'番目の次元の要素を連結させる処理である。この連結処理が行われた場合の出力データは
となる。ただし、q
jはU'のj番目の次元の要素数、s
jはV'のj番目の次元の要素数であり、U'とV'の要素数はp'番目の次元を除き等しくなければならない(q
j = s
j, j = 0,...,p'-1,p'+1,...,n'-1)。なお、
図8に示されるノード10-1についての構造データから、ノード10-1について次のことが定義される。ノード10-1の入力は、ノード1の0番目の出力とノード2の0番目の出力と接続している。そして、ノード10-1は、0番目の次元に対する連結処理を行うことにより、「0:(512), 1:(512)」で表される入力データから、「0:(1024)」で表される出力データを生成する。
【0055】
ノード10-2は、連結処理を行うノード10-1の出力が入力されるノードであり、非線形活性化関数として恒等関数を用いるFC層の処理を、入力されたベクトルに対して行う。式(12)は活性化関数f
actの無いFC層として表されるため、
図8のFC層(ノード10-2, 11-2)はパラメータが”f_act: なし”となっている。なお、
図8に示されるノード10-2についての構造データから、ノード10-2について次のことが定義される。ノード10-2の入力は、ノード10-1の0番目の出力と接続している。そして、ノード10-2は、重みID:1で指定される重みと、バイアスID:2で指定されるバイアスと、恒等関数である活性化関数とを用いて、FC層の処理を行う。これにより、ノード10-2は、「0:(1024)」で表される入力データから、「0:(2048)」で表される出力データを生成する。
【0056】
ノード10-3は、FC層の処理を行うノード10-2の出力が入力されるノードであり、ノード10-2の出力に対して分割処理を行う。
図8の分割処理のパラメータに記載されているdim: 0は、このパラメータを有するノードが行う処理が0番目の次元に対する分割処理であることを表している。分割処理は連結処理とは逆の処理を行うものであり、dim: p'の分割処理は、p'番目の次元の要素を分割させる処理である。なお、
図8に示されるノード10-3についての構造データから、ノード10-3について次のことが定義される。ノード10-3の入力は、ノード10-2の0番目の出力と接続している。そして、ノード10-3は、0番目の次元に対する分割処理を行うことにより、「0:(2048)」で表される入力データから、「0:(512), 1:(512) , 2:(512) , 3:(512)」で表される出力データを生成する。
【0057】
ノード10-4は、分割処理を行うノード10-3の出力の一部と、LSTM層のノード10に対する入力の一部(具体的には、c
t-1)とが入力されるノードであり、要素演算f
ew1を行う。また、ノード10-5は、要素演算f
ew1を行うノード10-4の出力と、分割処理を行うノード10-3の出力の一部とが入力されるノードであり、要素演算f
ew2を行う。なお、
図8に示されるノード10-4についての構造データから、ノード10-4について次のことが定義される。ノード10-4の入力は、ノード10-3の0番目の出力、ノード10-3の1番目の出力、ノード10-3の2番目の出力、及びノード3の0番目の出力と接続している。そして、ノード10-4は、要素演算f
ew1を行うことにより、「0:(512), 1:(512) , 2:(512) , 3:(512)」で表される入力データから、「0:(512)」で表される出力データを生成する。また、
図8に示されるノード10-5についての構造データから、ノード10-5について次のことが定義される。ノード10-5の入力は、ノード10-4の0番目の出力及びノード10-3の3番目の出力と接続している。そして、ノード10-5は、要素演算f
ew2を行うことにより、「0:(512), 1:(512)」で表される入力データから、「0:(512)」で表される出力データを生成する。なお、要素演算f
ew1, f
ew2のような複数の処理をまとめた演算子が使用できない場合には、より細かいシグモイド関数や要素ごとの積などの演算子へ更に分解が行われてもよい。
【0058】
MV積変換部103は、抽出した複数のノードを畳み込み層のノードに変換する。ただし、MV積変換部103は、抽出した複数のノードに対してノード分解部102による分解処理が行われた場合には、分解処理が行われたノードを畳み込み層のノードに変換する。より詳細には、MV積変換部103は、条件1~3を満たすL個のFC層のノードを単一のMM積(畳み込み層)のノードへ置き換える。また、MV積変換部103は、条件1~3を満たすL個のRNN層(LSTM層)のノードについて分解処理を行って得られたMV積とバイアス加算のノードを単一のMM積(畳み込み層)のノードへ置き換える。
【0059】
ノード抽出部101によってL個のFC層のノードが抽出された場合、MV積変換部103は、具体的には、式(10)で示されるL個のFC層のノードを以下の式(16)で表現できる、カーネルサイズk=1の単一の畳み込み層のノードに置き換える。すなわち、MV積変換部103は、MV積のノード群をMM積のノードに置き換える。
【0060】
【0061】
なお、行列
はベクトルd
lを縦に並べた
で定義できる。
また、出力ベクトルr
lは
を満たす。
【0062】
また、MV積変換部103は、変換された畳み込み層のノードの前段及び後段に、データ形式を調整する調整ノードを挿入する。
図10は、二つのFC層からなるセットが抽出されるニューラルネットワークに対してMV積変換部103が生成した構造データの例を示す。
図11は、
図10で示される構造データで表されるノードの接続関係を示す模式図である。
【0063】
MV積変換部103は、
図4及び
図5に示されるFC層のノード10及び11を、単一の畳み込み層のノード10-3に変換する。ノード10-3は、後述する形状変形処理を行うノード10-2の出力が入力されるノードであり、畳み込み層の処理を、入力されたデータに対して行う。なお、
図10に示されるノード10-3についての構造データから、ノード10-3について次のことが定義される。ノード10-3の入力は、ノード10-2の0番目の出力と接続している。そして、ノード10-3は、重みID:1で指定される重みと、バイアスID:2で指定されるバイアスと、ReLu関数とを用いて、カーネルサイズが1である畳み込み層の処理を行う。これにより、ノード10-3は、「0:(512,1,2)」で表される入力データから、「0:(512,1,2)」で表される出力データを生成する。
【0064】
また、MV積変換部103は、畳み込み層のノード10-3の前段及び後段に調整ノードを挿入する。これら調整ノードによって、入力データについて、畳み込み層のノード10-3が入力に対して要求するデータ形式に合うようにデータ形式が調整され、出力データについて、ノード抽出部101が抽出したノードの出力のデータ形式に合うようにデータ形式が調整される。具体的には、
図10及び
図11に示されるように、MV積変換部103は、畳み込み層のノード10-3の前段に、結合処理を行うノード10-1及び形状変形処理を行うノード10-2を挿入する。そして、MV積変換部103は、畳み込み層のノード10-3の後段に、形状変形処理を行うノード10-4及び分割処理を行うノード10-5を挿入する。
【0065】
結合処理を行うノード10-1は、FC層のノード10への入力及びノード11への入力が入力されるノードであり、入力されたベクトルを結合する。この結合処理は、具体的には、上述したd
lを結合し
を出力する処理である。
図10に示すdim: 1の結合処理(ノード10-1の処理)は、1番目の次元に新たな次元を追加した後に、同じパラメータdim: 1の連結処理を行うことを意味する。すなわち、パラメータdim: 1で指定される結合処理は、形状(512)の二つのベクトルのそれぞれに対して、1番目の次元を新たに挿入し、形状(512, 1)の二つの行列を生成し、形状(512, 1)の二つの行列に対してdim: 1の連結処理を行い、形状(512, 2)の1つの行列を出力する。なお、
図10に示されるノード10-1についての構造データから、ノード10-1について次のことが定義される。ノード10-1の入力は、ノード1の0番目の出力とノード2の0番目の出力と接続している。そして、ノード10-1は、パラメータdim: 1で特定される結合処理を行うことにより、「0:(512), 1:(512)」で表される入力データから、「0:(512, 2)」で表される出力データを生成する。
【0066】
形状変形処理を行うノード10-2は、結合処理を行うノード10-1の出力が入力されるノードであり、入力されたデータを、畳み込み層の入力に合うように三次元入力データへ変形する形状変形処理を行う。形状変形処理では、入力データをパラメータshapeで指定された形状に変形する。ノード10-2の形状変形処理は、512行2列の行列をチャネル数512、高さ1、幅2のテンソルに変形する。形状変形処理において、パラメータshapeで指定される形状のデータの要素数は形状変形処理の入力データの要素数と等しくなければならない。ノード10-2の形状変形処理では、パラメータshape: (512, 1, 2)で指定される形状のテンソルの要素数は1024であり、形状(512, 2)の入力データの要素数1024と等しい。なお、
図10に示されるノード10-2についての構造データから、ノード10-2について次のことが定義される。ノード10-2の入力は、ノード10-1の0番目の出力と接続している。そして、ノード10-2は、パラメータshape: (512, 1, 2)で指定される形状変形処理を行うことにより、「0:(512, 2)」で表される入力データから、「0:(512, 1, 2)」で表される出力データを生成する。なお、
図10の例では、畳み込み層の入力データの形状が(入力チャネル数M,高さH,幅W)=(512, 1, 2)となるように変形しているが、高さ方向に変形、すなわち、(512, 2, 1)と変形してもよいし、L>2の場合には高さと幅の両方向に変形しても良い。
【0067】
また、畳み込み層のノード10-3の後に、形状変形処理を行うノード10-4及び分割処理を行うノード10-5が追加される。ノード10-4は、畳み込み層の処理を行うノード10-3の出力が入力されるノードであり、入力されたデータの形状を、所定の形状に変形する。具体的には、ノード10-4は、チャネル数512、高さ1、幅2のテンソルを512行2列の行列へ変形する。なお、
図10に示されるノード10-4についての構造データから、ノード10-4について次のことが定義される。ノード10-4の入力は、ノード10-3の0番目の出力と接続している。そして、ノード10-4は、パラメータshape: (512, 2)で指定される形状変形処理を行うことにより、「0:(512, 1, 2)」で表される入力データから、「0:(512, 2)」で表される出力データを生成する。
【0068】
ノード10-5は、形状変形処理を行うノード10-4の出力が入力されるノードであり、ノード10-4の出力に対して分割処理を行う。この分割処理は、具体的には、上述した
を分割しr
lを出力する処理である。なお、
図10に示されるノード10-5についての構造データから、ノード10-5について次のことが定義される。ノード10-5の入力は、ノード10-4の0番目の出力と接続している。そして、ノード10-5は、1番目の次元に対する分割処理を行うことにより、「(512, 2)」で表される入力データから、「0:(512), 1:(512)」で表される出力データを生成する。
【0069】
このように、MV積変換部103は、形状変型処理(ノード10-4)および分割処理(ノード10-5)を挿入することによって、最後のノードの出力データの形状(
図10及び
図11のノード10-5の出力データの形状)が入力構造の出力の形状(
図4及び
図5のノード10, 11の出力データの形状)と同じになるようにする。
【0070】
ノード抽出部101によってL個のRNN層のノードが抽出された場合、MV積変換部103は、L個の上述した第1種のノード(MV積のノード)を以下の式(17)で表現できる単一の畳み込み層のノードに置き換える。すなわち、MV積変換部103は、MV積のノード群をMM積のノードに置き換える。
【0071】
【0072】
FC層の場合と同様、MV積変換部103は、変換された畳み込み層のノードの前段及び後段に、データ形式を調整する調整ノードを挿入する。
図12は、二つのLSTM層からなるセットが抽出されるニューラルネットワークに対してMV積変換部103が生成した構造データの例を示す。
図13は、
図12で示される構造データで表されるノードの接続関係を示す模式図である。なお、MV積変換部103で新たに追加されるノードの番号はその他のノードの番号と重複しないように選択される。
【0073】
MV積変換部103は、
図8及び
図9に示されるFC層のノード10-2及び11-2を、単一の畳み込み層のノード10'-3に変換する。ノード10'-3は、形状変形処理を行うノード10'-2の出力が入力されるノードであり、畳み込み層の処理を、入力されたデータに対して行う。なお、
図12に示されるノード10'-3についての構造データから、ノード10'-3について次のことが定義される。ノード10'-3の入力は、ノード10'-2の0番目の出力と接続している。そして、ノード10'-3は、重みID:1で指定される重みと、バイアスID:2で指定されるバイアスと、恒等関数である活性化関数とを用いて、カーネルサイズが1である畳み込み層の処理を行う。これにより、ノード10'-3は、「0:(1024,1,2)」で表される入力データから、「0:(2048,1,2)」で表される出力データを生成する。
【0074】
また、MV積変換部103は、畳み込み層のノード10'-3の前段及び後段に調整ノードを挿入する。具体的には、
図12及び
図13に示されるように、MV積変換部103は、畳み込み層のノード10'-3の前段に、結合処理を行うノード10'-1及び形状変形処理を行うノード10'-2を挿入する。また、MV積変換部103は、畳み込み層のノード10'-3の後段に、形状変形処理を行うノード10'-9、10'-11及び分割処理を行うノード10'-10、10'-12を挿入する。ノード10'-1は、連結処理を行うノード10-1の出力とノード11-1の出力が入力されるノードであり、入力されたベクトルを結合する。ノード10'-2は、結合処理を行うノード10'-1の出力が入力されるノードであり、入力されたデータを、畳み込み層の入力に合うように三次元入力データへ変形する形状変形処理を行う。ノード10'-9は、要素演算f
ew1を行うノード10'-7の出力が入力されるノードであり、入力されたデータを、所定の形状に変形する。同様に、ノード10'-11は、要素演算f
ew2を行うノード10'-8の出力が入力されるノードであり、入力されたデータを、所定の形状に変形する。また、ノード10'-10は、形状変形処理を行うノード10'-9の出力が入力されるノードであり、ノード10'-9の出力に対して分割処理を行う。同様に、ノード10'-12は、形状変形処理を行うノード10'-11の出力が入力されるノードであり、ノード10'-11の出力に対して分割処理を行う。
【0075】
また、MV積変換部103は、要素演算f
ew1を行うノード10'-7の前段にも調整ノードとして、結合処理を行うノード10'-5及び形状変形処理を行うノード10'-6を挿入する。これら調整ノードによって、要素演算f
ew1を行うノード10'-7が入力に対して要求するデータ形式に合うように、データ形式が調整される。ノード10'-5は、LSTM層のノード10(
図7参照)に対する入力の一部(具体的には、c
t-1)と、LSTM層のノード11(
図7参照)に対する入力の一部(具体的には、c
t-1)と、が入力されるノードであり、入力されたベクトルを結合する。ノード10'-6は、結合処理を行うノード10'-5の出力が入力されるノードであり、入力されたデータを、要素演算f
ew1を行うノード10'-7の入力に合うように変形する形状変形処理を行う。
【0076】
図12に示される調整ノードについての構造データから、これらのノードの具体的な処理は定義される。なお、
図12に示す構造データの具体的な意味については、
図10を参照した上述の説明に基づいて、同様に理解できるため、説明を省略する。
【0077】
RNN層の場合は、MV積だけではなく要素演算についても共通のノードで実行できる。これは、異なるRNN層のノードに由来するデータが結合されていることに起因している。共通のノードによる演算の実行を実現するため、MV積変換部103は、異なるRNN層のノードに由来する複数の分割ノードの処理を一つのノードの処理として表し、異なるRNN層のノードに由来する複数の要素演算ノードの処理を一つのノードの処理として表してもよい。具体的には、MV積変換部103は、異なるRNN層のノードに由来する複数の分割ノード(
図9のノード10-3及びノード11-3)の処理を一つのノード(
図12及び
図13のノード10'-4)の処理として表す。すなわち、MV積変換部103は、異なるRNN層についての分割ノードの処理を共通の処理に置き換える。また、MV積変換部103は、異なるRNN層のノードに由来する複数の要素演算f
ew1を行うノード(
図9のノード10-4及びノード11-4)の処理を一つのノード(
図12及び
図13のノード10'-7)の処理として表す。すなわち、MV積変換部103は、異なるRNN層についての要素演算f
ew1を共通の処理に置き換える。さらに、MV積変換部103は、異なるRNN層のノードに由来する複数の要素演算f
ew2を行うノード(
図9のノード10-5及びノード11-5)の処理を一つのノード(
図12及び
図13のノード10'-8)の処理として表す。すなわち、MV積変換部103は、異なるRNN層についての要素演算f
ew2を共通の処理に置き換える。
【0078】
ノード10'-4は、畳み込み層の処理を行うノード10'-3の出力が入力されるノードであり、ノード10'-3の出力に対して分割処理を行う。ノード10'-4は、入力されたデータを、要素演算f
ew1のためのデータと、要素演算f
ew2のためのデータとに分割する。なお、
図12に示されるノード10'-4についての構造データから、ノード10'-4について次のことが定義される。ノード10'-4の入力は、ノード10'-3の0番目の出力と接続している。そして、ノード10'-4は、0番目の次元に対する分割処理を行うことにより、「0:(2048, 1, 2)」で表される入力データから、「0:(512, 1, 2), 1:(512, 1, 2) , 2:(512, 1, 2) , 3:(512, 1, 2)」で表される出力データを生成する。
【0079】
ノード10'-7は、分割処理を行うノード10'-4の出力の一部と、形状変形処理を行うノード10'-6の出力とが入力されるノードであり、要素演算f
ew1を行う。また、ノード10'-8は、要素演算f
ew1を行うノード10'-7の出力と、分割処理を行うノード10'-4の出力の一部とが入力されるノードであり、要素演算f
ew2を行う。なお、
図12に示されるノード10'-7についての構造データから、ノード10'-7について次のことが定義される。ノード10'-7の入力は、ノード10'-4の0番目の出力、ノード10'-4の1番目の出力、ノード10'-4の2番目の出力、及びノード10'-6の0番目の出力と接続している。そして、ノード10'-7は、要素演算f
ew1を行うことにより、「0:(512, 1, 2), 1:(512, 1, 2) , 2:(512, 1, 2) , 3:(512, 1, 2)」で表される入力データから、「0:(512, 1, 2)」で表される出力データを生成する。また、
図12に示されるノード10'-8についての構造データから、ノード10'-8について次のことが定義される。ノード10'-8の入力は、ノード10'-7の0番目の出力及びノード10'-4の3番目の出力と接続している。そして、ノード10'-8は、要素演算f
ew2を行うことにより、「0:(512, 1, 2), 1:(512, 1, 2)」で表される入力データから、「0:(512, 1, 2)」で表される出力データを生成する。
【0080】
図14は、データ変換装置100の動作例を示すフローチャートである。以下、
図14を参照しつつ、上述したデータ変換装置100の構成要素の処理の流れについて説明する。
【0081】
まず初めに、ステップS1において、ニューラルネットワーク構造が読み出される。すなわち、変換対象のニューラルネットワークの構造データが取得される。
【0082】
次に、ステップS2において、ノード抽出部101が、構造データから、FC層またはRNN層のデータを抽出する。
【0083】
次に、ステップS3において、ノード抽出部101は、ステップS2で抽出されたFC層またはRNN層の中から、上述した条件1から条件3を全て満たすFC層のセットまたはRNN層のセットを抽出する。条件1から条件3を全て満たすセットが抽出された場合(ステップS3でYes)、処理はステップS4へ移行し、そのようなセットが抽出されなかった場合(ステップS3でNo)、処理はステップS8へ移行する。
【0084】
ステップS4において、ノード分解部102は、ステップS3で抽出されたセットが、RNN層のセットであるか否かを確認する。抽出されたセットがRNN層のセットである場合、処理はステップS5へ移行し、そうではない場合、ステップS5の処理がスキップされ、処理はステップS6へ移行する。
【0085】
ステップS5において、ノード分解部102は、RNN層の分解処理を実行する。ステップS5の後、処理はステップS6へ移行する。
【0086】
ステップS6において、MV積変換部103は、MV積のノードをMM積のノードへ変換する。
【0087】
そして、ステップS7において、MV積変換部103は、調整ノードを構造データに追加する。また、MV積変換部103は、必要により、要素演算のノードを共通化するよう、構造データを修正する。ステップS7の後、処理はステップS8へ移行する。
【0088】
ステップS8において、ステップS1で読み出された構造に含まれる全てのFC層またはRNN層について、上述したステップS2からステップS7までの処理が行われたか否かが確認される。全てのFC層またはRNN層について処理が行われた場合、ステップS9の処理が行われ、そうでない場合、残りのFC層またはRNN層について、上述したステップS2からステップS7までの処理が行われる。
【0089】
ステップS9において、一部もしくはすべてのMV積がMM積に変換されたニューラルネットワーク構造の出力が行われる。すなわち、データ変換装置100による変換後の構造データが出力される。
【0090】
次に、データ変換装置100のハードウェア構成の例について説明する。
図15は、データ変換装置100のハードウェア構成の一例を示すブロック図である。
図15に示すように、データ変換装置100は、入出力インタフェース151、メモリ152、及びプロセッサ153を含む。
【0091】
入出力インタフェース151は、必要に応じて他の装置と通信可能に接続するためのインタフェースである。
【0092】
メモリ152は、例えば、揮発性メモリ及び不揮発性メモリの組み合わせによって構成される。メモリ152は、プロセッサ153により実行される、1以上の命令を含むソフトウェア(コンピュータプログラム)、及び各種処理に用いるデータなどを格納するために使用される。
【0093】
プロセッサ153は、メモリ152からソフトウェア(コンピュータプログラム)を読み出して実行することで、上述した各構成要素の処理を行う。プロセッサ153は、例えば、マイクロプロセッサ、MPU(Micro Processor Unit)、又はCPU(Central Processing Unit)などであってもよい。プロセッサ153は、複数のプロセッサを含んでもよい。
このように、データ変換装置100は、コンピュータとしての機能を備えている。
【0094】
プログラムは、コンピュータに読み込まれた場合に、実施形態で説明された1又はそれ以上の機能をコンピュータに行わせるための命令群(又はソフトウェアコード)を含む。プログラムは、非一時的なコンピュータ可読媒体又は実体のある記憶媒体に格納されてもよい。限定ではなく例として、コンピュータ可読媒体又は実体のある記憶媒体は、random-access memory(RAM)、read-only memory(ROM)、フラッシュメモリ、solid-state drive(SSD)又はその他のメモリ技術、CD-ROM、digital versatile disc(DVD)、Blu-ray(登録商標)ディスク又はその他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ又はその他の磁気ストレージデバイスを含む。プログラムは、一時的なコンピュータ可読媒体又は通信媒体上で送信されてもよい。限定ではなく例として、一時的なコンピュータ可読媒体又は通信媒体は、電気的、光学的、音響的、またはその他の形式の伝搬信号を含む。
【0095】
本実施の形態によれば、データ変換装置100は、MV積を有する層を含むニューラルネットワークの構造データに対して上述した処理を行うことにより、MV積の計算をMM積の計算により実現することが可能な構造データを出力する。すなわち、データ変換装置100により、複数のRNN層のMV積または複数のFC層のMV積が、ニューラルネットワークを処理する一般的なデバイスに適した演算であるMM積に変換される。このため、データ変換装置100により変換された構造データを用いることで、MV積を有する層を含むニューラルネットワークと等価なニューラルネットワークをデバイスにより高速に処理することを可能にする。特に、データ変換装置100による変換では、層内部のデータフローやメモリアクセスが変更されるのではなく、ニューラルネットワークのモデル構造が変更される。このため、汎用CPU又はGPUだけでなく、ASICデバイスで、高速にニューラルネットワークを処理することが可能である。また、データ変換装置100による変換が行われても、ニューラルネットワークの計算の等価性は維持される。
【0096】
以上、実施の形態1について説明したが、上述した実施の形態について種々の変更が行われてもよい。例えば、
図16及び
図17に示すように、MV積に変換できる層のセットが直列に並んでいる場合、中間の調整ノードを省略することで、この調整ノードの処理に要する実行時間が短縮されてもよい。ここで、
図16は、FC層の第1のセット(ノード10、ノード12)と第1のセットと直列に接続しているFC層の第2のセット(ノード11、ノード13)とを含んで構成されるニューラルネットワークの構造の例を示す模式図である。また、
図17は、データ変換装置100による変換後のニューラルネットワークの構造の例を示す模式図である。ここで、
図17の畳み込み層のノード10-3は、上述した第1のセットについての変換により生成されたノードであり、
図17の畳み込み層のノード10-4は、上述した第2のセットについての変換により生成されたノードである。ノード10-3及びノード10-4は、直列に接続されており、両者の中間の調整ノードは、省略されている。そして、ノード10-3及びノード10-4の前段及び後段には、ノード10-3及びノード10-4に対する共通の調整ノードとして、結合処理を行うノード10-1、形状変形処理を行うノード10-2、形状変形処理を行うノード10-6、及び分割処理を行うノード10-7が挿入されている。このように、MV積変換部103は、変換された畳み込み層のノード(
図17のノード10-3、ノード10-4)が直列に連続する場合、直列に連続する当該複数の畳み込み層のノードに共通の調整ノードを挿入することで、中間の調整ノードを省略してもよい。
【0097】
<実施の形態2>
次に、実施の形態2について説明する。実施の形態2は、実施の形態1の特徴的な要素から構成される実施の形態である。
図18は、実施の形態2にかかるデータ変換装置1の構成の一例を示すブロック図である。データ変換装置1は、構造データ取得部2と、ノード抽出部3と、変換部4と、構造データ出力部5とを有する。
【0098】
構造データ取得部2は、ニューラルネットワークの構造を表すデータである構造データを取得する。構造データ取得部2は、メモリなどの記憶装置から構造データを読み出すことにより構造データを取得してもよいし、他の装置から構造データを受信することにより構造データを取得してもよい。
【0099】
ノード抽出部3は、構造データ取得部2が取得した構造データから、行列ベクトル積についてのノードを複数抽出する。ここで、行列ベクトル積についてのノードとは、行列ベクトル積の計算を含む処理が行われるノードであり、例えば、FC層のノードやRNN層のノードが該当する。特に、ノード抽出部3は、所定の条件を満たすノードを抽出する。より詳細には、所定の条件は、上述した条件1から条件3である。すなわち、ノード抽出部3は、各ノードの入力の要素数と出力の要素数がいずれも同じであり、かつ、各ノードで使用するパラメータ(重みやバイアス値)が同じであり、かつ、各ノード間に依存関係が無いという条件を満たすノードを抽出する。なお、各ノード間に依存関係が無いとは、各ノードの計算結果が他のノードの計算結果に影響を与えないとも言える。
【0100】
変換部4は、ノード抽出部3が抽出した複数のノードを畳み込み層のノードに変換する。そして、構造データ出力部5は、変換部4による変換が行われた構造データを出力する。構造データ出力部5は、例えば、メモリなどの記憶装置に構造データを出力してもよいし、他の装置(例えば、変換された構造データを用いてニューラルネットワークの処理を実行するデバイス)に送信してもよい。
【0101】
本実施の形態によれば、MV積を有する層を含むニューラルネットワークの構造データを、MM積の計算によりニューラルネットワークを実行することが可能な構造データに変換して出力することができる。このため、MV積を有する層を含むニューラルネットワークを高速に処理することが可能になる。
【0102】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0103】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
(付記1)
ニューラルネットワークの構造を表すデータである構造データを取得する構造データ取得手段と、
前記構造データから、行列ベクトル積についてのノードを複数抽出するノード抽出手段と、
抽出した複数のノードを畳み込み層のノードに変換する変換手段と、
変換が行われた前記構造データを出力する構造データ出力手段と
を有する
データ変換装置。
(付記2)
前記ノード抽出手段は、各ノードの入力の要素数が同じであり、かつ、各ノードの出力の要素数が同じであり、かつ、各ノードで使用するパラメータが同じであり、かつ、各ノード間に依存関係が無いという条件を満たすノードを抽出する
付記1に記載のデータ変換装置。
(付記3)
前記変換手段は、変換された前記畳み込み層のノードの前段及び後段に、データ形式を調整する調整ノードを挿入する
付記2に記載のデータ変換装置。
(付記4)
前記変換手段は、変換された前記畳み込み層のノードが直列に連続する場合、直列に連続する当該複数の前記畳み込み層のノードに共通の前記調整ノードを挿入する
付記3に記載のデータ変換装置。
(付記5)
前記ノード抽出手段は、行列ベクトル積についてのノードとして、全結合層のノードを抽出する
付記1乃至4のいずれか一項に記載のデータ変換装置。
(付記6)
前記ノード抽出手段は、行列ベクトル積についてのノードとして、RNN(Recurrent Neural Network)層のノードを抽出し、
前記データ変換装置は、抽出されたRNN層のノードを、行列ベクトル積のノードである第1種のノードと、行列ベクトル積以外のノードである第2種のノードとに分解する分解手段をさらに有し、
前記変換手段は、前記第1種の複数のノードを前記畳み込み層のノードに変換する
付記1乃至5にいずれか一項に記載のデータ変換装置。
(付記7)
前記第1種のノードは、非線形活性化関数として恒等関数を用いる全結合層のノードであり、
前記第2種のノードは、前記全結合層のノードの前段のノードであってデータを連結する連結ノードと、前記全結合層のノードの後段のノードであってデータを分割する分割ノードと、前記分割ノードの後段のノードであって所定の演算を行う要素演算ノードである
付記6に記載のデータ変換装置。
(付記8)
前記変換手段は、異なるRNN層のノードに由来する複数の前記分割ノードの処理を一つのノードの処理として表し、異なるRNN層のノードに由来する複数の前記要素演算ノードの処理を一つのノードの処理として表す
付記7に記載のデータ変換装置。
(付記9)
ニューラルネットワークの構造を表すデータである構造データを取得し、
前記構造データから、行列ベクトル積についてのノードを複数抽出し、
抽出した複数のノードを畳み込み層のノードに変換し、
変換が行われた前記構造データを出力する
データ変換方法。
(付記10)
ニューラルネットワークの構造を表すデータである構造データを取得する構造データ取得ステップと、
前記構造データから、行列ベクトル積についてのノードを複数抽出するノード抽出ステップと、
抽出した複数のノードを畳み込み層のノードに変換する変換ステップと、
変換が行われた前記構造データを出力する構造データ出力ステップと
をコンピュータに実行させるプログラムが格納された非一時的なコンピュータ可読媒体。
【符号の説明】
【0104】
1 データ変換装置
2 構造データ取得部
3 ノード抽出部
4 変換部
5 構造データ出力部
91 構造データ
92 構造データ
100 データ変換装置
101 ノード抽出部
102 ノード分解部
103 MV積変換部
151 入出力インタフェース
152 メモリ
153 プロセッサ