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

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

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許7372009並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ
<>
  • 特許-並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ 図1
  • 特許-並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ 図2
  • 特許-並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ 図3
  • 特許-並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ 図4
  • 特許-並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ 図5
  • 特許-並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ 図6
  • 特許-並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-23
(45)【発行日】2023-10-31
(54)【発明の名称】並列分散テンソル計算用のニューラル・ハードウェア・アクセラレータ
(51)【国際特許分類】
   G06N 3/10 20060101AFI20231024BHJP
   G06N 3/04 20230101ALI20231024BHJP
   G06N 3/0464 20230101ALI20231024BHJP
   G06F 17/10 20060101ALI20231024BHJP
【FI】
G06N3/10
G06N3/04
G06N3/0464
G06F17/10 A
【請求項の数】 35
(21)【出願番号】P 2020557303
(86)(22)【出願日】2019-04-29
(65)【公表番号】
(43)【公表日】2021-08-30
(86)【国際出願番号】 EP2019060888
(87)【国際公開番号】W WO2019211226
(87)【国際公開日】2019-11-07
【審査請求日】2021-08-30
(31)【優先権主張番号】15/967,482
(32)【優先日】2018-04-30
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】モダ、ダルメンドラ
【審査官】石川 亮
(56)【参考文献】
【文献】米国特許出願公開第2017/0316312(US,A1)
【文献】特開2000-163384(JP,A)
【文献】米国特許出願公開第2018/0046895(US,A1)
【文献】特開平05-242065(JP,A)
【文献】安藤 洸太 ほか,"BRein Memory:バイナリ・インメモリ再構成型深層ニューラルネットワークアクセラレータ, 映像情報メディア学会技術報告,Vol.41, No.25,2017年07月24日,pp.101-106,ISSN 1342-6893
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/02-3/10
G06F 17/10
(57)【特許請求の範囲】
【請求項1】
ニューラル・ネットワークを管理するためのシステムであって、
複数のニューラル・コアであって、前記複数のニューラル・コアのそれぞれが少なくとも1つのメモリを備え、前記複数のニューラル・コアが2次元配列に配置される、前記複数のニューラル・コアと、
前記複数のニューラル・コアを相互に結合するネットワークと
を含み、前記複数のニューラル・コアのそれぞれの前記少なくとも1つのメモリが、複数のフィルタを含む重みテンソルの少なくとも一部を含み、各ニューラル・コアが、
入力データ・テンソルの一部を、ローカルで読み出すか、または受け取り、
前記入力データ・テンソルの前記一部に前記重みテンソルの前記一部を適用し、
適用した結果を、ローカルに記憶するか、または前記ネットワークを介して前記複数のニューラル・コアのうちの他のものに送るように適合され、
前記重みテンソルが、前記重みテンソルの局所性および前記複数のニューラル・コアのそれぞれの前記結合に基づいて前記2次元配列の物理次元に従って前記複数のニューラル・コア間で分散され、
前記重みテンソルの次元、形状、および分割が設定変更可能である、システム。
【請求項2】
前記重みテンソルの前記一部を前記入力データ・テンソルの前記一部に適用することが、ベクトル行列の乗算と前記乗算に続く活性化関数を計算することを含む、請求項1に記載のシステム。
【請求項3】
前記ネットワークが前記複数のニューラル・コア間の局所結合性を提供する、請求項1または2のいずれかに記載のシステム。
【請求項4】
前記ネットワークが前記2次元配列内で隣接するニューラル・コア間の結合性を提供する、請求項1に記載のシステム。
【請求項5】
前記複数のニューラル・コアのそれぞれにおける前記重みテンソルの前記一部が、前記重みテンソルのブロックを含む、請求項1ないし4のいずれかに記載のシステム。
【請求項6】
前記重みテンソルが、局所性を示す1つまたは複数の次元に沿って分割される、請求項1に記載のシステム。
【請求項7】
前記1つまたは複数の次元が空間次元を含む、請求項6に記載のシステム。
【請求項8】
前記1つまたは複数の次元が少なくとも1つの特徴次元を含む、請求項6に記載のシステム。
【請求項9】
前記重みテンソルが疎である、請求項1ないし8のいずれかに記載のシステム。
【請求項10】
前記重みテンソルの前記一部を前記入力データ・テンソルの前記一部に前記適用する間、前記重みテンソルの非ゼロ値だけが計算に使用される、請求項9に記載のシステム。
【請求項11】
前記メモリが、前記重みテンソルの非ゼロ値だけを記憶する、請求項9または10のいずれかに記載のシステム。
【請求項12】
前記重みテンソルが畳み込みフィルタに対応する、請求項1ないし11のいずれかに記載のシステム。
【請求項13】
前記重みテンソルが1つまたは複数の空間次元に沿って分割される、請求項12に記載のシステム。
【請求項14】
前記結果が中間結果であり、
各ニューラル・コアが、前記中間結果をローカルに記憶するか、または前記ネットワークを介して前記複数のニューラル・コアのうちの別のものに送るようにさらに適合され、
各ニューラル・コアが、前記中間結果を、ローカルで読み出すか、または受け取り、前記中間結果から最終結果を計算するようにさらに適合される
請求項1ないし13のいずれかに記載のシステム。
【請求項15】
前記複数のニューラル・コアのそれぞれにおける前記重みテンソルの前記一部が、前記重みテンソルのブロックを含み、前記複数のニューラル・コアのサブセットが、同じ複製されたブロックを含む、請求項1ないし14のいずれかに記載のシステム。
【請求項16】
前記複数のニューラル・コアのうちの1つが、重みテンソル全体を含む、請求項1ないし15のいずれかに記載のシステム。
【請求項17】
前記1つのニューラル・コアが、前記重みテンソルの前記一部を前記複数のニューラル・コアのうちの他のものにそれぞれ分散するように適合される、請求項16に記載のシステム。
【請求項18】
前記重みテンソル全体を含む中央メモリをさらに含み、前記中央メモリから、前記重みテンソルの前記一部を、前記複数のニューラル・コアのうちの他のものにそれぞれ分散するように適合される、請求項1ないし17のいずれかに記載のシステム。
【請求項19】
前記重みテンソルの前記一部が前記複数のフィルタのサブセットに対応する、請求項1ないし18のいずれかに記載のシステム。
【請求項20】
前記重みテンソルが圧縮される、請求項1ないし19のいずれかに記載のシステム。
【請求項21】
前記重みテンソルが、ゼロ値を除外するように符号化される、請求項1ないし20のいずれかに記載のシステム。
【請求項22】
前記重みテンソルの各値が、-1、0、または1である、請求項1ないし21のいずれかに記載のシステム。
【請求項23】
重みテンソル・ブロックが、複数のニューラル・コアのために複製される、請求項15に記載のシステム。
【請求項24】
前記重みテンソル・ブロックが、単一のニューラル・コア・メモリにのみ記憶され、ネットワークオンチップを介して複数のニューラル・コアに分散される、請求項23に記載のシステム。
【請求項25】
前記重みテンソル・ブロックが、コア配列の外部にある単一のメモリのみに記憶される、請求項23に記載のシステム。
【請求項26】
ニューラル・ネットワークを管理するための方法であって、
2次元配列に配置され、メモリを備える複数のニューラル・コアにおいて、前記複数のニューラル・コアはネットワークで相互に結合されており、入力データ・テンソルの一部を、ローカルで読み出すか、または受け取ることと、
複数のフィルタを含む重みテンソルの少なくとも一部を前記メモリから読み取ることと、
前記重みテンソルの前記一部を前記入力データ・テンソルの前記一部に適用して結果を得ることと、
前記結果を、ローカルに記憶するか、またはネットワーク介して少なくとも1つの他のニューラル・コアに送ることと
を含み、
前記重みテンソルが、前記重みテンソルの局所性および前記複数のニューラル・コアのそれぞれの前記結合に基づいて前記2次元配列の物理次元に従って前記複数のニューラル・コア間で分散され、
前記重みテンソルの次元、形状、および分割が設定変更可能である、
方法。
【請求項27】
前記重みテンソルが疎である、請求項26に記載の方法。
【請求項28】
前記重みテンソルの前記一部が前記複数のフィルタのサブセットに対応する、請求項26または27のいずれかに記載の方法。
【請求項29】
前記重みテンソルが圧縮される、請求項26ないし28のいずれかに記載の方法。
【請求項30】
前記重みテンソルが、ゼロ値を除外するように符号化される、請求項26ないし29のいずれかに記載の方法。
【請求項31】
前記重みテンソルの各値が、-1、0、または1である、請求項26ないし30のいずれかに記載の方法。
【請求項32】
ニューラル・ネットワークを管理するためのコンピュータ・プログラムを格納する記録媒体であって、前記コンピュータ・プログラムは、コンピュータに、請求項26ないし31のいずれかに記載の方法を実行させるためのプログラムである、記録媒体。
【請求項33】
ニューラル・ネットワークを管理するためのコンピュータ・プログラムであって、コンピュータに、請求項26ないし31のいずれかに記載の方法を実行させるためのコンピュータ・プログラム。
【請求項34】
ニューラル・ネットワークを管理するためのシステムであって、
複数のニューラル・コアであって、前記複数のニューラル・コアのそれぞれが少なくとも1つのメモリを備える、前記複数のニューラル・コアと、
前記複数のニューラル・コアを相互に結合するネットワークと
を含み、前記複数のニューラル・コアのそれぞれの前記少なくとも1つのメモリが、複数のフィルタを含む重みテンソルの少なくとも一部を含み、各ニューラル・コアが、
入力データ・テンソルの一部を、ローカルで読み出すか、または受け取り、
前記入力データ・テンソルの前記一部に前記重みテンソルの前記一部を適用し、
適用した結果を、ローカルに記憶するか、または前記ネットワークを介して前記複数のニューラル・コアのうちの他のものに送るように適合され、
前記複数のニューラル・コアのうちの1つが、重みテンソル全体を含み、
前記1つのニューラル・コアが、前記重みテンソルの前記一部を前記複数のニューラル・コアのうちの他のものにそれぞれ分散するように適合される、システム。
【請求項35】
ニューラル・ネットワークを管理するためのシステムであって、
複数のニューラル・コアであって、前記複数のニューラル・コアのそれぞれが少なくとも1つのメモリを備える、前記複数のニューラル・コアと、
前記複数のニューラル・コアを相互に結合するネットワークと
を含み、前記複数のニューラル・コアのそれぞれの前記少なくとも1つのメモリが、複数のフィルタを含む重みテンソルの少なくとも一部を含み、各ニューラル・コアが、
入力データ・テンソルの一部を、ローカルで読み出すか、または受け取り、
前記入力データ・テンソルの前記一部に前記重みテンソルの前記一部を適用し、
適用した結果を、ローカルに記憶するか、または前記ネットワークを介して前記複数のニューラル・コアのうちの他のものに送るように適合され、
前記複数のニューラル・コアのそれぞれにおける前記重みテンソルの前記一部が、前記重みテンソルのブロックを含み、前記複数のニューラル・コアのサブセットが、同じ複製されたブロックを含み、
重みテンソル・ブロックが、複数のニューラル・コアのために複製され、
前記重みテンソル・ブロックが、単一のニューラル・コア・メモリにのみ記憶され、ネットワークオンチップを介して複数のニューラル・コアに分散される、システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の実施形態は、並列分散テンソル計算用のハードウェア・アクセラレータに関し、より詳細には、畳み込み演算のエネルギー効率および速度を高めるように適合されたニューラル・ネットワークおよびそのための符号化に関する。
【背景技術】
【0002】
機械学習において、畳み込みニューラル・ネットワーク(CNN:convolutional neural network)は、たとえば視覚画像の分析に適用可能な多層ニューラル・ネットワークのクラスである。CNNは、入力層と、出力層と、畳み込み演算を集合的に計算する人工ニューロンの少なくとも1つの層を含む複数の隠れ層とで構成される。
【0003】
人工ニューロンは、その出力がその入力の線形結合の非線形関数である数学関数である。一方の出力が他方の入力である場合、2つのニューロンが結合される。重みは、一方のニューロンの出力ともう一方のニューロンの入力との間の結合の強さを符号化するスカラー値である。複数の結合されたニューラル・コアから適切な全体的な結果を計算することは非常に困難である。
【0004】
したがって、当技術分野において前述の問題に対処する必要がある。
【発明の概要】
【0005】
第1の態様から見ると、本発明はニューラル・ネットワークを管理するためのシステムを提供し、システムは、複数のニューラル・コアであって、複数のニューラル・コアのそれぞれが少なくとも1つのメモリを備える複数のニューラル・コアと、複数のニューラル・コアを相互に結合するネットワークとを含み、複数のニューラル・コアのそれぞれの少なくとも1つのメモリは、複数のフィルタを含む重みテンソルの少なくとも一部を含み、各ニューラル・コアは、入力データ・テンソルの一部を、ローカルで読み出すか、または受け取り、それに重みテンソルの一部を適用し、その結果を、ローカルに記憶するか、またはネットワークを介して複数のニューラル・コアのうちの他のものに送るように適合される。
【0006】
さらなる態様から見ると、本発明はニューラル・ネットワークを管理するための方法を提供し、方法は、メモリを備えるニューラル・コアにおいて、入力データ・テンソルの一部を、ローカルで読み出すか、または受け取ることと、複数のフィルタを含む重みテンソルの少なくとも一部をメモリから読み取ることと、重みテンソルの一部を入力データ・テンソルの一部に適用して結果を得ることと、結果を、ローカルに記憶するか、またはネットワーク介して少なくとも1つの他のニューラル・コアに送ることとを含む。
【0007】
さらなる態様から見ると、本発明はシステムを提供し、システムは、複数のニューラル・コアであって、複数のニューラル・コアのそれぞれが少なくとも1つのメモリを備える複数のニューラル・コアと、複数のニューラル・コアを相互に結合するネットワークと、コンピュータ可読記憶媒体によって具現化されるプログラム命令を有するコンピュータ可読記憶媒体を備えるコンピューティング・ノードを含み、プログラム命令は、コンピューティング・ノードのプロセッサによって実行されて、プロセッサに、複数のフィルタを重みテンソルに符号化すること、および重みテンソルの少なくとも一部を複数のニューラル・コアのそれぞれに提供することを含む方法を実行させ、複数のニューラル・コアのそれぞれは、重みテンソルの少なくとも一部をそのメモリに記憶し、入力データ・テンソルの一部を、ローカルで読み出すか、または受け取り、重みテンソルの一部を入力データ・テンソルの一部に適用して結果を得て、結果を、ローカルに記憶するか、またはネットワーク介して少なくとも1つの他のニューラル・コアに送るように適合される。
【0008】
さらなる態様から見ると、本発明はニューラル・ネットワークを管理するためのコンピュータ・プログラム製品を提供し、コンピュータ・プログラム製品は、処理回路によって読み取り可能であり、かつ本発明のステップを実行するための方法を実行するために処理回路によって実行される命令を記憶するコンピュータ可読記憶媒体を備える。
【0009】
さらなる態様から見ると、本発明は、コンピュータ可読媒体に記憶され、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムであって、前記プログラムがコンピュータ上で実行されるとき、本発明のステップを実行するためのソフトウェア・コード部分を含む、コンピュータ・プログラムを提供する。
【0010】
本開示の実施形態によれば、ニューラル・ネットワーク・システムが提供される。システムは、複数のニューラル・コアを含む。複数のニューラル・コアのそれぞれは、少なくとも1つのメモリを備える。ネットワークは、複数のニューラル・コアを相互に結合する。複数のニューラル・コアのそれぞれのメモリは、重みテンソルの少なくとも一部を含む。重みテンソルは、複数のフィルタを含む。各ニューラル・コアは、入力データ・テンソルの一部を、ローカルで読み出すか、または受け取り、それに重みテンソルの一部を適用し、その結果を、ローカルに記憶するか、またはネットワークを介して複数のニューラル・コアのうちの他のものに送るように適合される。
【0011】
本開示の実施形態によれば、ニューラル・ネットワークを動作させるための方法およびコンピュータ・プログラム製品が提供される。入力データ・テンソルの一部は、ニューラル・コアにおいてローカルで読み出されるか、または受け取られる。ニューラル・コアは、メモリを備える。重みテンソルの少なくとも一部がメモリから読み取られる。重みテンソルは、複数のフィルタを含む。重みテンソルの一部が入力データ・テンソルの一部に適用されて結果が得られる。結果は、ローカルに記憶されるか、またはネットワークを介して少なくとも1つの他のニューラル・コアに送られる。
【0012】
次に、本発明の実施形態について、添付図面を参照して単に例として説明する。
【図面の簡単な説明】
【0013】
図1】本開示の実施形態によるニューラル・コアを示す図である。
図2】本開示の実施形態による畳み込み演算を示す図である。
図3】本開示の実施形態による、重みテンソルおよび入力データの計算コアへの第1の分散を示す図である。
図4】本開示の実施形態による、重みテンソルおよび入力データの計算コアへの第2の分散を示す図である。
図5】本開示の実施形態による、重みテンソルおよび入力データの計算コアへの第3の分散を示す図である。
図6】本開示の実施形態によるニューラル・ネットワークを動作させるための方法を示す図である。
図7】本開示の実施形態によるコンピューティング・ノードを示す図である。
【発明を実施するための形態】
【0014】
機械学習において、畳み込みニューラル・ネットワーク(CNN)は、たとえば視覚画像の分析に適用可能な多層ニューラル・ネットワークのクラスである。CNNは、入力層および出力層、ならびに畳み込み演算を集合的に計算する人工ニューロンの少なくとも1つの層を含む複数の隠れ層で構成される。
【0015】
人工ニューロンは、出力がその入力の線形結合の非線形関数である数学関数である。一方の出力が他方の入力である場合、2つのニューロンが結合される。重みは、一方のニューロンの出力ともう一方のニューロンの入力との間の結合の強さを符号化するスカラー値である。
【0016】
ニューロンは、その入力の重み付き和に非線形活性化関数を適用することによって、活性化と呼ばれるその出力を計算する。重み付き和は、各入力に、対応する重みを乗算し、その積を累積することによって計算される中間結果である。部分和は、入力のサブセットの重み付き和である。すべての入力の重み付き和は、1つ以上の部分和を累積することによって段階的に計算され得る。
【0017】
ニューラル・ネットワークは、1つ以上のニューロンの集合体である。ニューラル・ネットワークは、しばしば層と呼ばれるニューロンのグループに分割される。層は、すべて同じ層から入力を受け取り、すべて同じ層に出力を送り、典型的には同様の機能を実行する1つ以上のニューロンの集合体である。入力層は、ニューラル・ネットワーク外のソースから入力を受け取る層である。出力層は、ニューラル・ネットワーク外のターゲットに出力を送る層である。他のすべての層は、中間処理層である。多層ニューラル・ネットワークは、2つ以上の層を有するニューラル・ネットワークである。深層ニューラル・ネットワークは、多くの層を有する多層ニューラル・ネットワークである。
【0018】
テンソルは、数値の多次元配列である。テンソル・ブロックは、テンソル内の要素の連続したサブ配列である。
【0019】
各ニューラル・ネットワーク層は、パラメータ・テンソルV、重みテンソルW、入力データ・テンソルX、出力データ・テンソルY、および中間データ・テンソルZに関連付けられる。パラメータ・テンソルは、層内のニューロン活性化関数σを制御するすべてのパラメータを含む。重みテンソルは、入力を層に結合するすべての重みを含む。入力データ・テンソルは、層が入力として使用するすべてのデータを含む。出力データ・テンソルは、層が出力として計算するすべてのデータを含む。中間データ・テンソルは、部分和など、層が中間計算として生成する任意のデータを含む。
【0020】
1つの層についてのデータ・テンソル(入力、出力、中間)は、3次元とすることができ、最初の2次元は、空間位置の符号化として解釈することができ、3番目の次元は、異なる特徴の符号化として解釈することができる。たとえば、データ・テンソルが色画像を表す場合、最初の2次元は画像内の垂直座標および水平座標を符号化し、3番目の次元は、各位置での色を符号化する。入力データ・テンソルXのすべての要素は、別個の重みによってすべてのニューロンに結合され得るので、重みテンソルWは、一般に、入力データ・テンソルの3次元(入力行a、入力列b、入力特徴c)を出力データ・テンソルの3次元(出力行i、出力列j、出力特徴k)と連結し、6次元を有する。中間データ・テンソルZは、出力データ・テンソルYと同じ形状を有する。パラメータ・テンソルVは、3つの出力データ・テンソルの次元を、活性化関数σのパラメータにインデックスを付ける追加の次元oと連結する。
【0021】
1つの層についての出力データ・テンソルYの要素は、式1のように計算することができ、式中、ニューロン活性化関数σは、活性化関数パラメータV[i,j,k,:]のベクトルによって構成され、重み付き和Z[i,j,k]は、式2のように計算することができる。
【0022】
【数1】
【0023】
【数2】
【0024】
表記を簡単にするために、式2における重み付き和は出力と呼ばれることがあり、これは、異なる活性化関数が使用される場合でも一般性を失うことなく同じステートメントが適用されるという理解の下に、線形活性化関数Y[i,j,k]=σ(Z[i,j,k])=Z[i,j,k]を使用することと同等である。
【0025】
様々な実施形態において、上記のような出力データ・テンソルの計算は、より小さい問題に分解される。その場合、各問題は、1つまたは複数のニューラル・コア上、または従来のマルチコア・システムの1つまたは複数のコア上で、並列に解くことができる。
【0026】
次に図1を参照すると、本開示の実施形態によるニューラル・コアが示されている。ニューラル・コア100は、出力テンソルの1つのブロックを計算するタイリング可能な計算ユニットである。ニューラル・コア100は、M個の入力およびN個の出力を有する。様々な実施形態において、M=Nである。出力テンソル・ブロックを計算するために、ニューラル・コアはM×1の入力テンソル・ブロック101にM×Nの重みテンソル・ブロック102を乗算し、その積を累積して重み付き和とし、重み付き和は1×Nの中間テンソル・ブロック103に格納される。O×Nのパラメータ・テンソル・ブロックは、1×Nの出力テンソル・ブロック105を生成するために中間テンソル・ブロック103に適用されるN個のニューロン活性化関数のそれぞれを指定するO個のパラメータを含む。
【0027】
複数のニューラル・コアは、ニューラル・コア配列内にタイリングされてよい。いくつかの実施形態において、配列は2次元である。
【0028】
ニューラル・ネットワーク・モデルは、ニューラル・ネットワークによって実行される計算全体を集合的に指定する定数のセットであり、ニューロン間の結合のグラフ、ならびに各ニューロンに対する重みおよび活性化関数パラメータを含む。訓練は、所望の関数を実行するためにニューラル・ネットワーク・モデルを変更するプロセスである。推論は、ニューラル・ネットワーク・モデルを変更することなく、ニューラル・ネットワークを入力に適用して出力を生成するプロセスである。
【0029】
推論処理ユニットは、ニューラル・ネットワーク推論を実行するプロセッサのカテゴリである。ニューラル推論チップは、推論処理ユニットの特定の物理インスタンスである。
【0030】
いくつかの実施形態において、出力データ・テンソルは、同じ形状のブロックに分割され、それぞれが単一のニューラル・コアによって計算される。このような実施形態において、入力データ・テンソル、重みテンソル、およびパラメータ・テンソルは、互換性のある形状のブロックに分解されて、その出力データ・ブロックの計算を担うニューラル・コアによって受け取られる、対応する入力データ・ブロックと、重みブロックと、パラメータ・ブロックとを組み合わせることによって各出力データ・ブロックが計算されるようになる。
【0031】
いくつかの実施形態において、出力データ・ブロックの計算は、複数のニューラル・コアに分散されてよい。このような実施形態において、各ニューラル・コアは、1つまたは複数の入力データ・ブロックおよび対応する重みブロックを受け取り、それらの部分和を含む中間ブロックを生成し、これらのブロックは、同様に対応する出力データ・ブロックを計算するために必要なパラメータ・ブロックを受け取る単一のニューラル・コアによって集められ、合計される。
【0032】
様々な実施形態において、ニューラル・コア配列は、単一のチップ上に存在してよい。このような実施形態において、テンソル・ブロックは、オンチップ・ネットワークを介して送信されてよい。これにより、計算のより近くにモデルを配置することができ、速度および並列性が向上し、エネルギー使用量およびメモリ・アクセスが減少する。
【0033】
いくつかの実施形態において、コア間でテンソル・ブロックを通信するネットワークは、コアがコア配列の同じ近傍のコアへの直接結合のみを有するように、局所結合性を有してよい。たとえば、2次元ニューラル・コア配列において、各ニューラル・コアは、垂直方向および水平方向に直接隣接する4つのコアにのみ直接結合されてよい。このような実施形態において、テンソル・ブロックは、直接結合されたコアのチェーンを介してそれらを中継することによって遠くのコアに送信され得るが、このような間接通信は、直接通信よりも多くの時間およびエネルギーを必要とする。したがって、コア間でテンソル・ブロックを送信するとき、間接通信に対する直接通信の比率を最大化する方法で問題を分割することが有利である。
【0034】
コア間でテンソル・ブロックを通信するネットワークが局所結合性を有し、ニューラル・コア配列によって計算される問題も局所構造を有する場合、問題がテンソル内で局所性を示す次元を、ネットワークがコア配列内で局所性を示す次元に整列する方法で、結果として生じるテンソル・ブロックがコアに割り当てられ得るように、テンソルを分割することが有利である。たとえば、2次元のニューラル・コア配列では、最近傍の結合性を有するオンチップ・ネットワークは、ニューラル・コア配列の行と列の次元に沿った局所性を示す。出力データ・テンソルの各要素が入力データ・テンソル内の対応する位置の小さい空間近隣からのみ結合を受け場合、出力データ・テンソルは、入力データ・テンソルの行と列の次元に沿った局所性を示す。このような場合、出力データ・テンソルは、その行と列の次元に沿って分割されるべきであり、結果として生じるブロックは、ニューラル・コア配列の行と列の次元に沿って分散されるべきである。空間畳み込み層は、このような出力データ・テンソルの一例である。
【0035】
図2を参照すると、例示的な畳み込みが示されている。フィルタ201は、複数の重みw…wを含む。ここで提供されるサイズは単なる例示であり、本明細書に記載のように任意のフィルタ寸法が使用されてよいことが理解されよう。フィルタ201は、画像202の各タイルに適用される。この例では、2つの連続する3×3のタイルが示されている。各タイルの結果は、特徴マップ203の要素である。第1の連続するタイルの結果は、特徴マップの1番目の点で示されている。第2の連続するタイルの結果は、2番目の点で終了する線で示されている。複数の特徴マップを生成するために、複数のフィルタが同じ画像に適用されてよいことが理解されよう。
【0036】
畳み込み層は、隣接層のニューロン間の局所結合性パターンを強制することによって、未加工のセンサ・データにおける空間局所的な相関を利用し、各ニューロンは、入力データ・テンソルの小さい領域からのみ結合を受け取る。この結合性の範囲は、ニューロンの受容野と呼ばれる。同じ出力特徴の要素を計算するすべてのニューロンは、局所受容野を使用して、フィルタと呼ばれる重みと活性化関数パラメータの同じセットを共有する。フィルタのサイズは、入力サイズに関係なく固定されているので、畳み込み層は、同じ入力次元および同じ出力次元を有する全結合層よりもはるかに少ない自由パラメータを有し、それに応じてメモリ・フットプリントも小さくなる。
【0037】
たとえば、空間畳み込み層において、各フィルタの受容野は、入力データ・テンソルの高さおよび幅のごく一部のみをカバーするが、特徴の深さ(feature depth)全体に広がる。このようなアーキテクチャは、フィルタが空間局所的な入力パターンに対して最も強い応答を生成することを保証する。層は、入力データ・テンソルの幅および高さ全体にわたって各フィルタを畳み込み、各位置でのフィルタのエントリと入力データとの間のドット積を計算して各フィルタの2次元活性化マップを生成することによって、その出力を計算する。
【0038】
すべてのフィルタの特徴マップを積み重ねると、畳み込み層の全出力ボリュームが形成される。したがって、出力データ・テンソルのすべてのエントリは、入力の中の小さい領域に注目し、かつ同じ出力特徴マップのニューロンとフィルタ・パラメータを共有するニューロンの出力と解釈することもできる。
【0039】
畳み込み層の出力データ・テンソルのサイズは、入力データ・テンソルのサイズと、フィルタのサイズと、フィルタが入力データ・テンソルに適用される際のストライドとの関数であることが理解されよう。ストライド・パラメータstride_a、stride_b、およびstride_cは、各フィルタの適用間隔を定義し、1の値は、各フィルタ適用が入力データ・テンソルの関連する次元に沿って1画素シフトされることを示す。可能な出力画素のサブセットのみを計算するので、ストライド値が大きいほど計算負荷が軽減される。
【0040】
さらに、様々な畳み込みにおいて、入力サイズと相対的に出力画像サイズを変化させるために、たとえばそれらのサイズを等しくするために、ゼロパディングが入力画像に適用されてよいことが理解されよう。説明を簡単にするために、様々な例において画像パディングは省略されることがあるが、本開示の範囲から逸脱することなく、パディングが様々な実施形態に含まれ得ることは明らかであろう。
【0041】
畳み込み層では、同じ出力特徴の要素はすべて、各出力位置で複製される同じフィルタの重みを共有するので、6次元の重みテンソルは多くの繰り返しブロックを含む。共有されるフィルタの重みは、密な4次元フィルタ・テンソルFによって、よりコンパクトに記述することができ、この密な4次元フィルタ・テンソルFは、層の出力特徴を計算するすべてのフィルタを含み、かつ出力特徴次元(出力特徴k)および3つのフィルタ入力次元(フィルタ行r、フィルタ列s、フィルタ特徴t)によってインデックスが付けられる。
【0042】
【数3】
【0043】
式3では、境界条件に対応するために、出力データ・テンソルのエッジ近くのi,j,k座標についてr,s,tの合計の範囲を減らすことができるが、ここでは簡単にするために省略されている。アクセサ関数α(i,r;Α)は、出力データ要素Y[i,j,k]を計算するためにフィルタの重みF[k,r,s,t]に乗算すべき入力データ要素の行座標aを計算し、式中、Αは、ストライド・パラメータstride_aおよびパディング・パラメータpad_aなどの、行座標計算をパラメータ化する定数のセットである。類似のアクセサ関数β(j,s;Β)およびγ(r,t;Γ)は、列座標bおよび特徴座標cを計算する。
【0044】
例示的な畳み込みのパラメータを以下の表1に示す。
【0045】
【表1】
【0046】
以下でさらに説明するように、畳み込み層を実装するために必要な計算は、たとえば1つまたは複数のニューロモーフィック・コアで、または従来のマルチコア(フォン・ノイマン型アーキテクチャ)CPUで並列に実行されてよい。この並列処理により、より大きいデータセット上で動作するより大容量のネットワークが可能になる。
【0047】
様々な実施形態において、上述のような畳み込みは、より小さい問題に分解される。各問題は、1つまたは複数のニューロモーフィック・コア上、または従来のマルチコア・システムの1つまたは複数のコア上で並列に解くことができる。
【0048】
いくつかの実施形態において、入力データ・テンソルは、その行および列の次元に沿って、その特徴の次元の全長に及ぶブロックに分解される。このような実施形態において、ニューラル・コアは、入力データ・ブロックおよびフィルタ・テンソル全体Fを受け取る。入力データ・ブロックの境界における画素の畳み込みを正しく計算するためには、入力データ・ブロックは、それらが重複するように生成され得る。代替として、複数のニューラル・コアからの部分和を合計して、最終結果を得ることができる。
【0049】
上記の実施形態の例が図3に示されている。入力データ301は、次元A×Bを有するC個の入力特徴マップ(または画像)を含む。データ301は、ブロック302に分割される。入力データ・ブロック302は、重みテンソル304と共にニューラル・コア303に提供される。
【0050】
いくつかの実施形態において、入力データ・テンソルは、その行、列、および特徴の次元に沿ってブロックに分解され、フィルタ・テンソルは同様に、その入力特徴の次元に沿ってブロックに分解される。このような実施形態において、ニューラル・コアは、入力データ・ブロックおよび対応するフィルタ・ブロックを受け取る。いくつかの実施形態において、同じ入力行および入力列に対応するが異なる入力特徴に対応する入力データ・ブロックは、対応する部分和を計算する異なるニューラル・コアに分散され、それらは後に集められて合計される。いくつかの実施形態において、出力特徴の数は、入力特徴の次元に沿ったブロックの数で乗算される。このような実施形態では、訓練中、調整された数の出力特徴が考慮される。
【0051】
別の例示的な実施形態が図4に示されている。入力データ401は、ブロック402に分割される。データ・ブロック402は、フィルタ・テンソルの対応する部分404と共にニューラル・コア403に提供される。
【0052】
いくつかの実施形態において、重みテンソルは、その出力特徴の次元に沿ってブロックにさらに分解される。フィルタ・テンソルの各出力特徴ブロックは、異なるニューラル・コアに送られ、したがって、入力テンソルの各ブロックは、出力特徴ブロックが存在するのと同じ数のニューラル・コアに送られる。
【0053】
別の例示的な実施形態が図5に示されている。入力データ501は、ブロック502に分割される。データ・ブロック502は、フィルタ・テンソル505の対応する部分504と共にコア503を計算するために提供される。
【0054】
畳み込み層は、スパースな重みテンソルの例である。テンソルは、主としてゼロ値を含む場合はスパースであり、主として非ゼロ値を含む場合は密である。非ゼロ値のみを記憶することによって、スパースなテンソルが圧縮されて、使用するメモリを同じ形状を有する密なテンソルよりもはるかに少なくすることができる。同様に、ゼロ値を省くことによって、スパースなテンソルによる乗算は、使用する演算をはるかに少なくすることができ、その結果、密なテンソルによる乗算よりもエネルギーが少なくなる。
【0055】
畳み込み層は、その局所結合性に起因して、ブロックスパース(block-sparse)な重みテンソルの例でもある。スパースなテンソルは、その非ゼロ値のすべてがブロック内で集中している場合、ブロックスパースである。テンソルが所与の次元に沿ってブロックスパースである場合、テンソルはその次元に沿った局所性を示す。テンソルは、一部の次元に沿ってスパースまたはブロックスパースである場合があり、他の次元に沿って密である場合がある。たとえば、空間畳み込み層の重みテンソルは、入力行および入力列の次元に沿ってブロックスパースであり、入力特徴、出力行、出力列、および出力特徴の次元に沿って密である。
【0056】
全結合層は、典型的には密な重みテンソルの例である。全結合層では、3次元入力データ・テンソルのすべての要素が3次元出力データ・テンソルのすべての要素に結合される。各結合は異なる非ゼロ重みを有してよく、各活性化関数は異なるパラメータを有してよい。したがって、6次元の重みテンソルと4次元のパラメータ・テンソルの両方は、すべての次元に沿って密であり、両方のテンソルのボリューム全体が、全結合層を実装するいずれのシステムのメモリにも記憶されなければならない。
【0057】
単一の画像の場合、Xは次元A×B×Cの入力テンソルを示す。フィルタ・テンソルFは、畳み込みフィルタのセットを示し、次元K×R×S×Tを有する。出力テンソルZは、次元I×J×Kを有する。様々な実施形態において、データ・テンソル内の各要素は、固定サイズ、たとえば4ビットである。様々な実施形態において、フィルタ・テンソル内の各要素は、有限集合、たとえば{-1,0,+1}から選択される。
【0058】
サイズR×S×TのK個のフィルタ・カーネルの場合、各入力画素はK×R×S回使用される。サイズA×B×Cの入力データ・テンソルの場合、各フィルタの重みは(A-R+1)×(B-S+1)回、出力画素の数だけ使用される。
【0059】
入力Xは、長さA×B×Cの列ベクトルとして表すことができる。フィルタFは、A×B×C行およびK×A×B列を有する行列として表すことができる。列の数は、フィルタの数に入力画像内の画素数を乗算したものに相当する。したがって、K×A×B列を有する出力行ベクトルは、Y=X×Fとして得ることができる。
【0060】
上記の定式化がスパース行列の乗算をもたらすことが理解されよう。特に、Fの各列は、最大でR×S×Tの非ゼロエントリを有する。Fの各行は、最大でK×R×Sの非ゼロエントリを有する。
【0061】
Fのスパースな性質により、その記憶および使用において様々な最適化が可能になることが理解されよう。たとえば、Fは、行または列の最初のインデックスが絶対位置であり、後続のインデックスが相対位置であるように記憶されてよい。
【0062】
様々な実施形態において、フィルタ・テンソルFの異なる表現が使用される。
【0063】
そのような例示的な1つの表現において、行列全体を記憶する代わりに、フィルタ入力列内の非ゼロ値ごとにフィルタ入力行および要素値が記憶される。このような実施形態において、出力Z内のエントリjを計算するために、Fの列jが考慮される。列内では、記憶された行インデックスm∈[0…i]ごとにX内のエントリmがルックアップされ、スカラーが式4のように累積される。
【0064】
【数4】
【0065】
いくつかの実施形態において、列あたりの非ゼロ値の最大数は、R×S×Tに限定される。これは、フィルタの最大受容野に相当する。
【0066】
上記のように、F内の列ごとに、すべての非ゼロ値が読み取られる。ニューラル・コアを使用するいくつかの実施形態において、入力データ値は、重み値と並行して読み取られる。Fのスパース性を活用するために、ゼロ値を有する入力は無視される。各入力と対応する重みとの積は、上記の式4に従って部分和に加算される。いくつかの実施形態において、加算は並行して実行される。
【0067】
別の例示的な表現において、行列全体を記憶する代わりに、行内の非ゼロ値ごとに、列インデックスおよび値が記憶される。このような実施形態において、出力Yを計算するために、Fの行iが考慮される。記憶された行インデックスm∈[0…j]ごとに、X内のエントリmがルックアップされ、スカラーが式5のように累積される。
【0068】
【数5】
【0069】
いくつかの実施形態において、行あたりの非ゼロ値の最大数は、K×R×Sに限定される。これは、可能な最大の並列度に相当する。
【0070】
F内の行ごとに、すべてのゼロ値が並行して読み取られる。ニューラル・コアを使用するいくつかの実施形態において、入力データ値は重み値と並行して読み取られる。Fのスパース性を活用するために、ゼロ値を有する入力は無視される。各入力と対応する重みとの積は、上記の式5に従って部分和に加算される。いくつかの実施形態において、加算は並行して実行される。いくつかの実施形態において、部分和はメモリに戻されて記憶される。この記憶ステップにより、エネルギー使用を負担して任意のさらなるニューロンのために回路を再利用することができる。
【0071】
上記の実施形態において、各入力データ値は一度読み取られ、次いで下流処理のために分割される。入力を体系的な方法で通過することによって、データ・メモリを繰り返し読み書きする必要性が最小限に抑えられる。部分和は繰り返しロードされるが、入力データのスパース性は一度確認されるだけでよい。
【0072】
上記の例において、Fのスパース性は、クラスタ内で2つの行がターゲットとして同じニューロンを有さないように行をクラスタ化することによって活用されてよい。いくつかの実施形態において、各行は、可能な限り多くのニューロンをターゲットとする。いずれの場合でも、各行は異なる軸索発火値を有してよい。この表現により、すべてのニューロンの状態をまとめて読み取ることができる。
【0073】
別の例示的な表現において、行列全体を記憶する代わりに、F内の非ゼロ値ごとに、行および列のインデックスならびに対応する値が記憶される。このような実施形態において、出力Yを計算するために、Fの行iおよび列jが考慮される。記憶されたインデックス・エントリごとに、スカラーは式6のように累積される。
【0074】
【数6】
【0075】
次に図6を参照すると、本開示の実施形態による、ニューラル・ネットワークを動作させる方法が示されている。601において、入力データ・テンソルの一部がニューラル・コアで受け取られる。ニューラル・コアはメモリを備える。602において、重みテンソルの少なくとも一部がメモリから読み取られる。重みテンソルは複数のフィルタを含む。603において、重みテンソルの一部が入力データ・テンソルの一部に適用されて、結果が得られる。604において、結果は、ネットワークを介して少なくとも1つの他のニューラル・コアに送られる。
【0076】
次に図7を参照すると、コンピューティング・ノードの例の概略図が示されている。コンピューティング・ノード10は、適切なコンピューティング・ノードの一例にすぎず、本明細書に記載の実施形態の使用または機能の範囲に関するいずれの制限を示唆することも意図されていない。それでもなお、コンピューティング・ノード10は、上述の機能のいずれかを実装すること、または実行すること、あるいはその両方が可能である。
【0077】
コンピューティング・ノード10には、多数の他の汎用または専用のコンピューティング・システム環境または構成で動作可能なコンピュータ・システム/サーバ12がある。コンピュータ・システム/サーバ12と共に使用するのに適したよく知られているコンピューティング・システム、環境、または構成あるいはその組合せの例には、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能な家庭用電化製品、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などが含まれるが、これらに限定されない。
【0078】
コンピュータ・システム/サーバ12は、コンピュータ・システムによって実行される、プログラム・モジュールなどのコンピュータ・システムが実行可能な命令の一般的なコンテキストで説明され得る。一般に、プログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、構成要素、論理、データ構造などを含んでよい。コンピュータ・システム/サーバ12は、通信ネットワークを介してリンクされるリモート処理デバイスによってタスクが実行される分散型クラウド・コンピューティング環境の中で実践されてよい。分散型クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ記憶デバイスを含むローカルとリモート両方のコンピュータ・システム記憶媒体の中に配置されてよい。
【0079】
図7に示すように、コンピューティング・ノード10内のコンピュータ・システム/サーバ12は、汎用コンピューティング・デバイスの形式で示されている。コンピュータ・システム/サーバ12の構成要素には、1つまたは複数のプロセッサまたは処理ユニット16、システム・メモリ28、およびシステム・メモリ28を含む様々なシステム構成要素をプロセッサ16に結合するバス18が含まれ得るが、これらに限定されない。
【0080】
バス18は、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、および様々なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、いくつかのタイプのバス構造のいずれかの1つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャには、インダストリ・スタンダード・アーキテクチャ(ISA)バス、マイクロ・チャネル・アーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス規格協会(VESA)ローカル・バス、ペリフェラル・コンポーネント・インターコネクト(PCI)バス、ペリフェラル・コンポーネント・インターコネクト・エクスプレス(PCIe)、およびアドバンスト・マイクロコントローラ・バス・アーキテクチャ(AMBA)が含まれる。
【0081】
コンピュータ・システム/サーバ12は、典型的には、様々なコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム/サーバ12によってアクセス可能な任意の利用可能な媒体とすることができ、揮発性媒体と不揮発性媒体の両方、取り外し可能な媒体と取り外し不可の媒体の両方を含む。
【0082】
システム・メモリ28は、ランダム・アクセス・メモリ(RAM)30またはキャッシュ・メモリ32あるいはその両方などの、揮発性メモリの形式のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム/サーバ12は、他の取り外し可能/取り外し不可、揮発性/不揮発性のコンピュータ・システム記憶媒体をさらに含んでよい。単に例として、ストレージ・システム34は、取り外し不可、不揮発性の磁気媒体(図示せず、通常「ハード・ドライブ」と呼ばれる)に対する読取りと書込みを行うために提供され得る。図示しないが、取り外し可能、不揮発性の磁気ディスク(たとえば、「フロッピー・ディスク」)に対する読取りと書込みを行うための磁気ディスク・ドライブ、およびCD-ROM、DVD-ROM、または他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読取りと書込みを行うための光ディスク・ドライブが提供され得る。そのような例において、それぞれは、1つまたは複数のデータ媒体インターフェースによってバス18に接続され得る。以下でさらに詳細に示され、説明されるように、メモリ28は、本開示の実施形態の機能を実行するように構成されたプログラム・モジュールのセット(たとえば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含んでよい。
【0083】
プログラム・モジュール42のセット(少なくとも1つ)を有するプログラム/ユーティリティ40は、限定ではなく例として、オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、メモリ28に記憶されてよい。オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ、またはこれらの何らかの組合せはそれぞれ、ネットワーキング環境の実装を含んでよい。プログラム・モジュール42は一般に、本明細書に記載の実施形態の機能または方法あるいはその両方を実行する。
【0084】
コンピュータ・システム/サーバ12は、キーボード、ポインティング・デバイス、ディスプレイ24などの1つまたは複数の外部デバイス14、ユーザがコンピュータ・システム/サーバ12と対話することを可能にする1つまたは複数のデバイス、またはコンピュータ・システム/サーバ12が1つまたは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス(たとえば、ネットワーク・カード、モデムなど)、あるいはその組合せと通信してもよい。このような通信は、入力/出力(I/O)インターフェース22を介して行うことができる。さらに、コンピュータ・システム/サーバ12は、ローカル・エリア・ネットワーク(LAN)、一般的なワイド・エリア・ネットワーク(WAN)、またはパブリック・ネットワーク(たとえば、インターネット)、あるいはその組合せなどの1つまたは複数のネットワークと、ネットワーク・アダプタ20を介して通信することができる。図示されるように、ネットワーク・アダプタ20は、バス18を介してコンピュータ・システム/サーバ12の他の構成要素と通信する。図示されていないが、他のハードウェア構成要素またはソフトウェア構成要素あるいはその両方がコンピュータ・システム/サーバ12と共に使用され得ることを理解されたい。例には、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが含まれるが、これらに限定されない。
【0085】
様々な実施形態において、1つまたは複数のニューラル・コア(図示せず)は、バス18に結合される。このような実施形態において、ニューラル・コアは、バス18を介してメモリ28からデータを受け取るか、またはメモリ28にデータを書き込んでよい。同様に、ニューラル・コアは、本明細書に記載されているようにバス18を介して他の構成要素と相互作用してよい。様々な実施形態において、ニューラル・コアは、たとえば、本明細書の他の場所に記載されているように1つまたは複数のローカル・コントローラ、メモリ、またはクロックを含んでよい。
【0086】
本開示は、システム、方法、またはコンピュータ・プログラム製品あるいはその組合せを含んでよい。コンピュータ・プログラム製品は、プロセッサに本開示の態様を実施させるためのコンピュータ可読プログラム命令が記憶されたコンピュータ可読記憶媒体(または複数の媒体)を含んでよい。
【0087】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および記憶することができる有形デバイスとすることができる。コンピュータ可読記憶媒体は、たとえば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または上記の任意の適切な組合せとすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには以下のもの、すなわち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、パンチカードまたは溝内に命令が記録された隆起構造などの機械的に符号化されたデバイス、および上記の任意の適切な組合せが含まれる。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波路もしくは他の伝送媒体を介して伝播する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを介して送信される電気信号などの、一過性の信号自体であると解釈されるべきではない。
【0088】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、または、ネットワーク、たとえばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはワイヤレス・ネットワークあるいはその組合せを介して外部コンピュータまたは外部記憶デバイスにダウンロードされてよい。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはその組合せを含んでよい。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体への記憶のために転送する。
【0089】
本開示の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Smalltalk(登録商標)、C++などのオブジェクト指向プログラミング言語および「C」プログラミング言語もしくは同様のプログラム言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、スタンドアロン・ソフトウェア・パッケージとして全体がユーザのコンピュータ上で、一部がユーザのコンピュータ上で、一部がユーザのコンピュータ上かつ一部がリモート・コンピュータ上で、または全体がリモート・コンピュータ上もしくはサーバ上で実行されてよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む、任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または接続は外部コンピュータ(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)に対して行われてもよい。いくつかの実施形態において、本開示の態様を実行するために、たとえばプログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路が、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることによって、コンピュータ可読プログラム命令を実行することができる。
【0090】
本開示の態様は、本開示の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照しながら本明細書で説明されている。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組合せは、コンピュータ可読プログラム命令によって実施され得ることが理解されよう。
【0091】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/動作を実施する手段を作り出すように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/動作の態様を実施する命令を含む製造品を含むように、コンピュータ可読媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイスあるいはその組合せに対して特定の方式で機能するように指示できるものであってもよい。
【0092】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル装置、または他のデバイスで実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/動作を実施するように、コンピュータ実施プロセスを作り出すべくコンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードされて、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0093】
図中のフローチャートおよびブロック図は、本開示の様々な実施形態によるシステム、方法およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。これに関して、フローチャートまたはブロック図の各ブロックは、指定される論理機能を実装するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または一部を表すことがある。いくつかの代替の実装形態において、ブロックに記載された機能は、図に記載された順序とは異なる順序で行われてもよい。たとえば、連続して示された2つのブロックは、実際には、関与する機能に応じて、実質的に同時に実行されてよく、またはそれらのブロックは場合によっては逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方のブロックの組合せは、指定される機能または動作を実行するか、あるいは専用ハードウェアとコンピュータ命令との組合せを遂行する専用ハードウェア・ベースのシステムによって実装され得ることにも留意されたい。
【0094】
本開示の様々な実施形態の説明を例示の目的で提示してきたが、網羅的であること、または開示された実施形態に限定されることは意図されていない。説明した実施形態の範囲から逸脱することなく、多くの修正および変形が当業者には明らかであろう。本明細書で使用される用語は、実施形態の原理、実際の応用例、または市場で見られる技術を超える技術的改良を最もよく説明するために、あるいは、本明細書で開示される実施形態を当業者が理解できるようにするために選択されたものである。
図1
図2
図3
図4
図5
図6
図7