(57)【要約】      （修正有）【課題】計算時間を短縮し、モジュールの電力消費を低減するニューラルネットワーク計算方法及び関連製品を提供する。【解決手段】チップ装置は、メインユニットと、メインユニットと通信する複数の基礎ユニットとを備える。メインユニットは、計算予定データブロックと演算コマンドとを取得し、当該演算コマンドに従い、計算予定データブロックを配信とブロードキャストデータブロックとに分割し、配信データブロックを分割処理して複数の基本データブロックを得て複数の基礎ユニットに配信し、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストする。基礎ユニットは、基本およびブロードキャストデータブロックに対して内積演算を実行して演算結果を得て、演算結果をメインユニットに送信し、メインユニットは演算結果を処理して計算予定データブロックと演算コマンドとのコマンド結果とを得る。【選択図】図２
2020177641.tif 000002
【特許請求の範囲】
【請求項１】
畳み込み演算方法であって、
マスター回路およびｋ個のスレーブ回路を備えるチップ装置に適用される前記畳み込み演算方法は、
前記マスター回路は、入力データと重みを受信し、重みを複数の基礎データブロックに分割し、複数の基礎データブロックを前記ｋ個のスレーブ回路に配信し、前記スレーブ回路は、配信された基礎データブロックを格納するステップと、
前記マスター回路は、入力データうちの各部分データを前記ｋ個のスレーブ回路にブロードキャストし、前記ｋ個のスレーブ回路は、各部分データブロックと前記配信された基礎データブロックとに対してそれぞれ演算を行い演算結果を得て、演算結果を前記マスター回路に送信するステップと、
前記マスター回路は、ｋ個のスレーブ回路のすべての演算結果に従って畳み込み演算の計算結果を得るステップとを含み、前記ｋはスレーブ回路の数であり、ｋの値の範囲は２以上の整数である、
ことを特徴とする畳み込み演算方法。
【請求項２】
請求項１に記載の方法であって、
前記入力データおよび重みはともに４次元データブロックであり、前記入力データの４つの次元はＮ、Ｈ、Ｗ、Ｃであり、前記重みの４つの次元はＭ、Ｃ、ＫＨ、ＫＷである、
ことを特徴とする畳み込み演算方法。
【請求項３】
請求項２に記載の方法であって、
前記Ｍの次元の値がｍである場合、前記重みはｍ個の畳み込みカーネルを含み、前記マスター回路は重みを複数の基礎データブロックに分割するステップは具体的に、
前記マスター回路は、前記ｍ個の畳み込みカーネルをｍ個の基礎データブロックに分割するステップを含む、
ことを特徴とする畳み込み演算方法。
【請求項４】
請求項２に記載の方法であって、
前記マスター回路は重みを複数の基礎データブロックに分割するステップは具体的に、
前記マスター回路はｍ個の畳み込みカーネルをｍ＊ｃ個の基礎データブロックに分割するステップを含み、前記ｃは前記重みがＣの次元における値であり、ｃの値の範囲は１以上の整数である、
ことを特徴とする畳み込み演算方法。
【請求項５】
請求項３に記載の方法であって、
前記マスター回路は重みを複数の基礎データブロックに分割するステップは具体的に、
ｍ＞ｋの場合、前記マスター回路はｍ個の畳み込みカーネルをｍ個の基礎データブロックに分割し、ｍ個の基礎データブロックの１つ以上をｋ個のスレーブ回路に配信するステップと、
ｍ≦ｋの場合、前記マスター回路はｍ個の畳み込みカーネルをｍ個の基礎データブロックに分割し、ｍ個の基礎データブロックの１つをｋ個のスレーブ回路に配信するステップとを含む、
ことを特徴とする畳み込み演算方法。
【請求項６】
請求項３または４に記載の方法であって、
前記マスター回路は、入力データの各部分データを前記ｋ個のスレーブ回路にブロードキャストするステップは、
前記マスター回路は、各部分データうちの１つの部分データとして入力データから前記基礎データブロックと同じサイズの入力データブロックを切り取り、入力データブロックを基本切り取り単位として、ステップサイズで入力データを切り取って各部分データを得て、各部分データうちの１つ以上の部分データをｋ個のスレーブ回路にブロードキャストするステップを、含む、
ことを特徴とする畳み込み演算方法。
【請求項７】
請求項６に記載の方法であって、
前記ｋ個のスレーブ回路は、各部分データと前記配信された基礎データブロックとに対してそれぞれ演算を行い、演算結果を得て、前記マスター回路はｋ個のスレーブ回路のすべての演算結果に基づく、畳み込み演算の計算結果を得るステップは具体的に、
前記ｋ個のスレーブ回路のそれぞれは、１つの部分データの要素値と配信された基礎データブロックの対応する位置の要素値とに対して乗法積算を行い、複数の乗算結果を得て、前記複数の乗法結果をマスター回路に送信し、マスター回路は各スレーブ回路が送信した前記複数の乗算結果を累加して複数の畳み込み結果を得て、マスター回路は複数の畳み込み結果をソートして畳み込み演算の計算結果を得るステップを含む、
ことを特徴とする畳み込み演算方法。
【請求項８】
請求項６に記載の方法であって、
前記ｋ個のスレーブ回路は、各部分データと前記配信された基礎データブロックとに対してそれぞれ演算を行い、演算結果を得て、前記マスター回路はｋ個のスレーブ回路のすべての演算結果に従って、畳み込み演算の演算結果得ることは具体的に、
前記ｋ個のスレーブ回路のそれぞれは、１つの部分データの要素値と、配信された基礎データブロックの対応する位置の要素値とに対して乗算演算を行い、複数の乗算結果を得て、複数の乗算結果を累加して畳み込み結果を得て、畳み込み結果をマスター回路に送信し、マスター回路はすべての畳み込み結果をソートして、畳み込み演算の計算結果を得るステップを、含む、
ことを特徴とする畳み込み演算方法。
【請求項９】
請求項１〜５のいずれか一項に記載の方法であって、
前記チップ装置は、分岐回路をさらに備え、前記分岐回路は、前記マスター回路と複数のスレーブ回路とを接続し、前記方法はさらに、
前記分岐回路は、前記マスター回路と複数のスレーブ回路との間のデータを転送するスッテプを含む、
ことを特徴とする畳み込み演算方法。
【請求項１０】
請求項１〜５のいずれか一項に記載の方法であって、
前記マスター回路は、ベクトル演算回路、算術論理ユニット回路、アキュムレータ回路、マトリックス転置回路、直接メモリアクセス回路、または、データ並べ替え回路の１つまたは任意の組み合わせを含む、
ことを特徴とする畳み込み演算方法。
【請求項１１】
請求項１〜５のいずれか一項に記載の方法であって、
前記スレーブ回路は、内積演算回路またはアキュムレータ回路などの１つまたは任意の組み合わせを含む、
ことを特徴とする畳み込み演算方法。
【請求項１２】
マスター回路とｋ個のスレーブ回路とを備えるチップ装置であって、
前記マスター回路は、入力データと重みを受信するように用いられ、重みを複数の基礎データブロックに分割し、複数の基礎データブロックを前記ｋ個のスレーブ回路に配信し、入力データの各部分データを前記ｋ個のスレーブ回路にブロードキャストし、
前記スレーブ回路は、配信された基礎データブロックを格納し、各部分データおよび配信された基礎データブロックに対して演算を行い演算結果を得て、演算結果を前記マスター回路に送信し、
前記マスター回路は、ｋ個のスレーブ回路のすべての演算結果に従って、畳み込み演算の計算結果を得るように用いられ、前記ｋはスレーブ回路の数であり、ｋの値の範囲は２以上の整数である、
ことを特徴とするチップ装置。
【請求項１３】
請求項１２に記載のチップ装置であって、
前記入力データおよび重みはともに４次元データブロックであり、前記入力データの４つの次元はＮ、Ｈ、Ｗ、Ｃであり、前記重みの４つの次元はＭ、Ｃ、ＫＨ、ＫＷである、
ことを特徴とするチップ装置。
【請求項１４】
請求項１３に記載のチップ装置であって、
Ｍの次元における値はｍである場合、前記重みはｍ個の畳み込みカーネルを含み、前記マスター回路は具体的に、前記ｍ個の畳み込みカーネルをｍ個の基礎データブロックに分割するように用いられる、
ことを特徴とするチップ装置。
【請求項１５】
請求項１３に記載のチップ装置であって、
前記マスター回路は具体的に、ｍ個の畳み込みカーネルをｍ＊ｃ個の基礎データブロックに分割するように用いられ、前記ｃは前記Ｃの次元における値であり、ｃの値の範囲は１以上の整数である、
ことを特徴とするチップ装置。
【請求項１６】
請求項１４に記載のチップ装置であって、
ｍ＞ｋの場合、前記マスター回路は具体的にｍ個の畳み込みカーネルをｍ個の基礎データブロックに分割し、ｍ個の基礎データブロックの１つ以上をｋ個のスレーブ回路に配信し、
ｍ≦ｋの場合、前記マスター回路は具体的にｍ個の畳み込みカーネルをｍ個の基礎データブロックに分割し、ｍ個の基礎データブロックの１つをｋ個のスレーブ回路に配信する、
ことを特徴とするチップ装置。
【請求項１７】
請求項１４または１５に記載のチップ装置であって、
前記マスター回路は具体的に、各部分データうちの１つの部分データとして入力データから前記基礎データブロックと同じサイズの入力データブロックを切り取り、入力データブロックを基本切り取り単位として、ステップサイズで入力データを切り取って各部分データを得て、各部分データうちの１つ以上の部分データをｋ個のスレーブ回路にブロードキャストするように用いられる、
ことを特徴とするチップ装置。
【請求項１８】
請求項１７に記載のチップ装置であって、
前記スレーブ回路は具体的に、１つの部分データの要素値と、配信された基礎データブロックの対応する位置の要素値とに対して乗算演算を行い、複数の乗算結果を得て、複数の乗算結果をマスター回路に送信するように用いられ、
前記マスター回路は具体的に、各スレーブ回路が送信した前記複数の乗算結果を累加して複数の畳み込み結果を得て、マスター回路は複数の畳み込み結果をソートして畳み込み演算の計算結果を得るように用いられる、
ことを特徴とするチップ装置。
【請求項１９】
請求項１７に記載のチップ装置であって、
前記スレーブ回路は具体的に、１つの部分データの要素値と、配信された基礎データブロックの対応する位置の要素値とに対して乗算演算を行い、複数の乗算結果を得て、複数の乗算結果を累加して畳み込み結果を得て、畳み込み結果をマスター回路に送信し、マスター回路はすべての畳み込み結果をソートして、畳み込み演算の計算結果を得るように用いられる、
ことを特徴とするチップ装置。
【請求項２０】
請求項１２〜１６のいずれか一項に記載のチップ装置であって、
前記チップ装置は分岐回路をさらに備え、前記分岐回路は前記マスター回路と複数のスレーブ回路とを接続し、
前記分岐回路は、前記マスター回路と複数のスレーブ回路の間のデータを転送するように用いられる、
ことを特徴とするチップ装置。
【請求項２１】
請求項１２〜１６のいずれか一項に記載のチップ装置であって、
前記マスター回路は、ベクトル演算回路、算術論理ユニット回路、アキュムレータ回路、マトリックス転置回路、直接メモリアクセス回路、またはデータ並べ替え回路の１つまたは任意の組み合わせを含む、
ことを特徴とするチップ装置。
【請求項２２】
請求項１２〜１６のいずれか一項に記載のチップ装置であって、
前記スレーブ回路は、内積演算回路またはアキュムレータ回路などの１つまたは任意の組み合わせを含む、
ことを特徴とするチップ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、通信およびチップ技術の分野に関し、特にチップ装置および関連製品に関する。
【背景技術】
【０００２】
人工ニューラルネットワーク（ＡＮＮ）は、２０世紀８０年代以降の人工知能の分野における研究ホットスポットである。それは情報処理の観点から人間の脳ニューロンネットワークを抽象化し、単純なモデルを確立し、そして異なる接続方法に従って異なるネットワークを形成する。エンジニアリングおよび学界では、それはしばしばニューラルネットワークまたは類ニューラルネットワークと直接呼ばれる。ニューラルネットワークは、互いに接続された多数のノード（またはニューロン）からなる計算モデルである。既存のニューラルネットワークの計算は、ＣＰＵ（Central Processing Unit,中央処理装置）またはＧＰＵ（Graphics Processing Unit,グラフィック処理装置）に基づいて実現され、このような計算は消費電力が大きく、計算時間が長い。
【発明の概要】
【０００３】
本開示の実施形態は、計算時間を短縮し、モジュールの電力消費を低減することができるニューラルネットワーク計算方法および関連製品を提供する。
【０００４】
第１の態様では、本開示の実施形態は、メインユニットと複数の基本ユニットとを備えるチップ装置において適用されるニューラルネットワークの計算方法を提供する。この方法は、以下のステップを含む。メインユニットは計算予定データブロックと演算コマンドとを取得し、演算コマンドに従って計算予定データブロックを配信データブロックとブロードキャストデータブロックとに分割する。メインユニットは配信データブロックを分割して複数の基本データブロックを得て、前記複数の基本データブロックを複数の基本ユニットに配信し、メインユニットはブロードキャストデータブロックを複数の基本ユニットにブロードキャストする。基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信する。メインユニットは演算結果を処理し、前記計算予定データブロックと演算コマンドとのコマンド結果を得る。
【０００５】
任意選択で、メインユニットはブロードキャストデータブロックを複数の基本ユニットにブロードキャストすることは、以下を含む。
【０００６】
前記メインユニットは、前記ブロードキャストデータブロックを複数の基本ユニットに一回でブロードキャストする。
【０００７】
任意選択で、前記基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信することは、以下を含む。
【０００８】
基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積処理を行い内積処理の結果を得て、その内積処理の結果を累算して演算結果を得て、その演算結果をメインユニットに送信する。
【０００９】
任意選択で、前記演算結果は内積処理の結果であり、メインユニットは演算結果を処理し、前記計算予定データブロックと演算コマンドとのコマンド結果を得ることは、以下を含む。
【００１０】
前記メインユニットは前記演算結果を累算して累算結果を得て、その累算結果を配列し前記計算予定データブロックと演算コマンドとのコマンド結果とを得る。
【００１１】
任意選択で、前記メインユニットはブロードキャストデータブロックを複数の基本ユニットにブロードキャストすることは、以下を含む。
【００１２】
前記ブロードキャストデータブロックを複数の部分ブロードキャストデータブロックに分割し、その複数の部分ブロードキャストデータブロックを前記複数の基本ユニットに数回でブロードキャストする。
【００１３】
任意選択で、前記基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信することは、以下を含む。
【００１４】
前記基本ユニットは、前記部分ブロードキャストデータブロックおよび基本データブロックに対して内積処理を一回行い内積処理の結果を得て、その内積処理の結果を累算して部分演算結果を得て、その部分演算結果をメインユニットに送信する。
【００１５】
任意選択で、前記基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信することは、以下を含む。
【００１６】
前記基本ユニットは、当該部分ブロードキャストデータブロックをｎ回繰り返し使用して当該部分ブロードキャストデータブロックおよびｎ個の基本データブロックの内積演算を行いｎ個の部分処理結果を得て、ｎ個の部分処理結果を累算してｎ個の部分演算結果を得て、そのｎ個の部分演算結果をメインユニットに送信し、ここで、ｎは２以上の整数となる。
【００１７】
第２の態様では、メインユニットと複数の基本ユニットとを備えるチップ装置が提供される。前記基本ユニットは、計算予定データブロックと演算コマンドとを取得し、演算コマンドに従って計算予定データブロックを配信データブロックとブロードキャストデータブロックとに分割する。配信データブロックを分割して複数の基本データブロックを得て、複数の基本データブロックを複数の基本ユニットに配信し、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストする。基本ユニットは、基本データブロックおよびブロードキャストデータブロックに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信する。メインユニットは、演算結果を処理して、計算予定データブロックと演算コマンドとのコマンド結果を得る。
【００１８】
任意選択で、チップ装置は、分岐ユニットをさらに備える。分岐ユニットは、メインユニットと基本ユニットとの間に配置される。分岐ユニットはデータを転送するために使用される。
【００１９】
任意選択で、メインユニットは具体的に、ブロードキャストデータブロックを複数の基本ユニットに一回でブロードキャストするために使用される。
【００２０】
任意選択で、基本ユニットは具体的に、基本データブロックおよびブロードキャストデータブロックに対して内積処理を行い内積処理の結果を得て、その内積処理の結果を累算して演算結果を得て、その演算結果をメインユニットに送信するために使用される。
【００２１】
任意選択で、メインユニットは、演算結果が内積処理の結果である場合、演算結果を累算して累算結果を得て、累算結果を配列して計算予定データブロックと演算コマンドとのコマンド結果を得る。
【００２２】
任意選択で、メインユニットは具体的に、ブロードキャストデータブロックを複数の部分ブロードキャストデータブロックに分割し、複数の部分ブロードキャストデータブロックを複数の基本ユニットに数回でブロードキャストするために使用される。
【００２３】
任意選択で、基本ユニットは具体的に、部分ブロードキャストデータブロックおよび基本データブロックに対して内積処理を行い内積処理の結果を得て、その内積処理の結果を累算して部分演算結果を得て、部分演算結果をメインユニットに送信するために使用される。
【００２４】
任意選択で、基本ユニットは具体的に、部分ブロードキャストデータブロックをｎ回繰り返し使用して部分ブロードキャストデータブロックおよびｎ個の基本データブロックの内積演算を行い、ｎ個の部分処理結果を得て、ｎ個の部分処理結果をそれぞれ累算した後、ｎ個の部分演算結果を得て、ｎ個の部分演算結果をメインユニットに送信するために使用され、ここで、ｎは２以上の整数である。
【００２５】
任意選択で、メインユニットは、メインレジスタまたはメインオンチップキャッシュ回路の１つまたは任意の組み合わせを備える。
【００２６】
基礎ユニットは、基本レジスタまたは基本オンチップキャッシュ回路の１つまたは任意の組み合わせを備える。
【００２７】
任意選択で、メインユニットは、ベクトル演算回路、算術論理演算回路、アキュムレータ回路、マトリックス転置回路、直接メモリアクセス回路、またはデータ並べ替え回路のうちの１つまたは任意の組み合わせを備える。
【００２８】
任意選択で、ユニットは内積演算回路またはアキュムレータ回路などのうちの１つまたは任意の組合せを備える。
【００２９】
任意選択で、分岐ユニットは複数の分岐ユニットであり、メインユニットは複数の分岐ユニットにそれぞれ接続され、各分岐ユニットは少なくとも１つの基礎ユニットに接続される。
【００３０】
任意選択で、分岐ユニットは複数の分岐ユニットであり、複数の分岐ユニットは直列に接続されてからメインユニットに接続され、各分岐ユニットはそれぞれ少なくとも１つの基礎ユニットに接続される。
【００３１】
任意選択で、分岐ユニットは具体的に、メインユニットと基礎ユニットとの間のデータを転送するために使用される。
【００３２】
任意選択で、分岐ユニットは具体的に、メインユニットと基礎ユニットまたは他の分岐ユニットとの間のデータを転送するために使用される。
【００３３】
任意選択で、データは、ベクトル、マトリックス、三次元データブロック、四次元データブロック、およびｎ次元データブロックのうちの１つまたは任意の組み合わせである。
【００３４】
任意選択で、演算コマンドが乗算コマンドであれば、乗数データブロックがブロードキャストデータブロックであり、被乗数データブロックが配信データブロックであると確定される。
【００３５】
演算コマンドが畳み込みコマンドであれば、入力データブロックはブロードキャストデータブロックであり、畳み込みカーネルは配信データブロックであると確定される。
【００３６】
第３の態様では、第２の態様によって提供されるチップ装置の適用方法が提供される。当該チップ装置はマトリックスとマトリックスの乗算、マトリックスとベクトルの乗算、畳み込み演算、または完全接続演算のうちの１つまたは任意の組み合わせを行うために使用される。
【００３７】
第４の態様では、第２の態様によって提供されるチップ装置を集積するチップが提供される。
【００３８】
第５の態様では、第６の態様によって提供されるチップを備えるスマートデバイスが提供される。
【００３９】
本開示の実施形態を実施すると、以下の有益な効果が得られる。
【００４０】
わかるように、本開示の実施形態によれば、データと演算コマンドを受信した後、データは配信データとブロードキャストデータに分割され、配信データは基本データブロックに分割されてから、複数の基本ユニットに配信されて内積演算が行われる。このように、演算量が最も多い内積演算を複数の基本ユニットに分散して同時に行うので、演算時間が短縮され、消費電力が節約されるという利点がある。
【図面の簡単な説明】
【００４１】
本開示の実施形態における技術案をより明確に例示するために、実施形態の説明に使用される図面を以下に簡単に説明する。以下の説明における図面は、本開示のいくつかの実施形態であることは明らかであり、当業者にとっては、これらの図面に基づいて他の図面を創造的な仕事をすることなく得ることもできる。
【図１ａ】図１ａは、本開示によって提供されるチップ装置の概略構造図である。
【図１ｂ】図１ｂは、本開示によって提供される別のチップ装置の概略構造図である。
【図１ｃ】図１ｃは、本開示によって提供されるチップ装置のデータ配信の概略図である。
【図１ｄ】図１ｄは、チップ装置のデータ返しの概略図である。
【図２】図２は、本開示の実施形態によって提供されるニューラルネットワークの計算方法の概略フローチャートである。
【図２ａ】図２ａは、本開示の実施形態によって提供されるマトリックスＡにマトリックスＢをかける概略図である。
【図３】図３は、本開示の実施形態によって提供されるニューラルネットワークの計算方法の概略フローチャート図である。
【図３ａ】図３ａは、完全接続１の単一サンプルデータの概略図である。
【図３ｂ】図３ｂは、完全接続２のマルチサンプルデータの概略図である。
【図３ｃ】図３ｃは、畳み込み１のＭ個の畳み込みカーネルデータの概略図である。
【図３ｄ】図３ｄは、畳み込み２入力データの概略図である。
【図３ｅ】図３ｅは、入力データの３次元データブロックの演算ウィンドウの概略図である。
【図３ｆ】図３ｆは、入力データの三次元データブロックの別の演算ウィンドウの概略図である。
【図３ｇ】図３ｇは、入力データの三次元データブロックのさらに別の演算ウィンドウの概略図である。
【発明を実施するための形態】
【００４２】
本開示の実施形態における技術案は、本開示の実施形態における添付の図面を参照して以下に明確かつ完全に説明されるが、記載された実施形態は本開示の実施形態の一部であり全ての実施形態ではない。本開示の実施形態に基づいて、当業者が創造的な仕事をすることなくて得られる他のすべての実施形態は、本開示の範囲に属する。
【００４３】
本開示の明細書、特許請求の範囲および図面に記載の「第１」、「第２」、「第３」、「第４」等の用語は、異なる対象を区別するためのものであり、特定の順序を説明するわけではない。さらに、用語「含む」、「備える」およびそれらの変形は、非排他的な包含をカバーすることを意図している。例えば、一連のステップまたはユニットを含むプロセス、方法、システム、製品、または装置は、列挙されたステップまたはユニットに限定されず、任意選択で、列挙されていないステップまたはユニットも含む。或いは、任意選択で、これらのプロセス、方法、製品または機器に固有の他のステップユニットも含む。
【００４４】
本明細書での「実施形態」は、実施形態に関連して説明された特定の特徴、構造、または特性が本開示の少なくとも１つの実施形態に含まれてもよいことを意味する。本明細書の様々な箇所でのこの単語の出現は、必ずしも同じ実施形態を指しているわけではなく、他の実施形態と相互に排他的で独立なまたは代替的な実施形態ではない。当業者は、本明細書に記載の実施形態を他の実施形態と組み合わせることができることを明示的または黙示的に理解するであろう。
【００４５】
以下にＣＰＵを例として、ニューラルネットワークの演算方法を説明する。ニューラルネットワークではマトリックスとマトリックスとの乗算が広く用いられているが、ここではマトリックスＡとマトリックスＢの乗算を例としてＣＰＵにおける論理積演算を説明する。以下に示すように、マトリックスＡとマトリックスＢとの論理積の結果がＣとなり、つまりＣ＝Ａ＊Ｂであるとする。
【００４６】
【数１】
2020177641.tif 000003
【００４７】
2020177641.tif 000004
【００４８】
したがって、ＣＰＵまたはＧＰＵでは、一行ずつ計算する必要があり、１行目の計算を終えてから２行目の計算を行い、そして３行目の計算を行い、すべての行の計算を完成させるまで。ニューラルネットワークでは、数千行のデータの場合もあるため、計算時間が非常に長い。計算中、ＣＰＵは長時間稼働状態にあり、エネルギー消費量も多くなる。
【００４９】
図１ｂを参照する。図１ｂはチップ装置の概略構造図であり、図１ｂに示すように、チップ装置は、メインユニット回路、基本ユニット回路、および分岐ユニット回路を備える。メインユニット回路はレジスタおよび／またはオンチップキャッシュ回路を備える。メインユニットはさらにベクトル演算回路、ＡＬＵ（Arithmetic and Logic Unit，算術論理ユニット）回路、アキュムレータ回路、マトリックス転置回路、およびＤＭＡ（Direct Memory Access，直接メモリアクセス）回路、データ並べ替え回路などのうちの１つまたは任意の組み合わせを備えてもよい。各基礎ユニットはベースレジスタおよび／またはベースオンチップキャッシュ回路を備えてもよい。各基礎ユニットはさらに内積演算回路、ベクトル演算回路、アキュムレータ回路などのうちの１つまたは任意の組み合わせを備えてもよい。前記回路は全て集積回路としてもよい。分岐ユニットが存在する場合、メインユニットは分岐ユニットに接続され、その分岐ユニットは基本ユニットに接続される。基本ユニットはデータブロック間での内積演算を行い、メインユニットは外部データを送受信し、そして外部データを分岐ユニットに配信する。分岐ユニットはメインユニットまたは基本ユニットのデータを送受信するために用いられる。メインユニットについては、接続されるユニットの数が限られているので、より多い基本ユニットのアクセスを実現するためにメインユニットと基本ユニットとの間に分岐ユニットを追加する必要があることで、複雑なデータブロックの計算を実現する。よって、図１ｂに示す構造は、複雑なデータの計算に適している。
【００５０】
分岐ユニットと基礎ユニットとの接続構造は任意でよく、図１ｂのＨ型構造に限定されない。任意選択で、メインユニットから基礎ユニットへは、ブロードキャストや配信の構成であり、基礎ユニットからメインユニットへは、収集（gather）の構成である。ブロードキャスト、配信および収集の定義は以下のとおりである。
【００５１】
メインユニットから基礎ユニットへのデータ伝送方法は以下を含んでもよい。
【００５２】
メインユニットは複数の分岐ユニットにそれぞれ接続され、各分岐ユニットは複数の基礎ユニットにそれぞれ接続されている。
【００５３】
メインユニットは１つの分岐ユニットに接続され、当該分岐ユニットは１つの分岐ユニットに接続され、以下同様であり、複数の分岐ユニットは直列に接続され、そして各分岐ユニットは複数の基礎ユニットに接続される。
【００５４】
メインユニットは複数の分岐ユニットにそれぞれ接続され、各分岐ユニットは複数の基礎ユニットと直列に接続される。
【００５５】
メインユニットは１つの分岐ユニットに接続され、当該分岐ユニットは１つの分岐ユニットに接続され、以下同様であり、複数の分岐ユニットは直列に接続され、そして各分岐ユニットは複数の基礎ユニットと直列に接続される。
【００５６】
データを配信するとき、メインユニットは一部または全部の基礎ユニットにデータを送信し、データを受信する各基礎ユニットによって受信されるデータは異なってもよい。
【００５７】
データをブロードキャストするとき、メインユニットは一部または全部の基礎ユニットにデータを送信し、データを受信する各基礎ユニットは同じデータを受信する。
【００５８】
データが収集されるとき、一部または全部の基礎ユニットがデータをメインユニットに送信する。注意すべきことは、図１ａまたは図１ｂに示されるチップ装置は独立の物理的チップであってもよいが、もちろん実際の応用では、当該チップ装置は他のチップ（例えばＣＰＵ、ＧＰＵ）に集積されてもよい。本発明の実施形態は、上記のチップ装置の物理的表現を限定しない。
【００５９】
図１ｃを参照する。図１ｃは、チップ装置のデータ配信の概略図である。図１ｃの矢印で示すように、矢印はデータ配信方向であり。図１ｃに示すように、メインユニットが外部データを受信した後、外部データを分割してから、複数の分岐ユニットに配信し、分岐ユニットは分割データをメインユニットに送信する。
【００６０】
図１ｄを参照する。図１ｄは、チップ装置のデータ返しの概略図である。図１ｄの矢印で示すように、矢印はデータ返し方向である。図１ｄに示すように、基本ユニットはデータ（例えば内積計算結果）を分岐ユニットに返して、分岐ユニットはメインユニットに返す。
【００６１】
図１ａを参照する。図１ａは別のチップ装置の概略構造図である。チップ装置はメインユニットと基本ユニットを備え、当該メインユニットは基本ユニットに接続されている。図１ａに示される構造は、基本ユニットがメインユニットに直接物理的に接続されているので、当該構造は接続する基本ユニットの数は制限され、簡単なデータ計算に適している。
【００６２】
図２を参照する。図２は、上記のチップ装置を使用してニューラルネットワークの計算方法を提供する。当該方法は、図１ａまたは図１ｂに示すようなチップ装置を使用して実行される。当該方法は図２に示すように、以下のステップを含む。
【００６３】
ステップＳ２０１で、チップ装置のメインユニットは、計算予定データブロックと演算コマンドとを取得する。
【００６４】
上記ステップＳ２０１における計算予定データブロックは、具体的に、マトリックス、ベクトル、３次元データ、４次元データ、多次元データ等であってもよく、本開示は前述のデータブロックの具体的な表現を、特に限定しない。演算コマンドは、具体的に、乗算コマンド、畳み込みコマンド、加算コマンド、減算コマンド、ＢＬＡＳ（英語：Basic Linear Algebra Subprograms、基本線形代数サブプログラム）関数または活性化関数等であってもよい。
【００６５】
ステップＳ２０２で、メインユニットは、演算コマンドに応じて、計算予定データブロックを配信データブロックとブロードキャストデータブロックとに分割する。
【００６６】
前述のステップＳ２０２の実施方法は、具体的には以下の通りである。
【００６７】
当該演算コマンドが乗算コマンドであれば、乗数データブロックはブロードキャストデータブロックであり、被乗数データブロックは配信データブロックであると確定される。
【００６８】
演算コマンドが畳み込みコマンドであれば、入力データブロックはブロードキャストデータブロックであり、畳み込みカーネルは配信データブロックであると確定される。
【００６９】
ステップＳ２０３１で、メインユニットは、配信データブロックを分割処理して複数の基本データブロックを得て、当該複数の基本データブロックを複数の基本ユニットに配信する。
【００７０】
ステップＳ２０３２において、メインユニットは、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストする。
【００７１】
任意選択で、前述のステップＳ２０３１およびステップＳ２０３２は繰り返して実行されても良い。データ量が比較的多い場合、メインユニットは配信データブロックを分割して複数の基本データブロックを得て、各基本データブロックをｍ個の基本データサブブロックに分割し、ブロードキャストデータブロックもｍ個のブロードキャストデータサブブロックに分割する。メインユニットは毎回１つの基本データサブブロックを配信し、１つのブロードキャストデータサブブロックをブロードキャストする。当該基本データサブブロックおよびブロードキャストデータサブブロックは、並列ニューラルネットワーク計算の実行可能なデータブロックである。例えば、１０００＊１０００のマトリックスＡに１０００＊１０００のマトリックスＢをかけるのを例にとると、基本データブロックはマトリックスＡのｚ行目のデータであり、基本データサブブロックはマトリックスＡのｚ行目のデータの最初の２０列のデータであり、ブロードキャストデータサブブロックは、マトリックスＢのｚ行目の列の最初の２０行のデータであってもよい。
【００７２】
上記ステップＳ２０３における基本データブロックは、具体的に内積演算が可能な最小データブロックであってもよい。マトリックス乗算を例にとると、基本データブロックはマトリックスの１行のデータであってもよい。例えば、畳み込み演算の場合、基本データブロックは畳み込みカーネルの重みであってもよい。
【００７３】
前述のステップＳ２０３における配信の方法については、以下の実施形態の説明を参照してもよく、ここで贅言しない。ブロードキャストデータブロックをブロードキャストする方法については、以下の実施形態の説明を参照してもよく、ここで贅言しない。
【００７４】
ステップＳ２０４１で、チップ装置の基本ユニットは、基本データブロックとブロードキャストデータブロックに対して内積演算を行い、演算結果（中間結果かもしれない）を得る。
【００７５】
ステップＳ２０４２で、演算結果が中間結果でなければ、演算結果をメインユニットに返す。
【００７６】
上記ステップＳ２０４における返し方式については、以下の実施形態の説明を参照してもよく、ここで贅言しない。
【００７７】
ステップＳ２０５で、メインユニットは、演算結果を処理して計算予定データブロックと演算コマンドとのコマンド結果とを得る。
【００７８】
上記ステップＳ２０５の処理方式は、累算、配列等でもよく、本開示は上記処理の具体的な方式に限定されなく、その具体的な方式は例えば非線形変換等を含み、異なる演算コマンドに応じて構成されてもよい。
【００７９】
本開示によって提供される技術案において、演算を行うとき、メインユニットは計算予定データブロックおよび演算コマンドを含む外部データを受信し、計算予定データブロックおよび演算コマンドを取得し、演算コマンドに従って計算予定データブロックの配信データブロックおよびブロードキャストデータブロックを確定し、配信データブロックを複数の基本データブロックに分割し、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストし、複数の基本データブロックを複数の基本ユニットに配信する。複数の基本ユニットはそれぞれ、基本データブロックとブロードキャストデータブロックとに対して内積演算を行い、演算結果を得る。複数の基本ユニットは、その演算結果をメインユニットに返し、メインユニットは、返された演算結果に従って演算コマンドのコマンド結果を得る。この技術案の技術的なポイントは以下にある。ニューラルネットワークに関して、大量の演算がデータブロックとデータブロックとの間の内積演算にあり、内積演算のオーバーヘッドが大きく、計算時間が長いので、本開示の実施形態は、当該演算コマンドと演算予定コマンドによって、まず計算予定データブロック内の配信データブロックとブロードキャストデータブロックを区別する。ブロードキャストデータブロックは、内積演算を行う際に使用しなければならないデータブロックであり、配信データブロックは、内積演算において分割可能なデータブロックである。マトリックス乗算を例にとると、例えば、計算予定データブロックはマトリックスＡとマトリックスＢであり、演算コマンドはマトリックス乗算コマンド（Ａ＊Ｂ）であり、マトリックス乗算において、被乗数マトリックスＡは複数の基本データブロックに分割可能であり、乗数マトリックスＢはブロードキャストであってもよいので、マトリックス乗算の規則に従って、マトリックスＡは分割可能なデータブロックであり、マトリックスＢはブロードキャストデータブロックであると確定される。マトリックス乗算の定義によれば、被乗数マトリックスＡの各行のデータがそれぞれ乗数マトリックスＢと内積演算を行う必要があるので、本出願の技術案ではマトリックスＡをＭ個の基本データブロックに分割する。そのＭ個の基本データブロックでは、各基本データブロックが、マトリックスＡの１行のデータであってもよい。そのため、マトリックス乗算では、時間のかかる演算時間を複数の基本ユニットによってそれぞれ行うため、内積演算では、複数の基本ユニットで結果を高速で並列に算出することができることで、計算時間を短縮される。より短い計算時間はまた、チップ装置の動作時間を短縮することができ、それによって消費電力を低減することができる。
【００８０】
本開示によって提供される技術案の効果が、実際的な例を通して以下に説明される。図２ａに示すように、マトリックスＡにベクトルＢをかける概略図である。図２ａに示すように、マトリックスＡはＭ行、Ｌ列で、ベクトルＢはＬ行である。演算器がマトリックスＡの１行とベクトルＢとの内積を算出するのに要する時間をt１とすると、ＣＰＵまたはＧＰＵで計算する場合、１行の計算を終えた後に次の行を計算する必要があり、ＧＰＵまたはＣＰＵで計算する方法では計算する時間Ｔ０＝ｍ＊ｔ１となる。本開示の実施形態によって提供される技術案によれば、Ｍ個の基本ユニットを有すると仮定すると、マトリックスＡはＭ個の基本データブロックに分割され、各基本データブロックはマトリックスＡの１行の行データであり、Ｍ個の基本ユニットが内積演算を同時に行う場合、計算時間はｔ１であり、本開示の実施形態によって提供される技術案を採用するのに必要な時間はＴ１＝ｔ１＋ｔ２＋ｔ３である。ここで、ｔ２はメインユニットがデータを分割する時間で、ｔ３は内積演算の演算結果を処理してコマンド結果を得るのに必要な時間である。データ分割および演算結果を処理する計算量が非常に小さいので、かかる時間が非常に短いので、Ｔ０＞＞Ｔ１である。よって、本開示の実施形態の技術案を採用するのは、計算時間を大幅に短縮することができる。同時に、演算予定データの電力消費について、Ｔ０＞＞Ｔ１により、本開示によって提供されるチップ装置は、その作業時間短い。チップ装置の作業時間が非常に短い場合、そのエネルギー消費量は長い作業時間よりもはるかに少ないと実験によって証明されたので、エネルギーを節約するという利点がある。
【００８１】
上記ステップＳ２０３において、メインユニットは、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストすることを実現する方法はたくさんある。具体的には以下の通りである。
【００８２】
方式Ａ：ブロードキャストデータブロックを複数の基本ユニットに一回でブロードキャストする。（ブロードキャストとは、「一対多数」のデータ送信、つまり、メインユニットが複数の（全部または一部の）基礎ユニットに同じデータブロックを同時に送信することを指す）。例えば、マトリックスＡ＊マトリックスＢにおいて、マトリックスＢはブロードキャストデータブロックであり、マトリックスＢを複数の基本ユニットに一回でブロードキャストする。別の例で、畳み込みでは、入力データはブロードキャストデータブロックであり、入力データブロックを一回で複数の基本ユニットにブロードキャストする。この方式の利点は、メインユニットと基本ユニットのデータ伝送量を節約できることである。つまり、すべてのブロードキャストデータを１回のブロードキャストで複数の基本ユニットに送信できる。
【００８３】
方法Ｂ：ブロードキャストデータブロックを複数の部分ブロードキャストデータブロックに分割し、複数の部分ブロードキャストデータブロックを複数の基本ユニットに例えば数回でブロードキャストする。例えば、マトリックスＢは複数の基本ユニットに数回でブロードキャストされる。具体的に、毎回、マトリックスＢのＮ列のデータをブロードキャストする。この方式の利点は、基本ユニットの構成を削減できることである。基本ユニットに配置されるレジスタの記憶容量が大きくない。データ量の大きいマトリックスＢである場合、一回でマトリックスＢを基本ユニットに配信すると、これらのデータを格納するために比較的大きなレジスタ容量が必要である。基本ユニット数が多いため、レジスタ容量を大きくすることが必然的にコストアップに大きな影響を与えるので、ここでブロードキャストデータブロックを数回でブロードキャストする方式を採用する。すなわち、基本ユニットは、毎回ブロードキャストされるブロードキャストデータブロックのデータの一部を格納するだけでよく、それによってコストが削減される。
【００８４】
説明したいことは、前述のステップＳ２０３において複数の基本データブロックを複数の基本ユニットに配信するのに、上述の方式Ａまたは方式Ｂを採用してもよい。相違点は、その伝送方式がユニキャスト方式で、かつ伝送されるデータが基本データブロックであることだけである。
【００８５】
前述のステップＳ２０４の実施方法は、具体的には以下の通りである。
【００８６】
方式Ａによってブロードキャストデータブロックをブロードキャストするおよび方式Ａによって基本データブロックを配信する場合（図３ａに示すように）、基本ユニットは基本データブロックおよびブロードキャストデータブロックに対して内積処理を行い、内積処理の結果を得る。すなわち一回で１行の内積演算を行い、その内積処理の結果（演算結果の一つ）をメインユニットに送信し、メインユニットがその内積処理の結果を累算する。もちろん実際の応用では、基本ユニットが内積処理の結果を累算した後、累算結果（演算結果のもう一つ）をメインユニットに送信する。上記方法によれば、メインユニットと基本ユニットとの間のデータ伝送量を低減し、計算速度を向上させることができる。
【００８７】
方式Ｂのブロードキャストデータブロックが採用される場合、任意選択の技術案では、基本ユニットが部分ブロードキャストデータブロックを受信するたびに、基本ユニットは、基本データブロックと部分ブロードキャストデータブロックとの部分内積演算を行い、処理結果をメインユニットに送信し、メインユニットは処理結果を累算する。別の任意選択の案では、基本ユニットがｎ個の基本データブロックを受信する場合、ブロードキャストデータブロックを繰り返し使用し、当該ブロードキャストデータブロックとｎ個の基本データブロックの内積演算を行い、ｎ個の部分処理結果を得る。基本ユニットは、そのｎ個の処理結果をメインユニットに送信し、メインユニットは、ｎ個の処理結果をそれぞれ累算する。もちろん、上記の累算は基本ユニットでも行うことができる。
【００８８】
上記の場合、ブロードキャストデータブロックのデータ量は一般的に非常に大きく、かつ配信データブロックも大きい。チップ装置は、ハードウェアの構成に属するため、配置される基本ユニットの数は理論上で無限であるが、実際には、その数は限られており、一般的には数十個の基本ユニットである。技術の発展に伴い、例えば増えることで、その数は絶えず変化する可能性がある。しかし、ニューラルネットワークにおけるマトリックスとマトリックスの乗算では、マトリックスＡの行数が数千行になり、マトリックスＢの列数も数千列になるので、一回のブロードキャストデータでマトリックスＢを基本ユニットに送信するのは実現できない。そして、毎回マトリックスＢの一部のデータ、例えば最初の５列のデータをブロードキャストするという実現方法でもよい。マトリックスＡについても同様の方法を採用してもよい。基本ユニットについては、毎回部分内積計算を行えばよく、そして、部分内積計算の結果をレジスタに格納し、その行の全ての内積演算が実行された後、その行の全ての内積演算の結果を累算して一種類の演算結果を得て、その演算結果をメインユニットに送信する。この方式は、計算速度を向上させる利点を有する。
【００８９】
図３を参照する。図３はニューラルネットワークの計算方法を提供する。この実施形態における計算は、マトリックスＡ＊マトリックスＢの計算方式によって説明されている。マトリックスＡ＊マトリックスＢは図３ａに示すマトリックスの概略図であってもよい。説明の便宜上、図３に示したニューラルネットワークの計算方法は図１ｂに示したチップ装置で行われる。図１ｂに示すように、チップ装置は１６個の基本ユニットを有する。ここでは説明と割り当ての便宜のために、Ｍの値は３２、Ｎの値は１５、Ｌの値は２０になるように設定してもよい。当然のことながら、計算装置は、任意の数の基本ユニットを有してもよいことを理解されたい。この方法は図３に示すように、以下のステップを含む。
【００９０】
ステップＳ３０１において、メインユニットは、マトリックスＡ、マトリックスＢ、および乗法演算コマンドＡ＊Ｂを受信する。
【００９１】
ステップＳ３０２において、メインユニットは、乗法演算コマンドＡ＊Ｂに従って、マトリックスＢがブロードキャストデータブロックであり、マトリックスＡが配信データブロックであると確定し、マトリックスＡを３２個の基本データブロックに分割し、各基本データブロックがマトリックスＡの１行のデータである。
【００９２】
ステップＳ３０３において、メインユニットは、３２個の基本データブロックを均等に１６個の基本ユニットに割り当て、３２個の基本データブロックを均等に１６個の基本ユニットに割り当てることは、各基本ユニットが２個の基本データブロックを受信することである。この２つのデータブロックの割り当て方法は、任意の繰り返さない割り当て順序にしてもよい。
【００９３】
上記ステップＳ３０３の割り当て方法は、他のいくつかの割り当て方法を採用してもよい。例えば、各基礎ユニットにデータブロックの数を均等に割り当てられない場合、データベースは各基礎ユニットに不均等に割り当てられてもよい。そのなかのいくつかの均等に割り当てられないデータブロックを分割してから、均等に割り当てるなどの方法でもよい。本開示の実施形態は、上記の基本データブロックが複数の基本ユニットに割り当てられる方法を限定しない。
【００９４】
ステップＳ３０４において、メインユニットは、マトリックスＢの最初の数列（例えば最初の５列）の部分データを抽出し、マトリックスＢの最初の５列の部分データを１６個の基本ユニットにブロードキャストする。
【００９５】
ステップＳ３０５において、１６個の基本ユニットは、最初の５列の部分データを繰り返し使用し２つの基本データブロックと内積演算および累積演算を行い、３２＊５個の前処理結果を得て、その３２＊５個の前処理結果をメインユニットに送信する。
【００９６】
ステップＳ３０６において、メインユニットは、マトリックスＢの５列の部分データを抽出し、マトリックスＢの５列の部分データを１６個の基本ユニットにブロードキャストする。
【００９７】
ステップＳ３０７において、１６個の基本ユニットは、中央の５列の部分データを繰り返し使用して２個の基本データブロックと内積演算および累積演算を行い、３２＊５個の中処理結果を得て、その３２＊５個の中処理結果をメインユニットに送信する。
【００９８】
ステップＳ３０８において、メインユニットは、マトリックスＢの最後の５列の部分データを抽出し、マトリックスＢの最後の５列の部分データを１６個の基本ユニットにブロードキャストする。
【００９９】
ステップＳ３０９において、１６個の基本ユニットは、最後の５列の部分データを繰り返し使用して２個の基本データブロックと内積演算および累積演算を行い、３２＊５個の後処理結果を得て、３２＊５個の後処理結果をメインユニットに送信する。
【０１００】
ステップＳ３１０、メインユニットは、３２＊５個の前処理結果、３２＊５個の中処理結果、および３２＊５個の後処理結果を前、中、後に準じて組み合わせて、３２＊１５のマトリックスＣを得る。このマトリックスＣは、マトリックスＡ＊マトリックスＢのコマンド結果である。
【０１０１】
図３に示す技術案は、マトリックスＡを３２個の基本データブロックに分割し、次にマトリックスＢをバッチでブロードキャストするので、基本ユニットはコマンド結果をバッチで得ることができる。内積が１６個の基本ユニットに分割されて計算されるので、計算
時間が大幅に短縮され、計算時間が短くエネルギー消費が少ないという利点がある。
【０１０２】
図１ａを参照する。図１ａは、本開示により提供されるチップ装置であり、チップ装置は、メインユニットと基本ユニットとを備え、メインユニットはハードウェアチップ装置であり、基本ユニットもハードウェアチップ装置である。
【０１０３】
メインユニットは、ニューラルネットワーク演算における各連続的演算、並びに基本ユニットとのデータ伝送を行うように用いられる。
【０１０４】
基本ユニットは、メインユニットによって伝送されたデータに基づき、ニューラルネットワークにおける並列で加速される演算を行い、演算結果をメインユニットに送信するように用いられる。
【０１０５】
上記の並列で加速される演算には、データブロックとデータブロックとの間の乗法演算、畳み込み演算などの大規模で並列化可能な演算が含まれるが、これらに限定されない。
【０１０６】
上記の各連続的演算には、累積演算、マトリックス転置演算、データ配列演算などの連続的演算が含まれるが、これらに限定されない。
【０１０７】
メインユニットと複数の基本ユニットについて、メインユニットは、計算予定データブロックおよび演算コマンドを取得し、演算コマンドに応じて、計算予定データブロックを配信データブロックとブロードキャストデータブロックとに分割する。配信データブロックを分割して複数の基本データブロックを得て、複数の基本データブロックを複数の基本ユニットに配信し、ブロードキャストデータブロックを複数の基本ユニットにブロードキャストする。基本ユニットは、基本データブロックとブロードキャストデータブロックとに対して内積演算を行い演算結果を得て、その演算結果をメインユニットに送信する。前記メインユニットは前記演算結果を処理し、計算予定データブロックと演算コマンドとのコマンド結果を得る。
【０１０８】
任意選択で、チップ装置はさらに分岐ユニットを備え、当該分岐ユニットは、メインユニットと基本ユニットとの間に配置され、データを転送するように用いられる。
【０１０９】
任意選択で、メインユニットは具体的に、ブロードキャストデータブロックを複数の基本ユニットに一回でブロードキャストするように用いられる。
【０１１０】
任意選択で、基本ユニットは具体的に、基本データブロックおよびブロードキャストデータブロックに対して内積処理を行い内積処理の結果を得て、その内積処理の結果を累算して演算結果を得て、その演算結果をメインユニットに送信するように用いられる。
【０１１１】
任意選択で、メインユニットは、演算結果が内積処理の結果である場合、演算結果を累算して累算結果を得、累算結果を配列して計算予定データブロックと演算コマンドとのコマンド結果を得るように用いられる。
【０１１２】
任意選択で、メインユニットは具体的に、ブロードキャストデータブロックを複数の部分ブロードキャストデータブロックに分割し、複数の部分ブロードキャストデータブロックを複数の基本ユニットに数回でブロードキャストするように用いられる。
【０１１３】
任意選択で、基本ユニットは具体的に、部分ブロードキャストデータブロックおよび基本データブロックに対して内積処理を一回行い内積処理の結果を得て、内積処理の結果を累算して部分演算結果を得て、部分演算結果をメインユニットに送信するように用いられる。
【０１１４】
任意選択で、基本ユニットは具体的に、部分ブロードキャストデータブロックをｎ回繰り返し使用して部分ブロードキャストデータブロックとｎ個の基本データブロックとの内積演算を行い、ｎ個の部分処理結果を得て、ｎ個の部分処理結果をそれぞれに累算した後、ｎ個の部分演算結果を得て、ｎ個の部分演算結果をメインユニットに送信するように用いられる。ここ、ｎは２以上の整数である。
【０１１５】
本開示の実施形態は、図１ａに示されるようなチップ装置の適用方法をさらに提供する。当該方法は具体的に、マトリックスとマトリックスの乗法演算、マトリックスとベクトルの乗法演算、畳み込み演算、または完全接続演算のうちの１つまたは任意の組み合わせを実行するように使用され得る。
【０１１６】
具体的には、メインユニットは、ｐｏｏｌｉｎｇ（プール化）演算、正則化（規格化）演算、例えばｂａｔｃｈ  ｎｏｒｍａｌｉｚａｔｉｏｎ（バッチ正規化）、ｌｒｎなどのニューラルネットワーク演算ステップを行ってもよい。
【０１１７】
本出願の実施形態はまた、図１ａまたは図１ｂに示すようなチップ装置を備えるチップを提供する。
【０１１８】
本願の実施形態は、上記のチップを備えるスマートデバイスをさらに提供し、当該チップには、図１ａまたは図１ｂに示すようなチップ装置が集積されている。スマートデバイスは、スマートフォン、タブレットコンピュータ、パーソナルデジタルアシスタント、スマートウォッチ、スマートカメラ、スマートＴＶ、スマート冷蔵庫などを含むが、これらに限定されない。上述のデバイスは例示の目的のためだけであり、本出願の実施形態は上記デバイスの特定の形に限定されない。
【０１１９】
上記のマトリックスかけるマトリックスの演算は、図３に示す実施形態の説明を参照してもよく、ここでは贅言しない。
【０１２０】
チップ装置を使用し完全接続演算を行う。
【０１２１】
完全接続層の入力データが長さＬのベクトル（例えば図３ａに示す「完全接続１−単一サンプル」のベクトルＢ）であり（すなわち、ニューラルネットワークの入力が単一サンプルである）、完全接続層の出力が長さＭのベクトルであり、完全接続層の重みがＭ＊Ｌのマトリックス（例えば「図３ｂ完全接続１-単一サンプル」のマトリックスＡ）である場合、完全接続層の重みマトリックスをマトリックスＡ（すなわち、分割データブロック）とし、入力データをベクトルＢ（すなわち、ブロードキャストデータブロック）として、図２に示す方法１に従って演算を行う。具体的な演算方法は次のとおりであってもよい。
【０１２２】
完全接続層の入力データがマトリックスであり（すなわち、ニューラルネットワークの入力が複数のサンプルに対しバッチで演算を行う場合）（完全接続層の入力データがＮ個の入力サンプルを表し、各サンプルは長さＬのベクトルであり、入力データはＬ＊Ｎのマトリックスで表され、例えば「図３ｂ完全接続１―複数のサンプル」のマトリックスＢで表す）、各サンプルに対した完全接続層の出力は長さＭのベクトルである場合、完全接続層の出力データは「図３ａ完全接続―１複数のサンプル」の結果マトリックスのようなＭ＊Ｎのマトリックスであり、完全接続層の重みはＭ＊Ｌのマトリックスであり（例えば「図３ａ完全接続―１複数のサンプル」のマトリックスＡ）、完全接続層の重みマトリックスをマトリックスＡ（すなわち分割データブロック）とし、入力データマトリックスをマトリックスＢ（すなわちブロードキャストデータブロック）とし、または完全接続層の重みマトリックスをマトリックスＢ（ブロードキャストデータブロック）とし、入力ベクトルをマトリックスＡ（分割データブロック）とし、上述した図２に示す方法１に従って演算する。
【０１２３】
チップ装置
チップ装置を使用して人工ニューラルネットワーク演算を行う場合、ニューラルネットワークにおける畳み込み層、プール化層、および正規化層（規格化層とも呼ばれ、例えばＢＮ（Batch normalization）またはＬＲＮ（Local Response Normalization））などの入力データは、「図３ｄ畳み込み２−入力データ」に示されるように（明確に表すため、各サンプルを表す３次元データブロックは、例としてＣ＝５、Ｈ＝１０、Ｗ＝１２を用いて説明されるが、実際の使用において、Ｎ、Ｃ、Ｈ、Ｗの大きさは図３ｄに示す値に限定されず）、図３ｄの各３次元データブロックは１つのサンプルがこの層の入力データに対応することを表す。各３次元データブロックの３つの次元はそれぞれＣ、Ｈ、Ｗで、そのような３次元データブロックはＮ個ある。
【０１２４】
上記のニューラルネットワーク層の計算を行う際、メインユニットは入力データを受信した後、各入力データのサンプルに対して、メインユニットのデータ並べ替え回路を用いて、入力データをある順序で並べる。当該順序は任意の順序であってもよい。
【０１２５】
任意選択で、当該順序は、例えばＮＨＷＣおよびＮＷＨＣなどのように、上記の概略図に表されるＣ次元座標の変化が最も速い方式で入力データを並べる。中には、Ｃがデータブロックの最内層の次元で、Ｎがデータブロックの最外層の次元で、ＨとＷが中間層の次元である。こうする結果は、Ｃのデータが隣接しているので、演算の並列度を向上させることを容易にし、そして複数の特徴マップの並列演算を実行することをより容易にする。
【０１２６】
以下は、Ｃ、Ｈ、およびＷが異なるニューラルネットワーク演算に対してどのように理解されるかを説明する。畳み込みとプール化の場合、ＨとＷは畳み込みとプール化の演算を行うときの関連する演算ウィンドウのスライドする次元である（演算ウィンドウがＷ次元においてスライドする例は例え図３eの「畳み込み３―スライドＡ」および図３ｆの「畳み込み３―スライドＢ」の２つの図に示され、演算ウィンドウがＨ次元においてスライドすることは例え図３ｇに示される）。演算ウィンドウのサイズとＭ個の畳み込みカーネルの１つの畳み込みカーネルのサイズとが一致する。図３ｃに示されるようなＭ個の畳み込みカーネルで、各畳み込みカーネルは５＊３＊３の三次元データブロックであり、その演算ウィンドウも５＊３＊３の三次元データブロックである。図３ｃに示されるＭ個の畳み込みカーネルのＫＨとＫＷは、ＫＨに対応する次元が入力データのＨ次元であり、ＫＷに対応する次元が入力データのＷ次元であることを示している。図３e、３ｆ、３ｇの灰色部分のキューブは毎回演算ウィンドウをスライドして計算を行うのに使用されるデータである。そのスライド方向は、Ｈをスライド方向として、その後Ｗをスライド方向としてもよく、またはＷをスライド方向とし、次いでＨをスライド方向としてもよい。具体的に、畳み込みの場合、各スライディングウィンドウでの演算は、図の灰色部分のキューブで表されるデータブロックと「図３ｃの畳み込み１―畳み込みカーネル」で表されるＭ個の畳み込みカーネルデータブロックとに対してそれぞれ行われる内積演算である。畳み込みでは、各スライディングウィンドウ位置について各畳み込みカーネルに対応する値を出力する。プール化の場合、各スライディングウィンドウでの演算は、図の灰色のキューブで表されるデータブロックがＨ次元およびＷ次元において（図の例では、灰色のデータブロックのうち、同一平面上の９つの数値のうち）最大値を選択するか、平均値を計算するなどの演算である。プール化では、スライディングウィンドウの位置ごとにＣ個の値が出力される。Ｃは、単一サンプルの３次元データブロックにおいて、ＨとＷ以外の別の次元である。Ｎは、合計Ｎ個のサンプルでこの層の演算を同時に実行することを表す。正則化アルゴリズムのＬＲＮでは、Ｃ次元の定義は以下の通りである。毎回の基本的ＬＲＮ演算では、Ｃ次元に沿って１つの連続データブロック（すなわち、Ｙ＊１＊１のデータブロック）選択される。ここで、Ｙ＊１＊１のデータブロックのＹがＣ次元における値であり、Ｙの値がＣ次元の最大値以下であり、１番目の１はＨ次元を表し、２番目の１はＷ次元を表す。残りの２つの次元はＨおよびＷ次元と定義し、すなわち各サンプルの３次元データブロックのそれぞれについて、ＬＲＮ正則化演算が実行されるたびに、同じＷ座標および同じＨ座標で異なるＣ座標における連続的一部のデータに対して演算を行う。正則化アルゴリズムＢＮの場合、Ｎ個のサンプルの３次元データブロック内の同じＣ次元の座標を持つすべての数値に対して平均値および分散（または標準偏差）を求める。
【０１２７】
「図３ｃ〜図３ｇ」において、１つのキューブを使って１つの数値を表し、重みとも呼ばれる。概略図で使用される数字は、例に限定される。実際の場合、次元データは任意の数値であり得る（ある次元が１である場合も含み、その場合、４次元データブロックは自動的に３次元データブロックになる。例えば、同時に計算されるサンプル数が１の場合、入力データは３次元データブロックである。他の例で、畳み込みカーネルの数量が１の場合、畳み込みとデータは３次元データブロックとなる）。チップ装置を用いて入力データＢと畳み込みカーネルＡとの畳み込み演算を行う。
【０１２８】
畳み込み層の場合、その重み（すべての畳み込みカーネル）は「図３ｃ畳み込み１―畳み込みカーネル」に示すように、畳み込みカーネルの数はＭで、各畳み込みカーネルはＣ個のＫＨ行ＫＷ列のマトリックスから構成されるので、畳み込み層の重みは、４の次元がそれぞれＭ、Ｃ、ＫＨ、ＫＷである４次元データブロックとして表すことができる。「図３ｄ畳み込み２―入力データ」に示すように、畳み込み層の入力データは４次元データブロックで、Ｎ個の３次元データブロックからなり、各３次元データブロックは、Ｃ個のＨ行Ｗ列の特徴マトリックスから構成される（すなわち、４つの次元はそれぞれＮ、Ｃ、Ｈ、Ｗのデータブロックである）。メインユニットからＫ個の基礎ユニットのうちのある１個にＭ個の畳み込みカーネルうちのそれぞれの畳み込みカーネルの重みを配信し、基礎ユニットのオンチップキャッシュおよび／またはレジスタに格納する（この時点ではＭ個の畳み込みカーネルは配信データブロックであり、各畳み込みカーネルは基本データブロックであってもよいが、もちろん、実際の応用では、基本データブロックは、１つの畳み込みカーネルの１つの平面マトリックスのようなより小さな温度にも変更されてもよい）。具体的な配信方法は下記の通りであってもよい。畳み込みカーネルの数Ｍ≦Ｋの場合、１つの畳み込みカーネルの重みをＭ個の基礎ユニットにそれぞれ配信する。畳み込みカーネルの数Ｍ＞Ｋの場合、１つまたは複数の畳み込みカーネルの重みを各基礎ユニットにそれぞれ配信する（ｉ番目の基礎ユニットに配信される畳み込みカーネル重みセットはＡｉであり、合計Ｍｉ個の畳み込みカーネルを有する）。各基礎ユニットにおいて、例えばｉ番目の基本ユニットにおいて、受信された、メインユニットによって配信された畳み込みカーネル重みＡiをそのレジスタおよび／またはオンチップキャッシュに格納し、入力データの各部分（すなわち図３ｅ、図３ｆまたは３ｇに示されるようなスライディングウィンドウ）をブロードキャスト方式で各基礎ユニットに伝送し（上記のブロードキャストの方式は、前述の方式Ａまたは方式Ｂを採用してもよい）、ブロードキャストする場合、数回のブロードキャストの方式で全ての基本ユニットに演算ウィンドウの重みをブロードキャストすることができ、具体的に、毎回一部の演算ウィンドウの重みをブロードキャストしてもよく、例えば毎回１つの平面のマトリックスをブロードキャストするが、図３ｅを例にとると、毎回Ｃ平面のＫＨ＊ＫＷマトリックスをブロードキャストすることができ、もちろん実際の応用では、Ｃ平面のＫＨ＊ＨＷマトリックスの最初のｎ行または最初のｎ列のデータを一回でブロードキャストすることができ、本開示は、上記の部分データの伝送方法および部分データの配列方式を限定しない。；入力データの並べ方は、任意の次元順序の並べ方に変換し、次に入力データの各部分を順序に従い順次でメインユニットにブロードキャストする。任意選択で、前述の配信データである畳み込みカーネルの送信方式も、入力データの演算ウィンドウと類似的方法送信方式を採用してもよく、ここでは贅言しない。任意選択で、入力データの並べ方は、Ｃが最も内側のループに変換される。こうする結果は、Ｃ��データが隣接になるので、畳み込み演算の並列度を向上し、複数の特徴マップにおいて並列演算を実行することをより容易にする。任意選択で、入力データの並べ方を次元順序がＮＨＷＣまたはＮＷＨＣである並べ方に変換する。各基礎ユニット、例えばｉ番目の基礎ユニットが、重みＡｉにおける畳み込みカーネルと受信されたブロードキャストデータの対応部分（即ち、演算ウィンドウ）との内積を計算する。重みＡｉの対応部分のデータは、オンチップキャッシュから直接読み出し使用することができ、または繰り返し使用のために先ずレジスタに読み取ることができる。各基礎ユニットの内積演算の結果は累算され、そしてメインユニットに伝送し返される。基礎ユニットが毎回内積演算を実行して得た部分和をメインユニットに伝送し返されて累算する。毎回基礎ユニットが内積演算を行って得た部分和を、基礎ユニットのレジスタおよび／またはオンチップキャッシュに格納して、累算が終了後、メインユニットに返送される。各基本ユニットが内積演算を行って得た部分和を、場合によっては基礎ユニットのレジスタおよび／またはオンチップキャッシュへの部分および部分格納して累算し、場合によってはメインユニットに送信して累算し、累算が終了後、メインユニットに返送する。
【０１２９】
チップ装置を用いたＢＬＡＳ（英語：Basic Linear Algebra Subprograms、基本線形代数サブプログラム）関数の実現方法
ＧＥＭＭ、ＧＥＭＭ計算は、ＢＬＡＳライブラリー内のマトリックス - マトリックス
乗算の演算を指す。この演算の通常の表現は次のとおりである。Ｃ＝ａｌｐｈａ＊ｏｐ（Ａ）＊ｏｐ（Ｂ）＋ｂｅｔａ＊Ｃ。ここでＡとＢは入力の２つのマトリックス、Ｃは出力マトリックス、ａｌｐｈａとｂｅｔａはスカラー、ｏｐはマトリックスＡまたはＢに対するある操作を表する。さらに、マトリックスＡおよびＢの幅と高さを説明するためのパラメータとして、いくつかの補助となる整数がある。
【０１３０】
当該装置を使用してＧＥＭＭ計算を実現するステップは次のとおりである。
【０１３１】
入力マトリックスＡおよびマトリックスＢにそれぞれのｏｐ操作を行う。ｏｐ操作は
、マトリックスの転置操作であってもよいが、もちろん、非線形関数演算、プール化などの他の操作であってもよい。マトリックスｏｐ操作は、メインユニットのベクトル演算機能を使用して実現される。あるマトリックスのｏｐが空であってもよい場合、メインユニットはそのマトリックスに対していかなる操作も行わない。
【０１３２】
ｏｐ（Ａ）とｏｐ（Ｂ）との間のマトリックス乗算は、図２に示す方法によって行われる。
【０１３３】
メインユニットのベクトル演算機能を用いて、ｏｐ（Ａ）＊ｏｐ（Ｂ）の結果の中の各値にａｌｐｈａをかける操作を行う。
【０１３４】
メインユニットのベクトル演算機能を用いて、マトリックスａｌｐｈａ＊ｏｐ（Ａ）＊ｏｐ（Ｂ）とｂｅｔａ＊Ｃとの対応する位置の加算ステップを実現する。
【０１３５】
ＧＥＭＶ
ＧＥＭＶ計算は、ＢＬＡＳライブラリーにおけるマトリックス−ベクター乗算の演算を指す。この演算の通常の表現は次のとおりである。Ｃ＝ａｌｐｈａ＊ｏｐ（Ａ）＊Ｂ＋ｂｅｔａ＊Ｃ。ここで、Ａは入力マトリックス、Ｂは入力ベクトル、Ｃは出力ベクトル、ａｌｐｈａとｂｅｔａはスカラー、ｏｐはマトリックスＡに対するある操作を表す。
【０１３６】
前記装置を使用してＧＥＭＶ計算を実現するステップは以下の通りである。
【０１３７】
入力マトリックスＡに対して対応するｏｐ操作を行う、チップ装置は、図２に示す方法を使用してマトリックスｏｐ（Ａ）とベクトルＢとの間のマトリックス−ベクトル乗算を完了させる。メインユニットのベクトル演算機能を用いて、ｏｐ（Ａ）＊Ｂの結果の各値にａｌｐｈａをかける操作を行う。メインユニットのベクトル演算機能を用いて、マトリックスａｌｐｈａ＊ｏｐ（Ａ）＊Ｂとｂｅｔａ＊Ｃとの間の対応する位置の加算ステップを実現する。
【０１３８】
チップ装置を用いた活性化関数の実現方法
活性化関数は、通常、１つのデータブロック（ベクトルまたは多次元マトリックスであってもよい）のデータそれぞれに対して非線形演算を実行することを指す。たとえば、活性化関数はｙ＝ｍａｘ（ｍ，ｘ）であってもよく、ここでｘは入力値、ｙは出力値、ｍは１つの定数である。活性化関数はｙ＝ｔａｎｈ（ｘ）であってもよく、ｘは入力値、ｙ＝ｓｉｇｍｏｉｄ（ｘ）である。活性化関数は区分線形関数であってもよい。活性化関数は１つのデータを入力し、１つのデータを出力する任意の関数であってもよい。
【０１３９】
活性化関数を実現する場合、チップ装置は、メインユニットのベクトル計算機能を用いて、ベクトルを入力し、ベクトルの活性化ベクトルを算出する。メインユニットは、入力ベクトルの各値に活性化関数を適用し（活性化関数の入力も１つの数値で、出力も１つの数値である）、１つの数値出力から出力ベクトルへの対応する位置を算出する。
【０１４０】
上記入力ベクトルのソースは、チップ装置の外部データ、およびチップ装置の分岐ユニットによって転送された基本ユニットの計算結果データを含むが、これらに限定されない。
【０１４１】
上記計算結果データは、具体的に、マトリックスにベクトルをかける演算結果であってもよい。上記計算結果データは、さらに具体的に、マトリックスにマトリックスをかける演算結果であってもよい。上記入力データは、メインユニットがオフセットを施すことを実現した後の演算結果であってもよい。
【０１４２】
チップ装置を使用してオフセットを施す操作を実現
２つのベクトルまたは２つのマトリックスの加算機能を、メインユニットによって実現することができる。メインユニットによって、マトリックスの各行にベクトルを加える、または各列に加える機能を実現することができる。
【０１４３】
任意選択で、上記マトリックスは、装置がマトリックスとマトリックスの乗法演算を実行する結果からのものでもよい。マトリックスは、装置がマトリックスにベクトルをかける演算を実行する結果からのものでもよい。マトリックスは、装置のメインユニットが外部から受信したデータでもよい。ベクトルは、装置のメインユニットが外部から受信したデータであってもよい。
【０１４４】
なお、上記の入力データおよび計算結果データは例に過ぎなく、実際の応用では他の種類やソースからのデータも可能であり、本開示の実施形態は上記のデータのソースや表現方法を限定するものではない。
【０１４５】
前述の方法の実施形態では、簡潔さのために、それらはすべて一連の動作の組み合わせとして説明されているが、当業者は、本開示が説明された動作シーケンスによって限定されないことを理解されたい。なぜなら、特定のステップは、本開示に従って他のシーケンスでまたは同時に実行され得るからである。さらに、当業者はまた、本明細書に記載されている実施形態は任意選択可能な実施形態であり、関連する動作およびモジュールは必ずしも本開示によって必要とされないことを理解されたい。
【０１４６】
上記の実施形態では、様々な実施形態の説明がそれぞれの重点があり、ある実施形態で詳述されていない部分は、他の実施形態の関連する説明を参照してもよい。
【０１４７】
本明細書で提供されるいくつかの実施形態では、開示された装置は他の方法でも実施され得ることを理解されたい。例えば、上述した装置の実施形態は単なる例示であり、例えば、ユニットの分割は論理的な機能の分割のみであり、実際に実施する場合、他の分割方法、例えば複数のユニット又は構成要素を組み合わせてもよく、別のシステムに集積するか、または一部の特徴を無視したり行わなくてもよい。さらに、図示または説明した相互カップリングまたは直接カップリングまたは通信可能な接続は、何らかのインターフェース、デバイスまたはユニットを介した間接カップリングまたは通信可能な接続でもよく、電気的またはその他の方式でもよい。
【０１４８】
また、本開示の各実施形態における各機能ユニットは、１つの処理ユニットに集積されていても、物理的に別々に存在していても、２つ以上の装置が集積されていてもよい。上記の集積されたユニット／モジュールはハードウェアの形で実施される。例えば、ハードウェアは、デジタル回路、アナログ回路などを含む回路としてもよい。ハードウェア構造の物理的実現は、物理装置を含むが、これらに限定されなく、物理装置はトランジスタ、メモリスタなどを含むがこれらに限定されない。計算装置内の計算モジュールは、ＣＰＵ、ＧＰＵ、ＦＰＧＡ、ＤＳＰ、ＡＳＩＣなどの任意の適切なハードウェアプロセッサとしてもよい。記憶装置は、ＲＲＡＭ（登録商標）、ＤＲＡＭ、ＳＲＡＭ、ＥＤＲＡＭ、ＨＢＭ、ＨＭＣなどの任意の適切な磁気記憶媒体または光磁気記憶媒体としてもよい。
【０１４９】
説明されたユニットは、物理的に分離されていてもいなくてもよく、すなわち一箇所に配置されてもよく、または複数のネットワークユニットにわたって分散されてもよい。実施形態の解決策の目的を達成するために、実際の必要性に応じていくつかまたはすべてのユニットを選択してもよい。
【０１５０】
以上、本開示の実施形態について詳細に説明したが、具体的な例を用いて本開示の原理および実施形態を本明細書に記載したが、実施形態の上記の説明は、本開示の方法およびその核となる概念の理解をサポートすることのみを目的とする。同時に、当業者であれば、本開示の概念によって、実施形態および本出願の応用範囲において変更することがある。まとめて、上記の明細書の内容は本開示を限定するものとして解釈されるべきではない。
【図１ａ】
2020177641.tif 000005
【図１ｂ】
2020177641.tif 000006
【図１ｃ】
2020177641.tif 000007
【図１ｄ】
2020177641.tif 000008
【図２】
2020177641.tif 000009
【図２ａ】
2020177641.tif 000010
【図３】
2020177641.tif 000011
【図３ａ】
2020177641.tif 000012
【図３ｂ】
2020177641.tif 000013
【図３ｃ】
2020177641.tif 000014
【図３ｄ】
2020177641.tif 000015
【図３ｅ】
2020177641.tif 000016
【図３ｆ】
2020177641.tif 000017
【図３ｇ】
2020177641.tif 000018