(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-03
(45)【発行日】2024-10-11
(54)【発明の名称】ニューラルネットワークプロセッサにおけるベクトル計算ユニット
(51)【国際特許分類】
G06N 3/063 20230101AFI20241004BHJP
G06F 7/50 20060101ALI20241004BHJP
【FI】
G06N3/063
G06F7/50
【外国語出願】
(21)【出願番号】P 2023144224
(22)【出願日】2023-09-06
(62)【分割の表示】P 2021148010の分割
【原出願日】2016-04-29
【審査請求日】2023-09-13
(32)【優先日】2015-05-21
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2015-09-03
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ソーソン,グレゴリー・マイケル
(72)【発明者】
【氏名】クラーク,クリストファー・アーロン
(72)【発明者】
【氏名】ルー,ダン
【審査官】渡辺 順哉
(56)【参考文献】
【文献】特開2015-095215(JP,A)
【文献】特表2002-519720(JP,A)
【文献】特開平02-170263(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 7/50
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワーク計算を実行するためのベクトル計算ユニットであって、
活性化回路を備え、前記活性化回路は、
累積値のベクトルを受け取り、
活性化関数を指定する1つまたは複数の制御信号を受け取り、
前記活性化関数を前記累積値に適用して、活性化値のベクトルを生成するように構成されており、
前記ベクトル計算ユニットはさらに、
プール回路を備え、前記プール回路は、
前記活性化値を受け取り、
プール関数を指定する前記1つまたは複数の制御信号を受け取り、
前記プール関数を前記活性化値に適用して、プール値を生成するように構成されている、ベクトル計算ユニット。
【請求項2】
前記1つまたは複数の制御信号は、シーケンサによって提供される、請求項1に記載のベクトル計算ユニット。
【請求項3】
前記累積値は、前記ニューラルネットワークの層と前記層のパラメータ行列との間の行列乗算の積に対応する、請求項1または2に記載のベクトル計算ユニット。
【請求項4】
正規化回路をさらに備え、前記正規化回路は、
前記活性化値を受け取り、
正規化関数を指定する前記1つまたは複数の制御信号を受け取り、
前記正規化関数を前記活性化値に適用して、各活性化値のそれぞれの正規化値を生成するように構成されている、請求項1~3のいずれか1項に記載のベクトル計算ユニット。
【請求項5】
前記プール回路はさらに、
前記正規化値を受け取り、
前記プール関数を前記正規化値に適用して、前記プール値を生成するように構成されている、請求項4に記載のベクトル計算ユニット。
【請求項6】
前記プール値は、前記活性化値の最大値、最小値もしくは平均値、または前記活性化値のサブセットの最大値、最小値もしくは平均値のうちの少なくとも1つを含む、請求項1~5のいずれか1項に記載のベクトル計算ユニット。
【請求項7】
前記プール回路は、複数の並列プール回路を含み、各プール回路は、前記活性化値のサブセットを受け取って、それぞれのプール値を生成するように構成されている、請求項1~6のいずれか1項に記載のベクトル計算ユニット。
【請求項8】
前記活性化値を格納するように構成された複数のレジスタおよび複数のメモリユニットをさらに備える、請求項1~7のいずれか1項に記載のベクトル計算ユニット。
【請求項9】
ニューラルネットワーク計算を実行するための方法であって、
活性化回路が、累積値のベクトルと、活性化関数を指定する1つまたは複数の制御信号とを受け取るステップと、
前記活性化回路が、前記活性化関数を前記累積値に適用して、活性化値のベクトルを生成するステップと、
プール回路が、前記活性化値と、プール関数を指定する前記1つまたは複数の制御信号とを受け取るステップと、
前記プール回路が、前記プール関数を前記活性化値に適用して、プール値を生成するステップとを備える、方法。
【請求項10】
前記1つまたは複数の制御信号は、シーケンサによって提供される、請求項9に記載の方法。
【請求項11】
前記累積値は、前記ニューラルネットワークの層と前記層のパラメータ行列との間の行列乗算の積に対応する、請求項9または10に記載の方法。
【請求項12】
正規化回路が、前記活性化値と、正規化関数を指定する前記1つまたは複数の制御信号とを受け取るステップと、
前記正規化回路が、前記正規化関数を前記活性化値に適用して、各活性化値のそれぞれの正規化値を生成するステップとをさらに備える、請求項9~11のいずれか1項に記載の方法。
【請求項13】
前記プール回路が、前記正規化値を受け取るステップと、
前記プール回路が、前記プール関数を前記正規化値に適用して、前記プール値を生成するステップとをさらに備える、請求項12に記載の方法。
【請求項14】
前記プール値は、前記活性化値の最大値、最小値もしくは平均値、または前記活性化値のサブセットの最大値、最小値もしくは平均値のうちの少なくとも1つを含む、請求項9~13のいずれか1項に記載の方法。
【請求項15】
前記プール回路は、複数の並列プール回路を含み、各プール回路は、前記活性化値のサブセットを受け取って、それぞれのプール値を生成するように構成されている、請求項9~14のいずれか1項に記載の方法。
【請求項16】
前記活性化値を複数のレジスタおよび複数のメモリユニットに格納するステップをさらに備える、請求項9~15のいずれか1項に記載の方法。
【請求項17】
プロセッサに請求項9~16のいずれか1項に記載の方法を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
背景
本明細書は、ハードウェアにおいてニューラルネットワーク推測値を計算することに関する。
【背景技術】
【0002】
ニューラルネットワークは、1つ以上の層を利用して、受け取った入力について出力、たとえば分類を生成する機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて1つ以上の隠れ層を含む。各隠れ層の出力は、ネットワーク内の次の層、すなわちネットワークの次の隠れ層または出力層、への入力として使用される。ネットワークの各層は、パラメータのそれぞれのセットの現在の値に従って、受け取った入力から出力を生成する。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
全体として、本明細書では、ニューラルネットワーク推測値を計算する特定目的ハードウェア回路について説明する。
【0004】
全体として、本明細書に記載されている主題の1つの革新的な局面は、複数の層を備えるニューラルネットワークについてニューラルネットワーク計算を実行するための回路で実施することができ、上記回路は、累積値のベクトルを受け取るように構成され、関数を各々の累積値に適用して活性化値のベクトルを生成するように構成された活性化回路と、上記活性化回路に結合され、各々の活性化値についてそれぞれの正規化値を生成するように構成された正規化回路とを備える。
【0005】
実現例は、以下の特徴のうちの1つ以上を含み得る。上記活性化回路は、上記回路内のシストリックアレイから上記累積値のベクトルを受け取る。上記正規化回路は、複数の正規化レジスタ列を備え、各々の正規化レジスタ列は、直列に接続された複数の正規化レジスタを備え、各々の正規化レジスタ列は、個別の活性化値を受け取るように構成され、上記正規化レジスタ列におけるそれぞれの正規化ユニットは、それぞれの正規化値を算出するように構成される。各々の正規化ユニットは、上記個別の活性化値を隣接する正規化ユニットに渡すように構成される。各々の正規化ユニットは、それぞれの活性化値を受け取るように構成され、上記それぞれの活性化値からそれぞれの中間正規化値を生成するように構成され、上記それぞれの中間正規化値を1つ以上の隣接する正規化ユニットに送るように構成される。上記それぞれの中間正規化値を生成することは、上記それぞれの活性化値の二乗を生成することを備える。各々の正規化ユニットはさらに、活性化値から生成された1つ以上の中間正規化値を1つ以上の隣接する正規化ユニットから受け取るように構成され、各々の中間正規化値を合計して、インデックスを生成するように構成され、上記インデックスを使用して、ルックアップテーブルから1つ以上の値にアクセスするように構成され、上記1つ以上の値および上記インデックスからスケーリングファクタを生成するように構成され、上記スケーリングファクタおよび上記それぞれの活性化値から上記それぞれの正規化値を生成するように構成される。プール回路は、上記正規化値を受け取るように構成され、上記正規化値をプールしてプール値を生成するように構成される。上記プール回路は、上記複数の正規化値を複数のレジスタおよび複数のメモリユニットに格納するように構成され、上記複数のレジスタおよび上記複数のメモリユニットは、直列に接続され、各々のレジスタは、1つの正規化値を格納し、各々のメモリユニットは、複数の
正規化値を格納し、上記プール回路は、全てのクロックサイクルの後に、所与の正規化値を後続のレジスタまたはメモリユニットにシフトするように構成され、上記プール回路は、上記正規化値から上記プール値を生成するように構成される。プール回路は、上記活性化値を受け取るように構成され、上記活性化値をプールしてプール値を生成するように構成される。上記プール回路は、上記複数の活性化値を複数のレジスタおよび複数のメモリユニットに格納するように構成され、上記複数のレジスタおよび上記複数のメモリユニットは、直列に接続され、各々のレジスタは、1つの正規化値を格納し、各々のメモリユニットは、複数の活性化値を格納し、上記プール回路は、全てのクロックサイクルの後に、所与の活性化値を後続のレジスタまたはメモリユニットにシフトするように構成され、上記プール回路は、上記活性化値から上記プール値を生成するように構成される。
【0006】
本明細書に記載されている主題の特定の実施形態は、以下の利点のうちの1つ以上を達成するように実現することができる。所与のクロックサイクル中にニューラルネットワークの各ニューラルネットワーク層についての複数の活性化値を計算することができる。任意に、プロセッサは、別の所与のクロックサイクル中に活性化値から複数の正規化値を生成することができる。また、任意に、プロセッサは、正規化値または活性化値からプール値を生成することができる。プロセッサは、各クロックサイクルにおいて新たな累積和を取得して、各クロックサイクルにおいて活性化結果、正規化結果およびプール結果を生成し、それによって計算をパイプライン化することができる。
【0007】
本発明は、ニューラルネットワークを動作させる対応する方法も提供する。
本明細書の主題の1つ以上の実施形態の詳細が添付の図面および以下の説明に記載されている。主題の他の特徴、局面および利点は、説明、図面および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0008】
【
図1】ニューラルネットワークの所与の層について計算を実行するための例示的な方法のフロー図である。
【
図2】例示的なニューラルネットワーク処理システムを示す。
【
図3】行列計算ユニットを含む例示的なアーキテクチャを示す。
【
図4】シストリックアレイ内のセルの例示的なアーキテクチャを示す。
【
図5】ベクトル計算ユニットの例示的なアーキテクチャを示す。
【
図6】正規化回路の例示的なアーキテクチャを示す。
【
図7】サンプル活性化値を有する正規化回路の別の例示的なアーキテクチャを示す。
【
図8】正規化回路内の正規化ユニットの例示的なアーキテクチャを示す。
【
図9】プール回路の例示的なアーキテクチャを示す。
【発明を実施するための形態】
【0009】
さまざまな図における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
複数の層を有するニューラルネットワークは、推測値の計算に使用することができる。たとえば、入力を前提として、ニューラルネットワークは当該入力について推測値を計算することができる。ニューラルネットワークは、ニューラルネットワークの各層を介して入力を処理することによってこの推測値を計算する。特に、ニューラルネットワークの層は、各々が重みのそれぞれのセットを有する状態で、ある順序で配置される。各層は、入力を受け取って、当該層の重みのセットに従って入力を処理して、出力を生成する。
【0010】
したがって、受け取った入力から推測値を計算するために、ニューラルネットワークは、当該入力を受け取って、当該順序でニューラルネットワーク層の各々を介してそれを処
理して、推測値を生成し、1つのニューラルネットワーク層からの出力は、次のニューラルネットワーク層への入力として提供される。ニューラルネットワーク層へのデータ入力、たとえばニューラルネットワークへの入力または当該順序内の当該層の下方にある層の、ニューラルネットワーク層への出力、は、当該層への活性化入力と称することができる。
【0011】
いくつかの実現例では、ニューラルネットワークの層は、有向グラフで配置される。すなわち、任意の特定の層が複数の入力、複数の出力、またはそれら両方を受け取ることができる。また、ニューラルネットワークの層は、層の出力を前の層への入力として送り返すことができるように配置することもできる。
【0012】
いくつかのニューラルネットワークは、1つ以上のニューラルネットワーク層からの出力を正規化して、後続のニューラルネットワーク層への入力として使用される正規化値を生成する。出力を正規化することは、正規化値が後続のニューラルネットワーク層の入力のための見込みドメイン内にとどまることを確実なものとする助けとなり得る。これにより、推測値算出の際のエラーを減少させることができる。
【0013】
いくつかのニューラルネットワークは、1つ以上のニューラルネットワーク層からの出力をプールして、後続のニューラルネットワーク層への入力として使用されるプール値を生成する。いくつかの実現例では、ニューラルネットワークは、出力グループの最大値または平均値を求めて当該最大値または平均値を当該グループのプール出力として使用することによって、出力グループをプールする。出力をプールすることにより、何らかの空間不変性を維持することができ、そのため、さまざまな構成で配置された出力は、同一の推測値を有するように処理されることができる。また、出力をプールすることにより、プール前の出力の所望の特性を維持しながら、後続のニューラルネットワーク層で受け取られる入力の次元性を減少させることができ、ニューラルネットワークによって生成される推測値の質を著しく犠牲にすることなく効率を向上させることができる。
【0014】
本明細書では、1つ以上のニューラルネットワーク層の出力に関して正規化、プール、またはそれら両方を任意に実行する特定目的ハードウェア回路について説明する。
【0015】
図1は、特定目的ハードウェア回路を使用してニューラルネットワークの所与の層について計算を実行するための例示的なプロセス100のフロー図である。便宜上、方法100は、方法100を実行する1つ以上の回路を有するシステムに関連して説明する。方法100は、受け取った入力から推測値を計算するためにニューラルネットワークの各層について実行され得る。
【0016】
当該システムは、所与の層についての重み入力の複数のセットを受け取り(ステップ102)、所与の層についての活性化入力の複数のセットを受け取る(ステップ104)。重み入力の複数のセットおよび活性化入力の複数のセットは、それぞれ特定目的ハードウェア回路のダイナミックメモリおよび統合バッファから受け取られることができる。いくつかの実現例では、重み入力の複数のセットも活性化入力の複数のセットも統合バッファから受け取られてもよい。
【0017】
当該システムは、特定目的ハードウェア回路の行列乗算ユニットを使用して重み入力および活性化入力から累積値を生成する(ステップ106)。いくつかの実現例では、累積値は、重み入力の複数のセットと活性化入力の複数のセットとのドット積である。すなわち、当該層内の全ての重みのサブセットである重みの1つのセットについて、当該システムは、各重み入力と各活性化入力とを掛け合わせ、その積を合計して、累積値を形成することができる。次いで、当該システムは、重みの他のセットと活性化入力の他の複数のセ
ットとのドット積を計算することができる。
【0018】
当該システムは、特定目的ハードウェア回路のベクトル計算ユニットを使用して累積値から層出力を生成することができる(ステップ108)。いくつかの実現例では、ベクトル計算ユニットは、活性化関数を累積値に適用し、これについては
図5を参照して以下でさらに説明する。層の出力は、ニューラルネットワーク内の後続の層への入力として使用できるように統合バッファに格納されてもよく、または推測値を求めることに使用されてもよい。当該システムは、受け取った入力をニューラルネットワークの各層を介して処理して受け取った入力について推測値を生成すると、ニューラルネットワークを処理することを終了する。
【0019】
図2は、ニューラルネットワーク計算を実行するための例示的な特定目的集積回路200を示す。システム200は、ホストインターフェイス202を含む。ホストインターフェイス202は、ニューラルネットワーク計算のためのパラメータを含む命令を受け取ることができる。パラメータは、何個の層を処理すべきであるか、層の各層についての重み入力の対応する複数のセット、活性化入力の最初のセット、すなわち推測値を計算するためのニューラルネットワークへの入力、各層の対応する入力および出力サイズ、ニューラルネットワーク計算のためのストライド値、および処理すべき層のタイプ、たとえば畳み込み層または完全に接続された層、のうちの1つ以上を含み得る。
【0020】
ホストインターフェイス202は、シーケンサ206に命令を送ることができ、シーケンサ206は、当該命令を、ニューラルネットワーク計算を実行するように回路を制御する低レベル制御信号に変換する。いくつかの実現例では、当該制御信号は、回路内のデータフロー、たとえば重み入力の複数のセットおよび活性化入力の複数のセットがどのように回路内を流れるか、を調整する。シーケンサ206は、統合バッファ208、行列計算ユニット212およびベクトル計算ユニット214に当該制御信号を送ることができる。いくつかの実現例では、シーケンサ206は、ダイレクトメモリアクセスエンジン204およびダイナミックメモリ210にも制御信号を送る。いくつかの実現例では、シーケンサ206は、制御信号を生成するプロセッサである。シーケンサ206は、当該制御信号のタイミングを使用して、回路200の各コンポーネントに当該制御信号を適切なときに送ることができる。いくつかの他の実現例では、ホストインターフェイス202は、外部プロセッサから制御信号を渡す。
【0021】
ホストインターフェイス202は、ダイレクトメモリアクセスエンジン204に重み入力の複数のセットおよび活性化入力の最初のセットを送ることができる。ダイレクトメモリアクセスエンジン204は、活性化入力の複数のセットを統合バッファ208に格納することができる。いくつかの実現例では、ダイレクトメモリアクセスは、メモリユニットであり得るダイナミックメモリ210に重みの複数のセットを格納する。いくつかの実現例では、ダイナミックメモリは、回路から離れて位置している。
【0022】
統合バッファ208は、メモリバッファである。統合バッファ208は、ダイレクトメモリアクセスエンジン204からの活性化入力のセットおよびベクトル計算ユニット214の出力を格納することに使用できる。ベクトル計算ユニットについては、
図5を参照して以下でさらに詳細に説明する。ダイレクトメモリアクセスエンジン204は、ベクトル計算ユニット214の出力を統合バッファ208から読み出すこともできる。
【0023】
ダイナミックメモリ210および統合バッファ208は、行列計算ユニット212に重み入力の複数のセットおよび活性化入力の複数のセットをそれぞれ送ることができる。いくつかの実現例では、行列計算ユニット212は、二次元シストリックアレイである。行列計算ユニット212は、一次元シストリックアレイであってもよく、または数学的演算
、たとえば乗算および加算を実行することができる他の回路であってもよい。いくつかの実現例では、行列計算ユニット212は、汎用行列プロセッサである。
【0024】
行列計算ユニット212は、重み入力および活性化入力を処理して、ベクトル計算ユニット214に出力のベクトルを提供することができる。いくつかの実現例では、行列計算ユニットは、統合バッファ208に出力のベクトルを送り、統合バッファ208は、ベクトル計算ユニット214に出力のベクトルを送る。ベクトル計算ユニットは、出力のベクトルを処理して、処理された出力のベクトルを統合バッファ208に格納することができる。処理された出力のベクトルは、たとえばニューラルネットワーク内の後続の層で使用できるように、行列計算ユニット212への活性化入力として使用することができる。行列計算ユニット212およびベクトル計算ユニット214については、
図3および
図5をそれぞれ参照して以下でさらに詳細に説明する。
【0025】
図3は、行列計算ユニットを含む例示的なアーキテクチャ300を示す。行列計算ユニットは、二次元シストリックアレイ306である。アレイ306は、複数のセル304を含む。いくつかの実現例では、シストリックアレイ306の第1の次元320はセルの列に対応し、シストリックアレイ306の第2の次元322はセルの行に対応する。シストリックアレイは、列よりも多くの行を有していてもよく、行よりも多くの列を有していてもよく、または列と行とが同数であってもよい。
【0026】
示されている例では、値ローダ302がアレイ306の行に活性化入力を送り、重みフェッチャインターフェイス308がアレイ306の列に重み入力を送る。しかし、いくつかの他の実現例では、活性化入力がアレイ306の列に送信され、重み入力がアレイ306の行に送信される。
【0027】
値ローダ302は、統合バッファ、たとえば
図2の統合バッファ208から活性化入力を受け取ることができる。各々の値ローダは、対応する活性化入力をアレイ306の個別の最も左側のセルに送ることができる。たとえば、値ローダ312は、セル314に活性化入力を送ることができる。値ローダは、隣接する値ローダにも活性化入力を送ることができ、活性化入力は、アレイ306の別の最も左側のセルで使用することができる。これにより、アレイ306の別の特定のセルで使用できるように活性化入力をシフトすることができる。
【0028】
重みフェッチャインターフェイス308は、メモリユニット、たとえば
図2のダイナミックメモリ210から重み入力を受け取ることができる。重みフェッチャインターフェイス308は、対応する重み入力をアレイ306の個別の最上部のセルに送ることができる。たとえば、重みフェッチャインターフェイス308は、セル314および316に重み入力を送ることができる。
【0029】
いくつかの実現例では、ホストインターフェイス、たとえば
図2のホストインターフェイス202は、アレイ306全体にわたって1つの次元に沿って、たとえば右側まで活性化入力をシフトし、アレイ306全体にわたって別の次元に沿って、たとえば下部まで重み入力をシフトする。たとえば、1つのクロックサイクルで、セル314における活性化入力は、セル314の右側のセル316における活性化レジスタにシフトすることができる。同様に、セル316における重み入力は、セル314の下方のセル318における重みレジスタにシフトすることができる。
【0030】
各クロックサイクルで、各セルは、所与の重み入力、所与の活性化入力および隣接するセルからの累積出力を処理して、累積出力を生成することができる。累積出力は、所与の重み入力と同一の次元に沿って隣接するセルにも渡されることができる。個々のセルにつ
いては、
図4を参照して以下でさらに説明する。
【0031】
累積出力は、重み入力と同一の列に沿って、たとえばアレイ306内の列の下部の方に渡されることができる。いくつかの実現例では、アレイ306は、行よりも多くの活性化入力を有する層で算出を実行するときに各列から各累積出力を格納して累積するアキュムレータユニット310を各列の下部に含み得る。いくつかの実現例では、各アキュムレータユニットは、複数の並列累積値を格納する。これについては
図6を参照して以下でさらに説明する。アキュムレータユニット310は、各累積出力を累積して、最終的な累積値を生成することができる。最終的な累積値は、ベクトル計算ユニット、たとえば
図5のベクトル計算ユニット502に送信されることができる。いくつかの他の実現例では、アキュムレータユニット310は、行よりも少ない活性化入力を有する層を処理するときにいかなる累積も実行することなく累積値をベクトル計算ユニットに渡す。
【0032】
図4は、シストリックアレイ、たとえば
図3のシストリックアレイ306内のセルの例示的なアーキテクチャ400を示す。
【0033】
セルは、活性化入力を格納する活性化レジスタ406を含み得る。活性化レジスタは、シストリックアレイ内のセルの位置に応じて、左側の隣接するセル、すなわち所与のセルの左側に位置する隣接するセルから、または統合バッファから活性化入力を受け取ることができる。セルは、重み入力を格納する重みレジスタ402を含み得る。重み入力は、シストリックアレイ内のセルの位置に応じて、上側の隣接するセルから、または重みフェッチャインターフェイスから送信されることができる。セルは、合計レジスタ404も含み得る。合計レジスタ404は、上側の隣接するセルからの累積値を格納することができる。乗算回路408は、重みレジスタ402からの重み入力と活性化レジスタ406からの活性化入力とを掛け合わせることに使用できる。乗算回路408は、その積を総和回路410に出力することができる。
【0034】
総和回路は、その積と合計レジスタ404からの累積値とを合計して、新たな累積値を生成することができる。次いで、総和回路410は、下側の隣接するセルに位置する別の合計レジスタに当該新たな累積値を送ることができる。当該新たな累積値は、下側の隣接するセルでの合計のためのオペランドとして使用することができる。
【0035】
また、セルは、処理のために重み入力および活性化入力を隣接するセルにシフトさせることもできる。たとえば、重みレジスタ402は、下側の隣接するセルにおける別の重みレジスタに重み入力を送ることができる。活性化レジスタ406は、右側の隣接するセルにおける別の活性化レジスタに活性化入力を送ることができる。したがって、重み入力も活性化入力も、後続のクロックサイクルでアレイ内の他のセルによって再使用することができる。
【0036】
いくつかの実現例では、セルは制御レジスタも含む。制御レジスタは、セルが隣接するセルに重み入力をシフトすべきであるか活性化入力をシフトすべきであるかを判断する制御信号を格納することができる。いくつかの実現例では、重み入力または活性化入力のシフトは、1つ以上のクロックサイクルを要する。制御信号は、活性化入力を乗算回路408に送信するか重み入力を乗算回路408に送信するかを判断することもでき、または、乗算回路408が活性化入力および重み入力上で動作するか否かを判断することもできる。制御信号も、たとえばワイヤを使用して1つ以上の隣接するセルに渡されることができる。
【0037】
いくつかの実現例では、重みは、重みパスレジスタ412に事前にシフトされる。重みパスレジスタ412は、たとえば上側の隣接するセルから重み入力を受け取って、制御信
号に基づいて重み入力を重みレジスタ402に送信することができる。重みレジスタ402は、たとえば活性化レジスタ406を介して複数のクロックサイクルにわたって活性化入力がセルに送信されるときに重み入力がセル内にとどまって隣接するセルに送信されないように、重み入力を静的に格納することができる。したがって、重み入力は、たとえば乗算回路408を使用して複数の活性化入力に適用可能であり、それぞれの累積値は、隣接するセルに送信されることができる。
【0038】
図5は、ベクトル計算ユニット502の例示的なアーキテクチャ500を示す。ベクトル計算ユニット502は、行列計算ユニット、たとえば
図2を参照して説明した行列計算ユニットから累積値のベクトルを受け取ることができる。
【0039】
ベクトル計算ユニット502は、活性化ユニット404において累積値のベクトルを処理することができる。いくつかの実現例では、活性化ユニットは、非線形関数を各々の累積値に適用して活性化値を生成する回路を含む。たとえば、非線形関数はtanh(x)であってもよく、xは累積値である。
【0040】
任意に、ベクトル計算ユニット502は、活性化値から正規化値を生成する正規化回路506において活性化値を正規化することができる。
【0041】
また、任意に、ベクトル計算ユニット502は、プール回路508を使用して、活性化値または正規化値のいずれかの値をプールすることができる。プール回路508は、集約関数を正規化値のうちの1つ以上に適用して、プール値を生成することができる。いくつかの実現例では、集約関数は、正規化値または正規化値のサブセットの最大値、最小値または平均値を返す関数である。
【0042】
制御信号510は、たとえば
図2のシーケンサ206によって送信されることができ、どのようにベクトル計算ユニット502が累積値のベクトルを処理するかを調整することができる。すなわち、制御信号510は、活性化値がプールされるか、正規化されるか、またはプールされて正規化されるかを調整することができる。また、制御信号510は、活性化関数、正規化関数またはプール関数、ならびに、正規化およびプールのための他のパラメータ、たとえばストライド値を指定することもできる。
【0043】
ベクトル計算ユニット502は、値、たとえば活性化値、正規化値またはプール値を統合バッファ、たとえば
図2の統合バッファ208に送ることができる。
【0044】
いくつかの実現例では、プールユニット508が正規化回路506の代わりに活性化値を受け取って、プール値を統合バッファに格納する。いくつかの実現例では、プールユニット508は、統合バッファに格納される正規化値を生成する正規化回路506にプール値を送る。
【0045】
図6は、正規化回路、たとえば
図5の正規化回路506の例示的なアーキテクチャ600を示す。正規化回路は、各クロックサイクルについて、活性化回路602、たとえば
図5の活性化回路504から活性化値のベクトルを受け取ることができる。システムパラメータの値に応じて、正規化回路は、活性化値のベクトルをプール回路に渡す、すなわち活性化値を正規化しないか、または活性化値のベクトルから正規化値のベクトルを生成するかのいずれかを行うことができる。たとえば、システムパラメータ(たとえば、ユーザによって提供される)が活性化値のベクトルをプール回路に渡すように回路に指示する場合、たとえばユーザが値を正規化したくない場合には、システムパラメータは、値を直接プール回路に渡して正規化回路をスキップするマルチプレクサへの信号であってもよい。
【0046】
いくつかの実現例では、活性化値のベクトルは、重み入力のセットに基づいて活性化入力から生成された累積値に活性化関数を適用することによって生成される活性化値を含む。
【0047】
いくつかの他の実現例では、重み入力のセットについての活性化値は、活性化入力および重み入力をシフトするときに生じる遅延のために、活性化値の複数のベクトル全体にわたって互い違いに配置される。たとえば、行列計算ユニットは、カーネルAからの活性化入力のセットおよび重み入力のセットから累積値A
0~A
nを生成することができ、カーネルBからの活性化入力のセットおよび重み入力のセットから累積値B
0~B
nを生成することができ、カーネルCからの活性化入力のセットおよび重み入力のセットから累積値C
0~C
nを生成することができる。累積値A
0~A
nおよびB
0~B
nは、後続のクロックサイクルで生成することができる。なぜなら、
図4を参照して上記したように、対応する累積値が計算される前に重み入力および活性化入力が行列計算ユニット全体にわたってシフトされるからである。A
0はクロックサイクル0で生成することができ、A
1およびB
0はクロックサイクル1で生成することができ、A
2,B
1およびC
0はクロックサイクル2で生成することができ、A
n,B
n-1およびC
n-2はクロックサイクルnで生成することができる、などである。行列計算ユニットは、クロックサイクルXについてのA
0およびB
0を含む累積値のベクトルと、クロックサイクルX+1についてのA
1およびB
1を含む累積値の別のベクトルとを生成することができる。したがって、所与のカーネルの累積値、たとえばカーネルAからのA
0~A
nは、後続のクロックサイクルにおける累積値の複数のベクトル全体にわたって互い違いの態様で分散させることができる。
【0048】
その結果、累積値の複数のベクトルは、たとえば
図5の活性化回路504による処理後は活性化値の複数のベクトルになることができ、活性化値の複数のベクトルの各々は、個別の正規化レジスタ列に送られることができる。特に、活性化回路602は、活性化値のベクトルからの各活性化値を個別の正規化レジスタ列604~610に送ることができる。特に、正規化レジスタ616~622の各々は、それぞれの活性化値を受け取ることができる。正規化レジスタ列は、直列に接続された正規化レジスタのセットを含み得る。すなわち、列内の第1の正規化レジスタの出力は、列内の第2の正規化レジスタの入力として送られることができる。いくつかの実現例では、各正規化レジスタは、活性化値を格納する。いくつかの他の実現例では、各正規化レジスタは、活性化値の二乗も格納する。いくつかの実現例では、正規化回路は、活性化回路またはシストリックアレイにある列と同数の正規化レジスタ列を有する。
【0049】
いくつかの実現例では、活性化値のベクトルを正規化レジスタ列に提供する前に、回路はベクトルを二乗ユニットに送る。二乗ユニットは、正規化値を計算する際に使用できるように各活性化値の二乗を算出することができ、これについては以下でさらに説明する。二乗ユニットは、二乗活性化値のベクトル、すなわち活性化値の各ベクトルにつき1つ、を生成して、二乗活性化値のベクトルを正規化レジスタ列に送ることができる。いくつかの他の実現例では、二乗ユニットは、活性化値のベクトルも二乗活性化値のベクトルも正規化レジスタ列に送る。
【0050】
いくつかの実現例では、正規化回路は、正規化半径パラメータに基づいて、互い違いに配置されたグループ、たとえば互い違いに配置されたグループ624および628を形成する。正規化半径パラメータは、正規化値を算出する際に使用すべき周囲の正規化レジス
タからの出力の数を示し得る。出力の数は、正規化半径パラメータの2倍と同等であり得る。例示として、互い違いに配置されたグループ624および628は、1という正規化半径パラメータから形成される。互い違いに配置されたグループ624は、正規化
レジスタ632および618を含み、ゼロレジスタ636も含む。ゼロレジスタ636は、0という値を常に出力することができ、正規化回路の端縁で正規化値を算出する際にバッファとして機能することができる。ゼロレジスタ635および638は、ゼロレジスタの列612に含まれ得る。互い違いに配置されたグループ内の値の一例については、
図7を参照して以下でさらに説明する。
【0051】
いくつかの実現例では、正規化ユニット、たとえば正規化ユニット626,630は、互い違いに配置されたグループからの出力を使用して、正規化値の計算に使用される対応する構成要素、たとえば互い違いに配置されたグループのレジスタ内の活性化値の二乗を生成する。たとえば、構成要素を使用して、全ての活性化値の二乗和を生成することができる。正規化ユニットは、当該二乗和を使用して正規化値を計算することができ、これについては以下でさらに説明する。いくつかの実現例では、互い違いに配置された各グループについて対応する正規化ユニットがある。
【0052】
正規化回路は、互い違いに配置されたグループに基づいて、活性化値についての正規化値を生成することができる。たとえば、正規化レジスタ632に格納された活性化値についての正規化値は、正規化ユニット626に格納されることができる。特に、互い違いに配置されたグループ624に基づいて、正規化回路は、たとえば総和回路を使用して、互い違いに配置されたグループ624内の正規化レジスタによって生成される全ての二乗の和を計算することができる。当該和は、正規化ユニット626に格納されることができる。当該和は、活性化値に対応する正規化値であり得る。正規化回路は、正規化レジスタ634,640とゼロレジスタ620とを含む互い違いに配置されたグループ628について別の対応する正規化値を生成し続けることができ、対応する正規化値は、正規化ユニット630に格納されることができる。
【0053】
正規化回路は、たとえば正規化ユニットに格納され得る生成された正規化値から正規化値のベクトルを形成することができ、ニューラルネットワークパラメータによって規定される場合には正規化値のベクトルをプール回路に送ることができ、または統合バッファに送ることができる。
【0054】
図7は、正規化レジスタ内のサンプル活性化値を有する正規化回路の別の例示的なアーキテクチャ700を示す。互い違いに配置されたグループ724および728に示されるように、正規化半径パラメータは1であり得る。特に、互い違いに配置されたグループ724は、正規化レジスタ732および718と、ゼロレジスタ736とを含む。互い違いに配置されたグループ728は、ゼロレジスタ738と、正規化レジスタ734および740とを含む。
【0055】
正規化レジスタ716~720,732,734および740は、たとえばシストリックアレイからの列に対応する活性化値を格納することができる。正規化レジスタ740の表記AX,Y、たとえばA0,0は、クロックサイクルYにおける列Xに対応する活性化値を示す。
【0056】
図に示されるように、活性化値は互い違いの態様でロードされる。たとえば、クロックサイクル0では、活性化値A0,0、A1,0およびA2,0を計算することができるが、正規化回路は3つのクロックサイクルにわたって3個の活性化値をロードする。いくつかの実現例では、活性化値は互い違いでない態様でロードされる。すなわち、A0,0、A1,0およびA2,0が1つのクロックサイクルにおいてロードされてもよい。
【0057】
N0は、正規化レジスタ726に格納されたA0,1のための正規化値であり得る。N0は、
図8を参照して以下で説明するA0,1およびA1,1および(ゼロレジスタ736からの)0の二乗和に基づいて算出することができる。同様に、N1は、A0,0およびA1,0および(レジスタ720からの)A2,0の二乗和に基づいて算出されるA0
,0のための正規化値であり得る。
【0058】
正規化回路は、1という半径を使用して各活性化値について正規化値を計算することができる。他の半径も可能である。正規化回路が正規化算出に必要な活性化値をまだロードしていなければ、必要な活性化値がロードされるまで、正規化回路は活性化値を後続の正規化レジスタにシフトすることができる。たとえば、正規化レジスタ716に格納された活性化値A0,2のための正規化値を算出するために、1という半径に鑑みて活性化値A1,2が必要である。後続のクロックサイクルで、活性化値A1,2を正規化レジスタ718にロードすることができ、この時点で、正規化回路は活性化値A0,2のための正規化値を計算することができる。
【0059】
図8は、正規化回路内の正規化ユニットの例示的なアーキテクチャ800を示す。正規化ユニットは、活性化値802を受け取ることができる。いくつかの実現例では、たとえば活性化値802が誤った位置にあると回路が判断すると、すなわち正規化算出のために活性化値を後続の正規化ユニットに格納する必要があると回路が判断すると、活性化値802がマルチプレクサ814を介して後続の正規化ユニットに渡される。正規化回路は、特定の出力、たとえば正規化値または影響を受けない活性化値のいずれか、を通過するように制御信号をマルチプレクサ814に送ることができる。
【0060】
いくつかの実現例では、活性化値が二乗回路804に渡される。二乗回路804は、二乗活性化値808を生成する、すなわち活性化値を2のべき乗に引き上げることができる。二乗回路804は、二乗活性化値808を隣接する正規化ユニット、たとえば正規化ユニットの互い違いに配置された同一のグループ内の他の正規化ユニットに送ることができる。
【0061】
いくつかの実現例では、
図6を参照して上記したように、受け取った活性化値は、正規化レジスタ列に提供される前に既に二乗されている。
【0062】
また、正規化ユニットは、総和回路806において、隣接する正規化ユニットから二乗活性化値810を受け取ることができる。総和回路806は、二乗活性化値808と受け取った二乗活性化値810との和を生成することができる。
【0063】
当該和は、メモリユニット812に送られることができる。いくつかの実現例では、メモリユニット812は、ルックアップテーブルと、補間ユニットとを含む。正規化ユニットは、当該和の一部、たとえば当該和の高ビットのセットを、システムパラメータによって提供される1つ以上の係数を調べるためのアドレスとして使用することができる。メモリおよび補間ユニット812は、当該係数および二乗活性化値の和に基づいて正規化スケーリングファクタを生成することができる。当該正規化スケーリングファクタは、乗算ユニット816に送られることができる。
【0064】
いくつかの実現例では、二乗和は12ビット値である。正規化ユニットは、二乗和の上位4ビットをルックアップテーブルへのインデックスとして使用することができる。上位4ビットを使用して、たとえばユーザによって指定される係数にルックアップテーブルからアクセスすることができる。いくつかの実現例では、上位4ビットは、2個の12ビット係数:AおよびBにアクセスする。下位8ビットは、正規化スケーリングファクタを算出するために式中で使用されるデルタであり得る。例示的な式は、スケーリングファクタ=minimum (1048575, [A * delta + B * 256 + 2^7]) >> 8で表わされ、式中、minimumは2個の引数を処理して、最小値を有する引数を返す。
【0065】
正規化ユニットは、乗算ユニット816を使用して、正規化スケーリングファクタと活
性化値802とを掛け合わせて、正規化値を生成することができる。いくつかの実現例では、正規化値は、次いで、プール回路、たとえば
図5のプール回路508に送られる。
【0066】
図9は、プール回路の例示的なアーキテクチャ900を示す。プール回路は、集約関数を1つ以上の正規化値または活性化値に適用して、プール値を生成することができる。例示として、アーキテクチャ900は、活性化値または正規化値の4×4セットのプールを実行することができる。
図9に示されているプールは正方形領域、すなわち4×4を有するが、長方形領域も可能である。たとえば、領域がn×mというウィンドウを有する場合には、アーキテクチャ900はn*m個のレジスタ、すなわちn個の列とm個の行とを有し得る。
【0067】
プール回路は、正規化値のベクトルから、たとえば
図5の正規化回路506から、要素のシーケンスを受け取ることができる。たとえば、当該シーケンスは、画像の8×8部分の画素を表わし得て、プール回路アーキテクチャ900は、8×8部分の4×4サブセットから値をプールすることができる。いくつかの実現例では、正規化値は、プール回路に結合された正規化回路によって計算されると、当該シーケンスに追加される。いくつかの実現例では、ニューラルネットワークプロセッサは、複数の並列プール回路を含む。各クロックサイクルにわたって、各プール回路は、正規化回路からの正規化値のベクトルからそれぞれの要素を受け取ることができる。各プール回路は、正規化回路から受け取った要素を、ラスタ順序で到達する二次元画像として解釈することができる。
【0068】
プール回路は、一連のレジスタおよびメモリユニットを含み得る。各レジスタは、レジスタ内に格納された値全体にわたって集約関数を適用する集約回路906に出力を送ることができる。集約関数は、値のセットから最小値、最大値または平均値を返すことができる。
【0069】
第1の正規化値は、レジスタ902に送られてレジスタ902内に格納されることができる。後続のクロックサイクルで、第1の正規化値は、後続のレジスタ908にシフトしてメモリ904に格納されることができ、第2の正規化値がレジスタ902に送られてレジスタ902内に格納されることができる。
【0070】
4つのクロックサイクル後、4個の正規化値が第1の4個のレジスタ902,908~912内に格納される。いくつかの実現例では、メモリユニット904は、先入れ先出し(first-in-first-out:FIFO)下で動作する。各メモリユニットは、8個までの正規化値を格納することができる。メモリユニット904は、完全な画素列を収容した後に、正規化値をレジスタ914に送ることができる。
【0071】
任意の所与の時点で、集約回路906は、各レジスタからの正規化値にアクセスすることができる。レジスタ内の正規化値は、画像の4×4部分の正規化値を表わすはずである。
【0072】
プール回路は、集約回路906を使用してアクセスされた正規化値、たとえば最大正規化値、最小正規化値または平均正規化値からプール値を生成することができる。プール値は、統合バッファ、たとえば
図2の統合バッファ208に送られることができる。
【0073】
第1のプール値を生成した後、プール回路は、新たな正規化値をレジスタに格納して集約回路906によってプールすることができるように各レジスタを介して正規化値をシフトすることによってプール値を生成し続けることができる。たとえば、アーキテクチャ900では、プール回路は、4つ以上のクロックサイクルにわたって正規化値をシフトし、それによって、メモリユニット内の正規化値をレジスタにシフトすることができる。いく
つかの実現例では、プール回路は、新たな正規化値が最後の最上部のレジスタ、たとえばレジスタ916に格納されるまで新たな正規化値をシフトする。
【0074】
次いで、集約回路906は、レジスタに格納された新たな正規化値をプールすることができる。
【0075】
いくつかの実現例では、プール回路は、正規化値のベクトルを受け取る代わりに、
図5を参照して上記したように活性化値のベクトルを受け取る。
【0076】
本明細書に記載されている主題および機能動作の実施形態は、デジタル電子回路で実現されてもよく、有形に実施されたコンピュータソフトウェアもしくはファームウェアで実現されてもよく、本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータハードウェアで実現されてもよく、またはそれらのうちの1つ以上の組み合わせで実現されてもよい。本明細書に記載されている主題の実施形態は、1つ以上のコンピュータプログラムとして実現されてもよく、すなわちデータ処理装置による実行またはデータ処理装置の動作の制御のために有形の非一時的なプログラムキャリアに符号化されたコンピュータプログラム命令の1つ以上のモジュールとして実現されてもよい。代替的にまたは加えて、プログラム命令は、人工的に生成された伝搬信号、たとえば機械によって生成された電気信号、光信号または電磁信号、に符号化されてもよく、当該信号は、情報を符号化して好適な受信機装置に送信してデータ処理装置によって実行するように生成される。コンピュータ記憶媒体は、機械読取可能な記憶装置であってもよく、機械読取可能な記憶基板であってもよく、ランダムもしくはシリアルアクセスメモリデバイスであってもよく、またはそれらのうちの1つ以上の組み合わせであってもよい。
【0077】
「データ処理装置」という用語は、一例としてプログラム可能なプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するための全ての種類の装置、デバイスおよび機械を包含する。当該装置は、特定目的論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)を含み得る。当該装置は、ハードウェアに加えて、対象のコンピュータプログラムのための実行環境を作成するコード、たとえばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つ以上の組み合わせを構成するコード、も含み得る。
【0078】
(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードと称してもよく、またはそのようなものとして記載されてもよい)コンピュータプログラムは、コンパイラ型もしくはインタープリタ型言語、または宣言型もしくは手続き型言語を含むいずれかの形態のプログラミング言語で書かれてもよく、スタンドアロンのプログラム、または計算環境での使用に適したモジュール、コンポーネント、サブルーチンもしくは他のユニットを含むいずれかの形態でデプロイすることができる。コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、そうでなくてもよい。プログラムは、他のプログラムもしくはデータ、たとえばマークアップ言語ドキュメントに格納された1つ以上のスクリプト、を保持するファイルの一部に格納されてもよく、対象のプログラムに専用の単一のファイルに格納されてもよく、または複数の協調的ファイル、たとえば1つ以上のモジュール、サブプログラムもしくはコードの一部を格納するファイル、に格納されてもよい。コンピュータプログラムは、1つのコンピュータで実行されるようにデプロイされてもよく、または、一箇所に位置するかもしくは複数の箇所に分散されて通信ネットワークによって相互接続された複数のコンピュータで実行されるようにデプロイされてもよい。
【0079】
本明細書に記載されているプロセスおよび論理フローは、1つ以上のプログラム可能な
コンピュータによって実行されてもよく、当該1つ以上のプログラム可能なコンピュータは、入力データ上で動作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行する。また、当該プロセスおよび論理フローは、特定目的論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)によって実行されてもよく、装置は、特定目的論理回路、たとえばFPGAまたはASICとして実現されてもよい。
【0080】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特定目的マイクロプロセッサ、またはそれら両方、またはその他の種類の中央処理装置に基づいていてもよい。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令を実施または実行するための中央処理装置と、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、たとえば磁気ディスク、光磁気ディスクもしくは光ディスクも含み、または、当該1つ以上の大容量記憶装置からデータを受信したり、当該1つ以上の大容量記憶装置にデータを送信したり、もしくは当該1つ以上の大容量記憶装置との間でデータを送受信したりするように動作可能に結合される。しかし、コンピュータはこのような装置を有していなくてもよい。さらに、コンピュータは、別のデバイス、たとえばいくつか例を挙げると携帯電話、パーソナルデジタルアシスタント(personal digital assistant:PDA)、モバイルオーディオプレーヤもしくはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(Global Positioning System
:GPS)受信機で実施されてもよく、または携帯型記憶装置、たとえばユニバーサルシリアルバス(universal serial bus:USB)フラッシュドライブで実施されてもよい。
【0081】
コンピュータプログラム命令およびデータの格納に適したコンピュータ読取可能な媒体は、全ての形態の不揮発性メモリ、媒体およびメモリデバイスを含み、一例として、半導体メモリデバイス、たとえばEPROM、EEPROMおよびフラッシュメモリデバイス;磁気ディスク、たとえば内部ハードディスクまたはリムーバブルディスク;光磁気ディスク;ならびにCD ROMおよびDVD-ROMディスクを含む。プロセッサおよびメモリは、特定目的論理回路によって補完されてもよく、または特定目的論理回路に組み込まれてもよい。
【0082】
ユーザとの対話を要求するために、本明細書に記載されている主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス、たとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタと、ユーザが入力をコンピュータに送ることができるキーボードおよびポインティングデバイス、たとえばマウスまたはトラックボールとを有するコンピュータで実現されてもよい。ユーザとの対話を要求するために他の種類のデバイスも使用してもよい。たとえば、ユーザに提供されるフィードバックは、いずれかの形態の感覚フィードバック、たとえば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触覚入力を含むいずれかの形態で受け取られてもよい。また、コンピュータは、ユーザが使用するデバイスにドキュメントを送ったり当該デバイスからドキュメントを受け取ったりすることによってユーザと対話してもよく、たとえばウェブブラウザから受け取った要求に応答してユーザのクライアントデバイスのウェブブラウザにウェブページを送ることによってユーザと対話してもよい。
【0083】
本明細書に記載されている主題の実施形態は、バックエンドコンポーネント、たとえばデータサーバを含む計算システムで実現されてもよく、またはミドルウェアコンポーネント、たとえばアプリケーションサーバを含む計算システムで実現されてもよく、またはフロントエンドコンポーネント、たとえばユーザが本明細書に記載されている主題の実現例
と対話できるグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータを含む計算システムで実現されてもよく、または1つ以上のこのようなバックエンドコンポーネント、ミドルウェアコンポーネントもしくはフロントエンドコンポーネントのいずれかの組み合わせを含む計算システムで実現されてもよい。当該システムのコンポーネント同士は、デジタルデータ通信のいずれかの形態または媒体、たとえば通信ネットワークによって相互接続されてもよい。通信ネットワークの例としては、ローカルエリアネットワーク(local area network:LAN)および広域ネットワーク(wide area network:WAN)、たとえばインターネットが挙げられる。
【0084】
計算システムは、クライアントとサーバとを含んでいてもよい。クライアントおよびサーバは、一般に互いに離れており、通常は通信ネットワークを介して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で動作して互いに対してクライアント-サーバ関係を有するコンピュータプログラムによって生じる。
【0085】
本明細書は、多くの具体的な実現例の詳細を含んでいるが、これらは、発明の範囲またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有であろう特徴を説明するものとして解釈されるべきである。別々の実施形態の文脈で本明細書に記載されている特定の特徴は、組み合わせて単一の実施形態で実現されてもよい。逆に、単一の実施形態の文脈で記載されているさまざまな特徴は、複数の実施形態で別々に、またはいずれかの好適な部分的組み合わせで実現されてもよい。さらに、特徴は特定の組み合わせで動作するものとして上記され、当初はそのようなものとしてクレームされさえし得るが、クレームされている組み合わせからの1つ以上の特徴は、場合によっては当該組み合わせから削除されてもよく、クレームされている組み合わせは、部分的組み合わせまたは部分的組み合わせの変形例に向けられてもよい。
【0086】
同様に、動作は特定の順序で図面に示されているが、これは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序でこのような動作を実行しなければならないものとして理解されるべきではなく、または全ての示されている動作を実行しなければならないものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利であるかもしれない。さらに、上記の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、全ての実施形態でこのような分離が必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に実装されるかまたは複数のソフトウェア製品にパッケージングされ得るということが理解されるべきである。
【0087】
主題の特定の実施形態について説明してきた。他の実施形態も以下の特許請求の範囲の範囲内である。たとえば、特許請求の範囲に記載されている動作は、異なる順序で実行されてもよく、依然として望ましい結果を達成することができる。一例として、添付の図面に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例では、マルチタスクおよび並列処理が有利であるかもしれない。