(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-04-21
(45)【発行日】2025-04-30
(54)【発明の名称】ニューラルネットワークにおける決定ツリーの組込み
(51)【国際特許分類】
G06N 3/02 20060101AFI20250422BHJP
G06N 20/00 20190101ALI20250422BHJP
【FI】
G06N3/02
G06N20/00
(21)【出願番号】P 2023569726
(86)(22)【出願日】2021-05-10
(86)【国際出願番号】 US2021031636
(87)【国際公開番号】W WO2022240391
(87)【国際公開日】2022-11-17
【審査請求日】2024-01-09
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ヌネス・コエーリョ,クラウディオナー・ホセ,ジュニア
(72)【発明者】
【氏名】クーセラ,アキ・オスカリ
(72)【発明者】
【氏名】チャタジー,サトラジット
(72)【発明者】
【氏名】ジエリンスキ,ピオトル
(72)【発明者】
【氏名】チュアン,ハオ
【審査官】千葉 久博
(56)【参考文献】
【文献】特開2021-57066(JP,A)
【文献】特開平2-282829(JP,A)
【文献】中国特許出願公開第112085157(CN,A)
【文献】SIVAKUMAR CHIDAMBARAM, 外2名,"PoET-BiN: Power Efficient Tiny Binary Neurons",[online],2020年02月23日,[検索日 2024.10.07], インターネット<URL:https://arxiv.org/pdf/2002.09794>
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/02
G06N 20/00
(57)【特許請求の範囲】
【請求項1】
1つまたは複数のコンピュータによって実施される方法であって、前記方法は、
シーケンスに配置されている複数の層を備えるニューラルネットワークを表すデータを受け取ることと、
前記複数の層から層の1つまたは複数のグループを選択することとを含み、
層の各々のグループは、前記シーケンスにおいて互いに隣接する1つまたは複数の層を備え、
前記方法は、
前記ニューラルネットワークに対応する新たな機械学習モデルを生成することをさらに含み、前記新たな機械学習モデルを生成することは、
層の各々のグループについて、層の前記グループを置き換えるそれぞれの決定ツリーを選択することを含み、それぞれの前記決定ツリーは、前記グループにおけるそれぞれの最初の層への入力の量子化バージョンを入力として受け取り、前記グループにおけるそれぞれの最後の層の出力の量子化バージョンを出力として生成し、それぞれの前記決定ツリーのツリー深さは、前記グループの層の数に少なくとも部分的に基づく、方法。
【請求項2】
前記ニューラルネットワークのトレーニングデータに基づいて、それぞれの決定ツリーによって置き換えられなかった前記ニューラルネットワークにおける前記層の少なくとも一部をトレーニングすることによって、前記新たな機械学習モデルをトレーニングすることをさらに含む、請求項1に記載の方法。
【請求項3】
それぞれの決定ツリーによって置き換えられなかった前記ニューラルネットワークにおける前記層の少なくとも一部をトレーニングすることは、
前記シーケンスに従って、前記ニューラルネットワークの層の前記1つまたは複数のグループに後続する前記ニューラルネットワークの前記層をトレーニングすることを含む、請求項2に記載の方法。
【請求項4】
層の前記1つまたは複数のグループの各々を選択することは、
前記ニューラルネットワークにおけるそれぞれの初期層を選択することと、
各々が、それぞれの前記初期層を、候補グループにおける最初の層として有する、それぞれの複数の前記候補グループを生成することと、
それぞれの前記複数の前記候補グループの各々について、それぞれの決定ツリーによって置き換えられる前記候補グループに前記層を有する対応する新たな機械学習モデルのパフォーマンスを測定する前記候補グループのそれぞれのパフォーマンス尺度を判定することと、
それぞれの前記複数の前記候補グループについて、それぞれのパフォーマンス尺度に基づいて、前記候補グループのうちの1つを前記グループとして選択することとを含む、請求項1~請求項3のいずれか1項に記載の方法。
【請求項5】
それぞれの層のグループを生成するために、前記ニューラルネットワークにおけるそれぞれの前記初期層を選択することは、
それぞれの前記初期層を、ランダムプロセスによって、または、前記ニューラルネットワークの前記シーケンスに基づいて選択することを含む、請求項4に記載の方法。
【請求項6】
それぞれのパフォーマンス尺度に基づいて、前記候補グループのうちの1つを前記グループとして選択することとは、
それぞれの前記パフォーマンス尺度の中から最大のパフォーマンス尺度を判定することと、
それぞれの前記複数の前記候補グループから、前記最大のパフォーマンス尺度に関連付けられている候補グループを、前記グループとして選択することとを含む、請求項4または請求項5に記載の方法。
【請求項7】
前記グループにおけるそれぞれの最初の層への前記入力の前記量子化バージョンと、前記グループにおけるそれぞれの最後の層の前記出力の前記量子化バージョンとは、2値量子化または3値量子化を使用して生成される、請求項1~請求項6のいずれか1項に記載の方法。
【請求項8】
前記層の前記グループを置き換えるそれぞれの決定ツリー層は、GradientBoost決定ツリーまたはAdaBoost決定ツリーを備える、請求項1~請求項7のいずれか1項に記載の方法。
【請求項9】
各々の層は、それぞれの重みのセットを備え、前記方法は、
層の前記1つまたは複数のグループにない前記ニューラルネットワークにおける各々の層について、前記層に関連付けられている重みの少なくとも一部を量子化することをさらに含む、請求項1~請求項8のいずれか1項に記載の方法。
【請求項10】
それぞれの前記決定ツリーの前記ツリー深さは、前記グループにおける前記層の数に等しい、請求項1~請求項9のいずれか1項に記載の方法。
【請求項11】
前記グループにおけるそれぞれの最初の層への前記入力の前記量子化バージョン、または前記グループにおけるそれぞれの最後の層の前記出力の前記量子化バージョンは、1つまたは複数のスケーリング係数によって生成される、請求項1~請求項10のいずれか1項に記載の方法。
【請求項12】
受け取られている前記データによって表されている前記ニューラルネットワークは、トレーニングデータセットによって最初にトレーニングされているニューラルネットワークであり、
それぞれの層のグループを置き換える各々の決定ツリーは、前記トレーニングデータセットのそれぞれの量子化バージョンの一部に基づいてトレーニングされ、
前記トレーニングデータセットの前記量子化バージョンの前記それぞれの一部の各々のトレーニングサンプルは、(i)前記グループの前記最初の層への層入力の量子化バージョンと、(ii)前記グループの前記最後の層からの層出力の量子化バージョンとを備える、請求項1~請求項11のいずれか1項に記載の方法。
【請求項13】
前記新たな機械学習モデルを実施するように構成されているシステムに、前記新たな機械学習モデルを出力することをさらに含み、前記システムは、追加機能、選択機能、または切替機能から選択される1つまたは複数の機能によって、前記決定ツリーを実施するための1つまたは複数の計算ユニットを備える、請求項1~請求項12のいずれか1項に記載の方法。
【請求項14】
1つまたは複数のコンピュータと、前記1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに、請求項1~請求項13のいずれか1項に記載の方
法を実行させる命令を格納する、1つまたは複数の記憶デバイスとを備える、システム。
【請求項15】
1つまたは複数のコンピュータに、請求項1~請求項13のいずれか1項に記載の方
法を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本明細書は、大規模なニューラルネットワークにおける決定ツリーの組込みに関する。
【背景技術】
【0002】
背景
ニューラルネットワークは、受け取られる入力に対する出力を予測するために、1つまたは複数の非線形ユニットの層を適用する機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて、1つまたは複数の隠れ層を含んでいる。各々の隠れ層の出力は、ネットワークにおける次の層、すなわち、次の隠れ層または出力層への入力として使用される。ネットワークの各々の層は、それぞれのパラメータのセットの現在値に従って、受け取られる入力から出力を生成する。
【0003】
より具体的には、各々のニューラルネットワーク層は、複数のノードを含み、各々の層は、ニューラルネットワークによって定義されている一連の演算を表す。一般に、これらの演算は、たとえば、加算や乗算などの線形演算と、たとえば、「Relu」または「Sigmoid」関数などの非線形活性化関数である、非線形演算とを含むことができる算術演算である。線形演算は、層入力と層の重みとを結合する。各々の層の線形演算は、層の重みが行列またはテンソルの形態で表され、層の層入力がベクトルの形態で表されているテンソル演算を使用して実施できる。
【0004】
大規模なニューラルネットワーク、すなわち、多くの層と多数のパラメータとを有するニューラルネットワークは、様々な機械学習タスクで、優れたパフォーマンスを示している。しかしながら、これらの大規模なニューラルネットワークは、レイテンシが大きく、大量の計算リソースを消費する可能性があり、たとえば、予測を行うために大量のメモリを必要とし、かなりの数のプロセッササイクルを消費する。ニューラルネットワークの計算効率を高めるための従来の技術の1つは、重み行列の一部を操作して、疎行列にすることである。疎行列は、多数の項がゼロである行列である。
【発明の概要】
【0005】
概要
本明細書は、大規模なニューラルネットワークに決定ツリーを組み込んで、新たな機械学習モデルを生成する技術を説明する。
【0006】
一般に、本明細書で説明される主題の1つの革新的な態様は、以下の動作を含む方法で具現化することができ、方法は、シーケンスに配置されている複数の層を備えるニューラルネットワークを表すデータを受け取る動作と、複数の層から、層の1つまたは複数のグループを選択する動作とを含み、層の各々のグループは、このシーケンスにおいて互いに隣接する1つまたは複数の層を備えており、方法は、ニューラルネットワークに対応する新たな機械学習モデルを生成する動作をさらに含んでいる。
【0007】
新たな機械学習モデルの生成は、層の各々のグループについて、層のグループを置き換えるそれぞれの決定ツリーを選択することを含む。それぞれの決定ツリーは、グループにおけるそれぞれの最初の層への入力の量子化バージョンを、入力として受け取り、グループにおけるそれぞれの最後の層の出力の量子化バージョンを、出力として生成する。それぞれの決定ツリーのツリー深さは、グループの層の数に少なくとも部分的に基づいている。
【0008】
この態様の他の実施形態は、対応するコンピュータシステムと、装置と、1つまたは複数のコンピュータ記憶デバイスに記録されているコンピュータプログラムとを含んでおり、各々が、方法の動作を実行するように構成されている。
【0009】
前述した実施形態および他の実施形態は各々、任意選択的に、以下の特徴のうちの1つまたは複数を、単独で、または組み合わせて含むことができる。特に、1つの実施形態は、以下のすべての特徴を組み合わせて含んでいる。
【0010】
この方法は、さらに、ニューラルネットワークのトレーニングデータに基づいて、それぞれの決定ツリーによって置き換えられなかったニューラルネットワークにおける層の少なくとも一部をトレーニングすることによって、新たな機械学習モデルをトレーニングする動作を含むことができる。
【0011】
上記で論じたように、層の1つまたは複数のグループの各々を選択する動作はさらに、ニューラルネットワークにおけるそれぞれの初期層を選択することと、各々が、それぞれの初期層を、候補グループにおける最初の層として有する、それぞれの複数の候補グループを生成することと、それぞれの複数の候補グループの各々について、それぞれの決定ツリーによって置き換えられる候補グループに層を有する、対応する新たな機械学習モデルのパフォーマンスを測定する候補グループの、それぞれのパフォーマンス尺度を判定することと、それぞれの複数の候補グループについて、それぞれのパフォーマンス尺度に基づいて、候補グループのうちの1つをグループとして選択することとからなる動作を含むことができる。
【0012】
それぞれの初期層の選択は、ランダムプロセスによって、またはニューラルネットワークのシーケンスに基づいて実施できる。グループにおけるそれぞれの最初の層への入力の量子化バージョンと、グループにおけるそれぞれの最後の層の出力の量子化バージョンとは、2値量子化または3値量子化を使用して生成できる。層のグループを置き換えるそれぞれの決定ツリー層は、GradientBoost決定ツリーまたはAdaBoost決定ツリーを含むことができる。
【0013】
本方法はさらに、新たな機械学習モデルを、新たな機械学習モデルを実施するように構成されているシステムに出力することを含み得、このシステムは、追加機能、選択機能、または切替機能から選択される1つまたは複数の機能によって決定ツリーを実施するための1つまたは複数の計算ユニットを備える。つまり、(たとえば、トレーニングされている)新たな機械学習モデルは、乗算を実行するために、乗算アキュムレータユニット(MAC)などの、より高価な計算ユニットを必要とせずに、決定ツリーを実施するための1つまたは複数の計算ユニット(マルチプレクサまたは算術論理ユニットなど)を含むシステムに出力され得る。
【0014】
本明細書において説明される主題は、以下の利点のうちの1つまたは複数を実現するために特定の実施形態において実施することができる。
【0015】
以下に説明される技術を実施する、説明されるシステムは、計算コストを低減し、大規模なニューラルネットワークのための推論計算を実行する効率を向上させることができる。
【0016】
第1に、大規模なニューラルネットワークの1つまたは複数のネットワーク層を、決定ツリーによって置き換えるための、説明される技術は、システムが、ニューラルネットワークのための推論計算を実行する場合、演算量を低減できる。たとえば、ニューラルネットワークの1つまたは複数の層を置き換える決定ツリーは、1つまたはいくつかの層(たとえば、ツリースタンプまたはシャローツリー)のみを有することができる。ツリースタンプおよびシャローツリーに対する演算を実行するための計算コストは、大規模なニューラルネットワークのニューラルネットワーク層を計算することによって必要とされる計算コストよりもはるかに少ない。別の例として、決定ツリーがAdaboostツリーである場合、Adaboostツリーのために乗算演算を実行する必要がないため、システムは、通常、乗算と加算との両方を必要とする従来のニューラルネットワーク層を計算するよりも少ない演算を実行して、効率を向上させることができる。
【0017】
第2に、説明される技術は、1つまたは複数の決定ツリーによって置き換えられるネットワーク層の少なくとも入力および出力を量子化することによって、ニューラルネットワークの合計サイズを低減できる。これらの入力および出力を量子化して、計算のために含まれる有効桁数を削減すると、特に挿入されている決定ツリーおよび少なくとも決定ツリーの隣のニューラルネットワーク層(すなわち、決定ツリーに先行する、または後続する層)の計算コストを低減することができる。量子化によってニューラルネットワークのサイズが低減されているため、量子化によって、計算システムの総メモリ/ストレージ要件も低減できる。これを考慮すると、説明される技術により、より少ないメモリおよび計算能力を有するデバイス(たとえば、スマートフォン、タブレット)は、変更されているニューラルネットワークの推論計算を効率的に実行できるようになる。いくつかの状況では、デバイスにおける1つまたは複数のハードウェアアクセラレータを、特定の変更されているニューラルネットワークの推論計算を実行するようにカスタマイズでき(すなわち、1つまたは複数の層は、1つまたは複数の決定ツリーによって置き換えられ、1つまたは複数の層の入力および出力は、量子化されており)、これにより、デバイスのメモリ使用量を減少させ、消費電力が低減し、推論計算を、より効率的かつ高速に実行できる。
【0018】
加えて、多くの場合、ニューラルネットワークの推論計算を実行する場合、重要な特徴の有無を正確に検出および表すために、量子化されていない入力および出力によって提供されている高い精度は不要である。つまり、決定ツリーによって置き換えられる層への入力および出力を量子化することによってもたらされる誤差は、効率の向上に比べて最小である。
【0019】
ニューラルネットワークをトレーニングおよび計算するために、実際に、量子化データが使用されているが、それぞれの決定ツリーと、残りのニューラルネットワーク層とに適するようになる入力および出力を量子化することは、以下で説明される技術のために重要である。より具体的には、システムは、浮動小数点数を量子化して、浮動小数点数を表す桁数を低減できるため、システムは、浮動小数点数の符号、指数、および仮数のために、より少ない桁数を使用することができる。2値量子化および3値量子化の場合、いくつか例を挙げると、システムは、浮動小数点を、{1、-1}や{1、0、-1}などの整数にマッピングできる。
【0020】
また、説明される技術は、変更されているニューラルネットワーク(すなわち、層が決定ツリーによって置き換えられている新たなニューラルネットワーク)を効率的にトレーニングすることができる。システムは、元のニューラルネットワークをトレーニングするために、同じトレーニング例の少なくとも一部を使用して、変更されているニューラルネットワークにおけるパラメータを、単に微調整するだけでよい。したがって、変更されているニューラルネットワークをトレーニングするために必要な時間期間を、元のニューラルネットワークをトレーニングするよりも大幅に短縮することができる。
【0021】
さらに、説明される技術は、決定ツリーの演算を実行するために、低コストのプログラム可能なハードウェアを使用して、コストを低減することができる。たとえば、計算システムは、乗算アキュムレータユニット(MAC)の代わりに、マルチプレクサ(MUX)ユニットを使用して、決定ツリーにおける演算を計算できる。当業者には、MUXユニットが、MACユニットよりも、少ない電力およびスペースしか消費しないことが知られている。したがって、計算システムは、GPUまたはTPUなどの高価なハードウェアアクセラレータではなく、変更されているニューラルネットワークに適したプログラム可能なハードウェアユニットのみを含むことができる。したがって、変更されているニューラルネットワークの推論計算を実行するためのハードウェアシステムを構築する総コストは、元のニューラルネットワークの場合よりもはるかに少ない。
【0022】
本明細書の主題の1つまたは複数の実施形態の詳細は、添付の図面および以下の説明に記載されている。主題の他の特徴、態様、および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0023】
【
図1】例示的なニューラルネットワーク変更エンジンを含む例示的なニューラルネットワーク展開システムを示す図である。
【
図2A】2値量子化出力を有する決定ツリーを有する例示的な新たな機械学習モデルの一部を示す図である。
【
図2B】3値量子化出力を有する決定ツリーを有する別の例示的な新たな機械学習モデルの一部を示す図である。
【
図3】トレーニングされている新たな機械学習モデルを生成するための例示的なプロセスのフロー図である。
【
図4】ニューラルネットワーク層の1つまたは複数のグループを選択するための例示的なプロセスのフロー図である。
【
図6】固定されている機能ハードウェアを使用する決定ツリーの例示的な実施態様を示す図である。
【
図7】決定ツリーのための推論計算を実行するための例示的なプログラマブルコアを示す図である。
【発明を実施するための形態】
【0024】
詳細な説明
様々な図面における同様の参照番号および指定は、同様の要素を示す。
【0025】
大規模なニューラルネットワークのトレーニングおよび計算における効率を高めるための1つの従来のアプローチは、各々の層の活性化入力および重みに対してそれぞれの疎行列を構築することである。しかしながら、疎行列を構築するアプローチは、新たな問題を引き起こす可能性がある。たとえば、疎行列を使用すると、計算システムが、時間期間中、同じメモリアドレスにアクセスできなくなる可能性があり、これは推論局所性の欠如とも呼ばれる。より具体的には、疎行列を構築する場合、計算システムは、元の行列の非ゼロ項を、物理的に互いに遠く離れた位置にあり得る異なるメモリアドレスに格納する。いくつかの状況では、疎行列における各々の項のメモリアドレスは、計算中に動的に変化することがある。たとえば、ゼロ項は、別の非ゼロ項と加算した後に非ゼロになる可能性がある。したがって、計算システムは、メモリに格納されているデータにアクセスする場合、メモリレイテンシ、キャッシュトラッシング、さらにはキャッシュ汚染にさえも悩まされる可能性があり、最終的には、大規模なニューラルネットワークを使用したトレーニングおよび入力処理の演算効率を下げる。
【0026】
あるいは、別の従来技術によるアプローチは、重み付け行列を層ロジックに融合することである。たとえば、この融合重み付け技術を採用するシステムは、重み行列におけるゼロ項を決定できるため、この項に対して乗算および累積演算を実行しない。これを考慮すると、融合重み付け技術は、入力の1つがゼロであるため、出力がゼロになる計算を実行しないことにより、大規模なニューラルネットワークの計算コストを低減できる。しかしながら、融合重み付けは、代償を伴う。第1に、融合重み付け技術は、ニューラルネットワークがハードウェアアクセラレータにおいて展開されると、変更されてはならず、すなわち、重み行列におけるゼロ項は、計算中、ゼロのままでなければならない。しかしながら、実際には、展開されているニューラルネットワークの重み行列を、新たなトレーニングデータを使用して微調整する必要がある場合がある。第2に、疎重み行列におけるゼロ項が、たとえば、乗算後に加算、その後に別の乗算のような複数の演算によって共有されている場合、システムは、依然として、ゼロ項のための演算を実行する必要がある。
【0027】
以下、明細書で説明される技術は、上記の問題に対処することができる。より具体的には、説明される技術は、量子化および決定ツリーを使用して、大規模なニューラルネットワークのために1つまたは複数の推論計算を効率的に実行できる。一般に、説明される技術は、ニューラルネットワークの1つまたは複数の層を、それぞれの決定ツリーによって置き換えることに関し、決定ツリーへの入力および決定ツリーからの出力は、対応する層の入力および出力の量子化バージョンである。
【0028】
本明細書は、経済的なハードウェアを使用して、推論計算を実行するための計算コストを低減し、効率を向上させるために、ニューラルネットワークのネットワーク層の1つまたは複数のグループを、1つまたは複数の決定ツリーによって置き換えることによって、新たな機械学習モデルを生成する、1つまたは複数の場所にある1つまたは複数のコンピュータにおいてコンピュータプログラムとして実施されるシステムを説明する。
【0029】
図1は、例示的なニューラルネットワーク変更エンジン120を含む例示的なニューラルネットワーク展開システム100を示す。
【0030】
一般に、ニューラルネットワーク展開システム100は、ニューラルネットワークを表すデータ110を入力として受け取り、トレーニングされている新たな機械学習モデル180を出力する。ニューラルネットワーク展開システム100は、入力ニューラルネットワークモデルのための新たな機械学習モデル130を生成するためのニューラルネットワーク変更エンジン120を含む。新たな機械学習モデル130は、元の入力ニューラルネットワークモデルと、1つまたは複数の決定ツリーによって置き換えられる1つまたは複数のニューラルネットワーク層との混成である。新たな機械学習モデル130の生成の詳細が、以下に説明される。ニューラルネットワーク展開システム100はまた、トレーニングデータ150を使用して新たな機械学習モデルをトレーニングするように構成されているトレーニングエンジン140と、トレーニングエンジン140のためのデータ(たとえば、機械学習モデルのためのトレーニングおよび出力データ、ならびに機械学習モデルを定義するデータ)を格納および提供するように構成されているメモリ160とを含んでいる。
【0031】
より具体的には、展開システム100によって受け取られるニューラルネットワークを表すデータ110は、ニューラルネットワークの各々の層の演算、および各々のネットワーク層の重みなど、ニューラルネットワークを定義する情報を含むことができる。
【0032】
データ110は、ニューラルネットワークの他の態様を表すこともできる。たとえば、データ110は、ニューラルネットワーク内のネットワーク層の数と、各々の層におけるそれぞれのノードの数と、1つまたは複数のタイプの層間接続、たとえば要素ごとの接続または全接続を表すデータと、ニューラルネットワークにおける各々の層、たとえば、プーリング層、完全接続層、またはSoftMax層などのタイプを表すデータとを含むことができる。
【0033】
一般に、データ110は、複数のトレーニングデータ150に対してトレーニングされているトレーニング済ニューラルネットワーク、または、まだトレーニングされていないニューラルネットワークを表すことができる。
【0034】
ニューラルネットワーク展開システム100は、受け取られているデータ110を、ニューラルネットワーク変更エンジン120に提供することができる。変更エンジン120は、ニューラルネットワークの層の1つまたは複数のグループを選択し、層の各々のグループを、それぞれの決定ツリーで置き換えて、新たな機械学習モデル130を出力することができる。層の1つまたは複数のグループの選択が、以下により詳細に説明される。
【0035】
層のそれぞれのグループを置き換える各々の決定ツリーは、メモリ160に格納され得、変更エンジン120のためにアクセス可能である。より具体的には、決定ツリーを表し、メモリ160に格納されているデータは、ノード(たとえば、ルートおよび複数のリーフ)の総数と、ノード間の接続性(たとえば、リーフが1つまたは複数の他のリーフにどのように接続されているか)と、1つまたは複数のノード演算(たとえば、1つまたは複数のノードのための論理比較)とを指定するデータを含むことができる。
【0036】
変更エンジン120は、層のグループを置き換えるためのそれぞれの決定ツリーを自動的に決定することができる。あるいは、層のそれぞれのグループを置き換えるための決定ツリーのタイプは、ユーザによって、または変更エンジン120の外部の1つまたは複数のコンピュータによって実施されているコンピュータプログラムによって、事前に決定することができる。決定ツリーは、GradientBoostツリーまたはAdaBoostツリーであることができる。
【0037】
GradientBoost(または、gradient boost)ツリーは、勾配ブーストを介して取得でき、勾配ブーストは、1つまたは複数の単純な予測モデル(たとえば、決定ツリー)の組合せ(たとえば、加重和)の形態でモデルを作り出す機械学習方法である。AdaBoost(または、Adaptive Boosting)は、1つまたは複数の単純な予測モデル(たとえば、決定ツリー)を適応的に組み合わせることで、トレーニング中に、パフォーマンスの低い単純な予測モデル(たとえば、誤った分類の尺度など)に大きな重みが割り当てられるようにし、AdaBoostによって生成されるトレーニングされているモデルは、特定の入力が与えられた場合に予測を正確に生成する可能性が高くなる。
【0038】
変更エンジン120はまた、データ110によって表されているニューラルネットワークの少なくとも一部を量子化することができる。たとえば、変更エンジン120は、決定ツリーによって置き換えられる層のグループの最初の層への入力、および層のグループの最後の層からの出力を量子化することができる。あるいは、変更エンジン120は、各々の層への入力および出力が量子化されているように、ニューラルネットワーク全体を量子化することができる。さらに、変更エンジン120は、トレーニングデータ150の少なくとも一部を量子化し、量子化されているトレーニングデータを使用して、それぞれの決定ツリー、または新たな機械学習モデル130の少なくとも一部、あるいはその両方をトレーニングすることができる。
【0039】
量子化は、大きなセットの入力値を、小さなセットの出力値にマッピングするプロセスであり、通常は、丸めと切り捨てに使用される。より具体的には、量子化を使用して、数値の精度を下げることができる。たとえば、量子化は、浮動小数点数の精度を32ビットから8ビットに下げることができる。ニューラルネットワークの文脈に関連して、変更エンジン120は、ニューラルネットワーク層の活性化テンソル、重みテンソル、または層出力を、8ビットから4ビット、さらには1ビット(たとえば、仮数部に1ビット)の精度で量子化することができる。量子化(たとえば、2値量子化および3値量子化)の詳細は、
図2Aおよび
図2Bに関連して説明される。
【0040】
変更エンジン120は、新たな機械学習モデル130をトレーニングエンジン140に提供することができる。その後、トレーニングエンジン140は、元のニューラルネットワーク110をトレーニングするために使用されているトレーニングデータ150に基づいて、新たな機械学習モデル130の少なくとも一部をトレーニングし、トレーニングされている新たな機械学習モデル180を、システム100の出力として出力することができる。より具体的には、トレーニングエンジン140は、トレーニングデータ150を使用して、時間期間中、決定ツリーによって置き換えられていないニューラルネットワークの残りの層をトレーニングすることができる。あるいは、または加えて、トレーニングエンジン140は、各々の決定ツリーのそれぞれの勾配を仮定して、量子化されているトレーニングデータに基づいて、新たな機械学習モデル130全体をトレーニングすることができる。
【0041】
新たな機械学習モデル130をトレーニングするための時間期間は、数分、数時間、または数日になる場合がある。あるいは、または加えて、時間期間は、新たな機械学習モデル130の少なくとも一部をトレーニングするために使用されているトレーニングデータ150のサイズに基づくことができる。たとえば、時間期間は、トレーニングデータ150の100個のミニバッチまたは1000個のミニバッチを使用して、新たな機械学習モデル130をトレーニング(たとえば、微調整)するために必要な時間によって決定することができる。
【0042】
トレーニングエンジン140は、元のニューラルネットワークの1つまたは複数の層を置き換える決定ツリーをトレーニングすることができる。
【0043】
より具体的には、トレーニングエンジン140は、元のニューラルネットワークのネットワーク層を決定ツリーで置き換える前に、決定ツリーをトレーニングする。トレーニングエンジン140は、上記で説明したように、新たな機械学習モデル130における決定ツリーを微調整することもできる。
【0044】
決定ツリーをトレーニングするために、トレーニングエンジン140は、元のニューラルネットワークをトレーニングするための、同じであるが量子化されているトレーニングデータ150の対応する部分を、トレーニングデータとして使用することができる。具体的には、トレーニングエンジン140は、それぞれのトレーニングサンプルを使用して決定ツリーをトレーニングする。それぞれのトレーニングの例は、層のグループの最初の層への層入力の量子化バージョンと、層のグループの最後の層からの層出力の量子化バージョンとを含む。層のグループは、決定ツリーによって置き換えられる。層入力および層出力の量子化バージョンは、元のニューラルネットワークにおける層のグループをトレーニングするために使用されている、対応するトレーニングデータ150の層入力および層出力に関連付けられる。
【0045】
トレーニングエンジン140は、決定ツリーをトレーニングする場合、損失を定義し、損失が、特定の基準を下回るまで損失を減少させるようにノード演算を調整することができる。損失は、ラベルの誤りを示すヒンジ損失、またはエントロピ理論に基づく情報獲得を表す対数損失、または決定ツリーのトレーニングのために適した他の任意の損失である可能性がある。トレーニングエンジン140は、1つまたは複数のノードにおける論理比較演算のそれぞれの臨界値などのノード演算を調整することができる。いくつかの状況では、トレーニングエンジン140は、トレーニング中に決定ツリーを枝刈りすること、すなわち、1つまたは複数のリーフと、1つまたは複数のリーフに関連付けられているすべての分岐および子リーフを削除することによって、過剰適合を低減することができる。トレーニングエンジン140は、過剰適合を検出し改善するための検証セットとして、元のトレーニングデータセットの一部を残しておくことができる。
【0046】
新たな機械学習モデル130の少なくとも一部をトレーニングするために使用されているトレーニングエンジン140は、中央処理ユニット(CPU)、グラフィック処理ユニット(GPU)、テンソル処理ユニット(TPU)、またはニューラルネットワークの演算を実行するのに適した他の任意の計算ユニットを含むことができる。特に、新たな機械学習モデルは、線形演算(たとえば、主にテンソル演算)を含む、置き換えられていない層を依然として有することができ、したがって、トレーニングエンジン140は、トレーニングプロセスを容易にするために、CPUまたはGPUよりも多くのTPUを含むことができる。
【0047】
トレーニングされている新たな機械学習モデル180は、入力が与えられた場合に、推論を効率的に生成するために使用することができる。トレーニングされている新たな機械学習モデル180は、より少ない計算能力を使用して、推論を生成するために使用することができる。たとえば、ニューラルネットワーク層の1つまたは複数の層は、より少ないノードを有する浅い決定ツリーによって置き換えられているため、トレーニングされている新たな機械学習モデル180は、格納するためのメモリサイズを、元のニューラルネットワークよりも少ないメモリサイズしか必要としない。別の例として、トレーニングされている新たな機械学習モデルは、より少ないビットを使用して表されている量子化されている入力および出力と互換性があるため、計算中のシステムメモリ帯域幅を低減させる。さらに、MUXユニットまたは算術論理(ALC)ユニットなどの計算ユニットを使用して、決定ツリーにおける演算を実行できるため、新たな機械学習モデル180の決定ツリーの推論計算を実行するために、ニューラルネットワーク推論エンジンまたはシステムは、TPUまたはGPUなどの大型で高価な計算ユニットを、1つまたは複数のMUXユニットまたはALCユニットを有する、より小型で安価なプログラマブルコアで置き換えることができる。したがって、新たな機械学習モデルの推論を生成するための、デバイスの総コストおよび総サイズを低減することができる。
【0048】
図2Aは、2値量子化出力225を有する決定ツリーを有する例示的な新たな機械学習モデル295の一部を例示する。
【0049】
図2Aに示されているように、入力データ110によって表されている元のニューラルネットワーク200の一部は、複数のネットワーク層を含んでいる。複数のネットワーク層は、対応する決定ツリーによって置き換えられるようにシステム100によって決定されているネットワーク層のグループ290と、ネットワーク層のグループ290の最初の層に先行する、第1のネットワーク層210と、ネットワーク層のグループの最後の層に後続する、第2のネットワーク層230とを含むことができる。
【0050】
ニューラルネットワーク200の一部における複数の層の各々の層は、各々が線形演算および非線形演算を表す複数のノードを有する。たとえば、ネットワーク層210は、ノード210a~fを含む。別の例として、ネットワーク層230は、ノード230a~230fを含む。また、ネットワーク層のグループ290の各々の層は、それぞれの数のノードを含む(図示せず)。
【0051】
ニューラルネットワーク200の一部のネットワーク層は、ニューラルネットワークへの各々の入力について、先行する層が、層出力を生成し、その出力を、層活性化入力として後続する層に提供できるように、シーケンスに従って配置されている。たとえば、ネットワーク層のグループ290の最初の層は、ネットワーク層210から、層活性化入力213として受け取る。別の例として、ネットワーク層のグループ290の最後の層は、層出力217を、後続する層230に提供する。
【0052】
入力および出力は、計算要件に従って、それぞれの精度を有することができる。たとえば、入力および出力は、32ビット精度の浮動小数点形式を有することができる。別の例として、ニューラルネットワークの最初の数層の入力と、最後の数層からの出力とは、中間層よりも高い精度を有する可能性がある。
【0053】
いくつかの実施態様では、システム100は、異なる量子化方法を使用して、ニューラルネットワークの1つまたは複数の層の入力および出力を量子化し、精度を低下させることができる。たとえば、活性化入力213および層出力217は、2値量子化または3値量子化を使用して量子化することができ、8ビット、またはさらには1ビットの精度も有することができる。あるいは、システム100は、ネットワーク層について、重み入力または活性化入力の一部のみを量子化することができる。
【0054】
上記で説明したように、量子化は、数値の精度を低下させる(たとえば、数値の符号、指数、および仮数を表すビット数を減少させる)プロセスである。2値量子化および3値量子化は、量子化プロセスの分岐である。
【0055】
2値量子化に関して、ニューラルネットワーク展開システム100および
図2Aに関連して、システム100は、浮動小数点数を2値セット{1、-1}に量子化することができる。2値量子化は、システム100が、符号に1桁、指数累乗に0桁、および浮動小数点数の有効数に1桁だけを使用する特定の量子化プロセスと考えることができる。より具体的には、ほんの数例を挙げると、2値量子化を使用して、浮動小数点形式の重み0.744を、1として量子化でき、浮動小数点形式の活性化入力-0.21を、-1として量子化できる。
【0056】
同様に、3値量子化は、2値量子化の代替手段であり、モデルサイズは大きくなるが、精度を向上させることができる。
図2Bに関連して、システム100は、浮動小数点数を、3値セット{1、0、-1}に量子化することができる。より具体的には、0.66より大きい浮動小数点形式の正規化重みは、1として量子化でき、0.66より小さく-0.66より大きい別の正規化重みは、0として量子化でき、-0.66より小さい別の正規化重みは、-1として量子化できる。
【0057】
システム100は、各々の量子化入力または出力を、それぞれのスケーリング係数で乗算することによって、それぞれのスケーリング係数を、各々の量子化入力および出力に適用することができる。システム100は、特定の入力を与えられると、量子化されているニューラルネットワークと、量子化されていない元のニューラルネットワークとの間の近似性(または類似性)の尺度に基づいて、それぞれのスケーリング係数を取得することができる。システム100は、変更されているニューラルネットワークをトレーニングした後に、スケーリング係数を決定し、変更されているニューラルネットワークについて推論計算を実行する場合、スケーリング係数を定数として設定することができる。
【0058】
図2Aの参照に戻ると、ニューラルネットワーク変更エンジン120は、ニューラルネットワーク200の元の部分のネットワーク層のグループ290を、ネットワーク層のグループ290における少なくとも層の数に基づくツリー深さを有する決定ツリー220によって置き換えることによって、新たな機械学習モデル295(または、その新たな部分)を生成することができる。決定ツリーは、ネットワーク層のグループを置き換えるのに適している限り、任意のタイプであることができる。たとえば、決定ツリーは、GradientBoost決定ツリーまたはAdaBoost決定ツリーであることができる。
【0059】
システム100は、少なくとも、ネットワーク層のグループ290の最初の層への入力213、およびネットワーク層のグループ290の最後の層からの出力217に対して2値量子化を実行することができる。あるいは、システム100は、ニューラルネットワーク全体に対して2値量子化を実行する。
【0060】
決定ツリー200は、先行する層210から2値量子化入力215を受け取り、量子化出力225を、後続する層230に出力することができる。より具体的には、量子化入力215は、先行する層210のノード210a~fからの2値入力(1または-1のいずれか)を含んでいる。同様に、例示のみを目的として、量子化出力225は、{1}を表す出力225a、または{-1}を表す出力225bのいずれかであることができる。決定ツリーからの各々の出力は、1または-1のいずれかとして量子化され、後続する層230へ提供される。
【0061】
ネットワーク層のグループ290を、決定ツリー220によって置き換える前に、システム100は、トレーニング例の対応する部分の量子化バージョンを使用して、決定ツリー220をトレーニングすることができる。より具体的には、システム100は、元のニューラルネットワークのトレーニング例が与えられた際の、層のグループ290の最初の層への入力の量子化バージョンと、層のグループ290の最後の層からの出力の量子化バージョンとを取得することができる。システム100は、入力の量子化バージョンを、決定ツリー220への入力として設定し、出力の量子化バージョンを、決定ツリー220からの出力として設定し、入力および出力の量子化バージョンを使用して、決定ツリー220(the decision 220)をトレーニングすることができる。
【0062】
図2Bは、3値量子化出力275を有する決定ツリーを有する、別の例示的な新たな機械学習モデル255の一部を示す。
【0063】
図2Aと同様に、システム100は、ニューラルネットワーク250の一部における層の異なるグループ285を、異なる決定ツリー270によって置き換え、3値量子化を使用して、決定ツリーの入力および出力を量子化することができる。量子化入力265および量子化出力275は、値セット{-1、0、1}のうちの1つを含む。例示のみを目的として、量子化出力275は、{1}を表す出力275a、{0}を表す出力275b、および{-1}を表す出力275cのうちの1つであることができる。
【0064】
例示を容易にするために、
図2Aではネットワーク層のグループの数が3であり、
図2Bではその数は5であるが、決定ツリーによって置き換えられるネットワーク層のグループの数は、システム100によって決定されている任意の適切な値とすることができる。たとえば、その数は1、10、または50であることができる。
【0065】
図3は、トレーニングされている新たな機械学習モデルを生成するための例示的なプロセス300のフロー図である。便宜上、プロセス300は、1つまたは複数の場所に配置されている1つまたは複数のコンピュータのシステムによって実行されているものとして説明される。たとえば、ニューラルネットワーク展開システム100、たとえば
図1に示され、本明細書に従って適切にプログラムされているシステム100は、プロセス300を実行することができる。
【0066】
システムは、シーケンスに配置されている複数の層を備えたニューラルネットワークを表すデータを受け取る(310)。受け取られるデータは、ほんの数例を挙げると、ニューラルネットワークのネットワーク層の各々によって実行されている演算と、各々のネットワーク層の重みとを含むことができる。ネットワーク層は、先行する層からの層出力が、後続する層に層入力として提供されるように、シーケンスに従って配置されている。
【0067】
システムは、複数の層から、層の1つまたは複数のグループを選択し、層の各々のグループは、シーケンスにおいて互いに隣接する1つまたは複数の層を備えている(320)。たとえば、システムは、層の3つのグループを選択することができ、層の最初のグループは、1つの層のみを含み、層の2番目のグループは、3つの層を含み、層の最後のグループは、ニューラルネットワークの最後から2番目の層を有する5つの層を含んでいる。
【0068】
システムは、選択されている層の1つまたは複数のグループの各々を、それぞれの決定ツリーによって置き換えることによって、ニューラルネットワークに対応する新たな機械学習モデルを生成する(330)。
【0069】
層のそれぞれのグループを置き換えるためのそれぞれの決定ツリーは、少なくとも層のグループにおける層の数に基づいたツリー深さを有することができる。たとえば、決定ツリーのツリー深さは、層のグループにおける層の数に等しい。別の例として、決定ツリーのツリー深さは3であり、決定ツリーによって置き換えられる層のグループは、5つのネットワーク層を有する。
【0070】
決定ツリーは、任意の適切なツリータイプを含むことができる。たとえば、決定ツリーは、GradientBoostツリーまたはAdaBoostツリーであることができる。
【0071】
システムは、少なくとも、層のグループの最初の層への入力と、層のグループの最後の層からの出力とを量子化し、量子化されている入力および出力を、それぞれの決定ツリーに提供することができる。より具体的には、層の1つまたは複数のグループの各々について、それぞれの決定ツリーは、グループにおけるそれぞれの最初の層への入力の量子化バージョンを、入力として受け取り、グループにおけるそれぞれの最後の層の出力の量子化バージョンを、出力として生成する。
【0072】
いくつかの実施態様では、システムは、それぞれのスケーリング係数に基づいて、それぞれの決定ツリーへの入力および出力の量子化バージョンを取得することができる。より具体的には、システムは、量子化されている入力に、それぞれのスケーリング係数を乗算することによって、決定ツリーへの入力の量子化バージョンを生成することができる。上記で説明したように、スケーリング係数は、量子化されている層と、元の層との間の類似性の尺度に少なくとも基づいて取得される。
【0073】
システムは、元のニューラルネットワークのトレーニングデータに基づいて、新たな機械学習モデルをトレーニングする(340)。システムは、それぞれの決定ツリーによって置き換えられなかった元のニューラルネットワークにおける層の少なくとも一部をトレーニングする。いくつかの実施態様では、システムは、シーケンスにおけるニューラルネットワークの層の1つまたは複数のグループに続く、ニューラルネットワークの層をトレーニングする。
【0074】
いくつかの状況では、システムは、元のニューラルネットワークのために、同じであるが、量子化されているトレーニングサンプルを使用して、新たな機械学習モデル全体をトレーニングできる。いくつかの実施態様では、システムは、トレーニング中、順方向伝搬のために、量子化されている入力および出力を使用し、逆方向伝搬中に、重みを更新するために浮動小数点型の入力および出力を使用できる。あるいは、システムは、新たな機械学習モデルにおけるそれぞれの決定ツリーのために、それぞれの勾配を表すデータを計算することもできる。
【0075】
システムは、層のグループを選択し、層のグループを、それぞれの決定ツリーによって置き換えるために、任意の適切なアルゴリズムを選択することができる。いくつかの実施態様では、システムは、層のグループを繰り返し選択できる。より具体的には、層のグループを選択するための1つの例示的なアルゴリズムが、以下に説明される。
【0076】
ニューラルネットワークが、N個のネットワーク層を含んでいると仮定すると、システムは、i∈[0、1、2、・・・、N-1]である場合、層iとして、シーケンスに従って、ニューラルネットワークの各々の層をインデクス付けする。
【0077】
システムは、ニューラルネットワークのサイズ(N層)に等しい層のグループをそこから選択する、層の合計数(すべての層)を設定する。
【0078】
システムは、すべての層の中から、層Lを、層のグループの最初の層としてランダムに選択する。いくつかの実施態様では、システムは、層シーケンスに従って、層のグループの最初の層を選択することができる。たとえば、システムは、層のグループの最初の層として層0から開始できる。
【0079】
層Lから始まる、最後の層Nまでのシーケンスにおける各々の層について、システムはまず、現在の層がすでに決定ツリーによって置き換えられているか、または決定ツリーに属しているかを確認する。
【0080】
現在の層が、決定ツリーに置き換えられていない、または決定ツリーに属していると判定すると、システムは、現在の層を、層のグループに追加する。
【0081】
システムは、層のグループの初期層Lへの入力と、現在の層からの出力とに対して量子化を実行し、層Lから現在の層までの層を、それぞれの決定ツリーによって暫定的に置き換える。上記で説明したように、システムは、ニューラルネットワーク層への入力および出力に対して、2値量子化または3値量子化を実行できる。いくつかの実施態様では、システムは、ニューラルネットワークにおける各々の層のすべての出力を量子化し、アキュムレータのサイズを、特定数の決定ツリーに制限できるようにする。
【0082】
システムは、層のグループの層情報を更新し、変更されているネットワークのパフォーマンス(たとえば、推論精度)を測定する。層のグループの決定およびパフォーマンス測定の詳細は、
図4に関連してさらに詳細に説明される。
【0083】
層のグループを決定した後、システムは、層のグループを、それぞれの決定ツリーで置き換える。
【0084】
システムは、グループの最後の層から始まる、ニューラルネットワークの最後の層までの残りの層をトレーニングする。より具体的には、システムは、元のニューラルネットワークをトレーニングするために使用されているものと同じトレーニング例の、対応する部分を使用して、残りの層の重みを微調整する。
【0085】
図4は、ニューラルネットワーク層の1つまたは複数のグループを選択するための例示的なプロセス400のフロー図である。便宜上、プロセス400は、1つまたは複数の場所に配置されている1つまたは複数のコンピュータのシステムによって実行されているものとして説明される。たとえば、本明細書に従って適切にプログラムされている、たとえば
図1に示されているシステム100であるニューラルネットワーク展開システム100は、プロセス400を実行することができる。
【0086】
システムは、ニューラルネットワークにおけるそれぞれの初期層を選択する(410)。上記で説明されるように、システムは、層のグループの初期層をランダムに、または層のシーケンスに基づいて選択できる。
【0087】
システムは、各々が、それぞれの初期層を、候補グループにおける最初の層として有する、それぞれの複数の候補グループを生成する(420)。より具体的には、システムは、同じ初期層を有する各々の候補グループに対して、それぞれの層の数を暫定的に設定する。たとえば、システムは、2つの層のみを有する第1の候補グループと、4つの層を有する第2の候補グループと、6つの層を有する第3の候補グループとを生成する。いくつかの実施態様では、候補グループは、連続した数の層を有することができる。たとえば、第1の候補グループは単一の層を含み、第2の候補グループは2つの層を含み、第3の候補グループは3つの層を含む。
【0088】
それぞれの複数の候補グループの各々について、システムは、候補グループにおける層が、それぞれの決定ツリーによって置き換えられている、対応する新たな機械学習モデルのパフォーマンスを測定する候補グループのそれぞれのパフォーマンス尺度を判定する(430)。より具体的には、システムは、複数の新たな機械学習モデルを生成し、複数の新たな機械学習モデルの各々は、それぞれの決定ツリーによって置き換えられる層のそれぞれの候補グループを含んでいる。システムは、同じ入力データを使用して、新たな機械学習モデルの各々に対して推論計算を実行し、新たな機械学習モデルの各々について、それぞれのパフォーマンススコアを取得する。それぞれのパフォーマンススコア(performances scores)は、推論精度に基づいて取得できる。
【0089】
システムは、それぞれの複数の候補グループについて、それぞれのパフォーマンス尺度に基づいて、決定ツリーによって置き換えられる層のグループとして、層の候補グループのうちの1つを選択する(440)。いくつかの実施態様では、システムは、それぞれのパフォーマンス尺度の中から最大のパフォーマンス尺度を判定し、それぞれの複数の候補グループから、最大のパフォーマンス尺度に関連付けられている候補グループを、グループとして選択する。あるいは、システムは、パフォーマンススコアは比較的高いが、推論計算の実行が最も速い候補グループを選択する。
【0090】
図5は、決定ツリー500の例を示す。
図5に示されているように、決定ツリー500は、特定のツリー深さを有する複数のノードを含むことができる。ツリー深さは、ツリー層の総数に基づいて決定される。決定
ツリーの各々の層(Each layer of the decision
Tree)は、たとえば論理比較または他の適切な基準など、それぞれのノード演算を表すノードを含むことができる。
【0091】
たとえば、
図5に示されているように、決定ツリー500は、ルートノード510と、異なるツリー層におけるそれぞれの非ルートノード520、530とを含む、複数のノードを有することができる。ルートノード510は、決定ツリー500の開始点であり、親ノードを有しておらず、非ルートノード520および530は、各々が親ノードを有し、子ノードとも呼ばれる。一般に、ツリー層におけるリーフノードを除く各々のノードは、そのノードを、次のツリー層におけるそれぞれの子ノードに接続する1つまたは複数の分岐(
図5における矢印)を有することができる。子ノードを有するノードは、非リーフノード、たとえばノード510、520a、および520bとも呼ばれる。
【0092】
最深すなわち最後のツリー層におけるリーフノード(たとえば、ノード530a、530b、530c、および530d)に対して、各々は、決定ツリー500の推論出力を表すことができ、他の子ノードに接続する分岐を有していない。推論出力は、予測、たとえばリーフノード530aの確率P1であることができる。
【0093】
図5を参照すると、システム(たとえば、
図1におけるシステム100)は、係数n
f1、n
f2、およびn
f3を表す入力データを用いて決定ツリーの推論演算を実行する場合、最深のツリー層におけるリーフノードを除く各々の非リーフノードは、それぞれのノード演算(たとえば、
図5に示されているような論理比較)を有する。システムは、ルートノード510に対してノード演算を実行し、ノード演算から論理結果(たとえば、真または偽)を取得し、その結果に基づいて、それぞれの分岐に沿って対応する子ノードに近づくことができる。たとえば、結果が偽の場合、システムはノード520aに近づく。いくつかの実施態様では、システムは、整数0および整数1を使用して、偽および真を表すことができる。最終的に、システムは、決定ツリーの最深層における特定のリーフノードに近づき、特定のリーフノードによって表されている推論を返す。
【0094】
図6は、固定されている機能ハードウェア600を使用する決定ツリーの例示的な実施態様を示す。
【0095】
図6に示されているように、システム(たとえば、
図1に示されているシステム100)は、固定されている機能ハードウェア600を使用して、決定ツリーの推論計算を実行することができる。より具体的には、システムは、
図5に示されている例示的な決定ツリーのために、入力x610を受け取り、最終推論出力620を返すことができる。決定ツリー600は、異なるノードから推論結果を取得し、決定ツリーにおける特定のリーフノードによって表されている最終的な推論出力620を生成するために、複数の計算ユニット630および640を含むことができる。
【0096】
固定されている機能ハードウェア600を使用するシステムは、各々の入力データを、対応するツリーノードに割り当て、それぞれの比較器およびマルチプレクサを使用して、各々のノードにおいてそれぞれの機能を実施することができる。
図6に示されているように、システムは、入力データx∈[h
1,l
1]を、(
図5におけるルートノード510に相当する)最上位ノードに割り当て、入力データx∈[h
2,l
2]を、(第2のツリー層における左側の非リーフノード520aに相当する)左側ノード630aに割り当て、入力データx∈[h
3,l
3]を、(第2のツリー層における右側の非リーフノード520bに相当する)右側ノード630bに割り当てる。システムは、それぞれの比較器640およびマルチプレクサ630を使用して、各々のノードにおいて演算を実施することができる。たとえば、システムは、比較器
640cおよびマルチプレクサ630cを使用して、最上位ノードにおいて演算を実施する。より具体的には、システムは、実数値のベクトルであり得る入力xを受け取り、範囲x∈[h
1,l
1]を有する入力の一部を選択して、最上位のルートノードに提供する。システムは、比較器640cを使用して、入力の一部を、基準a
1と比較し、基準a
1は、実数値スカラを表すことができる。入力データxが、a
1以上である場合、システムは、ノードに割り当てられるマルチプレクサ630cを使用して「真」を表す結果を出力し、たとえば、マルチプレクサは、「真」を表す整数1を出力することができる。システムは、現在のノードが、対応するツリーの分岐に沿ってリンクしている子ノードにおいて演算を実行し続けることができる。最後から2番目のツリー層における非リーフノードに対する演算を処理した後、システムは、決定ツリーにおける対応するリーフノードによって表されている値(たとえば、確率)に基づいて最終結果620を出力することができる。
【0097】
図7は、決定ツリーの推論計算を実行するための例示的なプログラマブルコア700を例示している。
【0098】
図7に示されているように、システム(たとえば、
図1に示されているシステム100)は、プログラマブルコア700を使用して決定ツリーのための推論計算を実行することができる。プログラマブルコア700は、ツリー入力710を受け取り、ツリー入力に対する推論出力720を生成することができる。プログラマブルコア700は、複数の計算コンポーネント、たとえば、MUXユニット、ALUユニット、およびスタティックランダムアクセスメモリ(SRAM)を含むことができる。プログラマブルコア700は、計算コンポーネントにおいて構成されている機能を追加、選択、および切り替えるだけでノード演算を実行することができる。したがって、プログラマブルコア700は、決定ツリーの推論出力を生成するためのノード演算として、乗算および加算を実行するためのMACユニットを含む必要がない。
【0099】
図7を参照すると、ルートノード(たとえば、
図5におけるルートノード510)における演算を実施するために、システムは、入力710を受け取り、受け取った入力710を、結合ユニットによって、ルートノードに固有で、以前にキューに格納されている配列(x、a、l、h、i
0、i
1)を用いて変更することができる。上記で説明されるように、aは、ノード基準を表し、lおよびhは、入力xの数値範囲を表し、インデクスi
0、i
1は各々、現在のノードをそれぞれの子ノードに接続するツリー分岐を表すことができ、ノード演算に対して演算を実行した結果を表すために、それぞれの整数値に割り当てることができる。
【0100】
システムは、任意のユニットを使用して結合されている入力を選択し、ルートノードでノード演算を実施できる。たとえば、システムは、それぞれの比較器を使用して、入力x∈[h,l]と基準a1との間の比較を実施できる。それに応じて、システムは、インデクスi0、i1を、それぞれの整数値に割り当てて、比較の結果を表し、決定ツリーの計算を、対応する子ノードに指示することができる。たとえば、システムが、x∈[h,l]が基準a1よりも大きいと判定した場合、システムは、i0=0、i1=1を割り当てることができるため、システムは、i1によって表されているツリー分岐に沿って、対応する次の子ノードに対して演算を実行できる。
【0101】
次の子ノードに対して演算を実施するために、システムはまず、切替ユニットを適用して、付番基準Nに基づいて、次の子ノードが、非リーフノードであるかリーフノードであるかを判定できる。判定するために、システムは、それぞれのタグK(たとえば、整数)を使用して、各々のノードに付番し、所定の付番基準に基づいて、次の子ノードのタイプを判定することができる。たとえば、
図5に関連して、システムは、ノード510、520a、および520bを、ノード0、ノード1、およびノード2としてタグ付けし、リーフノード530a、530b、530c、および530dを、ノード3、ノード4、ノード5、およびノード6としてタグ付けすることができる。システムは、タグK<3を有するノードが、非リーフノードであり、タグK>=3を有するノードが、リーフノードであるように、付番基準N=3を設定できる。
【0102】
次の子ノードが、非リーフノードであるとの判定に応じて、システムは、非リーフSRAMに格納されているデータから、次の子ノードのそれぞれの配列(x、a、l、h、i0、i1)を更新できる。同様に、次の子ノードが、リーフノードであるとの判定に応じて、システムは、リーフSRAMに格納されているリーフノードに関連付けられている最終出力を提供することができる。
【0103】
並列計算のために、システムは、フォーク関数を採用して、キューにおけるノードの入力データの一部と、SRAMにおけるノードの演算およびタイプを識別するそれぞれの配列とを格納できる。システムは、並列計算中に、各々の計算ユニットについて観察されているそれぞれのレイテンシに基づいて、1つまたは複数の結合ユニットを使用して、それぞれの配列を用いて、入力データをいつ変更するかを自動的に決定できる。
【0104】
本明細書で言及されている実施形態は、ニューラルネットワークをトレーニングするための改良されている方法を提供する。ニューラルネットワークは、任意の種類のデジタルデータ入力を受け取り、その入力に基づいて任意の種類のスコア、分類、または回帰出力を生成するように構成され得る。入力データ項目は、画像データ(ここではビデオデータを含む)、オーディオデータ、またはテキストデータ、たとえば自然言語の単語または単語部分(またはその表現、たとえば埋め込み)を備え得る。入力データ項目は、連続したデータ、たとえば、デジタル化されているオーディオを表すデータサンプルのシーケンス、または、ピクセルのシーケンスとして表されている画像、または画像のシーケンスによって表されているビデオ、または自然言語における単語のシーケンスを表すシーケンスを備え得る。本明細書において「画像」は、たとえば、LIDAR画像を含む。
【0105】
いくつかの実施態様では、ニューラルネットワーク出力は、特徴表現を備え得、特徴表現は、その後さらに処理されて、システム出力を生成し得る。たとえば、システム出力は、入力データ項目を、たとえば、画像、ビデオ、もしくはオーディオのカテゴリ(たとえば、入力データ項目または入力データ項目のオブジェクト/要素が、カテゴリに属する推定尤度を表すデータ)である複数のカテゴリのうちの1つへ分類するための分類出力、または、入力データ項目の領域を、たとえば、画像もしくはビデオで表されているオブジェクトもしくは動作にセグメント化するためのセグメンテーション出力を備え得る。または、システム出力は、強化学習システムにおける動作選択出力であり得る。
【0106】
他のいくつかの実施態様では、ネットワーク出力は、同じタイプまたは異なるタイプの別のデータ項目を備え得る。たとえば、入力データ項目は、画像、オーディオ、またはテキストであり得、出力データ項目は、画像、オーディオ、またはテキストの変更バージョンであり得、たとえば、入力データ項目、または入力データ項目内の1つもしくは複数のオブジェクトもしくは要素の、スタイル、コンテンツ、プロパティ、ポーズなどを変更するか、あるいは、入力データ項目の(欠落した)部分を埋めるか、あるいは、データ項目の別のバージョン、またはビデオもしくはオーディオデータ項目の拡張子を予測するか、あるいは、入力データ項目のアップサンプリングされた(またはダウンサンプリングされた)バージョンを提供する。たとえば、入力データ項目は、第1の言語でのテキストの表現であり得、出力データ項目は、テキストの別の言語への翻訳、またはテキストの別の言語への翻訳のためのスコアであり得る。別の例では、入力画像が、ビデオ、もしくはワイヤフレームモデル、もしくはCADモデルへ変換され得るか、または、2Dの入力画像が3Dに、またはその逆に変換され得る。または、入力データ項目は、口頭での発話もしくは口頭での発話のシーケンスから導出される特徴、またはそれらから導出される特徴を備え得、ネットワークシステム出力は、一連のテキストの部分の各々のスコアを備え得、各々のスコアは、テキストの一部が、特徴に基づいた正しい置き換えである推定尤度を表す。別の例では、入力データ項目は、画像、オーディオ、またはテキストであり得、出力データ項目は、異なる形式での入力データ項目の表現であり得る。たとえば、ニューラルネットワークは、(音声認識の場合)テキストを音声に、またはその逆に変換したり、または、(たとえば、キャプションのために)画像(または、ビデオ)をテキストに変換し得る。連続したデータを備える出力を生成する場合、ニューラルネットワークは、1つまたは複数の畳み込み、たとえば、拡張畳み込み層を含み得る。
【0107】
いくつかの他の実施態様では、ネットワーク出力は、たとえば、現実世界環境または現実世界環境のシミュレーションのような環境におけるロボットまたは他の機械的エージェントなどのエージェントによって実行される動作を選択するための出力を備え得る。
【0108】
いくつかの実施態様では、ニューラルネットワークは、入力データ項目を受け取り、ネットワークパラメータに従って入力データ項目の特徴表現を生成するために入力データ項目を処理するように構成されている。一般に、データ項目の特徴表現は、データ項目を、多次元特徴空間内の点として表す、順序付けられている数値の集合、たとえばベクトルである。言い換えれば、各々の特徴表現は、入力データ項目の複数の特徴の各々に対する数値を含み得る。前述したように、ニューラルネットワークは、任意の種類のデジタルデータ入力を入力として受け取り、その入力から特徴表現を生成するように構成できる。たとえば、ネットワーク入力とも呼ばれ得る入力データ項目は、画像、ドキュメントの一部、テキストシーケンス、オーディオデータ、医療データなどであることができる。
【0109】
トレーニングされると、特徴表現は、たとえばネットワーク入力に対して機械学習タスクを実行する際に使用するために、別のシステムに入力を提供できる。例示的なタスクは、特徴ベースの検索、クラスタリング、準重複検出、検証、特徴マッチング、領域適応、ビデオベースの弱教師学習を含み得、ビデオの場合、たとえばビデオフレームにわたるオブジェクト追跡、ビデオに描かれているエンティティによって実行されているジェスチャのジェスチャ認識を含み得る。
【0110】
ニューラルネットワークへの入力が、画像、または画像から抽出されている特徴である場合、所与の画像のためにニューラルネットワークによって生成される出力は、一連のオブジェクトカテゴリの各々のスコアであり得、各々のスコアは、画像が、カテゴリに属するオブジェクトの画像を含む推定尤度を表す。より具体的には、入力画像または入力画像から抽出される特徴の各々は、各々がそれぞれの強度値を有する1つまたは複数のピクセルを含むことができる。ニューラルネットワークは、入力画像のそれぞれの強度値、または画像から抽出される特徴を処理し、たとえば、画像分類、画像認識、または画像セグメンテーションなどの予測を生成するように構成されている。
【0111】
別の例として、ニューラルネットワークへの入力が、インターネットリソース(たとえば、ウェブページ)、ドキュメント、もしくはドキュメントの一部であるか、またはインターネットリソース、ドキュメント、もしくはドキュメントの一部から抽出される特徴である場合、所与のインターネットリソース、ドキュメント、またはドキュメントの一部のために、ニューラルネットワークによって生成される出力は、一連のトピックの各々に対するスコアであり得、各々のスコアは、インターネットリソース、ドキュメント、またはドキュメントの一部がそのトピックに関している推定尤度を表す。
【0112】
別の例として、ニューラルネットワークへの入力が、特定の広告のインプレッション文脈の特徴である場合、ニューラルネットワークによって生成される出力は、特定の広告がクリックされる推定尤度を表すスコアであり得る。
【0113】
別の例として、ニューラルネットワークへの入力が、ユーザのために個人化されている推奨の特徴、たとえば、推奨の文脈を特徴付ける特徴、たとえば、ユーザによって講じられる、以前の動作を特徴付ける特徴である場合、ニューラルネットワークによって生成される出力は、一連のコンテンツ項目の各々に対するスコアであり得、各々のスコアは、推奨されているコンテンツ項目に対してユーザが肯定的に反応する推定尤度を表す。
【0114】
別の例として、ニューラルネットワークへの入力が、1つの言語のテキストのシーケンスである場合、ニューラルネットワークによって生成される出力は、別の言語の一連のテキストの部分の各々に対するスコアであり得、各々のスコアは、他の言語のテキストの一部が、入力されるテキストを、他の言語に適切に翻訳したものである推定尤度を表す。
【0115】
別の例として、ニューラルネットワークへの入力が、口頭での発話を表すシーケンスである場合、ニューラルネットワークによって生成される出力は、一連のテキストの部分の各々のスコアであり得、各々のスコアは、テキストの一部が、発話を正しく文字起こししたものである推定尤度を表す。
【0116】
本明細書に説明される主題および機能演算の実施形態は、デジタル電子回路構成、有形に具現化されているコンピュータソフトウェアまたはファームウェア、本明細書に開示される構造およびそれらの構造的等価物を含むコンピュータハードウェア、またはそれらの1つまたは複数の組合せで実施することができる。本明細書で説明される主題の実施形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置によって実行される、またはデータ処理装置の演算を制御するために有形の非一時的記憶媒体にエンコードされるコンピュータプログラム命令の1つまたは複数のモジュールとして実施することができる。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムアクセスメモリデバイスもしくはシリアルアクセスメモリデバイス、またはそれらの1つまたは複数の組合せであってよい。あるいは、または加えて、プログラム命令は、データ処理装置による実行のために適切な受信装置への送信のための情報をエンコードするために生成される、人工的に生成される伝搬信号、たとえば、機械生成される電気信号、光信号、または電磁信号においてエンコードされ得る。
【0117】
「データ処理装置」という用語は、データ処理ハードウェアを指し、例として、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するための任意の種類の装置、デバイス、および機械を包含する。この装置はまた、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)などの専用の論理回路構成であってもよく、またはさらにそれを含んでもよい。この装置は、ハードウェアに加えて、コンピュータプログラムのための実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つまたは複数の組合せを構成するコードを、任意選択的に含むことができる。
【0118】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、スクリプト、もしくはコードとも呼ばれ得る、またはそう説明され得るコンピュータプログラムは、コンパイルもしくはインタープリタ型言語、または宣言型もしくは手続き型言語を含む任意の形態のプログラミング言語で記述することができ、スタンドアロンプログラムとして、または計算環境での使用に適したモジュール、コンポーネント、サブルーチン、もしくは他のユニットとしてなど、任意の形態で展開できる。プログラムは、ファイルシステムにおけるファイルに対応する場合があるが、対応している必要はない。プログラムは、たとえば、マークアップ言語ドキュメントに格納されている1つまたは複数のスクリプトである、他のプログラムもしくはデータを保持するファイルの一部に、対象のプログラムに専用の単一のファイルに、または、たとえば、1つもしくは複数のモジュール、サブプログラム、もしくはコードの一部を格納するファイルである、複数の調整済ファイルに格納できる。コンピュータプログラムは、1つのコンピュータにおいて、または1つのサイトに配置されるか、もしくは複数のサイトにわたって分散され、データ通信ネットワークによって相互接続されている複数のコンピュータにおいて実行されるように展開できる。
【0119】
本明細書において、「データベース」という用語は、データの任意の集合を指すために広く使用され、データは、任意の特定の手法で構造化される必要はなく、またはまったく構造化される必要もなく、1つまたは複数の場所にある記憶デバイスに格納できる。したがって、たとえば、インデクスデータベースは、データの複数の集合を含むことができ、データの複数の集合の各々は、異なる方式で編成およびアクセスされ得る。
【0120】
同様に、本明細書において、「エンジン」という用語は、1つまたは複数の特定の機能を実行するようにプログラムされているソフトウェアベースのシステム、サブシステム、またはプロセスを指すために広く使用される。一般に、エンジンは、1つまたは複数のソフトウェアモジュールまたはコンポーネントとして実施され、1つまたは複数の場所にある1つまたは複数のコンピュータにインストールされる。いくつかの場合には、1つまたは複数のコンピュータが、特定のエンジン専用になり、他の場合には、複数のエンジンを、同じ1つまたは複数のコンピュータにインストールして実行することもできる。
【0121】
本明細書で説明されるプロセスおよび論理フローは、入力データに対して演算を行い、出力を生成することによって機能を実行する、1つまたは複数のコンピュータプログラムを実行する、1つまたは複数のプログラマブルコンピュータによって実行できる。プロセスおよび論理フローは、たとえば、FPGAもしくはASICなどの専用の論理回路構成によって、または専用の論理回路構成と、1つもしくは複数のプログラムされているコンピュータとの組合せによって実行することもできる。
【0122】
コンピュータプログラムの実行に適したコンピュータは、汎用もしくは専用のマイクロプロセッサまたはその両方、または他の任意の種類の中央処理ユニットに基づくことができる。一般に、中央処理ユニットは、読取専用メモリ、またはランダムアクセスメモリ、またはその両方から、命令およびデータを受け取る。コンピュータの必須要素は、命令を実行または実施するための中央処理ユニットと、命令およびデータを格納するための1つまたは複数のメモリデバイスである。中央処理ユニットおよびメモリは、専用の論理回路構成によって補完されているか、または専用の論理回路構成に組み込まれ得る。一般に、コンピュータはまた、データを格納するための1つまたは複数の大容量記憶デバイス、たとえば、磁気ディスク、光磁気ディスク、もしくは光ディスクを含むか、またはそれらからデータを受け取るために、もしくはそれらにデータを転送するために、もしくはその両方のために、動作可能に結合されている。しかしながら、コンピュータは、そのようなデバイスを有している必要はない。さらに、コンピュータは、いくつか挙げると、たとえば、モバイル電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲーム機、全地球測位システム(GPS)受信機、または、たとえばユニバーサルシリアルバス(USB)フラッシュドライブなどのポータブル記憶デバイスなどの、別のデバイスに組み込むこともできる。
【0123】
コンピュータプログラム命令およびデータを格納するのに適したコンピュータ可読媒体は、例として、たとえば、EPROM、EEPROM、およびフラッシュメモリデバイスのような半導体メモリデバイスと、たとえば、内蔵ハードディスクまたはリムーバブルディスクのような磁気ディスクと、光磁気ディスクと、CD ROMディスクおよびDVD-ROMディスクとを含むあらゆる形態の不揮発性メモリ、媒体、およびメモリデバイスを含む。
【0124】
ユーザとのインタラクションを提供するために、本明細書において説明される主題の実施形態は、ユーザに情報を表示するための、たとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタのようなディスプレイデバイスと、ユーザがコンピュータに入力を提供できる、キーボードおよび、たとえばマウスまたはトラックボールなどのポインティングデバイスとを有するコンピュータにおいて実施することができる。他の種類のデバイスを使用して、ユーザとのインタラクションを提供することもでき、たとえば、ユーザに提供されるフィードバックは、たとえば、視覚的フィードバック、聴覚的フィードバック、または触覚的フィードバックなど、任意の形態の感覚的フィードバックとすることができ、ユーザからの入力は、音響、音声、または触覚入力を含む、任意の形態で受け取ることができる。加えて、コンピュータは、ユーザによって使用されているデバイスにドキュメントを送信すること、およびデバイスからドキュメントを受信することにより、たとえば、ウェブブラウザから受け取られる要求に応じて、ユーザのデバイスにおけるウェブブラウザへ、ウェブページを送信することにより、ユーザとインタラクトできる。また、コンピュータは、テキストメッセージまたは他の形態のメッセージを、パーソナルデバイス、たとえば、メッセージングアプリケーションを実行しているスマートフォンなどに送信し、返信としてユーザから応答メッセージを受け取ることによって、ユーザとインタラクトすることもできる。
【0125】
機械学習モデルを実施するためのデータ処理装置はまた、たとえば、機械学習のトレーニングまたは生産の、すなわち、推論、作業負荷の、一般的で計算集約的な部分を処理するための専用のハードウェアアクセラレータユニットを含むこともできる。
【0126】
機械学習モデルは、たとえばTensorFlowフレームワーク、Microsoft Cognitive Toolkitフレームワーク、Apache Singaフレームワーク、またはApache MXNetフレームワークなどの機械学習フレームワークを使用して実施および展開できる。
【0127】
本明細書で説明される主題の実施形態は、たとえばデータサーバとして、バックエンドコンポーネントを含む、または、たとえばアプリケーションサーバであるミドルウェアコンポーネントを含む、または、たとえば、グラフィカルユーザインターフェース、ウェブブラウザ、もしくはユーザが本明細書で説明される主題の実施態様とそれを介してインタラクトできるアプリを有するクライアントコンピュータである、フロントエンドコンポーネントを含む、または、1つもしくは複数のそのようなバックエンド、ミドルウェア、もしくはフロントエンドのコンポーネントのうちの任意の組合せである、計算システムにおいて実施することができる。システムのコンポーネントは、たとえば通信ネットワークであるデジタルデータ通信の任意の形態または媒体によって相互接続できる。通信ネットワークの例は、ローカルエリアネットワーク(LAN)と、たとえばインターネットであるワイドエリアネットワーク(WAN)とを含む。
【0128】
計算システムは、クライアントおよびサーバを含むことができる。クライアントおよびサーバは、一般に、互いに離れており、通常は、通信ネットワークを介してインタラクトする。クライアントとサーバとの関係は、それぞれのコンピュータにおいて実行され、互いにクライアント-サーバの関係を有する、コンピュータプログラムによって生じる。いくつかの実施形態では、サーバは、たとえば、クライアントとして作動するデバイスとインタラクトするユーザにデータを表示し、ユーザからユーザ入力を受け取る目的で、データ、たとえばHTMLページを、ユーザデバイスに送信する。ユーザデバイスにおいて生成されているデータ、たとえばユーザインタラクションの結果は、デバイスから、サーバにおいて受け取られ得る。
【0129】
本明細書は、多くの特定の実施態様の詳細を含んでいるが、これらは、任意の発明の範囲、または、特許請求され得る範囲に対する制限として解釈されるべきではなく、むしろ、特定の発明の特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。本明細書において、別個の実施形態の文脈で説明される特定の特徴は、単一の実施形態において組み合わせて実施することもできる。逆に、単一の実施形態の文脈で説明される様々な特徴は、複数の実施形態において、個別に、または任意の適切な部分的な組合せで実施することもできる。さらに、特徴は、特定の組合せで作動するものとして上記に説明され、最初はそのように特許請求されていることもあるが、いくつかの場合には、特許請求されている組合せからの1つまたは複数の特徴は、組合せから除外され、特許請求されている組合せは、部分的な組合せ、または、部分的な組合せのバリエーションに向けられる場合がある。
【0130】
同様に、動作は、特定の順番で、図面に示され、特許請求の範囲に記載されているが、これは、所望の結果を達成するために、そのような動作が、示されている特定の順番で、もしくは連続した順番で実行されていること、または、例示されているすべての動作が実行されていることを必要とするものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利であり得る。さらに、上記で説明される実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されるプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に、共に統合できるか、または、複数のソフトウェア製品にパッケージできると理解されるべきである。
【0131】
主題の特定の実施形態が説明される。他の実施形態は、以下の特許請求の範囲内にある。たとえば、特許請求の範囲に記載されている動作は、異なる順番で実行されても、依然として所望の結果を達成することができる。1つの例として、添付の図面に示されているプロセスは、所望の結果を達成するために、必ずしも、示されている特定の順番、または連続した順番を必要とする訳ではない。いくつかの場合には、マルチタスクおよび並列処理が有利であり得る。