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

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

▶ ディープマインド テクノロジーズ リミテッドの特許一覧

特表2022-550730高速なスパースニューラルネットワーク
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-12-05
(54)【発明の名称】高速なスパースニューラルネットワーク
(51)【国際特許分類】
   G06N 3/04 20060101AFI20221128BHJP
【FI】
G06N3/04
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2022519014
(86)(22)【出願日】2020-09-23
(85)【翻訳文提出日】2022-05-23
(86)【国際出願番号】 EP2020076587
(87)【国際公開番号】W WO2021058578
(87)【国際公開日】2021-04-01
(31)【優先権主張番号】62/905,888
(32)【優先日】2019-09-25
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.TENSORFLOW
(71)【出願人】
【識別番号】517030789
【氏名又は名称】ディープマインド テクノロジーズ リミテッド
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】エリック・コンラッド・エルセン
(72)【発明者】
【氏名】トレヴァー・ジョン・ゲイル
(72)【発明者】
【氏名】マラット・ドゥハン
(57)【要約】
ニューラルネットワークシステムは、スパース重み行列によって定義されるカーネルを使用して、1x1の畳み込みをデンス活性化行列に適用する少なくとも1つの層を含む。この層は、ヌル重みが重み行列においてどこに位置するかを示すスパース性データセットへのアクセス権をもつプロセッサにより実装される。プロセッサは、活性化行列を記憶するように構成されるメモリユニットから他の重みに対応する特徴値を選択し、畳み込まれた値の計算のためにこれらの抽出された特徴値を使用する。
【特許請求の範囲】
【請求項1】
ニューラルネットワークを実装する方法であって、前記ニューラルネットワークが、少なくとも1つのスパース1x1畳み込み層を含む複数の層を備え、前記畳み込み層の入力が、HxWのアレイに並べられた複数の要素の各々に対して、特徴値のそれぞれの入力チャネルを備え、
前記スパース1x1畳み込み層が、スパース1x1畳み込みを前記入力チャネルに適用して、各々複数の畳み込まれた値からなるそれぞれの出力チャネルを形成するように構成され、前記スパース1x1畳み込みが、0に等しい複数のヌル重みおよび複数のノンヌル重みを有するスパースCxC'重み行列によって定義され、前記入力チャネルが、デンスC'xHW活性化行列の各要素のために定義された特徴値を有する前記活性化行列を構成し、
前記方法が、
前記重み行列の前記ヌル重みの指示を取得するステップと、
前記活性化行列の行の中の複数の前記要素を備える行ベクトルの要素に対して、
(a)前記活性化行列を記憶するメモリユニットから前記入力チャネルの対応する特徴値を抽出することであって、前記対応する特徴値が、前記指示によると前記重み行列の前記対応する重みがノンヌル重みであるような特徴値である、抽出すること、および
(b)それぞれのノンヌル重みにより重み付けられた前記対応する抽出された特徴値の対応する和を形成すること
によって、前記複数の要素のための前記畳み込まれた値を生成することによって、前記デンスC'xHW活性化行列に関連して前記スパースCxC'重み行列を処理するステップとを備える、方法。
【請求項2】
前記ヌル重みが、前記重み行列の成分の実質的に70~95%を構成する、請求項1に記載の方法。
【請求項3】
前記ニューラルネットワークの出力層が全結合される、請求項1または2に記載の方法。
【請求項4】
前記メモリユニットがCHWメモリレイアウトを有する、請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記処理が、同じ行の中の要素の連続する行ベクトルのための内側ループ、および連続する行のための外側ループを用いて実行される、請求項4に記載の方法。
【請求項6】
前記処理が連続する行ベクトルに対して繰り返し実行され、前記行ベクトルが要素のアレイ全体を集合的に含む、請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記ニューラルネットワークがさらに、前記畳み込み層の後にあり1つまたは複数の出力値を生成するようになされる出力層を含み、各出力値がすべての前記要素のすべての前記畳み込まれた値に基づいて決定される、請求項1から6のいずれか一項に記載の方法。
【請求項8】
前記ノンヌル重みが、前記重み行列の複数の行の各々において同じ位置にある、請求項1から7のいずれか一項に記載の方法。
【請求項9】
前記重み行列の前記複数の行のための処理が、前記行ベクトルのための前記出力チャネルの対応する複数の畳み込まれた値を生成するために並列に実行される、請求項8に記載の方法。
【請求項10】
前記複数の要素のための前記畳み込まれた値の前記生成の間に、前記メモリユニットからの対応する特徴値の前記抽出に際し、前記抽出された特徴値がキャッシュメモリに記憶され、前記抽出および記憶が、前記複数の要素のための先行する畳み込まれた値の前記生成の間に前記キャッシュメモリに記憶された特徴値に関して実行されない、請求項1から9のいずれか一項に記載の方法。
【請求項11】
前記複数の要素のための前記対応する特徴値に基づく前記複数の要素のための前記畳み込まれた値の前記生成の間に、複数の追加の要素のための前記対応する特徴値も、前記キャッシュメモリへと前記メモリユニットから読み取られ、前記複数の追加の要素の前記畳み込まれた値が、前記複数の要素のための前記畳み込まれた値と並列に生成されない、請求項10に記載の方法。
【請求項12】
前記重み行列の前記ノンヌル重みを決定するために訓練例に基づいて訓練手順を実行するステップを備える、請求項1から11のいずれか一項に記載の方法により実装されるニューラルネットワークを生成する方法。
【請求項13】
前記重み行列の前記ヌル重みが、スパース性データセットに従ってあらかじめ決定される、請求項12に記載の方法。
【請求項14】
ニューラルネットワークを実装するように構成されるシステムであって、前記ニューラルネットワークが、少なくとも1つのスパース1x1畳み込み層を含む複数の層を備え、前記畳み込み層の入力が、HxWのアレイに並べられた複数の要素の各々に対して、特徴値のそれぞれの入力チャネルを備え、
前記スパース1x1畳み込み層が、スパース1x1畳み込みを前記入力チャネルに適用して、各々複数の畳み込まれた値からなるそれぞれの出力チャネルを形成するように構成され、前記スパース1x1畳み込みが、0に等しい複数のヌル重みおよび複数のノンヌル重みを有するスパースCxC'重み行列によって定義され、前記入力チャネルが、デンスC'xHW活性化行列の各要素のために定義された特徴値を有する前記活性化行列を構成し、
前記システムがメモリユニットおよび処理ユニットを備え、前記メモリユニットが、前記処理ユニットによって実施されると、前記処理ユニットに、
前記重み行列の前記ヌル重みの指示を取得させ、
前記活性化行列の行の中の複数の前記要素を備える行ベクトルの要素に対して、
(a)前記活性化行列を記憶するメモリユニットから前記入力チャネルの対応する特徴値を抽出することであって、前記対応する抽出された特徴値が、前記指示によると前記重み行列の前記対応する重みがノンヌル重みであるような特徴値である、抽出すること、および
(b)それぞれのノンヌル重みにより重み付けられた前記対応する抽出された特徴値の対応する和を形成すること
によって、前記複数の要素のための前記畳み込まれた値を生成することによって、前記デンスC'xHW活性化行列に関連して前記スパースCxC'重み行列を処理させる
命令を記憶する、システム。
【請求項15】
請求項1から11のいずれか一項に記載の方法を実施するように構成される、請求項14に記載のシステム。
【請求項16】
請求項1から13のいずれか一項に記載の方法を実施するためのコンピュータプログラム命令を記憶する、有形の非一時的記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書は、ニューラルネットワークシステムに関し、具体的には、モバイルデバイスなどのメモリおよび/または処理能力が限られているプロセッサデバイス上での実装が可能なニューラルネットワークシステムに関する。
【背景技術】
【0002】
ニューラルネットワークは、ユニットまたはノードの1つまたは複数の層を利用して受け取られた入力に対する出力を予測する、機械学習モデルである。一部のニューラルネットワークは、出力層に加えて1つまたは複数の隠れ層を含む。各隠れ層の出力は、ネットワークの中の次の層、すなわち次の隠れ層または出力層への入力として使用される。ネットワークの各層は、パラメータのそれぞれのセットの現在の値に従って、受け取られた入力から出力を生成する。
【0003】
多くのニューラルネットワークは、要素のアレイに基づいて定義される入力と、やはり要素のアレイに基づく出力とを有する、畳み込み層を含む。通常、アレイは、W列の幅およびH行の高さを有する長方形アレイ(たとえば、正方形アレイ)などの2次元アレイである。各要素は「入力チャネル」と関連付けられ、これはC'個の特徴値からなる特徴ベクトルである(ここでC'は整数であり、通常は1より大きい)。HW入力チャネルは畳み込み層への入力である。したがって、入力チャネルのセットは、C'xHW個の成分を伴う活性化行列を構成する。各要素に対して、畳み込み層は、要素を含むアレイのそれぞれのnxm部分のそれぞれの特徴ベクトルをカーネルと乗じて、要素のためのそれぞれの「出力チャネル」を形成する。各要素のための出力チャネルは、C個の畳み込まれた値を有する(ここでCは整数であり、通常はC'と異なる)。通常、正規化線形(ReLU)活性化関数などの非線形関数(活性化関数)が、要素の出力チャネルのC個の畳み込まれた値の各々に適用される。
【0004】
「1x1畳み込み層」と呼ばれる一例では、nおよびmは1に等しいので、アレイの要素の出力チャネルが依存する唯一の入力チャネルは、同じ要素のための入力チャネルである。この場合、カーネルは、各々の畳み込まれた値に活性化関数(もしあれば)を適用する前に、重み値のC'xCの重み行列(「重み」)を要素の入力チャネルに適用して、要素の出力チャネルを生成する。
【0005】
少なくとも1つの畳み込み層を含むニューラルネットワークである畳み込みニューラルネットワーク(CNN)は、多種多様なタスクを解決するのに優れていることがわかっている。これらのアーキテクチャの多くにおいて、推論時間、浮動小数点演算(FLOP)、およびパラメータカウントは、1x1畳み込みによって支配され、これは行列と行列の乗算と等価である。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】「Squeeze and excitation networks」、Jie Hu他、(2019)
【発明の概要】
【課題を解決するための手段】
【0007】
本明細書は、1つまたは複数の位置にある1つまたは複数のコンピュータ上でコンピュータプログラムとして実装されるニューラルネットワークシステムを説明する。
【0008】
一般に、本開示は、1x1畳み込み層がデンス活性化関数に適用される(すなわち、HxWの要素の各々の実質的にすべてのC'個の特徴値が要素のそれぞれの出力チャネルを生成するプロセスにおいて使用される)ことを提案し、スパースなC'xCの重み行列によって定義されるカーネルを使用する。すなわち、重み行列の値の半分以上が「ヌル」重み、すなわち、畳み込まれた値の計算において使用されず、0であると見なされ得る重みである。ヌル重みが重み行列の中でどこに位置するかを示すものであるスパース性データセットをプロセッサに提供することによって、プロセッサは、活性化行列を記憶するように構成されるメモリユニットから、他の重み(ヌル重みではない重みとして定義される「ノンヌル重み」)に対応する特徴値(だけ)を選択し、次いで、畳み込まれた値を計算するためのこれらの抽出された特徴値(だけ)を使用する。これは、アレイの複数の異なる要素の各々のための対応する畳み込まれた値についてとても効率的に(たとえば、並列に、または非常に短い時間間隔で連続的に)行われることがあり、それは、すべてが同じ対応する重みを必要とするからである。すなわち、異なる要素のための対応する畳み込まれた値は、同じ重みに依存する。
【0009】
複数の要素はアレイの同じ行に位置していることがあり、すなわち、それらは、たとえばその行の中の一連の連続する要素としての、要素の「行ベクトル」であり得る。同じ行の要素として複数の要素を選択することは特に、多くの既知のメモリユニットにおけるように、特徴値を記憶するために使用されるメモリユニットがCHWフォーマットであるメモリレイアウトを有する場合に動機付けられる。この場合、畳み込まれたベクトルの計算は、同じ行の中の要素の連続する(普通は重複しない)行ベクトルのための内側ループと、連続する行のための外側ループとを用いて効率的に実行され得る。実装形態では、メモリユニットは複数の物理的に別々のメモリデバイスとして実装され得ることに留意されたい。
【0010】
活性化行列を記憶するメモリユニットは、特徴値メモリユニットと呼ばれ得る。重み値は、重みメモリユニットと呼ばれる別のメモリユニットに記憶される。実装形態では、重みメモリユニットは、特徴値メモリユニットを実装するメモリデバイスと同じメモリデバイス、または異なるメモリデバイスであり得る。
【0011】
本明細書において説明される主題は、特定の実施形態において、以下の利点のうちの1つまたは複数を実現するように実装され得る。第一に、重みメモリユニットは、ノンヌル重みしか記憶しなくてよいので、重みメモリユニットのメモリ要件が、同じ次元を有するデンス重み行列を伴う従来のニューラルネットワークのそれと比較して下がる。第二に、活性化行列に基づいて出力チャネルを生成するための乗算および/または除算演算の回数が、ニューラルネットワークの従来の畳み込み層のそれと比較して減り、より高いエネルギー効率およびより高い処理速度につながる。第三に、複数の畳み込まれた値が並列に計算されるので、並列処理ハードウェアにより効率的な使用が実現する。CHWメモリレイアウトに特徴値を記憶するメモリユニットがあることは、プロセッサがGPU(グラフィクス処理ユニット)または他の専用ハードウェアである場合には特に効率的である。たとえば、CHWメモリ層は、ハードウェアで行列乗算を実行する専用ハードウェア、たとえば、テンソル処理ユニット(TPU)または別のハードウェア機械学習アクセラレータで実装されるのに特に適している。実験的に、たとえば、ヌル重み(スパース性)の比率が提案されるニューラルネットワークにおいて95%より大きくない限り、従来のニューラルネットワークと比較して性能の低下が驚くほど少なく、すべてのこれらの利点を達成できることがわかっている。
【0012】
たとえば、一部の既知の試験的な問題に対して、発明者らは、標準的な試験問題を解くために訓練されたニューラルネットワークの少なくとも1つの畳み込み層において重みの少なくとも70%および/または95%未満をヌルであるものとして選択する(すなわち、スパース性が70~95%の「スパース性範囲」にある)ことで、ニューラルネットワークのパラメータの数が2分の1未満に減り、入力から出力を生成するためにニューラルネットワークによって実行される計算の回数(浮動小数点演算-FLOPS)が最大で3分の1まで減りながら、ニューラルネットワークの性能の低下が1%未満になるという、驚くべき結果を実験的に見出している。ニューラルネットワークが、携帯電話、タブレットコンピュータ、または他の形態のモバイルクライアントデバイスなどの、モバイルデバイスのCPUなどの低電力プロセッサ上で実装されると、ニューラルネットワークの処理時間は、1.3分の1から2分の1に減ることも見出された。このことは、現在のニューラルネットワークをそのようなデバイスに特に適したものにする。ニューラルネットワークにおけるスパース性は完全に新しい概念ではないが、干渉の際に実際の高速化を達成するのに十分スパース演算を速くすることはできないというありふれた誤解により、モデルを加速するための実用的な手段として一般に無視されてきた。この実験は、そうではないことを示している。その1つの理由は、デンス活性化行列と組み合わせたスパース重み行列として、スパース性がこれらの実験において提供されるということである。また、従来の研究は普通は、極度にスパースな問題(99%を超えるスパース性)に注目しているが、実験において使用されるスパース性の範囲はより低い。
【0013】
各ノンヌル重みは、任意選択でいくつかの実装形態では0すらも含む、任意の値(たとえば、浮動小数点数、またはあらかじめ定められた整数の範囲にある任意の整数値)をとってもよい。すなわち、ノンヌル重みのいくつかはこれらの実装形態では0に等しいことがあるが、ニューラルネットワークの実装形態は、それらが0であるという以前の情報を利用しない。通常、重みは訓練手順の間に生成され、原則として、訓練手順は、0に等しいいくつかの重みを、それらの重みがヌル重みとして標識されることなく、かつ、したがってヌル重みを示すものに含まれることなく、生成することなどであり得る。代替として、他の実装形態では、訓練の後に0である(すなわち、訓練の後に所定の閾値未満の大きさを有することなどの、訓練の後に所定の基準に従うので、0に設定される)すべての重みが、ヌル重みとして標識され、ヌル重みを示すものに含められる。言い換えると、そのような実装形態では、すべてのノンヌル重みが0ではない。他の実装形態では、ヌル重みは訓練の前に指定され得るので、訓練手順はノンヌル重みの値しか修正しない。
【0014】
本開示はスパース重み行列を提案するが、活性化行列(畳み込み層への入力)には実質的にスパース性がないことに留意されたい。したがって、ニューラルネットワークの畳み込み層は、アレイから要素の連続する行ベクトル(たとえば、各々が同じ数の要素を有する)を選択するように構成され、各行ベクトルは上で説明されたように並列に処理されるので、ニューラルネットワークの畳み込み層は、アレイのすべての要素を集合的に含む複数の連続する行ベクトルを、ニューラルネットワークの畳み込み層が最終的に処理する。実質的に「ヌル」特徴値(すなわち、いずれの畳み込まれた値も依存しない特徴値)はないことがある。
【0015】
ニューラルネットワークのすべての層が上で説明された原理を使用することは必要ではない。たとえば、ニューラルネットワークの入力層が全結合されてもよく、および/またはニューラルネットワークの出力層が全結合されてもよい。言い換えると、ニューラルネットワークの中の特定の位置、すなわち、並列処理が可能な既知のコンピュータプロセッサの能力により動機付けられる位置で、スパース性が提供され得る。
【0016】
任意選択で、重み行列はある程度の規則性を有し得る。たとえば、重み行列の複数の行の各々(各要素の複数の畳み込まれた値にそれぞれ対応する)に対して、ノンヌル重みは同じ位置にあり得る(すなわち、各要素の入力チャネルの特徴値の同じサブセットに対応し得る)。したがって、所与の要素のための畳み込まれた値の異なる値は、要素の入力チャネルの特徴値の同じサブセットに依存する。この場合、計算の効率性はさらに、行ベクトルのための出力チャネルのそれらの畳み込まれた値を並列に(「ブロック」として)計算することによって改善され得る。さらに、スパース性データセットは、ノンヌル重みの配列の規則性により、所与の数のノンヌル重みに対してサイズが低減され得る。
【0017】
これを異なるように表現するために、重み行列の行は、重みの行(「重み行」)のグループへと垂直に区分されてもよく、各グループは、少なくとも2である等しい数の重み行であってもよく、連続する重み行からなっていてもよい。各グループに対して、そのグループのすべての重み行のノンヌル重みは、重み行に沿って同じ位置にあり得る(すなわち、特徴値の同じサブセットに対応する)。この場合、対応する畳み込まれた値を生成するために要素の行ベクトルを処理するとき、重み行のグループは連続的に処理されてもよいが、各グループの重み行は、対応する畳み込まれた値を生成するために並列に処理されてもよい。
【0018】
HとWの値は任意の整数であり得るが、通常は各々少なくとも10である。入力チャネル当たりの特徴値の数C'は、通常は少なくとも2であり、2より大きくてもよい。行ベクトル当たりの要素の数は少なくとも2であり、より典型的には少なくとも3(4または8など)または少なくとも8(16など)である。
【0019】
好ましくは、複数の要素のための各々の畳み込まれた値の生成の間に、対応する重みがノンヌルである複数の要素の特徴値がメモリユニットから(たとえば、同時に)抽出されると、抽出された特徴値はキャッシュメモリに(たとえば、同時に)記憶される。しかしながら、好ましくは、抽出および記憶は、複数の要素のための先行する畳み込まれた値の生成の間にキャッシュメモリに記憶された特徴値に関して実行されない。これは、計算時間の別の節約をもたらす。
【0020】
畳み込まれた値が現在計算されている複数の要素のための特徴値をメモリユニットから抽出し、それらをキャッシュメモリに書き込むとともに、複数の追加の要素のための対応する特徴値はまた、メモリユニットから(たとえば、同時に)読み取られ、キャッシュメモリに(たとえば、同時に)書き込まれる。複数の追加の要素の畳み込まれた値が複数の要素のための畳み込まれた値と並列に生成されない(たとえば、これは別個の処理ループの間に行われ得る)が、それらがプリフェッチされているという事実は、それらの要素のための畳み込まれた値を計算する時間になったときに、それらのための特徴値がキャッシュメモリにすでに存在することを意味する。これは、それらの追加の要素のための畳み込まれた値を生成するのに必要な計算時間を減らす。
【0021】
この文書において提案される概念は、ニューラルネットワークを実装するための方法、または代替として、ニューラルネットワークを訓練するための方法として表現され得る。この訓練プロセスは通常、重み行列を導出することを含む。
【0022】
訓練は、ヌル重みとして重み行列の重みの少なくともいくつかを指定する(すなわち、重み行列の成分のいくつかをヌル重みであるものとして選択する)ことを含み得る。これは、重みを取得するための訓練手順を実行し、ある基準(閾値未満の大きさを有するなど)を満たす派生する重みを特定し、特定された重みをヌル重みとして指定することによって行われ得る。派生した重みを特定してヌル重みとして指定するためのより洗練された基準は、たとえば、特定された派生する重みが、重み行列の中のヌル重みの位置の規則性についての制約を受ける比較的大きさの小さい重みであることを確実にするために、複数の派生する重みを一緒に考慮し得る。代替として、上で論じられたノンヌル重みの配列に規則性があることを確実にすることなどのために、ヌル重みの一部またはすべてがあらかじめ指定され得る(すなわち、ノンヌル重みの訓練の前に、スパース性データセットが存在し得る)。
【0023】
本概念の代替的な表現は、方法を実行するようになされた1つまたは複数の位置にある1つまたは複数のコンピュータ、または、プログラム命令を記憶する非一時的コンピュータ記憶媒体(メモリデバイス)などの命令を備えるコンピュータプログラム製品、または、命令を備えるダウンロード可能なソフトウェアを備える、コンピュータシステムに関するものであり得るが、命令は、1つまたは複数のコンピュータによって実行されると、コンピュータに上で説明された方法のいずれかを実施させる。
【0024】
ニューラルネットワークの実装形態は、多くの用途を有する。大まかに言うと、システムは、アレイの次元(たとえば2次元)に対応する次元を有する入力データを受け取るあらゆるニューラルネットワークにおいて使用され得る。
【0025】
入力データは、たとえば、静止画像または動画を表してもよく、その場合、データの値は画素値を表してもよい。入力データは、1つまたは複数のスチルカメラおよび/またはビデオカメラなどの1つまたは複数のセンサデバイスによって収集されるデータなどの、現実世界のデータであり得る。
【0026】
ニューラルネットワークは、たとえば、1つまたは複数のクラスへと入力データを分類するように訓練される分類器として利用され得る。たとえば、ニューラルネットワークシステムは、所定の複数のクラスのうちの1つへと(たとえば、現実世界またはシミュレートされた環境の)画像を分類するために使用され得る。
【0027】
代替として、たとえばサイド情報が条件とされる例を生成するために、たとえば生成モデルとして、ニューラルネットワークが使用され得る。代替として、ニューラルネットワークは、すでに生成された例の品質を、すなわち例が訓練データにどれだけ良く一致するかに関して採点するために使用され得る。
【0028】
代替として、ニューラルネットワークは、たとえば現実世界またはシミュレートされた環境において移動するエージェント(たとえば、ロボット)を制御するための制御データを生成するために、強化学習のために使用され得る。代替として、ニューラルネットワークシステムは、シミュレートされたまたは現実世界の環境において、物理的な物体またはエージェントと関連付けられる実際のまたは仮想的なカメラにより見られる、未来の画像またはビデオシーケンスを予測するデータを生成するように訓練され得る。
【0029】
本開示の例は、以下の図面を参照して、単なる例としてここで説明される。
【図面の簡単な説明】
【0030】
図1】ここで開示される方法を利用するニューラルネットワークを示す図である。
図2図1のニューラルネットワークを実装するためのコンピュータシステムを示す図である。
図3図1のニューラルネットワークの層によって実行される第1の畳み込み演算を示す図である。
図4図1のニューラルネットワークの層によって実行される第2の代替的な畳み込み演算を示す図である。
図5(a)】図3の畳み込み演算の実行の間に実行されるメモリ動作のシーケンスを概略的に示す図である。
図5(b)】図3の畳み込み演算の実行の間に実行されるメモリ動作のシーケンスを概略的に示す図である。
図5(c)】図3の畳み込み演算の実行の間に実行されるメモリ動作のシーケンスを概略的に示す図である。
図5(d)】図3の畳み込み演算の実行の間に実行されるメモリ動作のシーケンスを概略的に示す図である。
図5(e)】図3の畳み込み演算の実行の間に実行されるメモリ動作のシーケンスを概略的に示す図である。
図6図5のプロセスなどのプロセスの間に図1のニューラルネットワークによって実行される方法のステップを示す図である。
【発明を実施するための形態】
【0031】
様々な図面における同様の参照番号および指定は、同様の要素を示す。
【0032】
図1は、本開示の例であるニューラルネットワーク100を示す。ニューラルネットワーク100は、1つまたは複数の位置にある1つまたは複数のコンピュータシステムによって実装され得る。
【0033】
ニューラルネットワーク100は、入力層101、出力層103、および1つまたは複数の隠れ層102a、102b、102cを備える。入力層101、隠れ層102a、102b、102c、および出力層103は順番に並べられる。出力層103を除く各層の出力は、その順番の次の層のための入力を提供する。入力層101、隠れ層102a、102b、102c、および出力層103のうちの1つまたは複数は、畳み込み層である。実際に、それらはすべて畳み込み層であり得るが、通常、少なくとも出力層103はそうではない。各畳み込み層は、要素のアレイ(通常は2次元アレイ)に基づいて定義される入力を受け取る。各要素に対して、C'個の特徴値からなる特徴ベクトルであるそれぞれの入力チャネルがある。同様に、各要素に対して、畳み込み層は、「畳み込まれた値」と呼ばれるCの値を有するそれぞれの出力チャネルを生成する。各畳み込み層は、重み行列によって定義されるそれぞれのカーネルを利用する。
【0034】
入力層101への入力は、画素のアレイの各々に対して1つまたは複数の値のための値を規定するデータなどの、画像を定義するデータである。画素は、要素のそれぞれに対応し得る。たとえば、C'はこの層に対して3であってもよく、各要素のための入力チャネルの特徴値はそれぞれ、赤、緑、および青のチャネルの強度であってもよい。
【0035】
層のうちの少なくとも1つ、具体的には、隠れ層102a、102b、102cのうちの1つは、1x1畳み込み層である。1x1畳み込み層の場合、各要素のための出力チャネルは、要素のための入力チャネルだけに依存する。すなわち、カーネルは、ある要素のための出力チャネルの成分を別の要素の入力チャネルに依存させる重みを含まない。
【0036】
以下で説明されるように、1x1畳み込みを実装するニューラルネットワーク100の層のうちの1つまたは複数、具体的には、隠れ層102a、102b、102cのうちの1つは、「スパース性」(すなわち、重みのうちの少なくともある割合、たとえば少なくとも半分が0の値をとること)を示すカーネルを使用して実装され得る。しかしながら、ニューラルネットワークのすべての層がスパース性を示すとは限らない。
【0037】
まず、入力層101は、スパース性を示さないカーネルを備え得る。パラメータカウント、FLOPカウント、およびランタイムへの入力層101の全体の寄与は小さい。代わりに、入力層101は、デンス畳み込みカーネルを利用し、その入力として画像を取り込んでもよい。
【0038】
また、層101、102a、102b、102c、103のうちの1つまたは複数は、「Squeeze and excitation networks」、Jie Hu他、(2019)において説明されるような、「squeeze and excitation」(SE)層を実装し得る。そのような層において、層への入力は(たとえば、畳み込みによって)Uと表記される特徴マップにマッピングされ、特徴マップは、チャネルごとの特徴応答のグローバル分布の埋め込みを生み出すために、HxWの空間次元にわたって特徴マップを集約することによってチャネル記述子を生み出す「squeeze」動作を受ける。この集約の後に「excitation」動作が続き、これは、埋め込みを入力として取り込み、チャネルごとの重みの集合体を生み出し、これらは特徴マップUに適用されてSE層の出力を生成する。そのようなSE層がニューラルネットワーク100に存在する場合、これはまた、以下で説明されるようなスパースカーネルを利用しなくてもよく、それは、そのようなスパースカーネルの、それが従来使用されるデンスモデルの総FLOPへの寄与は通常1%未満であることを、実験が示しているからである。
【0039】
また、ニューラルネットワーク100の最後の層103は、畳み込み層ではなく全結合層として実装され得る。やはり、従来のモデルでは、特に、ニューラルネットワークの訓練が、ニューラルネットワークの他の層がプルーニングされるようなものである場合、全結合出力層の総FLOPカウントへの寄与は大きくなく(<1%)、しかし総パラメータへの寄与は大きい(20~50%)ことが、実験から知られている。
【0040】
図2は、図1のニューラルネットワーク100を実装するためのコンピュータシステム200を示す。コンピュータシステム200は、1つまたは複数の画像を記述する画像データであり得るデータ入力201を受け取る。コンピュータシステム200は、プロセッサ202およびメモリユニット203、204、205を備える。プロセッサ202は、複数の計算スレッドを同時に並列に処理することが可能なプロセッサであり得る。メモリユニット203、204、205のうちの第1のメモリユニットが、ニューラルネットワーク100を実装するように、および特に、以下で説明される隠れ層102a、102b、102cの畳み込み演算を実行するように、プロセッサ202を制御するように動作可能なプログラム命令を記憶する、プログラムメモリユニット203である。メモリユニットのうちの第2のメモリユニットは、ニューラルネットワーク100の層によって実行される動作を定義する重みを記憶する重みメモリユニット204である。各層に対して、重みからなるそれぞれの重み行列がある。重みメモリユニット204はまた、各層に対して、それぞれの重み行列の1つまたは複数のノンヌル重み値を各出力チャネルに対して示す、それぞれのスパース性データセットを記憶し得る。
【0041】
メモリユニットのうちの第3のメモリユニットは、層の各々へ入力され層の各々から出力されるデータを記憶する特徴値メモリユニット205である。データ入力201を受け取ると、データは特徴値メモリ205に記憶される。
【0042】
データ入力201の中にあり、特徴値メモリ205に記憶されているデータは、1つの空間位置に対応する異なるチャネルのための値がメモリにおいて隣接している、標準的なHWCレイアウトにあり得る。すなわち、アレイの行当たりの要素の数をWと表記し、アレイの中の行の数をHと表記し、要素当たりのチャネルの数をCと表記すると、アレイの中の位置(h,w)における要素のc番目のチャネルの値のためのメモリ位置(すなわち、メモリ空間の中の何らかの任意の位置からのオフセット距離)は、h*(W)*(C)+w*(C)+cとして表現され得る。データ入力201を受け取ると、データ入力201は、通常はそれでもHWCフォーマットで、特徴メモリユニット205に記憶され得る。
【0043】
ニューラルネットワーク100の層のうちの1つを実装するために、プロセッサ202は、特徴メモリユニット205からのその層への入力を記述するデータの連続する部分をプロセッサ202のキャッシュメモリ206に転送し得る。スパース性を示す層の場合、各要素に対して、転送は複数のステップで実行されてもよく、複数のステップの各々において、その要素のための入力チャネルの特徴値のサブセットのみが、要素のための出力チャネルの一部分を生成するために必要とされるように、キャッシュメモリ206に転送される。複数の要素のための畳み込まれた値が一緒に(たとえば、並列に)生成されることを可能にするために、複数の要素のための特徴値は、特徴メモリユニット205からキャッシュメモリ206に同時に転送され得る。
【0044】
各層(任意選択で出力層103を除く)に対して、各要素のためのそれぞれの出力チャネルの畳み込まれた値は、特徴値メモリユニット205に記憶される。出力チャネルは、特徴値メモリユニット205からプロセッサ202によって後で読み取られ、ニューラルネットワーク100の連続する層のための入力データとしてプロセッサ202によって使用される。以下で説明されるように、入力層101および/または隠れ層102a、102b、102cのうちの1つまたは複数などの、ニューラルネットワーク100の層のうちの1つまたは複数のための出力チャネルは、ここではCHWレイアウトと呼ばれるCHWフォーマットで、特徴値メモリユニット205に記憶され得る。CHWレイアウトでは、1つのチャネルのためのすべての空間位置の値はメモリにおいて隣接している。CHWレイアウトでは、HxWのアレイの中の位置(h,w)における要素のc番目のチャネルのメモリ位置(メモリ空間の中の任意の位置からのオフセット)は、c*(W)*(H)+h*(W)+wである。これは、入力データが隠れ層102a、102b、102cおよび出力層103のうちの1つまたは複数のための、特に入力層101の直後の畳み込み層102aのためのCHWフォーマットである場合、スパース畳み込み演算に便利である。
【0045】
出力層103のための出力チャネルは、出力データ207としてコンピュータシステム200から送信される。出力は、たとえば画像データ201の分類を表し得る。代替として、データ入力201がサイドデータであり、ニューラルネットワーク100が生成ネットワークである場合、出力データ207は、画像または音の波形などの信号を表すデータセットであり得る。代替として、データ入力201が環境を記述するセンサデータ、たとえば、スチルカメラまたはビデオカメラによって収集される現実世界の環境の画像である場合、出力データ207は、環境と相互作用するように、たとえば環境内で移動する(並進、回転、および/または再構成によって)ようにエージェントを制御するために、エージェントに送信される制御データであり得る。代替として、データ入力201が自然言語の一部分を表すデータ(たとえば、自然言語が話されるときにセンサによって収集される文字または音声信号のシーケンス)である場合、出力データ207は、自然言語の翻訳などの修正された自然言語であってもよく、やはり文字または音声信号のシーケンスであってもよい。
【0046】
図3に戻ると、ここで開示されるスパース性原理を使用して、ニューラルネットワーク100の層のうちの1つによって、たとえば、隠れ層102a、102b、102cのうちの1つによって、1x1畳み込み演算の実行を説明する図が示されている。畳み込み演算への入力は、CHWフォーマットの活性化行列301である。活性化行列301の各列は、C'個の特徴値からなる、アレイの要素のうちの1つへの入力チャネルを表す。活性化行列301のそれぞれの特徴値は、列のうちの1つの中のそれぞれのボックスにより図1において示されている。図3において、活性化行列301は、列の数「height x width」(すなわち、HW)、および「channels in」と表記される行の数C'を有するものとして示されている。活性化行列301は、任意の要素の任意のチャネルのための特徴値の実質的にいずれもが「ヌル」ではない、すなわち事前に0であるものとして知られていない(たとえば、値のいずれもが、または値の1%未満しか、事前に0であるものとして知られていない)という意味で、デンスである。実際に、すべてのまたは実質的にすべてのC'xHW値が、実際に0ではないことがある。ノンヌル特徴値が影付きのボックスによって図3において示されており、すなわち、活性化行列301のすべてのボックスが影付きである。
【0047】
1x1畳み込み層のためのカーネルは、CxC'重み行列302によって示され、Cは各要素の出力チャネルの中の畳み込まれた値の数である。CはC'と同じであってもよく、または異なっていてもよい。0(「ヌル値」)である重み行列302の中の値は、影付きではない(白い)ボックスによって示されるが、カーネル行列の中の0ではない値(「ノンヌル値」)は影付きのボックスによって示される。ノンヌル値の比率は低く、たとえば25%~10%の範囲にある。畳み込み演算は、活性化行列301による重み行列302の乗算からなる。これは図5を参照して以下で説明される。
【0048】
図4は、隠れ層102a、102b、102cのうちの1つによって実行され得る代替的な形式の1x1畳み込み演算を示す。活性化行列401は図3と同じであるが、図3とは対照的に、図4の場合、重み行列402の行(「重み行」)は、グループ403、404、405、406へと垂直に区分される。各グループに対して、そのグループのすべての重み行のノンヌル重みは、重み行に沿って同じ位置にある(すなわち、特徴値の同じサブセットに対応する)。各グループは、少なくとも2である等しい数の重み行からなり得る(図4では、各グループ403、404、405、406は4つの行を有する)。図4に示されるように、各グループ403、404、405、406の重み行は連続する重み行であるが、代替の構成では、グループの行は互いにインターリーブされてもよい。
【0049】
行列401の各列(すなわち、各要素のための入力値)を処理して対応する畳み込まれた値を生成するとき、各グループの重み行は、対応する畳み込まれた値を生成するために並列に処理され得る。しかしながら、重み行の異なるグループは連続的に処理され得る。
【0050】
図5は、図3の1x1畳み込み演算のうちの1つにおけるカーネルの評価のための、メモリ読み取りおよび書き込み動作を示す。簡潔にするために、この例における活性化行列の行の数C'(すなわち、各要素のための入力のチャネルの数)は4であり、各要素のための出力チャネルの数Cも4である。しかしながら、図5の方式は、値C'およびCが、互いに等しいか異なっている任意の正の整数(たとえば、図3および図4のようにC'=8かつC=16)である場合に容易に拡張される。具体的には、図5(a)は例示的な重み行列501を示し、0ではない(ノンヌル)要素は十字を含むボックスにより示され、0の(ヌル)要素は十字のないボックスにより示される。たとえば、第4の出力チャネル(第4の行)は、第2および第4の入力チャネルだけのためのノンヌル重み値を有する。
【0051】
図5(b)~(e)は、アレイの8つの要素のための4つのチャネル値が一緒に処理されるが、一緒に処理される要素の数が異なり得るような、動作のシーケンスを示す。たとえば、16個の要素が一緒に処理されてもよく、これはキャッシュメモリ206の中の1つのキャッシュラインに対応し得る。キャッシュメモリのメモリ空間は502と表記され、各入力チャネルの中の特徴値の数に(少なくとも)等しい行(キャッシュライン)の数を有する。各行において、対応する特徴値を記憶することが可能であるように各々構成される、複数のメモリ位置がある。図5(b)~(e)はまた、1x1畳み込み層の出力である畳み込まれた値を記憶するための特徴値メモリユニット205のメモリ空間503を示す。
【0052】
図5(b)に示される第1のステップにおいて、プロセッサ202は、重み行列の第1の行の中の0ではない重みの位置をスパース性データセットから決定する。この例では、重み行列501の第1の行は、第1および第4の位置においてノンヌル値を有する。アレイの8つの要素のセットに対して、プロセッサ202は、特徴値メモリユニット205からこれらの0ではない重みに対応する特徴値を読み取り、重み行列501の第1の行の中の0ではない重みに対応するメモリ空間502のそれぞれの行において、それらの特徴値をキャッシュメモリ206のメモリ空間502の最初の8つの位置へと書き込む。すなわち、8つの要素のセットのための第1の特徴値は、メモリ空間502の第1の行の最初の8つの位置5021へとそれぞれ書き込まれ、8つの要素のセットのための第4の特徴値は、メモリ空間502の第4の行の最初の8つの位置5022へとそれぞれ書き込まれる。位置5021、5022へと書き込まれる特徴値は、十字を含むボックスによって示される。これらの読み取りおよび書き込み動作は、8つの要素(アレイの中の空間位置)のために実質的に同時に実行される。
【0053】
任意選択で、重み行列501の第1の行の中のノンヌル重み値の各々(すなわち、第1および第4の重み)に対して、プロセッサはまた、たとえば8つの要素の第2のセットのための対応する特徴値(すなわち、第1および第4の特徴値)を読み取り、それらをメモリ空間502の対応する行(すなわち、第1および第4の行)の次の8つの位置5023、5024へと書き込む。それらは、それらを通る単一の左上から右下への対角線を有するボックスとして、図5(b)において示されている。これらのプリフェッチされた特徴値は、要素の第2のセットのための畳み込まれた値を生成するために後で(8つの要素の第1のセットのためのすべての畳み込まれた値が生成された後で)使用される。
【0054】
8つの要素の第1のセットの各々に対して、プロセッサ502は、ノンヌル重みに対応するメモリ空間502の行の中のその要素のための特徴値と、重み行列501の第1の行の中の各々のノンヌル重みを乗じ、結果を累算する(加算する)ことによって、それぞれの畳み込まれた値を形成する。プロセッサ202は次いで、これらの8つの要素の各々のためのそれぞれの畳み込まれた値を、特徴値メモリユニット205のメモリ空間の部分503の最初の8つの位置5031に書き込む。任意選択で、1x1畳み込みに含まれる非線形関数(たとえば、ReLU関数)は、畳み込まれた値の各々に対して実行され得る。したがって、図5(b)に示されるプロセスは、8つの要素の第1のセットのための出力チャネルに対する第1の畳み込まれた値を生成した。8つの要素の第1のセットのための畳み込まれた値は、並列に(または短い間隔で連続的に)生成されてもよく、特徴値メモリユニット205へと実質的に同時に書き込まれてもよい。
【0055】
上で述べられたように、プロセッサ202は任意選択で、8つの要素の第2のセットのための第1および第4の特徴値を、8つのそれぞれのメモリ位置5023、5024へとすでに書き込んでいてもよい。この場合、プロセッサ202は任意選択で、同じプロセスによって8つの要素の第2のセットのための畳み込まれた値を生成し得る。すなわち、8つの要素の第2のセットの各々に対して、プロセッサ202は、ノンヌル重みに対応するメモリ空間502の行の部分5023、5024の中のその要素のための特徴値と、重み行列501の第1の行の中の各ノンヌル重みを乗じ、結果を累算し(加算し)、それをメモリ空間503の第1の行の次の8つの位置5032に書き込むことによって、それぞれの畳み込まれた値を形成する。1x1畳み込み演算が非線形関数を実行することを含む場合、これは畳み込まれた値の各々に対して実行される。このプロセスは図5(a)には示されておらず、それは、8つの要素の第2のセットの各々の第1の出力チャネルのためのそれぞれの畳み込まれた値を計算するこのプロセスが任意選択で、図5(b)~図5(e)に示されるステップのシーケンスが完了した後で実行され得るからであることに留意されたい。
【0056】
図5(c)は、8つの要素の第1のセットの出力チャネルのための第2の畳み込まれた値を計算するために図5(b)に示されるのと同じプロセスがどのように実行されるかを示す。この例では、ノンヌル重み値は、重み行列501の第2の行の第2および第3の位置にあるので、プロセッサは、8つの要素の第1のセットのための入力チャネルの第2および第3の特徴値を特徴値メモリユニット205から読み取り、それらを点によって示されるメモリ空間502の中の位置へと書き込む。この例では、重み行列501の第2の行のノンヌル重みは偶然、重み行列501の第1の行のノンヌル重みとは異なる位置にあるが、いずれかのノンヌル重みが同じ位置にある(すなわち、同じ入力チャネルに関係する)場合、その入力チャネルのための読み取りおよび書き込み動作は、メモリ空間502がそれらの特徴値をすでに含んでいるので、省略されてもよい。
【0057】
任意選択で、8つの要素の第2のセットのための第2および第3の特徴値は、(左下から右上への単一の対角線により示されるように)メモリ空間502の対応する行(すなわち、第2および第3の行)の次の8つの位置へと書き込まれる。次いで、プロセッサ202は、8つの要素の第1のセットのための対応する特徴値と、重み行列501の第2の行の中のノンヌル重みを乗じ、結果を加算することによって、8つの要素の第1のセットの各々に対して、出力チャネルのそれぞれの第2の畳み込まれた値を計算する。
【0058】
図5(d)および図5(e)はそれぞれ、8つの要素の第1のセットの出力チャネルの第3および第4の畳み込まれた値に対する畳み込まれた値をプロセッサがどのように生成するかを示す。図5(b)および図5(c)に示されるプロセスの後で、8つの要素の(空間位置)の第1のセットのためのすべての特徴値がキャッシュメモリ206の中にあるので、プロセッサ202は、特徴値メモリユニット205からこれ以上データを読み取ることなく、残りの出力チャネルのための畳み込まれた値を生成できることに留意されたい。8つの要素の第1のセットの各々の出力チャネルの第3および第4の畳み込まれた値を生成するために、プロセッサ202はそれぞれ、8つの要素の第1のセットのための対応する特徴値と重み行列501の第3および第4の行の中のノンヌル重みを乗じ、結果を加算する。これは、特徴値メモリユニット205およびキャッシュメモリ206がランダムアクセスであるにもかかわらず、ステップ5(d)および5(e)の乗算を実行するための特徴値のロードが高速であることを意味する。
【0059】
図5(b)~図5(e)に示されるステップのシーケンスにおいて、外側ループは列にまたがり、内側ループは行にまたがる。これにより、活性化行列の中の16個の空間位置の各断片が、もはや必要ではなくなるまでキャッシュメモリ206に残ることが可能になる。図5(b)および図5(c)のステップはキャッシュメモリ206を準備するが、後続の図5(d)および図5(e)のステップはキャッシュメモリ206からすべての特徴値をロードする。
【0060】
重み行列501の構造にわずかではあっても規則性があることが知られている場合、それにより、図5のプロセスは、重み値および特徴値がプロセッサ202のレジスタにロードされた後でデータ再使用を増やすことによって、大きな性能向上を伴って変えられることが可能になる。たとえば、図4に関連して上で説明されたように、重み行列の複数の出力チャネルが、0の/0ではない重みの同じパターンを有し得る。代替または追加として、重み行列の複数の列は、0の/0ではない重みの同じパターンを有し得る。複数の出力または入力チャネルがすべて同じ0の/0ではないパターンを共有するようなスパース性パターンを生み出すように重み行列を生成する訓練プロセスを制約することは、重み行列の中に「ブロック」を作り出し、そのブロックは、同じスパース性パターンを持つ複数の行のグループである場合、図4に示されるように作り出される。図4に示されるように出力チャネルの次元においてブロックを作り出すことは、入力チャネルの次元においてブロックを形成することよりも多くのデータ再使用を可能にする。いずれの選択肢も正確度について同じ影響を有すること、しかし、同じパターンを有するように重み行列の複数の行を準備する(図4のように)ことがより高い処理効率をもたらすのでそれが好ましいことを示した、実験が行われた。いくつかの実験において、重み行列は、グループが2行からなっている、またはグループが4行からなっているという制約とともに訓練された。この場合の内側ループは、対応するグループのすべての行のための出力チャネルを生成することを含み得る。たとえば、各グループが2つの重み行を含む場合、アレイの特徴ベクトル(たとえば、アレイの8つの要素の行)のために実行される単一の内側ループは、要素のセットの出力チャネルのための対応する2つの畳み込まれた値を生成し得る。実質的に、図5の方式は、図5(a)から図5(b)の段階の各々が、グループのうちの1つのためのすべての重み行がすべての対応する畳み込まれた値を生成するために使用されるような1つの段階へ置き換えられるように、変えられる。
【0061】
図5に示されるプロセスにおいて畳み込まれた値を生成する方法600が、図6に要約されている。ステップ601において、各々の畳み込まれた値に対して、1つまたは複数の特徴値は、スパース性データセット(これは各々の畳み込まれた値に対応する重み行列の中のノンヌル重みを示すものとして役立つ)に基づいて活性化行列から取得される。ステップ602において、畳み込まれた値は、それぞれのノンヌル重みによって重み付けられる対応する抽出された特徴値の合計として生成される。
【0062】
計算負荷およびメモリ要件の大きな低減が以下で説明される技法を使用して達成され得ることを例証する実験が実行された。特に、3つの要因がこれに寄与する。
【0063】
1. 重み行列はスパースであるが、活性化行列はデンスである。これは、プロセッサ202が活性化行列からベクトル負荷を実行し、複数の空間位置を同時に処理できることを意味する。
【0064】
2. 正しい順序で行列を処理することによって、システムは、ランダムにアクセスされる値をキャッシュメモリに維持することができる。キャッシュメモリ206からのランダムアクセスは、特徴値メモリユニット205からより高速に実行され得ることに留意されたい。
【0065】
3. 特に入力チャネルの数が少ないとき、要素の第2のセットのための活性化行列からの特徴値のプリフェッチはさらに、要素の第2のセットのための畳み込まれた値が計算されるべきであるときにキャッシュメモリ206が必要とされる特徴値を含まないので値が特徴値メモリユニット205から取得されなければならない事例の数を減らす。
【0066】
ある一定の計算能力に対して、スパース畳み込みネットワークは、実時間で測った場合、たとえば1.3~2.4倍デンス畳み込みネットワークより正確であるが、デンス畳み込みネットワークの約66%のパラメータしか必要としないことを実験が例証しており、これは約1世代分の改善と等価である。
【0067】
本明細書は、システムおよびコンピュータプログラムコンポーネントに関連して「構成される」という用語を使用する。1つまたは複数のコンピュータのシステムが特定の動作または活動を実行するように構成されることは、システムが、動作の際にその動作または活動をシステムに実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せを備えていることを意味する。1つまたは複数のコンピュータプログラムが特定の動作または活動を実行するように構成されることは、1つまたは複数のプログラムが、データ処理装置によって実行されると、動作または活動を装置に実行させる命令を含むことを意味する。
【0068】
本明細書において説明される主題および機能的な動作の実施形態は、デジタル電子回路で、有形に具現化されたコンピュータソフトウェアもしくはファームウェアで、本明細書およびその構造的な均等物において開示された構造を含むコンピュータハードウェアで、またはそれらの1つまたは複数の組合せで実装され得る。本明細書において説明される主題の実施形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置による実行のための、またはデータ処理装置の動作を制御するための、有形の非一時的記憶媒体に符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実装され得る。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらの1つまたは複数の組合せであり得る。代替または追加として、プログラム命令は、データ処理装置による実行のために適切な受信機装置へと送信するための情報を符号化するために生成される、人工的に生成された伝播信号、たとえば、機械で生成された電気信号、光信号、または電磁気信号に符号化され得る。
【0069】
「データ処理装置」という用語は、データ処理ハードウェアを指し、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを例として含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。装置はまた、専用論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)であってもよく、またはさらにそれらを含んでもよい。装置は任意選択で、ハードウェアに加えて、コンピュータプログラムのための実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つまたは複数の組合せを構成するコードを含み得る。
【0070】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、スクリプト、もしくはコードとも呼ばれ、またはそのように記述されることもあるコンピュータプログラムは、コンパイラ言語もしくはインタプリタ型言語、または宣言型言語もしくは手続型言語を含む、任意の形式のプログラミング言語で書かれてもよく、スタンドアロンプログラムとして、または、コンピューティング環境において使用するのに適したモジュール、コンポーネント、サブルーチン、もしくは他のユニットとしてを含めて、任意の形式で展開されてもよい。プログラムは、ファイルシステムの中のファイルに対応し得るが、その必要はない。プログラムは、他のプログラムもしくはデータを保持するファイルの一部分、たとえばマークアップ言語ドキュメントに記憶される1つまたは複数のスクリプトに、対象のプログラムに専用の単一のファイルに、または複数の協調したファイル、たとえば1つまたは複数のモジュール、サブプログラム、もしくはコードの部分を記憶するファイルに記憶され得る。コンピュータプログラムは、1つのコンピュータ上で、または、1つの場所に位置する、もしくは複数の場所に分散しておりデータ通信ネットワークによって相互接続される複数のコンピュータ上で実行されるように、展開され得る。
【0071】
本明細書では、「データベース」という用語は、データの任意の集合を広く指すために使用される。データは、どのような特定の方法でも構造化される必要はなく、またはまったく構造化されなくてもよく、1つまたは複数の位置にある記憶デバイスに記憶され得る。したがって、たとえば、インデックスデータベースは、その各々が異なるように組織化されてアクセスされ得るデータの複数の集合体を含み得る。
【0072】
同様に、本明細書では、「エンジン」という用語は、1つまたは複数の特定の機能を実行するようにプログラムされるソフトウェアベースのシステム、サブシステム、またはプロセスを指すために広く使用される。一般に、エンジンは、1つまたは複数の位置にある1つまたは複数のコンピュータにインストールされる、1つまたは複数のソフトウェアモジュールまたはコンポーネントとして実装される。いくつかの場合、1つまたは複数のコンピュータは特定のエンジンに専用である。他の場合には、複数のエンジンは、同じ1つまたは複数のコンピュータにインストールされ、そこで実行していてもよい。
【0073】
本明細書において説明されるプロセスおよび論理フローは、入力データに対して作用して出力を生成することによって機能を実施するように、1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラム可能コンピュータによって実施され得る。プロセスおよび論理フローはまた、専用論理回路、たとえばFPGAもしくはASICによって、または専用論理回路と1つまたは複数のプログラムされたコンピュータの組合せによって、実行され得る。
【0074】
コンピュータプログラムの実行に適したコンピュータは、汎用マイクロプロセッサもしくは専用マイクロプロセッサもしくは両方、または任意の他の種類の中央処理装置に基づき得る。一般に、中央処理装置は、読取り専用メモリまたはランダムアクセスメモリまたは両方から命令およびデータを受信する。コンピュータの不可欠な要素は、命令を実施または実行するための中央処理装置、および命令とデータを記憶するための1つまたは複数のメモリデバイスである。中央処理装置およびメモリは、専用論理回路によって補強され、またはそれに組み込まれ得る。一般に、コンピュータは、データを記憶するための1つまたは複数のマスストレージデバイス、たとえば磁気ディスク、磁気光学ディスク、もしくは光学ディスクを含み、または、それらからデータを受け取り、もしくはそれらにデータを転送し、もしくはそれらの両方を行うために動作可能に結合される。しかしながら、コンピュータはそのようなデバイスを有する必要はない。その上、コンピュータは、別のデバイス、たとえばいくつか例を挙げると、携帯電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブルストレージデバイス、たとえばユニバーサルシリアルバス(USB)フラッシュドライブに組み込まれ得る。
【0075】
コンピュータプログラム命令およびデータを記憶するのに適したコンピュータ可読媒体は、例として、半導体メモリデバイス、たとえばEPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、たとえば内部ハードディスクまたはリムーバブルディスク、磁気光学ディスク、ならびにCD-ROMディスクおよびDVD-ROMディスクを含む、すべての形式の不揮発性メモリ、媒体、およびメモリデバイスを含む。
【0076】
ユーザとの対話を可能にするために、本明細書において説明される主題の実施形態は、情報をユーザに表示するための表示デバイス、たとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタ、ならびに、ユーザがそれにより入力をコンピュータに提供できるキーボードおよびポインティングデバイス、たとえば、マウスまたはトラックボールを有する、コンピュータ上で実装され得る。ユーザとの対話を可能にするために、他の種類のデバイスも使用され得る。たとえば、ユーザに提供されるフィードバックは、任意の形式の感覚フィードバック、たとえば視覚フィードバック、聴覚フィードバック、または触覚フィードバックであり得る。ユーザからの入力は、音響入力、発話入力、または触覚入力を含む任意の形式で受信され得る。加えて、コンピュータは、ユーザによって使用されるデバイスに文書を送信してデバイスから文書を受信することによって、たとえば、ユーザのデバイス上のウェブブラウザから受け取られた要求に応答してウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。また、コンピュータは、個人用デバイス、たとえば、メッセージングアプリケーションを実行し、返答としてユーザから応答メッセージを受信するスマートフォンに、テキストメッセージまたは他の形式のメッセージを送信することによって、ユーザと対話することができる。
【0077】
機械学習モデルを実装するためのデータ処理装置はまた、たとえば、機械学習訓練または生産の一般的な計算集約的な部分、すなわち推論、ワークロードを処理するための、専用ハードウェアアクセラレータユニットを含み得る。
【0078】
機械学習モデルは、機械学習フレームワーク、たとえばTensorFlowフレームワーク、Microsoft Cognitive Toolkitフレームワーク、Apache Singaフレームワーク、またはApache MXNetフレームワークを使用して、実装され展開され得る。
【0079】
本明細書において説明される主題の実施形態は、バックエンド構成要素を、たとえばデータサーバとして含む、または、ミドルウェア構成要素を、たとえばアプリケーションサーバとして含む、または、フロントエンド構成要素、たとえば、グラフィカルユーザインターフェース、ウェブブラウザ、もしくは本明細書において説明される主題の実装形態とユーザがそれを通じて対話できるアプリを有するクライアントコンピュータを含む、または、1つまたは複数のそのようなバックエンド構成要素、ミドルウェア構成要素、もしくはフロントエンド構成要素の任意の組合せを含む、コンピューティングシステムにおいて実装され得る。システムの構成要素は、任意の形式または媒体のデジタルデータ通信、たとえば通信ネットワークによって相互接続され得る。通信ネットワークの例は、ローカルエリアネットワーク(LAN)およびワイドエリアネットワーク(WAN)、たとえばインターネットを含む。
【0080】
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントおよびサーバは、一般に互いに離れており、通常は通信ネットワークを通じて対話する。クライアントとサーバの関係は、コンピュータプログラムがそれぞれのコンピュータ上で実行されて互いにクライアント-サーバの関係を有することにより生じる。いくつかの実施形態では、サーバは、たとえば、クライアントとして活動するデバイスと対話するユーザにデータを表示してユーザからユーザ入力を受け取る目的で、データ、たとえばHTMLページをユーザデバイスに送信する。ユーザ対話の結果などのユーザデバイスにおいて生成されたデータは、デバイスからサーバにおいて受け取られ得る。
【0081】
本明細書は多くの具体的な実装の詳細を含むが、これらは、任意の発明の範囲または特許請求され得るものの範囲に対する制約として見なされるべきではなく、むしろ、特定の発明の特定の実施形態に特有であり得る特徴の説明として見なされるべきである。別々の実施形態の文脈で本明細書において説明されるいくつかの特徴はまた、単一の実施形態において組合せで実装され得る。逆に、単一の実施形態の文脈で説明される様々な特徴はまた、複数の実施形態で別々に、または任意の適切な部分組合せで実装されてもよい。その上、特徴は、いくつかの組合せで活動するものとして上で説明され、そのように最初に特許請求されることもあるが、特許請求される組合せからの1つまたは複数の特徴は、場合によっては組合せから削除されてもよく、特許請求される組合せは、部分組合せまたは部分組合せの変形を対象としてもよい。
【0082】
同様に、動作は特定の順序で図面において示されており、特許請求の範囲に記載されているが、これは、望ましい結果を達成するために、そのような動作が示される特定の順序もしくは逐次的な順序で実行されること、またはすべての示される動作が実行されることを要求するものとして理解されるべきではない。いくつかの状況では、マルチタスキングおよび並列処理が有利であり得る。その上、上で説明された実施形態における様々なシステムモジュールと構成要素の分離は、すべての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されるプログラム構成要素とシステムが一般に、単一のソフトウェア製品において一緒に統合され、または複数のソフトウェア製品へとパッケージングされ得ることを理解されたい。
【0083】
本主題の具体的な実施形態が説明された。他の実施形態が以下の特許請求の範囲内にある。たとえば、特許請求の範囲に記載される活動は、異なる順序で実行されてもよく、それでも望ましい結果を達成することができる。一例として、添付の図面に示されるプロセスは、望ましい結果を達成するために、示される特定の順序または逐次的な順序を必ずしも必要としない。いくつかの場合、マルチタスキングおよび並列処理が有利であり得る。
【符号の説明】
【0084】
100 ニューラルネットワーク
101 入力層
102 隠れ層
103 出力層
200 コンピュータシステム
201 データ入力
202 プロセッサ
203 メモリユニット、プログラムメモリユニット
204 メモリユニット、重みメモリユニット
205 メモリユニット、特徴値メモリユニット、特徴値メモリ
206 キャッシュメモリ
207 出力データ
301 活性化行列
302 重み行列
401 活性化行列
402 重み行列
501 重み行列
502 メモリ空間
503 メモリ空間
図1
図2
図3
図4
図5(a)】
図5(b)】
図5(c)】
図5(d)】
図5(e)】
図6
【国際調査報告】