(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-09
(45)【発行日】2024-02-20
(54)【発明の名称】ニューラルネットワークの、アーキテクチャに最適化された訓練
(51)【国際特許分類】
G06N 3/063 20230101AFI20240213BHJP
G06N 3/04 20230101ALI20240213BHJP
【FI】
G06N3/063
G06N3/04
(21)【出願番号】P 2020508500
(86)(22)【出願日】2018-08-10
(86)【国際出願番号】 US2018046316
(87)【国際公開番号】W WO2019036307
(87)【国際公開日】2019-02-21
【審査請求日】2021-07-13
(32)【優先日】2017-08-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】デノルフ,クリストフ
(72)【発明者】
【氏名】フィッセルス,コルネリス・アー
【審査官】金田 孝之
(56)【参考文献】
【文献】米国特許出願公開第2016/0086078(US,A1)
【文献】国際公開第2016/118257(WO,A1)
【文献】米国特許出願公開第2017/0091657(US,A1)
【文献】国際公開第2015/053864(WO,A1)
【文献】Jiecao Yu et al.,Scalpel: Customizing DNN pruning to the underlying hardware parallelism,2017 ACM/IEEE 44th Annual International Symposium on Computer Architecture (ISCA),IEEE,2017年06月24日,https://ieeexplore.ieee.org/document/8192500
【文献】Wonyong Sung et al.,Resiliency of Deep Neural Networks under Quantization,Arxiv.org,2016年01月07日,https://arxiv.org/abs/1511.06488
【文献】Gopalakrishna Hegde et al.,CaffePresso: An optimized library for Deep Learning on embedded accelerator-based platforms,2016 International Conference on Compliers, Architectures, and Synthesis of Embedded Systems (CASES),IEEE,2016年10月07日,URL: https://ieeexplore.ieee.org/document/7745277
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00- 3/126
G06N 20/00-99/00
(57)【特許請求の範囲】
【請求項1】
複数の層を有するニューラルネットワークを訓練するコンピュータによって実現される方法であって、
前記ニューラルネットワークを実現する推論プラットフォームの回路についての複数のアーキテクチャ制約を取得するステップを備え、前記複数のアーキテクチャ制約は、前記推論プラットフォームの前記回路の構造に基づく
、前記複数の層についてのネットワークパラメータを制約するための第1のアーキテクチャ制
約を含み、前記方法はさらに、
前記複数のアーキテクチャ制約を使用して前記ニューラルネットワークを訓練プラットフォーム上で訓練して、前記複数の層についてのネットワークパラメータおよび特徴マップを生成するステップと、
前記ニューラルネットワークの訓練中に、前記複数のアーキテクチャ制約に基づいて、前記ネットワークパラメータ、前記特徴マップ、または前記ネットワークパラメータと前記特徴マップとの両方を制約するステップとを備え
、
前記複数のアーキテクチャ制約の1つ以上は、前記ネットワークパラメータ間の数学的関係を含み、前記数学的関係は、前記推論プラットフォームの回路に対応する、方法。
【請求項2】
前記第1のアーキテクチャ制約は、複数の制約を含み、前記制約するステップは、前記複数の制約のうちの少なくとも1つを使用して実行される、請求項1に記載の方法。
【請求項3】
前記制約するステップは、前記ニューラルネットワークについて所望の正確性を達成する最大数の前記複数の制約を使用して実行される、請求項2に記載の方法。
【請求項4】
制約されたネットワークパラメータ、制約された特徴マップ、または制約されたネットワークパラメータと制約された特徴マップとの両方を使用して前記ニューラルネットワークを前記訓練プラットフォーム上で再訓練して、新たなネットワークパラメータを生成するステップをさらに備える、請求項1に記載の方法。
【請求項5】
コンピューティングシステムであって、
少なくとも1つのプロセッサと、メモリと、訓練プラットフォームとを含むハードウェアプラットフォームと、
前記ハードウェアプラットフォーム上で実行されるソフトウェアプラットフォームとを備え、前記ソフトウェアプラットフォームは、前記少なくとも1つのプロセッサによって複数の機能を実行するように実行可能な、前記メモリに格納されたプログラムコードを含み、前記複数の機能は、
複数の層を有するニューラルネットワークを実現する推論プラットフォームの回路についての複数のアーキテクチャ制約を取得する機能を含み、前記複数のアーキテクチャ制約は、前記推論プラットフォームの前記回路の構造に基づく
、前記複数の層についてのネットワークパラメータを制約するための第1のアーキテクチャ制
約を含み、前記複数の機能はさらに、
前記複数のアーキテクチャ制約を使用して前記ニューラルネットワークを前記ハードウェアプラットフォームの前記訓練プラットフォームで訓練して、前記ニューラルネットワークの前記複数の層についてのネットワークパラメータおよび特徴マップを生成する機能と、
前記ニューラルネットワークの訓練中に、前記複数のアーキテクチャ制約に基づいて、前記ネットワークパラメータ、前記特徴マップ、または前記ネットワークパラメータと前記特徴マップとの両方を制約する機能とを含
み、
前記複数のアーキテクチャ制約の1つ以上は、前記ネットワークパラメータ間の数学的関係を含み、前記数学的関係は、前記推論プラットフォームの回路に対応する、コンピューティングシステム。
【請求項6】
前記第1のアーキテクチャ制約は、複数の制約を含み、前記プログラムコードは、前記複数の制約のうちの少なくとも1つを使用して前記制約する機能を実行するように実行可能である、請求項5に記載のコンピューティングシステム。
【請求項7】
前記プログラムコードは、制約されたネットワークパラメータ、制約された特徴マップ、または制約されたネットワークパラメータと制約された特徴マップとの両方を使用して前記ニューラルネットワークを前記訓練プラットフォーム上で再訓練して、新たなネットワークパラメータを生成する機能を実行するように実行可能である、請求項5に記載のコンピューティングシステム。
【請求項8】
前記第1のアーキテクチャ制約は、前記推論プラットフォームの前記回路の計算機能に基づく1つ以上の制約を含む、請求項1に記載の方法。
【請求項9】
前記計算機能は、前記推論プラットフォームの積和演算回路の構造と、データ幅制約とを含む、請求項8に記載の方法。
【請求項10】
前記第1のアーキテクチャ制約は、前記推論プラットフォームの前記回路の計算機能に基づく1つ以上の制約を含む、請求項5に記載のコンピューティングシステム。
【請求項11】
前記計算機能は、前記推論プラットフォームの積和演算回路の構造と、データ幅制約とを含む、請求項10に記載のコンピューティングシステム。
【請求項12】
前記第1のアーキテクチャ制約は、第1の重みおよび第2の重みを含み、前記第1の重みの大きさは、前記第2の重みの大きさと等しい、請求項1に記載の方法。
【請求項13】
前記回路は、フィールドプログラマブルゲートアレイのデジタル信号処理ブロックにおける前置加算器を含む、請求項1に記載の方法。
【請求項14】
前記回路は、フィールドプログラマブルゲートアレイのデジタル信号処理ブロックにおける前置加算器を含む、請求項5に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示の例は、一般にニューラルネットワークに関し、特にニューラルネットワークの、アーキテクチャに最適化された訓練に関する。
【背景技術】
【0002】
背景
機械学習は、コンピューティングシステムを明確にプログラムすることなく動作させるように仕向ける技術である。伝統的な機械学習は、K平均法、線形回帰およびロジスティック回帰、確率的勾配降下法、関連付けルール学習などを含むさまざまなクラスタ化および分類手法を含む。ディープラーニングは、機械学習における新たな領域である。ディープラーニングは、非線形処理ユニットの複数の層を特徴抽出および変換に使用する一種の機械学習アルゴリズムである。ディープラーニングアルゴリズムは、教師なし(たとえば、パターン分析)である場合もあれば、教師あり(たとえば、分類)である場合もある。ディープラーニングアルゴリズムは、人工ニューラルネットワーク(ANN)(ここでは「ニューラルネットワーク」と称される)の層を使用して実現することができる。
【0003】
一般に、ニューラルネットワークは、グラフ状に接続されたノード(すなわち、「ニューロン」)の集合である。ニューラルネットワークにおけるノードは、重み付けされた入力の和を計算して、この和に任意のバイアスを加算する。ノードの出力は、最終合計の関数(「活性化関数」と称される)である。活性化関数の例としては、シグモイド関数、双曲線正接(tanh)関数、正規化線形ユニット(ReLU)関数および恒等関数が挙げられる。ニューラルネットワークモデルは、しばしば、特定のトポロジを規定するノードの層、ならびに対応する重みおよびバイアスで構成されている。これらの重みおよびバイアスは、ネットワークパラメータと称される。
【0004】
一般に、ニューラルネットワークは、入力層および出力層を含み、入力層と出力層との間に1つ以上の隠れ層を任意に含み得る。ディープラーニングアプリケーションにおいて使用されるニューラルネットワークは、典型的には多くの隠れ層を含んでおり、このことがディープニューラルネットワーク(DNN)という用語を生じさせる。ニューラルネットワークの層は、密に接続される(たとえば、層内の各ノードが前の層内の全てのノードに完全に接続される)場合もあれば、疎らに接続される(たとえば、層内の各ノードが前の層内のノードの一部のみに接続される)場合もある。畳み込みニューラルネットワーク(CNN)は、畳み込み層と称される1つ以上の疎らに接続された層を含むタイプのDNNである。CNNは、画像または映像データの処理に適している。他のタイプのDNNは、音声およびテキストデータの処理に適した回帰型ニューラルネットワーク(RNN)を含む。
【発明の概要】
【発明が解決しようとする課題】
【0005】
いずれのトポロジまたはタイプのニューラルネットワークも、ネットワークを特定のタスクに適合させるために全ての層にわたってネットワークパラメータの正確な値を必要とする。特定のタスクについて所望の正確性をもたらすネットワークパラメータセットを決定するために教師あり訓練手順を使用することができる。訓練は、ネットワークの順方向の経路を介して訓練データセットを実行し(順伝播)、ネットワークの逆方向の経路を介して重みを更新して(逆伝播)、予測誤差を補償することを含む。次いで、訓練されたニューラルネットワークは、入力データセット上で特定のタスクを実行する(推論と称される)ようにデプロイされる。ニューラルネットワークの訓練に使用されるコンピューティングプラットフォーム(訓練プラットフォーム)は、推論に使用されるコンピューティングプラットフォーム(推論プラットフォーム)よりも高性能であることが多い。しかし、推論プラットフォームは、訓練プラットフォームよりも電力効率がよいことが多い。特にそれほど高性能でない推論プラットフォームを使用する場合には、ニューラルネットワークの推論の計算強度を低下させることが望ましい。
【課題を解決するための手段】
【0006】
概要
ニューラルネットワークの、アーキテクチャに最適化された訓練のための技術について説明する。一例において、複数の層を有するニューラルネットワークを最適化する方法は、上記ニューラルネットワークを実現する推論プラットフォームの回路についてのアーキテクチャ制約を取得するステップと、上記ニューラルネットワークを訓練プラットフォーム上で訓練して、上記複数の層についてのネットワークパラメータおよび特徴マップを生成するステップと、上記アーキテクチャ制約に基づいて、上記ネットワークパラメータ、上記特徴マップ、またはそれら両方を制約するステップとを含む。
【0007】
いくつかの実施形態において、上記アーキテクチャ制約は、複数の制約を含んでもよく、上記制約するステップは、上記複数の制約のうちの少なくとも1つを使用して実行されてもよい。
【0008】
いくつかの実施形態において、上記制約するステップは、上記ニューラルネットワークについて所望の正確性を達成する最大数の上記複数の制約を使用して実行されてもよい。
【0009】
いくつかの実施形態において、上記制約するステップは、上記ニューラルネットワークを訓練するステップ中に実行されてもよい。
【0010】
いくつかの実施形態において、上記制約するステップは、上記ニューラルネットワークを訓練するステップに続いて実行されてもよい。
【0011】
いくつかの実施形態において、上記方法は、制約されたネットワークパラメータ、制約された特徴マップ、または制約されたネットワークパラメータと制約された特徴マップとの両方を使用して上記ニューラルネットワークを上記訓練プラットフォーム上で再訓練して、新たなネットワークパラメータを生成するステップをさらに含んでもよい。
【0012】
いくつかの実施形態において、上記アーキテクチャ制約は、上記推論プラットフォームの上記回路の計算機能に基づく1つ以上の制約を含んでもよい。
【0013】
いくつかの実施形態において、上記計算機能は、上記推論プラットフォームの積和演算回路の構造と、データ幅制約とを含んでもよい。
【0014】
別の例において、コンピューティングシステムは、ニューラルネットワークのための訓練プラットフォームを含み、上記訓練プラットフォームは、ハードウェア部分とソフトウェア部分とを含み、上記ハードウェア部分は、少なくとも1つのプロセッサと、メモリとを含み、上記ソフトウェア部分は、上記少なくとも1つのプロセッサによって複数の機能を実行するように実行可能な、上記メモリに格納されたプログラムコードを含み、上記複数の機能は、上記ニューラルネットワークを実現する推論プラットフォームの回路についてのアーキテクチャ制約を取得する機能と、上記ニューラルネットワークを上記訓練プラットフォーム上で訓練して、上記複数の層についてのネットワークパラメータおよび特徴マップを生成する機能と、上記アーキテクチャ制約に基づいて、上記ネットワークパラメータ、上記特徴マップ、またはそれら両方を制約する機能とを含む。
【0015】
いくつかの実施形態において、上記アーキテクチャ制約は、複数の制約を含んでもよく、上記プログラムコードは、上記複数の制約のうちの少なくとも1つを使用して上記制約する機能を実行するように実行可能であってもよい。
【0016】
いくつかの実施形態において、上記プログラムコードは、上記ニューラルネットワークについて所望の正確性を達成する最大数の上記複数の制約を使用して上記制約する機能を実行するように実行可能であってもよい。
【0017】
いくつかの実施形態において、上記プログラムコードは、上記ニューラルネットワークを訓練する機能中に上記制約する機能を実行するように実行可能であってもよい。
【0018】
いくつかの実施形態において、上記プログラムコードは、上記ニューラルネットワークを訓練する機能に続いて上記制約する機能を実行するように実行可能であってもよい。
【0019】
いくつかの実施形態において、上記プログラムコードは、制約されたネットワークパラメータ、制約された特徴マップ、または制約されたネットワークパラメータと制約された特徴マップとの両方を使用して上記ニューラルネットワークを上記訓練プラットフォーム上で再訓練して、新たなネットワークパラメータを生成する機能を実行するように実行可能であってもよい。
【0020】
いくつかの実施形態において、上記アーキテクチャ制約は、上記推論プラットフォームの上記回路の計算機能に基づく1つ以上の制約を含んでもよい。
【0021】
いくつかの実施形態において、上記計算機能は、上記推論プラットフォームの積和演算回路の構造と、データ幅制約とを含んでもよい。
【0022】
別の例において、プロセッサによって実行されたときに上記プロセッサに、複数の層を有するニューラルネットワークを最適化する方法を実行させる命令が格納された非一時的なコンピュータ読取可能媒体であって、上記方法は、上記ニューラルネットワークを実現する推論プラットフォームの回路についてのアーキテクチャ制約を取得するステップと、上記ニューラルネットワークを訓練プラットフォーム上で訓練して、上記複数の層についてのネットワークパラメータおよび特徴マップを生成するステップと、上記アーキテクチャ制約に基づいて、上記ネットワークパラメータ、上記特徴マップ、またはそれら両方を制約するステップとを備える。
【0023】
いくつかの実施形態において、上記アーキテクチャ制約は、複数の制約を含んでもよく、上記制約するステップは、上記複数の制約のうちの少なくとも1つを使用して実行されてもよい。
【0024】
いくつかの実施形態において、上記アーキテクチャ制約は、上記推論プラットフォームの上記回路の計算機能に基づく1つ以上の制約を含んでもよい。
【0025】
いくつかの実施形態において、上記計算機能は、上記推論プラットフォームの積和演算回路の構造と、データ幅制約とを含んでもよい。
【0026】
図面の簡単な説明
これらのおよび他の局面は、以下の詳細な説明を参照して理解することができる。
【0027】
上記の特徴を詳細に理解できるように、上で簡単に要約した説明のさらに詳細な説明を、例示的な実現例を参照することによって行ってもよく、例示的な実現例のうちのいくつかは、添付の図面に示されている。しかし、添付の図面は、典型的な例示的な実現例を示しているに過ぎないため、その範囲を限定するものと考えられるべきではない、ということに留意されたい。
【図面の簡単な説明】
【0028】
【
図1】一例に係るニューラルネットワークを訓練して実現するためのシステムを示すブロック図である。
【
図2】一例に係るコンピューティングシステムを示すブロック図である。
【
図3】複数の層を有するニューラルネットワークを最適化する方法を示すフロー図である。
【
図4】計算エンジンの一例を示すブロック図である。
【
図5】一例に係るプログラマブル集積回路(IC)を示すブロック図である。
【
図6】
図5のプログラマブルICのシステム・オン・チップ(SoC)実現例を示すブロック図である。
【
図7】
図5のプログラマブルICのフィールドプログラマブルゲートアレイ(FPGA)実現例を示す。
【発明を実施するための形態】
【0029】
理解を容易にするために、可能であれば、同一の参照番号を使用して、図面に共通する同一の要素を示した。一例の要素を他の例に有益に組み込むことができると考えられる。
【0030】
詳細な説明
図面を参照して、さまざまな特徴について以下で説明する。図面は、一定の縮尺で描かれている場合もあればそうでない場合もあり、同様の構造または機能の要素は、図面全体を通して同様の参照番号によって表わされる、ということに留意されたい。図面は、特徴の説明を容易にすることを意図しているに過ぎない、ということに留意されたい。図面は、クレームされている発明の網羅的な説明として意図されるものではなく、クレームされている発明の範囲に対する限定として意図されるものでもない。また、図示例は、示されている全ての局面または利点を有していなくてもよい。特定の例に関連して記載される局面または利点は、必ずしも当該例に限定されるものではなく、たとえそのように図示されていなくても、またはたとえそのように明白に記載されていなくても、その他の例で実施することができる。
【0031】
ニューラルネットワークの、アーキテクチャに最適化された訓練のための技術について説明する。一例において、複数の層を有するニューラルネットワークは、ニューラルネットワークを実現する推論プラットフォームの回路についてのアーキテクチャ制約を取得することによって最適化される。推論プラットフォームは、フィールドプログラマブルゲートアレイ(FPGA)などのプログラマブル集積回路(IC)であってもよい。FPGAなどのプログラマブルICにおける回路は、プログラマブルロジック(たとえば、コンフィギュラブルロジックブロック)と、デジタル信号プロセッサ(DSP)ブロックなどの専用のブロックとを含む。アーキテクチャ制約は、推論プラットフォーム回路のいくらかの特徴、要素、制限などを指定する。ニューラルネットワークは、訓練プラットフォーム上で訓練されて、複数の層についてのネットワークパラメータ(たとえば、重みおよびバイアス)および特徴マップ(たとえば、活性化)を生成する。ネットワークパラメータ、特徴マップ、またはそれら両方は、アーキテクチャ制約に基づいて制約される。本明細書に記載されている技術は、訓練フェーズ中にニューラルネットワークにおいてネットワークパラメータおよび/または特徴マップに対する制約を実施することによって、推論プラットフォームの特定のアーキテクチャ側面を利用して、推論段階中の推論プラットフォームの最適な(たとえば、最も効率的な)使用を保証する。たとえば、訓練中にニューラルネットワークの重みを適切に制約することにより、FPGAのDSPブロックにおける前置加算器の使用が可能になり、それによって、推論プラットフォームとして使用された場合のFPGAの計算容量が十分に利用される。推論プラットフォームのアーキテクチャ制約に基づいてネットワークパラメータおよび/または特徴マップを最適化するこれらのおよびさらなる局面について、図面に関連付けて以下で説明する。
【0032】
図1は、一例に係るニューラルネットワークを訓練して実現するためのシステム100を示すブロック図である。システム100は、訓練プラットフォーム102と、推論プラットフォーム104とを含む。訓練プラットフォーム102は、特定のタスク(たとえば、画像分類、物体検出など)についてニューラルネットワーク106を訓練するように構成されたハードウェアおよびソフトウェアを備える。推論プラットフォーム104は、当該特定のタスクを実行するようにニューラルネットワーク106を実現するように構成されたハードウェアおよび/またはソフトウェアを含む。訓練プラットフォーム102および推論プラットフォーム104の例については、以下で説明する。
【0033】
動作時、ユーザは、特定のトポロジ108を有するニューラルネットワーク106を指定する。トポロジ108は、一般に、ニューロンの配列を含む。たとえば、トポロジ108は、複数のニューロンの層を含んでもよい。これらの層は、一般に、入力層と、出力層と、ゼロ個以上の隠れ層とを含む。各ニューロンは、複数の入力と、出力とを含む。各ニューロンの複数の入力は、複数の重みに関連付けられる。各ニューロンは、その出力に関連付けられたバイアスをさらに含む。ニューラルネットワーク106の重みおよびバイアスは、ネットワークパラメータと称される。所与の層について、そのニューロンの入力は、入力特徴マップと称され、そのニューロンの出力は、出力特徴マップと称される。入力特徴マップおよび出力特徴マップは、一般に「特徴マップ」と称される。
【0034】
訓練プラットフォーム102は、訓練データセット110および初期ネットワークパラメータ113を受ける。訓練データセット110は、ニューラルネットワーク106を訓練して、訓練されたネットワークパラメータ114を生成するためのデータを含む。たとえば、ニューラルネットワーク106が画像を分類するように構成される場合、訓練データセット110は、予め分類された画像のセットであってもよい。初期ネットワークパラメータ113は、ニューラルネットワーク106のネットワークパラメータのための初期値を含む。一例では、訓練プラットフォーム102は、推論アーキテクチャ制約112(「アーキテクチャ制約」と総称され、1つ以上の制約を含む)を受けるための入力も含む。推論アーキテクチャ制約112は、推論プラットフォーム104のハードウェア(たとえば、回路)に関連付けられた1つ以上の制約を含む。推論アーキテクチャ制約の例については、以下でさらに説明する。一般に、推論アーキテクチャ制約112は、推論プラットフォーム104のハードウェアのいくらかの特徴、要素、制限などを指定する。推論アーキテクチャ制約112は、訓練プロセス中にネットワークパラメータおよび/または特徴マップを制約するのに使用される。一例では、推論アーキテクチャ制約112は、訓練プロセス中にネットワークパラメータおよび/または特徴マップを制約するのに使用されてもよい。別の例では、推論アーキテクチャ制約は、訓練プロセス後にネットワークパラメータおよび/または特徴マップを制約するのに使用されてもよい。いずれの例でも、訓練されたネットワークパラメータ114は、推論アーキテクチャ制約112によって制約される。同様に、トポロジ108は、制約された特徴マップ(たとえば、トポロジ108における1つ以上の層への制約された活性化入力)で実現され得る。
【0035】
推論プラットフォーム104は、訓練されたネットワークパラメータ114および入力データセット116を受ける。入力データセット116は、ニューラルネットワーク106によって処理されるデータを含む。たとえば、ニューラルネットワークが画像を分類するように構成される場合、入力データセット116は、分類対象の画像を含んでもよい。推論プラットフォーム104は、結果データセット118を生成する。たとえば、画像分類スキームでは、結果データセット118は、入力データセット116における画像の分類を含む。訓練されたネットワークパラメータ114が推論プラットフォーム104のアーキテクチャ制約に基づいて制約されているので、ニューラルネットワーク106は、推論アーキテクチャ制約112によって取り込まれた推論プラットフォームの特徴、要素および制限を活用して、当該推論プラットフォームによって効率的に実現可能である。
【0036】
図2は、一例に係るコンピューティングシステム(「コンピュータ200」)を示すブロック図である。コンピュータ200は、ハードウェアプラットフォーム202上で実行されるソフトウェアプラットフォーム204を含む。ハードウェアプラットフォーム202は、中央処理装置(CPU)206と、システムメモリ208と、ストレージデバイス210と、サポート回路211と、訓練プラットフォーム212と、ハードウェアアクセラレータ214とを含む。ソフトウェアプラットフォーム204は、オペレーティングシステム(OS)230と、ドライバ232と、ライブラリ234と、アプリケーション236とを含む。
【0037】
CPU206は、x86ベースのプロセッサ、ARM(登録商標)ベースのプロセッサなどのいかなるタイプの汎用中央処理装置(CPU)であってもよい。CPU206は、1つ以上のコアと、関連付けられた回路(たとえば、キャッシュメモリ、メモリ管理ユニット(MMU)、割り込みコントローラなど)とを含み得る。CPU206は、本明細書に記載されている1つ以上の動作を実行し、システムメモリ208および/またはストレージデバイス210に格納され得るプログラムコードを実行するように構成される。サポート回路211は、CPU206、システムメモリ208、ストレージデバイス210、訓練プラットフォーム212、ハードウェアアクセラレータ214またはその他の周辺装置の間のデータフローをCPU206と協働して管理するさまざまなデバイスを含む。たとえば、サポート回路211は、チップセット(たとえば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど)、電圧レギュレータ、ファームウェア(たとえば、BIOS)などを含んでもよい。いくつかの例では、CPU206は、チップセット(たとえば、ノースブリッジ、サウスブリッジなど)の機能のうちの全てまたはかなりの部分を吸収するシステム・イン・パッケージ(SiP)、システム・オン・チップ(SoC)などであってもよい。
【0038】
システムメモリ208は、実行可能な命令およびデータなどの情報を格納して検索することを可能にするデバイスである。システムメモリ208は、たとえば、ダブルデータレート(DDR)ダイナミックRAM(DRAM)などの1つ以上のランダムアクセスメモリ(RAM)モジュールを含み得る。システムメモリ208は、ソフトウェアプラットフォーム204を実現するための、CPU206によって処理されて実行されるデータ226およびプログラムコード(「コード228」)を格納することができる。ストレージデバイス210は、ローカルストレージデバイス(たとえば、1つ以上のハードディスク、フラッシュメモリモジュール、ソリッドステートディスクおよび光ディスク)、および/または、コンピュータ200が1つ以上のネットワークデータストレージシステムと通信することを可能にするストレージインターフェイスを含む。ハードウェアプラットフォーム202は、グラフィックスカード、ユニバーサルシリアルバス(USB)インターフェイスなどの、コンピューティングシステムのさまざまな他の従来のデバイスおよび周辺装置を含み得る。
【0039】
訓練プラットフォーム212は、プロセッサ、メモリ、入力/出力(IO)回路などを含み得るハードウェア216を含む。一例では、ハードウェア216は、グラフィックス処理ユニット(GPU)および関連付けられたサポート回路を含む。別の例では、ハードウェア216は、特定用途向け集積回路(ASIC)、プログラマブルICなどを、関連付けられたサポート回路とともに含んでもよい。一例では、訓練プラットフォーム212は、ハードウェアアクセラレータ214よりも高性能であるが、ハードウェアアクセラレータ214よりも多くのエネルギも消費する。訓練プラットフォーム212は、ニューラルネットワークの訓練に使用することができる。
【0040】
ハードウェアアクセラレータ122は、IC220と、メモリ224とを含む。IC220は、計算エンジン222を含む。一例では、IC220は、フィールドプログラマブルゲートアレイ(FPGA)またはFPGAを内部に有するシステム・オン・チップ(SoC)などのプログラマブルICである。計算エンジン222は、IC220にプログラムすることができる。別の例では、IC220はASICなどであり、計算エンジン222がその中の専用回路である。ハードウェアアクセラレータ214は、ニューラルネットワークのための推論プラットフォームで使用することができる。
【0041】
OS230は、Linux(登録商標)、マイクロソフトウィンドウズ(登録商標)、Mac OS(登録商標)などの、当該技術分野において公知のいずれのコモディティオペレーティングシステムであってもよい。ドライバ232およびライブラリ234は、訓練プラットフォーム212およびハードウェアアクセラレータ214に対してその指令および制御のためにアプリケーションプログラミングインターフェイス(API)を提供するソフトウェアを備える。アプリケーション236は、訓練プラットフォーム212上でニューラルネットワークを訓練して、ハードウェアアクセラレータ214上でニューラルネットワークを実現するソフトウェアを含む。アプリケーション236は、ドライバ232およびライブラリ234を介して訓練プラットフォーム212およびハードウェアアクセラレータ214と通信する。
【0042】
図3は、複数の層を有するニューラルネットワークを最適化する方法300を示すフロー図である。方法300は、上記のコンピュータ200上で実行されるアプリケーション236によって実行することができる。この方法は、ステップ302から開始し、ステップ302において、アプリケーション236は、ニューラルネットワークを実現する推論プラットフォームの回路についてのアーキテクチャ制約を取得する。たとえば、アプリケーション236は、ハードウェアアクセラレータ214内のIC220における計算エンジン222のアーキテクチャ制約を取得することができる。
【0043】
ステップ304において、アプリケーション236は、1回以上の繰り返しにわたってニューラルネットワークを訓練プラットフォーム上で訓練して、ネットワークパラメータを生成する。たとえば、アプリケーション236は、ハードウェア216を使用してニューラルネットワークを訓練プラットフォーム212上で訓練してもよい。確率的勾配降下法などの学習アルゴリズムと組み合わせられたバックプロパゲーションなどのさまざまな訓練アルゴリズムを使用することができる。このような訓練アルゴリズムでは、アプリケーション236は、訓練データセットを入力する。各訓練データ(たとえば、入力画像)について、アプリケーション236は、訓練データをニューラルネットワークを介して順方向に送って、出力結果を生成する。アプリケーション236は、出力誤差を計算し、この誤差を逆伝播し、使用される学習アルゴリズム(たとえば、勾配降下法)に従ってネットワークパラメータを更新する。一般に、更新後のネットワークパラメータに対する制約はない。しかし、この例では、ステップ306において、アプリケーション236は、推論プラットフォームのアーキテクチャ制約に基づいてネットワークパラメータおよび/または特徴マップを制約する。
【0044】
一例では、アプリケーション236は、訓練アルゴリズム中(たとえば、バックプロパゲーションの各繰り返し後)にネットワークパラメータおよび/または特徴マップを制約する。別の例では、アプリケーション236は、訓練アルゴリズムの完了後に(たとえば、訓練アルゴリズムにおける最後のステップとして)ネットワークパラメータおよび/または特徴マップを制約する。このような例では、アプリケーション236は、制約されたネットワークパラメータおよび/または制約された特徴マップを使用してニューラルネットワークを訓練プラットフォーム上で再訓練して(たとえば、別の繰り返しを実行して)、新たなネットワークパラメータを生成する。アプリケーション236は、複数の繰り返しにわたってこのプロセスを繰り返すことができる。
【0045】
一例では、アプリケーション236は、ニューラルネットワークについて所望の正確性を達成する最大数のアーキテクチャ制約を使用してネットワークパラメータおよび/または特徴マップを制約する。たとえば、アプリケーション236は、1つ以上のアーキテクチャ制約を使用して第1の訓練パスを実行して、ネットワークパラメータおよび/または特徴マップを制約してもよい。アプリケーション236は、訓練されたネットワークの結果として生じる正確性を求めることができる。ユーザが正確性の増加を望む場合には、アプリケーション236は、前のアーキテクチャ制約および1つ以上の追加のアーキテクチャ制約を使用して第2の訓練パスを実行することができる。このプロセスは、所望の正確性が達成されるまで繰り返され得る。
【0046】
アーキテクチャ制約は、推論プラットフォーム上へのニューラルネットワークの最適なマッピングを保証するために利用可能な推論プラットフォームのアーキテクチャ特性を表す。このようなアーキテクチャ特性は、特定の計算能力、データの好ましいビット幅および/またはネットワークパラメータなどを含む。アーキテクチャ制約の例については、以下で説明する。
【0047】
図4は、計算エンジン222の一例を示すブロック図である。計算エンジン222は、入力回路402と、乗算器入力回路404と、前置加算器406と、乗算器408と、累算器410と、出力回路412とを含む。入力回路402は、4つの入力A、B、CおよびDを含む。入力回路402は、入力A...Dをバッファリングするためのレジスタと、これらの入力を乗算器入力回路404および前置加算器406の間で方向付けるためのマルチプレクサとを含む。乗算器入力回路404は、入力回路402の出力および前置加算器406の出力をバッファリングするためのレジスタを含む。累算器410は、乗算器408の出力を累算する。出力回路412は、累算器410の出力をバッファリングする。この例では、入力回路402および乗算器入力回路404は、計算エンジン222が(A+D)×Bを実行できるように構成されるものとする。
【0048】
一例では、
図4に示される計算エンジン222の計算能力を利用するためのアーキテクチャ制約は、上記の訓練プロセスにおいて使用することができる。すなわち、訓練中に使用されるアーキテクチャ制約は、推論プラットフォーム回路の計算機能に基づく1つ以上の制約を含み得る。一例では、計算機能は、推論プラットフォームの積和演算回路の構造(たとえば、演算論理装置(ALU)の能力)と、レジスタビット幅、バス/ダイレクトメモリアクセス(DMA)ビット幅、メモリビット幅などに起因するデータ幅制約とを含む。とりわけ、さまざまなタイプのニューラルネットワークの層における多くの演算は、特徴マップ値の加重和を伴う。
【0049】
【0050】
ここで、f
i,kは、特徴マップ値であり、w
kは、重み値である。
図4に示されるように、計算エンジン222は、(たとえば、入力Bとの)乗算を適用する前に2つの値(たとえば、入力AおよびD)を加算することができる前置加算器406を含み得る。前置加算器406は、2つの特徴マップ値に適用される重みが同じであるか、または互いに逆である場合にのみ利用することができる。すなわち、f
i,kおよびf
i,lでは、w
k=w
lまたはw
k=-w
lである。
【0051】
図4の計算エンジン222の例では、制約された重み(CW)が入力Bに提供される。特徴マップ値f
i,kが入力Aに提供される。特徴マップ値f
i,lが入力Dに提供される。前置加算器406が加算または減算のいずれかを実行できるので、w
lとw
kとの間の数学的関係は、恒等または負である。このw
kとw
lとの間の数学的関係は、訓練中に実施可能なアーキテクチャ制約になる。結果として生じる重みセットは、いくつかがペアで事前に加算されて、必要な計算エンジン222の数を減少させることができるという特性を有する。たとえば、w
k×f
i,k+w
l×f
i,lは、2回の乗算演算を必要とするが、w
k=w
lの場合、演算はw
k×(f
i,k+f
i,l)(すなわち、1回だけの事前加算演算および1回だけの乗算演算)になる。
【0052】
図4の例では、入力A...Dは、単一のデジタル値として記載されている。別の例では、同様の計算エンジンがベクトルプロセッサとして機能し、入力は値のベクトルであり、計算要素はこれらのベクトルを処理する。このようなベクトル計算要素は、
図4に示される計算エンジン222と構造的に同様であり得る。
【0053】
別の例では、計算精度を利用するためのアーキテクチャ制約が使用されてもよい。累算器410の出力ビット幅は48ビットであるものとする。さらに、ニューラルネットワークは3×3×384の畳み込みカーネルを含むものとする。その結果、36ビットを乗算結果のために残して、12ビットを累算に取っておく必要がある。乗算結果(すなわち、乗算器408の出力)は32ビットに制約されるとする。その場合、重みおよび特徴マップ値に対して16ビットの制約を課すことにより、単一の計算エンジン222上で完全な3×3×384の畳み込みカーネルを実行できることが確実になる。なお、特徴マップ値および重みに対する制約は、互いに対して相対的である。したがって、重みに対して14ビットの制約を課し、特徴マップ値に対して18ビットの制約を課す(または、その逆)ことにより、同じ結果が達成される。他の例では、重みに対して特徴マップ値を制約するために他のビット幅値を使用することができる。
【0054】
図5は、一例に係るプログラマブルIC1を示すブロック図である。プログラマブルIC1は、
図2におけるIC220として使用することができる。プログラマブルIC1は、プログラマブルロジック3と、コンフィギュレーションロジック25と、コンフィギュレーションメモリ26とを含む。プログラマブルIC1は、不揮発性メモリ27、DRAM28および他の回路29などの外部回路に結合され得る。プログラマブルロジック3は、ロジックセル30と、サポート回路31と、プログラマブルインターコネクト32とを含む。ロジックセル30は、複数の入力の一般的なロジック機能を実現するように構成され得る回路を含む。サポート回路31は、トランシーバ、入力/出力ブロック、デジタル信号プロセッサ、メモリなどの専用回路を含む。ロジックセルとサポート回路31とは、プログラマブルインターコネクト32を使用して相互接続することができる。ロジックセル30をプログラムし、サポート回路31のパラメータを設定し、プログラマブルインターコネクト32をプログラムするための情報は、コンフィギュレーションロジック25によってコンフィギュレーションメモリ26に格納される。コンフィギュレーションロジック25は、不揮発性メモリ27またはその他のソース(たとえば、DRAM28または他の回路29)からコンフィギュレーションデータを取得することができる。いくつかの例では、プログラマブルIC1は、処理システム2を含む。処理システム2は、マイクロプロセッサ、メモリ、サポート回路、IO回路などを含み得る。
【0055】
図6は、一例に係るプログラマブルIC1のシステム・オン・チップ(SoC)実現例を示すブロック図である。この例では、プログラマブルIC1は、処理システム2と、プログラマブルロジック3とを含む。処理システム2は、リアルタイム処理ユニット(RPU)4、アプリケーション処理ユニット(APU)5、グラフィックス処理ユニット(GPU)6、コンフィギュレーションおよびセキュリティユニット(CSU)12、プラットフォーム管理ユニット(PMU)122などのさまざまな処理ユニットを含む。処理システム2は、オンチップメモリ(OCM)14、トランシーバ7、周辺装置8、インターコネクト16、DMA回路9、メモリコントローラ10、周辺装置15および多重化IO(MIO)回路13などのさまざまなサポート回路も含む。処理ユニットおよびサポート回路は、インターコネクト16によって相互接続される。PL3もインターコネクト16に結合される。トランシーバ7は、外部ピン24に結合される。PL3は、外部ピン23に結合される。メモリコントローラ10は、外部ピン22に結合される。MIO13は、外部ピン20に結合される。PS2は、全体として外部ピン21に結合される。APU5は、CPU17、メモリ18およびサポート回路19を含み得る。
【0056】
PS2を参照して、処理ユニットの各々は、1つ以上の中央処理装置(CPU)と、メモリ、割り込みコントローラ、ダイレクトメモリアクセス(DMA)コントローラ、メモリ管理ユニット(MMU)、浮動小数点ユニット(FPU)などの関連付けられた回路とを含む。インターコネクト16は、さまざまなスイッチ、バス、通信リンクなどを含む。これらは、処理ユニット同士を相互接続し、PS2内の他の構成要素を処理ユニットに相互接続するように構成されている。
【0057】
OCM14は、PS2全体に分布され得る1つ以上のRAMモジュールを含む。たとえば、OCM14は、バッテリバックアップ式のRAM(BBRAM)、密結合メモリ(TCM)などを含んでもよい。メモリコントローラ10は、外部DRAMにアクセスするためのDRAMインターフェイスを含み得る。周辺装置8,15は、PS2にインターフェイスを提供する1つ以上の構成要素を含み得る。たとえば、周辺装置132は、グラフィックス処理ユニット(GPU)、ディスプレイインターフェイス(たとえば、ディスプレイポート、高解像度マルチメディアインターフェイス(HDMI(登録商標))ポートなど)、ユニバーサルシリアルバス(USB)ポート、イーサネット(登録商標)ポート、汎用非同期トランシーバ(UART)ポート、シリアル・ペリフェラル・インターフェイス(SPI)ポート、汎用IO(GPIO)ポート、シリアル・アドバンスト・テクノロジ・アタッチメント(SATA)ポート、PCIeポートなどを含んでもよい。周辺装置15は、MIO13に結合され得る。周辺装置8は、トランシーバ7に結合され得る。トランシーバ7は、シリアライザ/デシリアライザ(SERDES)回路、MGTなどを含み得る。
【0058】
図7は、多数の異なるプログラマブルタイルを含むプログラマブルIC1のフィールドプログラマブルゲートアレイ(FPGA)実現例を示し、これらのプログラマブルタイルは、トランシーバ37、コンフィギュラブルロジックブロック(「CLB」)33、ランダムアクセスメモリブロック(「BRAM」)34、入力/出力ブロック(「IOB」)36、コンフィギュレーションおよびクロッキングロジック(「CONFIG/CLOCKS」)42、デジタル信号処理ブロック(「DSP」)35、特殊入力/出力ブロック(「I/O」)41(たとえば、コンフィギュレーションポートおよびクロックポート)、および他のプログラマブルロジック39(デジタルクロックマネージャ、アナログデジタル変換器、システムモニタリングロジックなど)を含む。FPGAは、PCIeインターフェイス40、アナログデジタル変換器(ADC)38なども含み得る。
【0059】
いくつかのFPGAでは、各プログラマブルタイルは、
図7の上部に含まれる例によって示されるように、同一のタイル内のプログラマブルロジック要素の入力および出力端子48への接続を有する少なくとも1つのプログラマブル相互接続要素(「INT」)43を含み得る。各プログラマブル相互接続要素43は、同一のタイルまたは他のタイルにおける隣接するプログラマブル相互接続要素の相互接続セグメント49への接続も含み得る。各プログラマブル相互接続要素43は、ロジックブロック(図示せず)間に一般的なルーティングリソースの相互接続セグメント50への接続も含み得る。一般的なルーティングリソースは、相互接続セグメント(たとえば、相互接続セグメント50)のトラックを備えるロジックブロック(図示せず)と相互接続セグメントを接続するためのスイッチブロック(図示せず)との間にルーティングチャネルを含み得る。一般的なルーティングリソースの相互接続セグメント(たとえば、相互接続セグメント50)は、1つ以上のロジックブロックにまたがっていてもよい。プログラマブル相互接続要素43は、一般的なルーティングリソースとともに、示されているFPGAのためのプログラマブル相互接続構造(「プログラマブルインターコネクト」)を実現する。
【0060】
例示的な実現例では、CLB33は、ユーザロジックに単一のプログラマブル相互接続要素(「INT」)43を加えた構成を実現するようにプログラム可能なコンフィギュラブルロジック要素(「CLE」)44を含み得る。BRAM34は、1つ以上のプログラマブル相互接続要素に加えて、BRAMロジック要素(「BRL」)45を含み得る。典型的には、タイルに含まれる相互接続要素の数は、タイルの高さに左右される。示されている例では、BRAMタイルは、5個のCLBと同じ高さを有するが、他の数(たとえば、4個)も使用されてもよい。DSPタイル35は、適切な数のプログラマブル相互接続要素に加えて、DSPロジック要素(「DSPL」)46を含み得る。IOB36は、たとえば、プログラマブル相互接続要素43の1つのインスタンスに加えて、入力/出力ロジック要素(「IOL」)47の2つのインスタンスを含み得る。当業者に明らかであるように、たとえばI/Oロジック要素47に接続された実際のI/Oパッドは、典型的には、入力/出力ロジック要素47の領域に限定されるものではない。
【0061】
示されている例では、(
図7に示される)ダイの中央付近の水平領域は、コンフィギュレーション、クロックおよび他の制御ロジックに使用される。この水平領域または列から延在する垂直な列51は、FPGAの幅にわたってクロックおよびコンフィギュレーション信号を分布させるのに使用される。
【0062】
図7に示されるアーキテクチャを利用するいくつかのFPGAは、FPGAの大部分を構成する規則的な列状構造を破壊するさらなるロジックブロックを含む。さらなるロジックブロックは、プログラマブルブロックおよび/または専用ロジックであってもよい。
【0063】
なお、
図7は、例示的なFPGAアーキテクチャを示すよう意図されているに過ぎない。たとえば、一行におけるロジックブロックの数、行の相対幅、行の数および順序、行に含まれるロジックブロックのタイプ、ロジックブロックの相対サイズ、ならびに
図7の上部に含まれる相互接続/ロジック実現例は、純粋に例示である。たとえば、実際のFPGAでは、ユーザロジックの効率的な実現を容易にするために、典型的には、CLBが現れるところはどこでもCLBの2つ以上の隣接する行が含まれるが、隣接するCLB行の数は、FPGAの全体サイズによって変わる。
【0064】
ニューラルネットワークの、アーキテクチャに最適化された訓練のための技術について説明してきた。一例において、複数の層を有するニューラルネットワークを最適化する方法は、上記ニューラルネットワークを実現する推論プラットフォームの回路についてのアーキテクチャ制約を取得するステップと、上記ニューラルネットワークを訓練プラットフォーム上で訓練して、上記複数の層についてのネットワークパラメータおよび特徴マップを生成するステップと、上記アーキテクチャ制約に基づいて、上記ネットワークパラメータ、上記特徴マップ、または上記ネットワークパラメータと上記特徴マップとの両方を制約するステップとを含む。一例において、上記アーキテクチャ制約は、複数の制約を含み、上記複数の制約のうちの少なくとも1つは、訓練中に制約として使用される。一例において、訓練は、上記ニューラルネットワークについて所望の正確性を達成する最大数の上記複数のアーキテクチャ制約を使用して実行される。一例において、ネットワークパラメータおよび/または特徴マップは、上記ニューラルネットワークの訓練中に制約される。一例において、ネットワークパラメータおよび/または特徴マップは、上記ニューラルネットワークの訓練後に制約される。このような例では、上記ニューラルネットワークは、上記制約されたネットワークパラメータおよび/または制約された特徴マップを使用して再訓練され得る。一例において、上記アーキテクチャ制約は、上記推論プラットフォームの上記回路の計算機能に基づく1つ以上の制約を含む。一例において、上記計算機能は、上記推論プラットフォームの積和演算回路の構造(たとえば、演算論理装置(ALU)の能力)と、レジスタビット幅、バス/ダイレクトメモリアクセス(DMA)ビット幅、メモリビット幅などに起因するデータ幅制約とを含む。
【0065】
本明細書に記載されている技術は、訓練フェーズ中にニューラルネットワークを最適化することによってニューラルネットワークのための推論プラットフォームに対する高い計算/メモリ要求に対処する。ネットワークパラメータおよび/または特徴マップは、推論フェーズ中に推論プラットフォームとの理想的な整合を保証するように推論プラットフォームアーキテクチャに基づいて最適化される。従来のニューラルネットワーク訓練技術は、訓練中は推論プラットフォームのアーキテクチャ側面を考慮に入れない。本明細書に記載されている技術を利用することによって、ニューラルネットワークを実現するための推論プラットフォームの機能が向上する。
【0066】
本明細書に記載されているさまざまな例は、コンピュータシステムに格納されたデータを必要とする、さまざまなコンピュータによって実現される動作を利用し得る。たとえば、これらの動作は、物理量の物理的操作を必要とし得て、必ずしもそうとは限らないが、通常は、これらの量は、電気信号または磁気信号の形態をとってもよく、それらまたはそれらの表現は、格納されたり、転送されたり、組み合わせられたり、比較されたり、または操作されたりすることができる。さらに、このような操作は、しばしば、生成、識別、判断または比較などの用語で称される。本明細書に記載されている技術の1つ以上の例の一部を構成する、本明細書に記載されているいかなる動作も、有用な機械動作であり得る。また、技術の1つ以上の例は、これらの動作を実行するためのデバイスまたは装置にも関する。この装置は、特定の要求される目的に合わせて特別に構築されてもよく、またはコンピュータに格納されたコンピュータプログラムによって選択的に作動または構成される汎用コンピュータであってもよい。特に、さまざまな汎用機械は、本明細書における教示に従って書かれたコンピュータプログラムとともに使用されてもよく、または要求される動作を実行するようにより特殊化された装置を構築する方が都合がよい場合もある。本明細書に記載されているさまざまな例は、手持ち式のデバイス、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラマブル大衆消費電子製品、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピューティングシステム構成で実施されてもよい。
【0067】
本明細書に記載されている技術の1つ以上の例は、1つ以上のコンピュータ読取可能媒体において具体化される1つ以上のコンピュータプログラムとしてまたは1つ以上のコンピュータプログラムモジュールとして実現されてもよい。コンピュータ読取可能媒体という用語は、データを格納することができ、その後データをコンピュータシステムに入力することができる任意のデータストレージデバイスを指し、コンピュータ読取可能媒体は、コンピュータによって読取ることができるようにコンピュータプログラムを具体化するための任意の既存のまたは後に開発される技術に基づいてもよい。コンピュータ読取可能媒体の例としては、ハードドライブ、ネットワーク接続型ストレージ(NAS)、リードオンリメモリ、ランダムアクセスメモリ(たとえば、フラッシュメモリデバイス)、CD(コンパクトディスク)(CD-ROM、CD-RまたはCD-RW)、DVD(デジタル多用途ディスク)、磁気テープ、ならびに他の光学式および非光学式データストレージデバイスが挙げられる。また、コンピュータ読取可能媒体は、コンピュータ読取可能コードが分布された態様で格納されて実行されるようにネットワーク結合型コンピュータシステムにわたって分布されてもよい。
【0068】
上記は具体例に向けられているが、その基本的範囲から逸脱することなく他のおよびさらなる例が考案されてもよく、その範囲は、以下の特許請求の範囲によって決定される。