(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024023629
(43)【公開日】2024-02-21
(54)【発明の名称】区分線形近似を用いる深層ニューラルネットワークアーキテクチャ
(51)【国際特許分類】
G06N 3/04 20230101AFI20240214BHJP
G06N 3/063 20230101ALI20240214BHJP
【FI】
G06N3/04
G06N3/063
【審査請求】有
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023209123
(22)【出願日】2023-12-12
(62)【分割の表示】P 2019100574の分割
【原出願日】2019-05-29
(31)【優先権主張番号】16/023,441
(32)【優先日】2018-06-29
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.VERILOG
2.OPENCL
(71)【出願人】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】カムレシュ ピレイ
(72)【発明者】
【氏名】ガープリート エス.カルシ
(72)【発明者】
【氏名】アミット ミシュラ
(57)【要約】 (修正有)
【課題】消費電力、レイテンシ、シリコン面積の要件を解決する深層ニューラルネットワーク(DNN)の専用ハードウェアを提供する。
【解決手段】DNN100は、対数演算に関連づけられる入力を識別し、入力が包含される第1の範囲を識別し、第1の方程式の結果を、第1の方程式に関連づけられる複数のオペランドに基づいて計算し、かつ、対数演算に関連づけられる出力を戻すための対数回路を備える。対数演算は、対数回路により、区分線形近似を用いて実行されるべきものであり、第1の範囲は、対数演算の複数の区分線形近似(PLA)方程式に関連づけられる複数の範囲から識別され、かつ、複数のPLA方程式のうちの第1の方程式に対応し、出力は、少なくとも部分的に、第1の方程式の結果に基づいて生成される。
【選択図】
図1
【特許請求の範囲】
【請求項1】
対数回路を備える装置であって、前記対数回路は、
入力レジスタを介して、対数演算に関連づけられる入力を識別し、
範囲選択回路を用いて前記入力が包含される第1の範囲を識別し、
加算器/減算器回路を用いて、複数のオペランドに基づき、第1の方程式の結果を計算し、かつ、
出力レジスタを介して、前記対数演算に関連づけられる出力を戻すための回路を備え、
前記対数演算は、前記対数回路により、区分線形近似を用いて実行されるべきものであり、
前記第1の範囲は、前記対数演算の複数の区分線形近似(PLA)方程式に関連づけられる複数の範囲から識別され、かつ前記第1の範囲は、前記複数のPLA方程式のうちの第1の方程式に対応し、
前記出力は、少なくとも部分的に前記第1の方程式の前記結果に基づいて生成される、装置。
【請求項2】
前記対数演算は、人工ニューラルネットワーク演算に関連づけられる、請求項1に記載の装置。
【請求項3】
前記入力は、浮動小数点数を含み、前記浮動小数点数は、指数部と、仮数部とを含み、かつ、
前記出力は、固定小数点数を含み、前記固定小数点数は、整数部と小数部とを含む、請求項1に記載の装置。
【請求項4】
前記複数のオペランドは、前記仮数部と、1つまたは複数の小数部オペランドとを含み、前記1つまたは複数の小数部オペランドは、各々、2の累乗を含む分母を含む、請求項3に記載の装置。
【請求項5】
前記対数回路は、さらに、前記1つまたは複数の小数部オペランドを生成するための1つまたは複数のシフト回路を備える、請求項4に記載の装置。
【請求項6】
前記対数回路は、さらに、非バイアス指数部を生成すべく前記浮動小数点数の前記指数部からバイアスを減算するための減算器回路を備える、請求項3に記載の装置。
【請求項7】
前記出力レジスタを介して前記対数演算に関連づけられる前記出力を戻すための前記回路は、さらに、
前記固定小数点数の整数部を前記非バイアス指数部に基づいて生成し、かつ、
前記固定小数点数の前記小数部を前記第1の方程式の前記結果に基づいて生成する、請求項6に記載の装置。
【請求項8】
前記対数回路は、さらに、前記第1の方程式に関連づけられる前記複数のオペランドを選択するための1つまたは複数のマルチプレクサを備える、請求項1~7のいずれか一項に記載の装置。
【請求項9】
前記加算器/減算器回路は、前記複数のオペランドに対して1つまたは複数の加算演算または減算演算を実行する、請求項1~7のいずれか一項に記載の装置。
【請求項10】
逆対数回路をさらに備え、前記逆対数回路は、
逆対数演算に関連づけられる第2の入力を識別し、
前記第2の入力が包含される第2の範囲を識別し、
第2の方程式の第2の結果を、前記第2の方程式に関連づけられる第2の複数のオペランドに基づいて計算し、かつ、
前記逆対数演算に関連づけられる第2の出力を生成するための回路を備え、
前記逆対数演算は、前記逆対数回路により、区分線形近似を用いて実行されるべきものであり、
前記第2の範囲は、前記逆対数演算の第2の複数の区分線形近似(PLA)方程式に関連づけられる第2の複数の範囲から識別され、かつ前記第2の範囲は、前記第2の複数のPLA方程式のうちの第2の方程式に対応し、
前記第2の出力は、少なくとも部分的に前記第2の方程式の前記第2の結果に基づいて生成される、請求項1~7のいずれか一項に記載の装置。
【請求項11】
活性化関数回路をさらに備え、前記活性化関数回路は、前記対数回路と、前記逆対数回路とを備え、かつ前記活性化関数回路は、
複数の利用可能な活性化関数から選択される1つの活性化関数を実行するための命令を受信し、
1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行し、かつ、
前記活性化関数に関連づけられる活性化出力を生成するための回路をさらに備え、
前記活性化関数は、前記1つまたは複数の乗算演算または除算演算を含み、
前記1つまたは複数の対数演算は、前記対数回路を用いて実行され、かつ前記1つまたは複数の逆対数演算は、前記逆対数回路を用いて実行され、
前記活性化出力は、少なくとも部分的に、前記1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成される、請求項10に記載の装置。
【請求項12】
前記活性化関数は、さらに、1つまたは複数の指数演算を含み、かつ、
前記活性化関数回路は、さらに、前記1つまたは複数の指数演算を、区分線形近似を用いて実行するための指数回路を備える、請求項11に記載の装置。
【請求項13】
システムであって、
アプリケーションに関連づけられる情報を記憶するためのメモリと、
前記アプリケーションに関連づけられる1つまたは複数の命令を実行するためのプロセッサと、
複数の活性化関数を実行するための活性化関数回路とを備え、前記活性化関数回路は、
前記アプリケーションに関連づけられる活性化関数を実行するための命令を受信し、
1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行し、かつ、
前記活性化関数に関連づけられる出力を生成するための回路を備え、
前記活性化関数は、前記複数の活性化関数から選択され、かつ前記活性化関数は、前記1つまたは複数の乗算演算または除算演算を含み、
前記1つまたは複数の対数演算は、対数回路により、区分線形近似を用いて実行され、かつ前記1つまたは複数の逆対数演算は、逆対数回路により、区分線形近似を用いて実行され、
前記出力は、少なくとも部分的に、前記1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成される、システム。
【請求項14】
前記アプリケーションは、人工ニューラルネットワークを含み、かつ前記活性化関数は、前記人工ニューラルネットワークの動作に関連づけられる、請求項13に記載のシステム。
【請求項15】
前記1つまたは複数の乗算演算または除算演算を、前記1つまたは複数の対数演算および前記1つまたは複数の逆対数演算を用いて実行するための前記回路は、さらに、
前記1つまたは複数の乗算演算または除算演算に関連づけられる1つまたは複数のオペランドに対して、1つまたは複数の底2の対数演算を実行し、
前記1つまたは複数の底2の対数演算の1つまたは複数の結果に対して、1つまたは複数の加算演算または減算演算を実行し、かつ、
前記1つまたは複数の加算演算または減算演算の1つまたは複数の結果に対して、1つまたは複数の底2の逆対数演算を実行し、
前記1つまたは複数の底2の対数演算は、区分線形近似を用いて実行され、
前記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、請求項13に記載のシステム。
【請求項16】
前記活性化関数は、さらに、1つまたは複数の指数演算を含み、かつ、
前記活性化関数回路は、さらに、前記1つまたは複数の指数演算を、区分線形近似を用いて実行するための回路を備える、請求項13~15のいずれか一項に記載のシステム。
【請求項17】
前記1つまたは複数の指数演算は、各々、底2を含み、かつ、
前記1つまたは複数の指数演算を、区分線形近似を用いて実行するための回路は、さらに、前記1つまたは複数の指数演算を、1つまたは複数の底2の逆対数演算を用いて実行し、前記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、請求項16に記載のシステム。
【請求項18】
前記複数の活性化関数には、
シグモイド関数と、
双曲線正接関数と、
swish関数と、
正規化線形ユニット関数とが含まれる、請求項13~15のいずれか一項に記載のシステム。
【請求項19】
前記シグモイド関数、前記双曲線正接関数または前記swish関数のうちの少なくとも1つは、専ら底2を含む1つまたは複数の指数演算を用いて定義され、かつ、
前記活性化関数回路は、さらに、前記1つまたは複数の指数演算を、1つまたは複数の底2の逆対数演算を用いて実行するための回路を備え、前記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、請求項18に記載のシステム。
【請求項20】
機械に、
活性化関数回路により、複数の利用可能な活性化関数から選択される活性化関数を実行するための命令を受信する手順と、
1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行する手順と、
前記活性化関数に関連づけられる出力を生成する手順と
を実行させるためのプログラムであって
前記活性化関数は、前記1つまたは複数の乗算演算または除算演算を含み、
前記1つまたは複数の対数演算および前記1つまたは複数の逆対数演算は、区分線形近似を用いて実行され、かつ、
前記出力は、少なくとも部分的に、前記1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成される、プログラム。
【請求項21】
前記機械に、前記1つまたは複数の乗算演算または除算演算を、前記1つまたは複数の対数演算および前記1つまたは複数の逆対数演算を用いて実行させる前記命令は、さらに、前記機械に、
前記1つまたは複数の乗算演算または除算演算に関連づけられる1つまたは複数のオペランドに対して、1つまたは複数の底2の対数演算を実行させ、
前記1つまたは複数の底2の対数演算の1つまたは複数の結果に対して、1つまたは複数の加算演算または減算演算を実行させ、かつ、
前記1つまたは複数の加算演算または減算演算の1つまたは複数の結果に対して、1つまたは複数の底2の逆対数演算を実行させ、
前記1つまたは複数の底2の対数演算は、区分線形近似を用いて実行され、
前記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、請求項20に記載のプログラム。
【請求項22】
前記活性化関数は、さらに、1つまたは複数の指数演算を含み、かつ、
前記命令は、さらに、前記機械に、前記1つまたは複数の指数演算を、区分線形近似を用いて実行させる、請求項20に記載のプログラム。
【請求項23】
前記複数の利用可能な活性化関数のうちの少なくとも1つの活性化関数は、専ら底2を含む1つまたは複数の指数演算を用いて定義され、かつ、
前記命令は、さらに、前記機械に、前記1つまたは複数の指数演算を、1つまたは複数の底2の逆対数演算を用いて実行させ、前記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、請求項20~22のいずれか一項に記載のプログラム。
【請求項24】
請求項20から23のいずれか一項に記載のプログラムを記憶するコンピュータ可読記憶媒体。
【請求項25】
対数回路であって、
入力レジスタを介して、対数演算に関連づけられる入力を識別するための手段であって、前記対数演算は、前記対数回路により、区分線形近似を用いて実行されるべきものである、手段と、
範囲選択回路を用いて前記入力が包含される第1の範囲を識別するための手段であって、前記第1の範囲は、前記対数演算の複数の区分線形近似(PLA)方程式に関連づけられる複数の範囲から識別され、かつ前記第1の範囲は、前記複数のPLA方程式のうちの第1の方程式に対応する、手段と、
加算器/減算器回路を用いて、複数のオペランドに基づき、前記第1の方程式の結果を計算するための手段と、
出力レジスタを介して、前記対数演算に関連づけられる出力を戻すための手段であって、前記出力は、少なくとも部分的に前記第1の方程式の前記結果に基づいて生成される、手段と
を備える対数回路。
【請求項26】
前記入力は、浮動小数点数を含み、前記浮動小数点数は、指数部と、仮数部とを含み、かつ、
前記出力は、固定小数点数を含み、前記固定小数点数は、整数部と小数部とを含む、請求項25に記載の対数回路。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して、コンピュータアーキテクチャおよび設計の分野に関し、より具体的には、排他的でなく、深層ニューラルネットワーク(DNN)のための処理アーキテクチャに関する。
【背景技術】
【0002】
多くの異なるユースケース用に開発されている深層学習アプリケーションの数が増加の一途であることにより、深層ニューラルネットワーク(DNN)用に設計される専用ハードウェアに対する需要が高まっている。例えば、DNNは、典型的には、かなりの量のリアルタイム処理を必要とし、これには、畳み込み層、プーリング層、全結合層、等々といった、浮動小数点数に対する複数の複雑な演算層が包含されることが多い。しかしながら、DNN用の既存のハードウェアソリューションは、大量の電力消費、長いレイテンシ、多大なシリコン面積要件、等々を含む、様々な制限を抱えている。
【図面の簡単な説明】
【0003】
本開示は、添付の図面を参照して以下の詳細な説明を読めば、最もよく理解される。業界の標準的慣例に従って、様々な特徴は、必ずしも一定の縮尺で描かれず、単に例示のために使用されていることを強調しておく。明確に、または暗に示されている場合の縮尺は、単なる1つの例示を提供するものに過ぎない。他の実施形態において、様々な特徴の寸法は、説明を明確にするために任意に拡大または縮小されることがある。
【0004】
【
図1】対数および逆対数区分線形近似回路を用いて実装される深層ニューラルネットワーク(DNN)の一実施形態例を示す。
【0005】
【
図2A】深層ニューラルネットワーク(DNN)の統合型活性化関数回路の一実施形態例を示す。
【
図2B】深層ニューラルネットワーク(DNN)の統合型活性化関数回路の一実施形態例を示す。
【0006】
【
図3A】統合型活性化関数回路の活性化関数の例を示す。
【
図3B】統合型活性化関数回路の活性化関数の例を示す。
【
図3C】統合型活性化関数回路の活性化関数の例を示す。
【
図3D】統合型活性化関数回路の活性化関数の例を示す。
【
図3E】統合型活性化関数回路の活性化関数の例を示す。
【0007】
【
図4】底2の指数項を有する修正された活性化関数式を用いて実装される統合型活性化関数回路の一実施形態例を示す。
【0008】
【
図5A】区分線形近似を用いて実装される対数回路の一実施形態例を示す。
【
図5B】区分線形近似を用いて実装される対数回路の一実施形態例を示す。
【
図5C】区分線形近似を用いて実装される対数回路の一実施形態例を示す。
【0009】
【
図6A】区分線形近似を用いて実装される逆対数回路の実施形態例を示す。
【
図6B】区分線形近似を用いて実装される逆対数回路の実施形態例を示す。
【
図6C】区分線形近似を用いて実装される逆対数回路の実施形態例を示す。
【0010】
【
図7】区分線形近似を用いて実装される指数回路の一実施形態例を示す。
【0011】
【
図8】人工ニューラルネットワークを実装するために使用される処理アーキテクチャの一例のフローチャートを示す。
【0012】
【
図9A】人工ニューラルネットワークの処理アーキテクチャ例の、サポートされる並列演算数に対するスケーラビリティを示す。
【
図9B】人工ニューラルネットワークの処理アーキテクチャ例の、サポートされる並列演算数に対するスケーラビリティを示す。
【0013】
【
図10A】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【
図10B】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【
図10C】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【
図10D】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【
図10E】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【0014】
【
図11A】従来の活性化関数を用いて実装されるDNNと、底2の指数項による修正された活性化関数を用いて実装されるDNNの例を示す。
【
図11B】従来の活性化関数を用いて実装されるDNNの例を示す。
【
図11C】底2の指数項による修正された活性化関数を用いて実装されるDNNの例を示す。
【0015】
【
図12A】従来の活性化関数を用いて実装されるDNNのパフォーマンス態様を示す。
【
図12B】修正された活性化関数を用いて実装されるDNNのパフォーマンス態様を示す。
【
図13】従来の活性化関数を用いて実装されるDNNと修正された活性化関数を用いて実装されるDNNとのパフォーマンス態様の比較を示す。
【0016】
【
図14A】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【
図14B】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【
図15】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【
図16】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【
図17】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【
図18】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【発明を実施するための形態】
【0017】
以下の開示は、本開示の異なる特徴を実装するための多くの異なる実施形態、または実施例を提供する。以下、本開示を単純化するために、コンポーネントおよび配置の具体例を記述する。当然ながら、これらは単なる例であって、限定を意図するものではない。さらに、本開示では、様々な例において参照番号および/または文字を繰り返す場合がある。この繰り返しは、単純さおよび明瞭さを目的とするものであって、それ自体、論じる様々な実施形態および/または構成間の関係を示すものではない。異なる実施形態は、異なる利点を有する場合があり、よって必ずしも特定の利点がいずれかの実施形態の要件であるとは限らない。
【0018】
[対数/逆対数区分線形近似回路を用いる深層ニューラルネットワーク(DNN)推論]
機械学習(例えば、深層学習)に依存する人工知能アプリケーションの数は、増加の一途であることから、人工ニューラルネットワーク(例えば、深層ニューラルネットワーク、畳み込みニューラルネットワーク、順伝播型ニューラルネットワーク、再帰型ニューラルネットワーク、等々)を実装するように設計される専用ハードウェアが強く求められている。深層学習アプリケーションには、低電力、小面積および高速のハードウェアが理想的である。
【0019】
具体的には、深層ニューラルネットワーク(DNN)等の人工ニューラルネットワークは、畳み込み層、プーリング層、全結合層、等々のような複数層の処理ノードまたは「ニューロン」を用いて実装される。各層内のノードは、入力および関連する重み(典型的には、ベクトルとして表される)の集まりに対し計算を実行して出力を生成し、これらの出力が次に、次層のノードへの入力として使用される。各層内のノードにより実行される計算は、典型的には、関連づけられる重み、ならびに各ノードが「活性化される」べきかどうかの決定に使用される活性化関数に基づいて、入力を変換することを含む。さらに、これらの層は、典型的には、大域的最小値に到達するために、特定用途の要件に基づいてこの方法で反復される。
【0020】
さらに、最先端のDNNは、典型的には、単精度(32ビット)の浮動小数点形式を用いて表される数値に対する演算を用いて実装される。DNN推論は、畳み込み層、プーリング層、全結合層、等々のような複数の複雑な演算層を包含することから、概して、これらの浮動小数点数に対する大量のリアルタイム処理を必要とする。さらに、これらの複雑な演算は、乗算を伴うことが多く、既存のDNNソリューションにおいては、浮動小数点乗算器が重要なコンポーネントの1つとなる。しかしながら、浮動小数点乗算器は、消費電力、シリコン面積およびレイテンシの点で極めてコスト高である。さらに、場合によっては、DNN演算を単純化するためにルックアップテーブル(LUT)が使用されることもあるが、LUTも同様に、コストの高いシリコン面積を必要とする。
【0021】
したがって、場合によっては、DNNおよび他のタイプの人工ニューラルネットワークの実装に使用されるハードウェアのパフォーマンスを高めかつ/または必要なシリコン面積を縮小するために、DNN最適化技術が活用されることがある。しかしながら、これらのDNN最適化技術は、典型的には、演算コストを、全体的な精度を下げかつ/または基本的な演算の数を減らして(例えば、畳み込み層、プーリング層、等々の数を制限して)削減することに焦点を合わせたものである。例えば、いくつかの実施形態において、DNNの実装に使用されるハードウェアは、より少ないビット数を有し、よってより低い精度を提供する浮動小数点表示(例えば、8ビットの量子化浮動小数点から16ビットの固定小数点表示まで)を処理するように設計されることがある。しかしながら、より低い精度の浮動小数点表示の使用は、場合により、特により大きいデータセットに対して、受け入れ難い精度損失を招く。さらに、基本的な演算層の数を減らすDNN最適化技術は、DNNトレーニングの間に大域的最小値に到達するための収束時間が不足するといった悪影響を与えることがある。さらに、これらの様々な最適化は、やはり浮動小数点乗算器を必要とし、同じく乗算器回路の電力、面積およびパフォーマンスの面で制限がある。
【0022】
事例によっては、乗算器回路の要件を緩和するために、DNNは、ルックアップテーブル(LUT)を用いて対数、逆対数および/または指数計算を実行する回路を使用して実装されることがある。例えば、いくつかの実施形態において、対数、逆対数および/または指数演算の放物曲線は、複数のセグメントに分割されてもよく、個々の係数値は、曲線当てはめアルゴリズムを用いて事前に計算されてもよく、事前に計算された係数は、次に、メモリコンポーネント(例えば、ROM)を用いて実装されるルックアップテーブルに記憶されてもよい。この方式では、曲線上の任意の点についてax2+bx+cを計算するために、まず、係数a、bおよびcの値がルックアップテーブルからフェッチされ、次に、乗算器および加算器を用いて結果が計算される。しかしながら、この手法は、関連するLUTおよび乗算器用に多大なシリコン面積を必要とし、また、上式を計算するために複数のクロックサイクル(例えば、5~8クロックサイクル)を消費する場合がある。
【0023】
したがって、本開示は、DNN計算を、ルックアップテーブルおよび/または乗算器に依存することなく効率的に実行できるハードウェアの様々な実施形態について記述する。以下、添付の図面をより具体的に参照して、本開示の特徴および機能性を実装するために使用され得る実施形態例について説明する。
【0024】
図1は、対数および逆対数区分線形近似回路を用いて実装される深層ニューラルネットワーク(DNN)100の一実施形態例を示す。図示されている例では、DNN100が、第1の畳み込み層106aと、最大プーリング層106bと、第2の畳み込み層106cと、第3の畳み込み層106dと、全結合層106eとを含む複数の層106a~106eを用いて実装されている。さらに、DNN100は、乗算器のないニューラルネットワーク・マイクロアーキテクチャを用いて実装され、上記アーキテクチャは、個々のDNN層106a~106eに対する計算を実行するために、乗算器回路ではなく対数および逆対数回路110、120を用いる。具体的には、対数および逆対数回路110、120は、底2の対数(log
2)および底2の逆対数(antilog
2)をとる計算を実行するが、これらの計算は、典型的には所定のDNN層106において必要とされる乗算演算を加算へ変換するために活用されることが可能である。さらに、対数および逆対数回路110、120は、区分線形近似を用いてlog
2およびantilog
2計算を実行し、これにより、各計算を単一のクロックサイクルで、かつルックアップテーブルも乗算器も使用せずに実行することができる。この方式において、図示されている実施形態は、DNN処理レイテンシを短縮すると同時に、乗算器回路およびルックアップテーブルの必要性も排除し、これにより、ハードウェアに必要なシリコン面積が著しく減少する。対数回路110および逆対数回路120の実装例については、
図5A~
図5Cおよび
図6A~
図6Cに関連してさらに示しかつ説明する。
【0025】
一例として、DNNの畳み込み層(例えば、DNN100の層106a、106c、106d)に関しては、畳み込みを、概して、次式で表すことができる(ここで、f(n)およびg(n)は、浮動小数点ベクトルである)。
【数1】
この式では、各加算項が乗算を用いて計算される。しかしながら、式の両側に対してlog
2をとると、上式は、次のようになる。
【数2】
さらに、式の左辺を、y(n)として定義すると、すなわち、log
2(f*g)(n)=y(n)とすると、式は、
【数3】
になる。しかしながら、畳み込みは、log
2計算の結果の累積によっては実行され得ないことから、上式は、もはや畳み込みを目的とするものではなくなる。したがって、各加算項に対し、その累積に先行して(例えば、各加算項をlog
2ドメインから元のドメインへ戻すために)antilog
2をとる必要がある。
【数4】
これで、畳み込みのためのこの代替方程式では、各加算項が加算を用いて計算される。こうして、先に示した元の畳み込み方程式は、各加算項の計算に乗算を必要とするが、この代替的な畳み込み方程式は、乗算ではなく加算を必要とする。したがって、この代替方程式は、基本的に、元の畳み込み方程式に必要な乗算を加算に変換するために、log
2(およびantilog
2)演算を活用する。例えば、畳み込み方程式におけるf(n)およびg(n)は、浮動小数点数(例えば、IEEE-754単精度浮動小数点数)であることから、
図5A~
図5Cおよび
図6A~
図6Cに関連してさらに論じるように、仮数ビットに対してlog
2およびantilog
2をとり、一方で指数および符号ビットは、別々に処理される。このようにして、対数および逆対数回路110、120は、複雑な浮動小数点乗算演算を回避するために、元の式の代わりにこの代替方程式を使用する畳み込みを実行するために使用されることが可能である。
【0026】
別の例として、全結合層(例えば、DNN100の層106e)は、DNNの最後の層であって、最終的な推論および決定の実行を担当する。概して、全結合層は、畳み込み層に類似するが、典型的には、一次元ベクトルを包含する。したがって、全結合層は、乗算演算を加算に変換するために、畳み込み層と同様の方法でlog2計算を活用することができる。しかしながら、全結合層は、DNNの最後の層であることから、最終的な出力は、log2ドメインではなく通常のドメインになければならない。
【0027】
例示すると、全結合層は、概して、次式を用いて表すことができる。
【数5】
畳み込みと同様に、加算項において乗算を加算に変換するために、方程式の両側に対してlog
2をとることができる。式の両側に対してlog
2をとり、さらに式の左辺をy
fclで置換すると、式は、次のようになる。
【数6】
次いで、個々の加算項に対して、その累積に先行してantilog
2をとることができ、こうして、加算項がlog
2ドメインから元の通常のドメインへ戻される。
【数7】
このようにして、全結合層の最終的な出力は、log
2ドメインではなく通常のドメインに存する。さらに、元の式で必要とされる乗算は、この代替方程式では加算に変換されている。
【0028】
図示されている実施形態では、例えば、DNN100が、第1の畳み込み層106aと、最大プーリング層106bと、第2の畳み込み層106cと、第3の畳み込み層106dと、全結合層106eとを含む複数の層106a~106eを用いて実装されている。各層106a~106eは、入力(X)101a~101eを、所定の層の重みベクトル(W)102a~102dと共に用いて計算を実行し、対応する出力(Y)103a~103fを生成する。さらに、最初の入力ベクトル(X)101aは、DNN100の第1の畳み込み層106aに供給され、残りの各層106b~106eには、先行層の出力(Y)103a~103dがその入力(X)101b~101eとして供給される。
【0029】
さらに、区分線形近似を用いて実装される対数および逆対数回路110、120が、DNN100の各層106における計算を実行するために活用され、こうして乗算器回路およびルックアップテーブルの必要性が排除され、同時にレイテンシも短縮される。例えば、対数回路110は、log2計算を実行して浮動小数点数を固定小数点数に変換し、これにより、浮動小数点乗算等の複雑な演算が固定小数点加算に変換されることを可能にし、かつ逆対数回路120は、続いて固定小数点数を浮動小数点数へ戻すためにantilog2計算を実行する。さらに、対数および逆対数回路110、120は、区分線形近似を用いて各々のlog2およびantilog2計算を実行し、これにより、各計算が単一のクロックサイクルにおいて実行されることを可能にする。
【0030】
図示されている実施形態では、例えば、対数回路110は、元の入力ベクトル(X)101aおよび各重みベクトル(W)102a~102dを、それらがDNN100へ供給される前にlog2ドメインに変換するために使用され、一方で、逆対数回路120は、全結合層106eの最終的な出力(Y)103fをlog2ドメインから通常のドメインへ戻すために使用される。さらに、必要に応じてlog2ドメインと通常のドメインとの間で変換するために、DNN100の隠れ層(例えば入力層と出力層との間の中間層)全体にわたって追加的なantilog2およびlog2演算(不図示)も実行される。例えば、先に説明したように、畳み込み層は、各加算項が、その累積に先行して通常のドメインに戻されることを必要とし、よって、各加算項を累積する前にantilog2演算が実行されなければならない。しかしながら、隠れ層の最終的な出力は、続いてlog2ドメインへ戻された後に次の層へ提供され、次層における乗算演算が引き続き回避される。
【0031】
例えば、各隠れ層ノードの結果は、典型的には、そのノードが「活性化」されるべきかどうかを決定する活性化関数へ送られ、次いで活性化関数の出力が次層へ入力として供給される。したがって、次層における乗算演算を回避するために、隠れ層ノードの活性化関数のlog2が次層へ供給される。例えば、隠れ層ノードが畳み込み成分の計算を目的としてantilog2演算を実行すると、結果は、活性化関数へ送られる前にlog2ドメインへ戻される。この方式では、各隠れ層ノードによって計算される出力(Y)は、それが次層への入力(X)として提供される時点で既にlog2ドメインにある。
【0032】
したがって、図示されている実施形態は、スケーラビリティが高く携帯可能なフレキシブルで小面積のハードウェア設計を用いて、低レイテンシ、高精度および電力消費低減を含む多くの利点を提供する。例えば、図示されている実施形態では、DNN100は、区分線形近似を用いてlog2およびantilog2計算を実行する対数および逆対数回路110、120を使用して実装され、これにより、ハードウェア設計における乗算器回路およびルックアップテーブルの必要性が排除される。この方式において、図示されている実施形態は、(例えば、乗算器およびルックアップテーブルの排除により)ハードウェアの必要なシリコン面積、電力消費、およびレイテンシを大幅に減らし、しかも高精度を提供する。具体的には、提案しているマイクロアーキテクチャは、各log2およびantilog2計算を単一のクロックサイクルで実行し、これにより、データパスを介する遅延を減らし、ひいてはハードウェアの全体的なレイテンシを短縮する。
【0033】
提案しているマイクロアーキテクチャは、高度にスケーラブルでもある。具体的には、提案しているマイクロアーキテクチャのフレキシブルな実装は、サポートされる並列演算の数を増やすために、ハードウェアが必要に応じて複製されることを可能にする。例えば、提案しているマイクロアーキテクチャは、任意の数の対数および逆対数回路110、120を用いて実装されてもよい。この方式において、提案しているマイクロアーキテクチャは、特定のアプリケーションまたはユースケースにより必要とされる並列演算の数をサポートするために、容易にスケーリングされることが可能である。また、提案しているマイクロアーキテクチャの精度も、アプリケーションの要件に基づいてスケーリングされることが可能である。例えば、あるアプリケーションがより高い精度を要求すれば、対数および逆対数回路110、120により使用される区分線形近似モデルにおけるセグメントの数を増やして、精度要件に対処することができる。この方式において、提案しているマイクロアーキテクチャは、モバイルデバイス(例えば、ハンドヘルドまたはウェアラブルデバイス)、ドローン、サーバおよび/またはその他、DNN演算を依存性または修正なしに必要とする任意の人工知能ソリューションを含む任意の製品またはフォームファクタ用に容易に移植される、かつ/またはスケーリングされることが可能であることから、極めてポータブルでもある。
【0034】
[区分線形近似を用いるDNN活性化関数回路]
人工知能(AI)能力を用いて設計される製品の数は、増加の一途であることから、基本的なAI演算(例えば、ニューラルネットワーク活性化関数)を加速できる、かつ同時に、特にリソースに制約のあるフォームファクタ(例えば、小型、低電力エッジデバイス)用の様々な異なる実装例および関連アルゴリズムをサポートするのに十分な汎用性も残している専用ハードウェアが強く求められている。
【0035】
具体的には、機械学習(例えば、深層学習)に依存するAIソリューションの人気の高まりにより、人工ニューラルネットワーク(例えば、深層ニューラルネットワーク、畳み込みニューラルネットワーク、順伝播型ニューラルネットワーク、再帰型ニューラルネットワーク、等々)用に設計されるハードウェアアクセラレーションが求められることとなっている。例えば、深層ニューラルネットワーク(DNN)は複数層の「人工ニューロン」を用いて実装され、それらの人工ニューロンは典型的には、非線形活性化関数を用い、それぞれが特定の入力に応答して「活性化」すべきかどうかを決定する処理ノードである。例えば、ある活性化関数は、特定の処理ノードまたは「人工ニューロン」が活性化すべきかどうかを判断するために、典型的には非線形変換を用いて入力を出力にマッピングする関数である。活性化関数の使用は、DNNの重要な一態様であるが、それはまた極めて計算集約的でもあり得る。
【0036】
DNNの実装に使用できる活性化関数には、例の中でもとりわけシグモイド、双曲線正接(Tanh)、正規化線形ユニット(ReLU)、漏洩ReLUおよびSwishを含む多くの異なるタイプがある。活性化関数の選択は、DNNのトレーニングダイナミクスおよびタスクパフォーマンスに大きく影響する。したがって、場合によっては、トレーニングダイナミクスおよびパフォーマンスを向上させるために、DNNは、単一のニューラルネットワーク内で複数の活性化関数を用いて実装されてもよい。DNNの計算エンジンは、これらの活性化関数を実装するための専用ハードウェアにも依存することがあり、これは、典型的には、シリコン上でかなりの面積を占める。例えば、最先端のDNN用に設計されるハードウェアは、典型的には、単精度(32ビット)浮動小数点数を処理し、かつルックアップテーブル(LUT)手法を用いて活性化関数を実装する。しかしながら、活性化関数に対するルックアップテーブル(LUT)手法の使用は、シリコン面積、電力消費およびレイテンシを増加させ、これらは各々、DNN内のニューロン数の増加に伴って増加し続ける。さらに、各活性化関数は、その固有のルックアップテーブルを必要とすることから、単一のDNNにおける複数の活性化関数の使用は、必要なルックアップテーブルの数を増やし、よってシリコン面積、電力およびレイテンシにさらに影響を与える。
【0037】
一例として、ルックアップテーブル手法を使用すると、活性化関数の曲線は、典型的には、ある区間[-m、m](「m」は実数)で境界が定められ、境界を定めた曲線は、次に、複数のセグメントに分割されることがある。次には、曲線当てはめアルゴリズムを用いて個々の係数の値が事前に計算されてもよく、事前に計算された係数は、次に、メモリコンポーネント(例えば、ROM)を用いて実装されるルックアップテーブルに記憶されてもよい。この方式では、曲線上の任意の点についてax2+bx+cを計算するために、まず、係数a、bおよびcの値がルックアップテーブルからフェッチされ、次に、乗算器および加算器を用いて結果が計算される。しかしながら、この手法は、関連するルックアップテーブルおよび乗算器用に多大なシリコン面積を必要とし、また、上記の式を計算するために複数のクロックサイクル(例えば、5~8クロックサイクル)を消費する場合がある。
【0038】
例示すると、64ビットの係数幅(a:20ビット、b:20ビット、c:24ビット)を有する256個の均一なセグメントに分割される、区間[-3、3]に渡る有界曲線は、IEEE-754単精度浮動小数点数に対して21ビットの仮数精度を生み出す。所定の実施形態において、この手法は、各々41,853個および5,574個の合成ゲート(例えば、NAND等価ゲート)を備える256×64ROMおよび計算ブロックを必要とする。このハードウェアをより低い精度(例えば、12ビットまたは10ビットの精度)でスケールダウンしても、ROM領域が節約されるだけである。例えば、所定の実施形態において、精度10ビットのシグモイド活性化関数に必要とされる推定シリコン面積は、17,120個の合成ゲートである。さらに、この面積は、ハードウェアがサポートする必要がある並列演算の数に基づいて、さらに複製またはインスタンス化されなければならない。
【0039】
したがって、DNNの活性化関数を実装するために使用される既存のハードウェア(例えば、ルックアップテーブルを用いて実装されるハードウェア)は、例の中でもとりわけ、コストの高いシリコン面積要件、不満足な電力消費および長い処理レイテンシを含む様々な欠点を有する。これらの欠点は、人工ニューロン、並列演算および/または活性化関数の数を増やすこと等によりハードウェアがスケーリングされるにつれてさらに拡大する。さらに、各活性化関数に対して別々のハードウェアブロックおよび/またはルックアップテーブルを使用することなく複数の活性化関数を実装できる統合されたハードウェアソリューションは、存在しない。
【0040】
したがって、本開示は、後に詳述するように、ルックアップテーブルを使用することなく複数のDNN活性化関数をサポートする統合されたハードウェアソリューションの様々な実施形態について記述する。
【0041】
図2Aおよび
図2Bは、人工ニューラルネットワーク(例えば、深層ニューラルネットワーク(DNN))の統合型活性化関数(AF)回路200の一実施形態例を示す。具体的には、AF回路200は、単一のハードウェアコンポーネント上でルックアップテーブルに依存することなく複数のDNN活性化関数をサポートする。
【0042】
例えば、図示されている実施形態において、AF回路200は、各活性化関数の必要な計算を単純化するために、区分線形近似を用いて実装される指数、底2の対数(log2)および底2の逆対数(antilog2)をとる計算を活用する新規アルゴリズムを用いて、個々の活性化関数を実装する。例えば、多くの活性化関数は、典型的にはコストの高い乗算器回路を用いて実装される複雑な指数、除算および/または乗算演算を包含する非線形関数である(例えば、除算は、分子に分母の逆数を乗じる乗算器回路を用いて実装されることがある)。しかしながら、AF回路200は、log2およびantilog2計算を活用して、所定の活性化関数に必要な複雑な除算および/または乗算演算を排除し、代わりにこれらを減算および/または加算に変換する。さらに、AF回路200は、活性化関数に必要な計算をさらに単純化するために、指数、log2およびantilog2計算を、区分線形近似を用いて実装する。その結果、log2およびantilog2の計算を、単一のクロックサイクルで実行し、一方で指数計算を2クロックサイクルで実行することができる。この方式では、1つの活性化関数を僅か5クロックサイクルで計算することができ、かつスループットを増加させるために基本的な計算を容易にパイプライン化することができる。したがって、AF回路200は、区分線形近似を用いて実装されるlog2、antilog2および指数計算を活用して、活性化関数の基本的計算を単純化し、これにより、活性化関数のルックアップテーブルの必要性をなくし、乗算器回路要件を低減しかつ全体的なレイテンシを短縮する。この手法は、同様の精度を有する典型的なルックアップテーブル手法と比較して必要な合成ゲートの数が遙かに少ないことから、(例えば、ルックアップテーブルの排除および乗算器回路の低減に起因して)シリコン面積の大幅な節約に直結する。
【0043】
図示されている実施形態では、例えば、AF回路200は、区分線形近似を用いて各々log
2、antilog
2および指数計算を実行するための対数、逆対数および指数ブロック210、220、230を含む。例えば、実施形態によっては、対数、逆対数および指数ブロック210、220、230は、16セグメントの区分線形近似を用いて、IEEE-754単精度浮動小数点数の仮数部における12ビット精度(すなわち、1符号ビット+8指数ビット+12仮数ビット=21ビット精度)で実装されてもよい。対数ブロック、逆対数ブロックおよび指数ブロック210、220、230の実装例については、
図5A~
図5C、
図6A~
図6C、および
図7に関連してさらに示し、かつ説明する。
【0044】
AF回路200は、次のような活性化関数、すなわち、シグモイド、双曲線正接(Tanh)、正規化線形ユニット(ReLU)、漏洩ReLUおよびSwish、をサポートする構成可能回路である。しかしながら、他の実施形態では、AF回路200は、任意のタイプまたは数の活性化関数をサポートするように設計されてもよい。AF回路200は、オペコードを用いて、サポートされる活性化関数の何れをも使用するように構成されることが可能である。例えば、図示されている実施形態において、AF回路200は、DNNの実装における特定の一層またはノードにより望まれる活性化関数のタイプを選択するために、5ビットのオペコードを使用し、かつ本回路は、オペコード値を変更するだけで、他のタイプの活性化関数用に再構成されることが可能である。図示されている実施形態では、5つのオペコードビット202a~202eが、Tanh202a、シグモイド202b、Swish202c、ReLU202dおよび漏洩ReLU202eとして示され、これらの個々のビット値は、所望される活性化関数のタイプに基づいて設定される。表1は、オペコードビット202a~202eの値に基づく、サポートされる様々な活性化関数のためのAF回路200のハードウェア構成を明記したものである。
[表1:活性化関数のオペコード]
【表1】
【0045】
AF回路200の動作は、オペコードビット202a~202eを介してどの活性化関数が選択されるかに依存して変わる。したがって、AF回路200の機能性については、後に、AF回路200によりサポートされる様々な活性化関数を示す
図3A~
図3Eに関連してさらに説明する。
【0046】
図3Aは、シグモイド活性化関数のグラフを示し、数学的には、これを
【数8】
で表す。シグモイドの出力(y軸)は、0~1の範囲を有し、その形状は、滑らかな階段関数に似ていて、これが、シグモイドをDNN活性化関数として有益にする重要な特性である。具体的には、この関数は、滑らかで連続微分可能であって、勾配は、-4~4の区間で急峻である。これは、Xの僅かな変化がYの大きい変化を引き起こすことを意味し、DNNにおける誤差逆伝播法の重要な特性となる。しかしながら、シグモイド関数には、いくつかの欠点もある。例えば、シグモイドは、この関数が+4および-4を超える領域においてほぼ平坦であって勾配が極小となることから、DNNによるコース補正の実行を困難にするという勾配消失問題を抱える。さらに、出力の範囲が0~1であることから、出力は、原点を中心とする対称性ではなく、よって、勾配の更新が正方向に進む。
【0047】
概して、単精度浮動小数点形式で表現される所与の入力Xに対し、Xのシグモイド、またはSigmoid(X)は、次式を用いて計算することができる。
【数9】
しかしながら、上述の式は、コストの高い除算演算を必要とすることから、log
2およびantilog
2計算を活用して除算を回避することができる。例えば、対数関数の特性に基づいて、式の両辺にlog
2を取り込めば、除算を減算に変換することができる。
【数10】
しかしながら、f(X)を解くためには、式の両辺にantilog
2も取り込まなければならない。
【数11】
シグモイド関数のこの代替式は、除算が減算およびlog
2/antilog
2計算に置き換えられていることから、もはや除算を必要としない。さらに、指数、log
2およびantilog
2計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装されることが可能である。
【0048】
したがって、
図2Aおよび
図2Bに戻ると、AF回路200は、シグモイド関数を、上述の単純化された手法を用いて実装する。例えば、AF回路200がシグモイド関数用に構成される場合、シグモイドオペコードビット(参照番号202b)は、1に設定され、他の活性化関数の残りのオペコードビット(参照番号202a、c、d、e)は、0に設定される。この方式では、入力X(参照番号201)は、AF回路200に供給されると、mux206aおよびdemux207を通過してバイアスブロック208に至り、バイアスブロック208は、入力Xにバイアスを加えてこれを負数(-X)に変換する。次に、結果-Xは、指数ブロック230へ送られてe
-Xが計算され、次にこの結果は、加算器212へ送られて1+e
-Xが計算される。1+e
-Xの結果は、mux206dを通過して対数ブロック210bに至り、次いで対数ブロック210bがlog
2(1+e
-X)を計算する。
【0049】
これとは別に、減算器211へは、その第1のオペランドとして定数1が供給され、同時にその第2のオペランドとしてmux206eの出力が供給される。この場合、mux206eへ供給されるシグモイドのオペコードビット202bは、1に設定されていることから、mux206eは、定数値0をその出力として選択する。したがって、減算器211へは、定数値1および0が個々のオペランドとして供給され、よって減算器211は、1-0=1を計算する。結果としての値1は、次に、mux206fを通って対数ブロック210aへ送られ、次に、対数ブロック210aは、log2(1)(これは、0になる)を計算する。
【0050】
したがって、対数ブロック210aおよび210bは、各々log
2(1)およびlog
2(1+e
-X)の結果を出力し、次に、これらの結果が加算器/減算器213へオペランドとして送られる。この場合、加算器/減算器213は、減算を行ってlog
2(1)-log
2(1+e
-X)を計算し、次に、その結果が逆対数ブロック220へ送られ、そこでantilog
2計算
【数12】
が実行される。この方式では、逆対数ブロック220により計算される結果がシグモイド関数の最終結果に一致する。例えば、先に論じた対数関数の特性に基づいて、
【数13】
となる。したがって、AF回路200は、逆対数ブロック220の結果をシグモイド関数の最終出力Y(参照番号203)として出力する。
【0051】
さらに、先に述べたように、AF回路200の個々の指数、対数および逆対数ブロック210~230により実行される指数、log2およびantilog2計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装される。
【0052】
図3Bは、双曲線正接(Tanh)活性化関数のグラフを示し、数学的には、これを
【数14】
で表す。この関数は、-1~1の範囲の出力を有し、かつ原点を中心に対称性であって、シグモイド関数より急峻な勾配を有するが、やはり勾配消失問題を抱えている。
【0053】
概して、単精度浮動小数点形式で表現される所与の入力Xに対し、Xの双曲線正接、またはTanh(X)は、次式を用いて計算することができる。
【数15】
上式は、コストの高い除算演算を必要とすることから、
図3Aのシグモイド関数に関して述べたものと同様にしてlog
2およびantilog
2計算を活用することにより、除算を回避することができる。例えば、式の両辺にlog
2を取り込めば、除算を減算に変換することができる。
【数16】
さらに、f(X)を解くために、式の両辺にantilog
2を取り込むことができる。
【数17】
Tanh関数のこの代替式は、除算が減算およびlog
2/antilog
2計算に置き換えられていることから、もはや除算を必要としない。さらに、指数、log
2およびantilog
2計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装されることが可能である。
【0054】
したがって、
図2Aおよび
図2Bに戻ると、AF回路200は、Tanh関数を、上述の単純化された手法を用いて実装する。例えば、AF回路200がTanh関数用に構成される場合、Tanhオペコードビット(参照番号202a)は、1に設定され、他の活性化関数の残りのオペコードビット(参照番号202b、c、d、e)は、0に設定される。この方式では、入力X(参照番号201)は、AF回路200へ入力されると、まずシフタ204を通り、シフタ204は、Xを1ビットだけ左シフトしてその値を2倍にし、こうして出力2Xを生成する。さらに、AF回路200は、Tanh関数用に構成されることから、シフタ204からの出力2Xは、次に、mux206aおよびdemux207を介してバイアスブロック208へ送られる。例えば、mux206aの選択信号は、Tanhオペコードビット202aを基礎とし、これが1に設定されていることから、mux206aは、demux207へ送る出力として2Xを選択する。さらに、demux207の選択信号は、共に0に設定されるReLU/漏洩ReLUオペコードビット202d、eを入力として供給されるORゲート205の出力を基礎とすることから、demux207は、値2Xをバイアスブロック208へルーティングする。
【0055】
バイアスブロック208は、次に、2Xにバイアスを加算してこれを負数(-2X)に変換し、結果としての値-2Xは、次に指数ブロック230へ送られ、指数ブロック230が値e-2Xを出力する。指数ブロック230からの出力e-2Xは、次に、減算器211(mux206eを介して)および加算器212の双方へ送られ、減算器211は、次に、1-e-2Xの値を計算し、一方で加算器212は、1+e-2Xの値を計算する。減算器211および加算器212からの出力は、各々対数ブロック210aおよび210bへ送られ、対数ブロック210aおよび210bは、各々、log2(1-e-2X)およびlog2(1+e-2X)の値を計算する。
【0056】
対数ブロック210aおよび210bからの個々の出力は、次に、加算器/減算器213へオペランドとして送られ、加算器/減算器213は、減算を実行してlog
2(1-e
-2X)-log
2(1+e
-2X)を計算し、次にその結果が、逆対数ブロック220へ送られ、逆対数ブロック220がantilog
2計算
【数18】
を実行する。この方式では、逆対数ブロック220により計算される結果がTanh関数の最終結果に一致する。例えば、先に論じた対数関数の特性に基づいて、
【数19】
となる。したがって、AF回路200は、逆対数ブロック220の結果をTanh関数の最終出力Y(参照番号203)として出力する。
【0057】
さらに、先に述べたように、AF回路200の個々の指数、対数および逆対数ブロック210~230により実行される指数、log2およびantilog2計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装される。
【0058】
図3Cは、正規化線形ユニット(ReLU)活性化関数のグラフを示し、数学的には、これをY=max(0,X)で表す。ReLUは、広範に使用されている活性化関数であって、様々な利点を提供する。具体的には、ReLUは、勾配消失問題を回避する非線形関数であり、他の活性化関数ほど複雑でなく、よって計算コストがより低い、かつDNNを疎にかつより効率的にする好ましい特性を有する(例えば、その入力が負の場合、出力はゼロになり、よって対応するニューロンは活性化されない)。一方で、ReLUの出力がゼロになると、逆伝播の間に重みを更新することができず、よってReLUは、ニューラルネットワークの隠れ層でしか使用され得ない。
【0059】
概して、単精度浮動小数点形式で表現される所与の入力Xに対し、XのReLU、またはReLU(X)は、次式を用いて計算することができる。
【数20】
上式は、単純であって、コストの高い計算を全く必要とせず、よってその実装は、指数、log
2またはantilog
2計算を利用する必要がないことにより、比較的簡単である。
【0060】
例えば、
図2Aおよび
図2Bに戻ると、AF回路200がReLU関数用に構成される場合、ReLUオペコードビット(参照番号202d)は、1に設定され、他の活性化関数の残りのオペコードビット(参照番号202a、b、c、e)は、0に設定される。この方式では、入力X(参照番号201)がAF回路200へ供給されると、Xは、まずmux206aを通ってdemux207へ進み、次に、demux207がXをmux206cへルーティングする。これとは別に、mux206cへは、(mux206bを介して)定数値1も供給される。さらに、mux206cの選択信号は、Xの符号ビットを基礎とするものであることから、mux206cは、Xが正であるか負であるかに依存して、Xまたは0のいずれかをその出力として選択する。mux206cの出力は、ReLU関数の最終結果であることから、AF回路200の残りのロジックは、バイパスされ、よって、mux206cの出力が最終的に、ReLU関数に関するAF回路200の最終的な出力Y(参照番号203)として使用される。
【0061】
図3Dは、漏洩正規化線形ユニット(漏洩ReLU)活性化関数のグラフを示し、数学的には、これを
【数21】
で表す。ここで、a=0.01である。漏洩ReLUは、ReLUを改良した変形版である。例えば、ReLUの場合、入力が負であるとき、出力および勾配はゼロになり、逆伝播における重みの更新中に問題が生じる。漏洩ReLUは、入力が負の場合のこの問題に、入力と小値の線形成分(0.01)との乗算を用いることによって対処し、これにより、ニューロンが死滅することを防ぎ、かつ勾配がゼロになることも防ぐ。
【0062】
概して、単精度浮動小数点形式で表現される所与の入力Xに対し、Xの漏洩ReLU、またはLeakyReLU(X)は、次式を用いて計算することができる。
【数22】
ReLUの場合と同様に、漏洩ReLUの式は、単純であって、コストの高い計算を全く必要とせず、よってその実装は、指数、log
2またはantilog
2計算を利用する必要がないことにより、比較的簡単である。
【0063】
例えば、
図2Aおよび
図2Bに戻ると、AF回路200が漏洩ReLU関数用に構成される場合、漏洩ReLUオペコードビット(参照番号202e)は、1に設定され、他の活性化関数の残りのオペコードビット(参照番号202a、b、c、d)は、0に設定される。この方式では、入力X(参照番号201)がAF回路200へ供給されると、Xは、まずmux206aを通ってdemux207へ進み、次に、demux207がXをmux206cへルーティングする。これとは別に、mux206cへは、(mux206bを介して)定数値0.01も供給される。さらに、mux206cの選択信号は、Xの符号ビットを基礎とするものであることから、mux206cは、Xが正であるか負であるかに依存して、Xまたは0.01のいずれかをその出力として選択する。mux206cの出力は、漏洩ReLU関数の最終結果であることから、AF回路200の残りのロジックは、バイパスされ、よって、mux206cの出力が最終的に、漏洩ReLU関数に関するAF回路200の最終的な出力Y(参照番号203)として使用される。
【0064】
図3Eは、Swish活性化関数のグラフを示し、数学的には、これをY=X*Sigmoid(X)で表す。多くの場合、Swishは、他の活性化関数(例えば、ReLU)より高い精度を提供することが証明されている。
【0065】
概して、単精度浮動小数点形式で表現される所与の入力Xに対し、XのSwish、またはSwish(X)は、次式を用いて計算することができる。
【数23】
上式は、コストの高い除算演算を必要とすることから、
図3Aのシグモイド関数に関して述べたものと同様にしてlog
2およびantilog
2計算を活用することにより、除算を回避することができる。例えば、式の両辺にlog
2を取り込めば、除算を減算に変換することができる。
【数24】
さらに、f(X)を解くために、式の両辺にantilog
2を取り込むことができる。
【数25】
Swish関数のこの代替式は、除算が減算およびlog
2/antilog
2計算に置き換えられていることから、もはや除算を必要としない。さらに、指数、log
2およびantilog
2計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装されることが可能である。
【0066】
したがって、
図2Aおよび
図2Bに戻ると、AF回路200は、Swish関数を、上述の単純化された手法を用いて実装する。例えば、AF回路200がSwish関数用に構成される場合、Swishオペコードビット(参照番号202c)は、1に設定され、他の活性化関数の残りのオペコードビット(参照番号202a、b、d、e)は、0に設定される。この方式では、入力X(参照番号201)がAF回路200へ供給されると、Xは、mux206aを通ってdemux207へ進み、次に、demux207がXをバイアスブロック208へルーティングする。例えば、mux206aの選択信号は、Tanhオペコードビット202aを基礎とし、これが0に設定されていることから、mux206aは、demux207へ送る出力としてXを選択する。さらに、demux207の選択信号は、共に0に設定されるReLU/漏洩ReLUオペコードビット202d、eを入力として供給されるORゲート205の出力を基礎とすることから、demux207は、値Xをバイアスブロック208へルーティングする。
【0067】
バイアスブロック208は、次に、Xにバイアスを加算してこれを負数(-X)に変換し、結果としての値-Xは、次に指数ブロック230へ送られ、指数ブロック230が値e-Xを出力する。指数ブロック230の出力e-Xは、次に、加算器212へ送られて1+e-Xが計算され、その結果は、次にmux206dを介して対数ブロック210bへ送られ、次に対数ブロック210bがlog2(1+e-X)を計算する。
【0068】
これとは別に、mux206fの選択信号は、Swishオペコードビット202cを基礎とし、これが1に設定されていることから、mux206fは、対数ブロック210aへ送る出力としてXを選択し、次に対数ブロック210aがlog2(X)を計算する。
【0069】
対数ブロック210aおよび210bからの個々の出力は、次に、加算器/減算器213へオペランドとして送られ、加算器/減算器213は、減算を実行してlog
2(X)-log
2(1+e
-X)を計算し、次にその結果が、逆対数ブロック220へ送られ、逆対数ブロック220がantilog
2計算
【数26】
を実行する。この方式では、逆対数ブロック220により計算される結果がSwish関数の最終結果に一致する。例えば、先に論じた対数関数の特性に基づいて、
【数27】
となる。したがって、AF回路200は、逆対数ブロック220の結果をSwish関数の最終出力Y(参照番号203)として出力する。
【0070】
さらに、先に述べたように、AF回路200の個々の指数、対数および逆対数ブロック210~230により実行される指数、log2およびantilog2計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装される。
【0071】
したがって、
図2Aおよび
図2BのAF回路200の図示されている実施形態は、複数の活性化関数をサポートしかつスケーラビリティが高く携帯可能なフレキシブルで小面積のハードウェア設計を用いて、低レイテンシ、高精度および電力消費低減を含む多くの利点を提供する。具体的には、AF回路200は、ルックアップテーブルに依存することなく、(例えば、各活性化関数に別々のハードウェアコンポーネントを使用せず)単一のハードウェアコンポーネント上に複数のDNN活性化関数を実装する統合されたソリューションである。例えば、図示されている実施形態では、AF回路200は、区分線形近似を用いてlog
2、antilog
2および指数計算を実行する対数、逆対数および指数回路210、220、230を使用して実装され、これにより、ハードウェア設計におけるルックアップテーブルの必要性が排除され、かつ必要な乗算器回路が低減される。
【0072】
この方式において、図示されている実施形態は、ハードウェアの必要なシリコン面積、電力消費およびレイテンシを大幅に減らし、しかも高精度を提供する。例えば、同様の精度を有する典型的なルックアップテーブル手法と比較して必要な合成ゲートの数が遙かに少ないことから、ルックアップテーブルの排除および乗算器回路の低減は、シリコン面積の大幅な節約に直結する。さらに、log2およびantilog2の計算を、単一のクロックサイクルで実行し、一方で指数計算を2クロックサイクルで実行することができ、これにより、活性化関数の僅か5クロックサイクルでの計算が可能にされる。さらには、スループットを向上させるために、基本的な計算を容易にパイプライン化することができる。
【0073】
AF回路200は、単に適切なオペコードをプログラムするだけで異なる活性化関数用に構成され得ることから、AF回路200は、異なる活性化関数に関連づけられるルックアップテーブルをロード/プログラミングするためのソフトウェアへの依存も排除する。AF回路200上でオペコードをプログラムすることは、活性化関数用のルックアップテーブルをプログラムすることに比較して遙かに単純であり、必要とするクロックサイクル数も減る。
【0074】
AF回路200は、極めてスケーラブルでもある。具体的には、AF回路200のフレキシブルな実装は、サポートされる並列演算の数を増やすために、基本的なハードウェアが必要に応じて複製されることを可能にする。この方式では、AF回路200は、特定のアプリケーションまたはユースケースによって必要とされる並列演算の数をサポートするように、容易にスケーリングされることが可能である。また、AF回路200の精度も、アプリケーションの要件に基づいてスケーリングされることが可能である。例えば、あるアプリケーションがより高い精度を要求すれば、対数、逆対数および指数回路210、220、230により使用される区分線形近似モデルにおけるセグメントの数を増やして、精度要件に対処することができる。この方式において、AF回路200は、モバイルデバイス(例えば、ハンドヘルドまたはウェアラブルデバイス)、ドローン、サーバおよび/またはその他、DNN演算を依存性または修正なしに必要とする任意の人工知能ソリューションを含む任意の製品またはフォームファクタ用に容易に移植される、かつ/またはスケーリングされることが可能であることから、極めてポータブルでもある。
【0075】
図4は、人工ニューラルネットワーク(例えば、深層ニューラルネットワーク(DNN))の統合型活性化関数(AF)回路400の代替実施形態を示す。具体的には、AF回路400は、
図2Aおよび
図2BのAF回路200に類似するものであるが、所定の活性化関数は、指数定数eの累乗ではなく2の累乗を用いる修正された式を用いて実装されることが異なる。例示のために、シグモイド、Swishおよび双曲線正接活性化関数の元の式および修正された式を表2に記す。
[表2:2の累乗を用いる修正型活性化関数式]
【表2】
【0076】
表2に示すように、元の式における底eの指数は、修正された式において底2の指数に置き換えられる。この方式では、修正された式により、活性化関数の重要な非線形特性(例えば、曲線形状)がなおも示されているが、基本的な活性化関数ハードウェアは、遙かに効率的に実装されることが可能である。具体的には、底eの指数を底2の指数で置き換えることにより、指数演算の全てを逆対数回路によって実行することができることから、修正された式に指数回路はもはや必要ない。例えば、変数xの逆対数の底2は、2のx乗、(2x)と等価であることから、底2の逆対数演算を実行する逆対数回路を用いて、修正された活性化関数式に現出する底2の累乗を計算することができる。
【0077】
さらに、指数回路ではなく逆対数回路を用いて指数演算を実行することにより、AF回路400のレイテンシおよびシリコン面積の双方が減少する。比較として、例えば、
図2Aおよび
図2BのAF回路200は、区分線形近似を用いて実装される指数回路(例えば、
図7の指数回路)を使用して指数演算を実行し、これにより、指数演算を2クロックサイクルで実行することができ、かつ少なくとも1つの乗算器を必要とする。しかしながら、AF回路400は、区分線形近似を用いて実装される逆対数回路(例えば、
図6A~
図6Cの逆対数回路)を使用して指数演算を実行し、これにより、底2の逆対数演算を単一のクロックサイクルで実行することができ、乗算器を必要としない。したがって、指数回路を逆対数回路に置き換えることにより、AF回路400の全体的なレイテンシが1クロックサイクル短縮され、よって、
図2Aおよび
図2Bの活性化関数回路の5クロックサイクルに比較して、活性化関数が僅か4クロックサイクルで計算されることが可能にされる。さらに、AF回路400は、もはや如何なる乗算器回路も必要とせず、排除された指数回路は、乗算器を必要とする唯一のコンポーネントであったことから、結果的にかなりのシリコン面積が節約される。例えば、
図2Aおよび
図2BのAF回路200は、8,321個のゲートを用いて実装され得るが、AF回路400は、僅か7,221個のゲートを用いて実施されることが可能である。
【0078】
さらに、
図2Aおよび
図2BのAF回路200と同様に、AF回路400は、所定の活性化関数に必要な計算を単純化するために、区分線形近似を用いる底2の対数(log
2)および底2の逆対数(antilog
2)をとる計算を活用する。例えば、log
2およびantilog
2計算は、所定の活性化関数に必要な複雑な除算および/または乗算演算を排除し、代わりにこれらを減算および/または加算に変換するために使用されることが可能である。表3は、表2の修正されたシグモイド、Swishおよび双曲線正接活性化関数(eの代わりに2の累乗を用いる)の対数/逆対数方程式を記述している。修正された活性化関数についてのこれらの対数/逆対数方程式は、
図3A~
図3Eに関連して記述したような元の活性化関数の方式と同様の方式で導出される。
[表3:修正型活性化関数(2の累乗を用いる)の対数/逆対数バージョン]
【表3】
【0079】
図示されている実施形態において、AF回路400は、シグモイド、Swish、Tanh、ReLUおよび漏洩ReLU活性化関数を実装するように設計されている。シグモイド、SwishおよびTanh活性化関数は、表3の対数/逆対数方程式を用いて実装されるが、ReLUおよび漏洩ReLU活性化関数は、複雑な除算、乗算または指数演算を必要としないことから、
図3C~
図3Dの元の方程式を用いて実装される。これ以外のAF回路400の動作は、
図2Aおよび
図2BのAF回路200と同様である。
【0080】
[区分線形近似を用いて実装される対数、逆対数および指数回路]
図5A~
図5Cは、区分線形近似を用いて実装される対数回路500の一実施形態例を示す。具体的には、
図5Aが対数回路500の全体的実装を示し、
図5Bおよび5Cが対数回路500の所定のコンポーネントの実装を示す。
【0081】
対数回路500は、16セグメントの区分線形近似を用いて対数計算を実行する。この方式では、対数回路500にルックアップテーブルまたは乗算器回路は不要であり、対数計算を単一のクロックサイクルで実行することができる。対数計算のために区分線形近似を実行すべく対数回路500によって使用される式を、下表4に示す。
[表4:log
2(1+m)の区分線形近似方程式]
【表4】
【0082】
表4の式は、log2(1+m)の結果を計算または近似するように設計され、ここで、mは、単精度浮動小数点入力501の仮数部分を表す。例えば、仮数mは、常に0と1の間にあり、かつlog2(0)の結果は不定であることから、mが0のときの不確定な結果を避けるために、log2(m)ではなくlog2(1+m)が計算される。さらに、log2(1+m)を16セグメントの区分線形近似を用いて計算するために、区間[0,1]に渡るmの潜在的な値が、異なる16個の範囲またはセグメントに分割されて範囲0~15として指定され、log2(1+m)の結果を近似するために、各範囲に対して別々の方程式が定義される。さらに、個々の方程式は、専ら以下のタイプのオペランド、すなわち、m、2の累乗で除算されたmの分数および/または定数値、のいずれかに対する加算および/または減算を用いて定義される。この方式において、方程式が必要とする除算は、専ら2の累乗によるものであり、よって、全ての除算演算は、シフタを用いて実装されることが可能である。さらに、限定的な「シフトベース」の除算から生じる精度の損失は、所定の方程式において加算かつ/または減算される定数値の使用によって補償される。したがって、個々の方程式は、専ら加算、減算および/またはシフト演算を用いて実装されることが可能であり、よって、複雑な乗算/除算回路の必要性が排除される。
【0083】
図5Aは、表4の方程式を実装するように設計された対数回路500の全体的ロジックを示している。図示されている実施形態では、対数回路500に32ビットの単精度浮動小数点数が、入力501として供給され(例えば、入力レジスタを介して供給され)、対数回路500は、(例えば、出力レジスタを介して返される)出力503として、入力501のlog
2値を表す対応する32ビットの固定小数点数を計算する。
【0084】
入力501は、符号ビット(入力[31])と、8ビットの指数e(入力[30:23])と、23ビットの仮数m(入力[22:0])とを含む。入力501の符号と出力503の符号とが常に一致することを所与として、入力501の符号ビット(入力[31])は、出力503の対応するビット(出力[31])へ直に供給される。さらに、入力501の指数e(入力[30:23])は、8ビットの減算器502へ供給され、減算器502は、指数eから0x7Fのバイアスを減算して、対応する8ビットの非バイアス指数を生成する。例えば、数学的観点からすると、浮動小数点数の指数からバイアスを減算すると、結果は常に、指数のlog2に等しい値になる。したがって、結果としての非バイアス指数は、出力503に表される固定小数点数の整数部分(出力[30:23])として機能する。
【0085】
さらに、入力501の仮数mは、表4から、出力503の小数フィールド(出力[22:0])を計算するために使用されることになる対応する範囲および方程式を選択するために使用される。例えば、仮数mのうちの4つの最上位ビット(入力[22:19])は、範囲選択ロジック504へ入力として供給され、範囲選択ロジック504は、適用可能な範囲に対応する信号が1に設定され、一方で残りの信号は0に設定されるように、表4のmの個々の範囲に対応する16個の1ビット信号(範囲[0]~範囲[15])を出力する。
【0086】
範囲選択ロジック504の出力に基づいて、次に、マルチプレクサ(mux)508a~508cを用いて、表4から選択された方程式に対応するオペランドが選択され、これらのオペランドは、次に、加算器/減算器ロジック520へ入力として供給される。具体的には、mux508a~508cは、仮数mの(例えば、シフト演算を用いて生成される)様々な分数、ならびに所定の定数値を選択する。例えば、仮数mは、複数のシフタ506に供給され、シフタ506は各々、所定のビット数に渡るmの右シフトを実行して、表4の方程式全体に現出する2の累乗によるmの様々な分数(例えば、
【数28】
)を計算する。これらのシフタ506の出力は、次に、
図5Aに示される方法で個々のmux508a~508cへ入力として供給される。mux508bへは、別途mux508bからのオペランドを必要としない所定の方程式に関してはmux508bによってそれが出力されるという理由で、定数値0が入力の1つとして追加供給される。最後に、表4の所定の式に必要な定数値(例えば、
【数29】
)が定数生成ロジック510によって生成され、さらに、mux508cへ入力として供給される。定数生成ロジック510の実装については、後に
図5Bに関連してさらに例示し、かつ説明する。
【0087】
各mux508a~508cは、次に、表4の適用可能な方程式のオペランドの1つに対応する適切な出力を(例えば、範囲選択ロジック504に基づいて)選択し、これらの出力は、次に、加算器/減算器ロジック520へ入力として供給される。さらに、加算器/減算器ロジック520へは、仮数mも、それが表4の全ての方程式に対するオペランドであるという理由で、別の入力として直に供給される。
【0088】
加算器/減算器ロジック520は、次に、入力として供給された種々のオペランドに対して適切な加算および/または減算演算を実行し、計算結果は、次に、出力503の23ビットの小数フィールド(出力[22:0])として機能する。加算器/減算器ロジック520の実装については、後に
図5Cに関連してさらに例示し、かつ説明する。
【0089】
図5Bは、表4の所定の方程式が必要とする定数値の生成に使用される、
図5Aの対数回路500の定数生成ロジック510の一実装例を示す。図示されている実施形態において、定数生成ロジック510は、表4の方程式全体に現出する定数値の集合を生成するためのシフタ512と、表4の選択された式の対応する定数値を選択するためのマルチプレクサ(mux)514a、514bと、選択された定数値を加算するための加算器516とを含む。
【0090】
図示されている実施形態では、個々のシフタ512へ、(例えば、各シフタ512が生成する分数定数が正であるか、負であるかに依存して)+1または-1のいずれかである23ビットの定数値が入力として供給される。例えば、+1である23ビット定数値は、1つのシフタを除く、正の結果を生成する全てのシフタへ入力として供給され、一方で、-1である23ビットの符号付き表現は、負の結果を生成する唯一の残りのシフタ(例えば、9ビットの右シフトを実行して
【数30】
を生成するシフタ)へ入力として供給される。各シフタ512は、次に、所定のビット数による右シフトを実行して、表4の方程式全体に現出する個々の分数定数(例えば、
【数31】
)を生成する。
【0091】
さらに、表4の個々の方程式は、これらの分数定数のうちの0個、1個または2個のいずれかを必要とすることから、表4から選択される方程式に対する分数定数の適切な組合せが、2つのmux514a、514bを用いて選択される。具体的には、シフタ512の出力が、
図5Bに示される方式で2つのmux514a、514bへ入力として供給され、かつ23ビットの定数値0も、各mux514a、514bへ入力として供給される。各mux514a、514bは、次に、特定の分数定数または値0のいずれかを出力する。この方式では、mux514a、514bは、表4から選択される特定の方程式に依存して(例えば、
図5Aの対数回路500の範囲選択ロジック504を用いた決定の通りに)、シフタ512により生成される個々の分数定数のうちのゼロ個、1個または2個をまとめて出力することができる。
【0092】
mux514a、514bの出力は、次に、加算器516へ入力として供給され、加算器516は、これらの合計を計算する。加算器516からの結果は、次に、
図5Bの定数生成ロジック510により出力される最終的な定数値511として機能する。
【0093】
図5Cは、表4から選択される方程式のオペランドに対して加算および/または減算を実行するために使用される、
図5Aの対数回路500の加算器/減算器ロジック520の一実装例を示す。図示されている実施形態において、加算器/減算器ロジック520は、2つの加算器/減算器522a、522bと、2つのORゲート524a、524bとを含み、以下、これらについて詳述する。
【0094】
第1の加算器/減算器522aには、仮数mと、対数回路500のmux508bおよび508cの出力とがそのオペランドとして供給される。さらに、加算器/減算器522aによってこれらのオペランドに対し実行される加算および/または減算の特定の組合せは、ORゲート524aによって指示される。例えば、ORゲート524aには、入力として(例えば、対数回路500の範囲選択ロジック504により生成されるような)表4からの範囲11および15に対応する信号が供給され、ORゲート524aの出力は、次に、加算器/減算器522aへ供給される。この方式では、ORゲート524aの出力が0であるとき、加算器/減算器522aは、全てのオペランドを合計するが、ORゲート524aの出力が1であるとき(例えば、仮数mが範囲11または範囲15のいずれかに含まれるとき)、加算器/減算器522aは、mux508bの出力に対応するオペランドを減算し、かつ残りのオペランドを加算する。言い換えれば、範囲11および15を除く、表4のmの何れの範囲に対しても、加算器/減算器522aは、m+[mux508bの出力]+[mux508cの出力]、の結果を出力するが、範囲11および15に対しては、加算器/減算器522aは、m-[mux508bの出力]+[mux508cの出力]、の結果を出力する。
【0095】
第2の加算器/減算器522bには、第1の加算器/減算器522aの出力、および対数回路500のmux508aの出力が各々そのオペランドとして供給される。ORゲート524bの出力は、加算器/減算器522bがこれらのオペランドに対して加算を実行するか、減算を実行するかを指示する。例えば、ORゲート524bは、(例えば、対数回路500の範囲選択ロジック504により生成されるような)入力として表4の範囲7~15に対応する信号を供給され、ORゲート524bの出力は、次に、加算器/減算器522bへ供給される。この方式では、ORゲート524bの出力が0であるとき、加算器/減算器522bは、双方のオペランドを合計するが、ORゲート524bの出力が1であるとき(例えば、仮数mが範囲7~15のいずれかに含まれるとき)は、mux508aの出力が第1の加算器/減算器522aの出力から減算される。言い換えれば、mが表4の範囲0~6内にあるとき、加算器/減算器522bは、[第1の加算器/減算器522aの出力]+[mux508aの出力]を計算するが、mが範囲7~15内にあるとき、加算器/減算器522bは、[第1の加算器/減算器522aの出力]-[mux508aの出力]を計算する。第2の加算器/減算器522bの結果は、
図5Cの加算器/減算器ロジック520の最終的な出力521として機能する。
【0096】
対数回路500の動作を例示するために、入力例501の処理の流れを説明する。入力501の符号および指数フィールドは、それらの基本的な値に関係なく常に同じ方法で処理されることから、この例では、入力501の仮数mに関連づけられる処理に焦点を当てる。この例では、入力501の仮数m(入力[22:0])を、表4の範囲2に対応する、範囲0.125≦m<0.1875内にあるものとする。したがって、対数回路500は、表4の範囲2の対応する方程式、すなわち
【数32】
を実行する。対数回路500は、まず、元の入力501を処理して先に参照した方程式に対する個々のオペランドを生成しかつ/または取得し、対数回路500は、次に、式の結果を計算するためにこれらのオペランドを加算器/減算器ロジック520へ供給する。
【0097】
入力501の仮数フィールド(入力[22:0])に対応する第1のオペランドmは、入力501の関連するビットフィールドから加算器/減算器ロジック520へ直に供給される。
【0098】
先に参照した方程式の残りのオペランドは、mux508a~508cによって加算器/減算器ロジック520へ供給される。具体的には、表4の様々な式全体に渡って現出するオペランドの集合が、mux508a~508cへ入力として供給され、mux508a~508cは、次に、表4の適切な式に必要な特定のオペランドを出力する。例えば、仮数mの4つの最上位ビットに基づいて、範囲選択ロジック504は、mが包含される表4の特定の範囲を識別する信号を出力し、この範囲信号が、mux508a~508cにより、出力される適切なオペランドを選択するために使用される。この例では、mが表4の範囲2内にあることから、範囲選択ロジック504は、範囲2に対応する、別段で範囲[2]信号として示される範囲信号を出力する。範囲[2]信号に基づいて、mux508aは、
【数33】
(m>>2)をその出力として選択し、mux508bは、0をその出力として選択し、かつmux508cは、定数生成ロジック510により生成される定数511をその出力として選択する。
図5Bの定数生成ロジック510を参照すると、例えば、範囲[2]信号により、mux514aおよび514bは、
【数34】
(1>>6)および
【数35】
(-1>>9)をその個々の出力として選択し、これらの値は、次に、加算器516によって合計され、結果として得られる定数511が定数生成ロジック510によって出力される。したがって、mux508cは、対応する値
【数36】
を有するこの定数511をその出力として選択する。
【0099】
この方式では、最終的に以下のオペランドが加算器/減算器ロジック520へ供給される。
m:(入力501から直に供給)、
【数37】
:(mux508aより供給)、
0:(mux508bより供給)、
【数38】
:(mux508cより供給)。範囲[2]信号により、加算器/減算器ロジック520は、これら全てのオペランドに対する加算を実行し、よって、表4の範囲2の方程式である、式
【数39】
の結果を計算する。したがって、結果として得られる値は、対数回路500により生成される出力503における23ビットの小数フィールド(出力[22:0])として機能する。
【0100】
図6A~
図6Cは、区分線形近似を用いて実装される逆対数回路600の実施形態例を示す。具体的には、
図6Aおよび6Bは、逆対数回路600全体の代替実装を示し、
図6Cは、逆対数回路600の基本的な加算器/減算器ロジック620を示す。
【0101】
逆対数回路600は、16セグメントの区分線形近似を用いて逆対数計算を実行する。この方式では、逆対数回路600にルックアップテーブルまたは乗算器回路は不要であり、逆対数計算を単一のクロックサイクルで実行することができる。逆対数計算のために区分線形近似を実行すべく逆対数回路600によって使用される式を、下表5に示す。
[表5:antilog
2(η)=2
ηの区分線形近似方程式]
【表5】
【0102】
表5の方程式は、ηのantilog
2、すなわち2のη乗、または2
η、の結果を計算または近似するように設計され、ここで、ηは、固定小数点入力数601の小数部分(入力[22:0])を表す。例えば、逆対数回路600の固定小数点入力601は、典型的には、
図5A~
図5Cの対数回路500の固定小数点出力503に対する中間的DNN計算から導出される。さらに、先に論じたように、対数回路500の固定小数点出力503の小数部分は、m=0のときの不確定結果を回避するために、log
2(m)ではなくlog
2(1+m)として計算される。したがって、antilog
2(η)=2
ηを計算するための表5の方程式は、各方程式における定数値+1によって反映されるような、1+mに等しい値を生成するように設計されている。
【0103】
antilog2(η)=2ηを、例えば16セグメントの区分線形近似を用いて計算するために、区間[0,1]に渡るηの潜在的値が、異なる16の範囲またはセグメントに分割されて範囲0~15として指定され、antilog2(η)または2ηの結果を近似するために、各範囲に別々の方程式が定義される。さらに、個々の方程式は、専ら以下のタイプのオペランド、すなわち、η、2の累乗で除算されたηの分数および/または定数値、のいずれかに対する加算および/または減算を用いて定義される。この方式において、方程式が必要とする除算は、専ら2の累乗によるものであり、よって、全ての除算演算は、シフタを用いて実装されることが可能である。さらに、限定的な「シフトベース」の除算から生じる精度の損失は、所定の方程式において加算かつ/または減算される定数値の使用によって補償される。したがって、個々の方程式は、専ら加算、減算および/またはシフト演算を用いて実装されることが可能であり、よって、複雑な乗算/除算回路の必要性が排除される。
【0104】
図6Aは、表5の方程式を実装するように設計された逆対数回路600の全体的ロジックを示している。図示されている実施形態では、逆対数回路600に32ビットの固定小数点数が、(例えば、入力レジスタを介して供給される)入力601として供給され、逆対数回路600は、(例えば、出力レジスタを介して返される)出力603として、入力601のantilog
2結果を表す対応する32ビットの浮動小数点数を計算する。
【0105】
入力601は、符号ビット(入力[31])と、8ビットの整数部(入力[30:23])と、23ビットの小数部(入力[22:0])とを含む。入力601の符号と出力603の符号とが常に一致することを所与として、入力601の符号ビット(入力[31])は、出力603の対応するビット(出力[31])へ直に供給される。入力601の整数部分(入力[30:23])は、8ビット加算器602へ供給され、8ビット加算器602は、0x7Fのバイアスを加え戻して、浮動小数点出力603の指数フィールドとして機能する8ビットのバイアス指数を生成する。
【0106】
さらに、表5におけるηの値に対応する、入力601の小数部分(入力[22:0])は、表5から、浮動小数点出力603の仮数部(出力[22:0])を計算するために使用される対応する範囲および式を選択するために使用される。例えば、入力601の小数部分のうちの4つの最上位ビット(入力[22:19])は、範囲選択ロジック604へ入力として供給され、範囲選択ロジック604は、適用可能な範囲に対応する信号が1に設定され、一方で残りの信号は0に設定されるように、表5のηの個々の範囲に対応する16個の1ビット信号(範囲[0]~範囲[15])を出力する。範囲選択ロジック604の出力に基づいて、次には、マルチプレクサ(mux)608a~608dを用いて、表5の対応する式が必要とする、ηの必要な分数および分数定数等の所定のオペランドが選択される。
【0107】
具体的には、mux608aおよび608bを用いて、表5の対応する式が必要とするηの分数が選択される。例えば、ηの値(入力[22:0])は、シフタ606aによる第1の集合に供給され、シフタ606aは各々、所定のビット数に渡るηの右シフトを実行して、表5の方程式全体に現出する2の累乗によるηの様々な分数(例えば、
【数40】
)を計算する。これらのシフタ606aの出力は、次に、
図6Aに示される方法でmux608aおよび608bへ入力として供給される。mux608aおよび608bは、次に、範囲選択ロジック604の出力に基づいて決定される、表5の対応する方程式が必要とするηの特定の分数を選択する。
【0108】
同様に、mux608cおよび608dを用いて、表5の対応する方程式が必要とする分数定数が選択される。例えば、値1を有する23ビット定数は、シフタ606bによる第2の集合に供給され、シフタ606bは各々、所定のビット数に渡る右シフトを実行して、表5の方程式全体に現出する個々の分数定数(例えば、
【数41】
)を生成する。これらのシフタ606bの出力は、次に、
図6Aに示される方法でmux608cおよび608dへ入力として供給される。mux608cおよび608dは、次に、範囲選択ロジック604の出力に基づいて決定される、表5の対応する方程式が必要とする特定の分数定数を選択する。
【0109】
表5の対応する方程式に関してmux608a~608dにより選択される個々のオペランドは、次に、加算器/減算器ロジック620へ入力として供給される。ηの値(入力[22:0])および定数値1もまた、これらの値が表5の方程式の全てにおけるオペランドであるという理由で、加算器/減算器ロジック620へ入力として供給される。加算器/減算器ロジック620は、次に、表5の対応する式によって要求される通りに、これらのオペランドに対し、(例えば、範囲選択ロジック604の出力に基づいて)適切な加算および/または減算演算を実行する。加算器/減算器ロジック620からの結果は、次に、逆対数回路600の浮動小数点出力603(出力[22:0])の23ビットの仮数部分として機能する。加算器/減算器ロジック620の実装については、後に
図6Cに関連してさらに例示し、かつ説明する。
【0110】
図6Bは、区分線形近似を用いて実装される逆対数回路の代替実装600を示す。具体的には、
図6Aの逆対数回路が入力として固定小数点数の逆対数を計算するように設計されるのに対して、
図6Bの逆対数回路は、入力として、固定小数点数または浮動小数点数のいずれかの逆対数を計算することができる。この方式において、
図6Bの逆対数回路は、(例えば、
図5A~
図5Cの対数回路500の出力から導出される)log
2ドメインにおける固定小数点数、またはその元のドメインにおける浮動小数点数のいずれかのantilog
2を計算することができる。例えば、
図4に関連して説明したように、活性化関数(AF)回路400は、逆対数回路を2つの目的で、すなわち、(1)log
2ドメインにおける固定小数点数を元のドメインにおける浮動小数点数に戻すためと、(2)底2の浮動小数点指数の累乗を計算するために用いる。したがって、AF回路400の逆対数回路のオペランドは、(例えば、log
2ドメイン変換のための)固定小数点数、および(例えば、底2の累乗のための)浮動小数点数の双方を含む。したがって、AF回路400の逆対数回路は、固定小数点数または浮動小数点数のいずれかで表される入力を処理することができる
図6Bの逆対数回路を用いて実装されることが可能である。
【0111】
図6Bの逆対数回路の動作は、
図6Aのそれに類似するものであるが、後に詳述するように、入力601の整数または指数フィールド(入力[30:23])の処理方法が異なる。
【0112】
具体的には、入力601が固定小数点数であれば、これは、整数フィールド(入力[30:23])を含み、mux616へ入力の1つとして供給される。mux616の選択信号は、入力601が固定小数点数であるかどうかを示す2進信号である。したがって、mux616の選択信号は、入力601が固定小数点数である場合に値1を有し、これにより、mux616は、入力601の整数部分(入力[30:23])をその出力として選択し、次にこれが8ビット加算器602へオペランドとして供給される。加算器602は、次に、入力601の整数部分(入力[30:23])に0x7Fのバイアスを加え戻して8ビットのバイアス指数を生成し、次には、これが浮動小数点出力603の指数部分として機能する。
【0113】
あるいは、入力601が浮動小数点数であれば、これは、指数フィールド(入力[30:23])を含むことになる。指数フィールド(入力[30:23])は、8ビット減算器612へ供給され、8ビット減算器612は、0x7Fのバイアスを減算して、数学的には指数のlog2値を表す対応する8ビットの非バイアス指数を生成する。減算器612の出力は、次に、シフタ614へ供給され、シフタ614は、2の非バイアス指数累乗分だけ左シフトを実行して対応するantilog2値を計算し、これが次に、mux616へ入力の1つとして供給される。mux616の選択信号は、入力601が浮動小数点数である場合に値0を有し、これにより、mux616は、シフタ614からの値をその出力として選択する。mux616の出力は、次に、8ビット加算器602へオペランドとして供給され、8ビット加算器602は、0x7Fのバイアスを加え戻して8ビットのバイアス指数を生成し、次にこれが、浮動小数点出力603の指数部分として機能する。
【0114】
図6Cは、表5の対応する方程式のオペランドに対して加算および/または減算を実行するために使用される、
図6Aおよび6Bの逆対数回路600の加算器/減算器ロジック620の一実装例を示す。図示されている実施形態において、加算器/減算器ロジック620は、3つの加算器/減算器622a~622cと、3つのORゲート624a~624cとを含み、以下、これらについて詳述する。
【0115】
第1の加算器/減算器622aには、入力として次のようなオペランド、すなわち、ηの値(入力[22:0])、定数値1およびmux608aの出力、が供給される。これらのオペランドに対して実行される加算および/または減算の特定の組合せは、入力として範囲[0]~範囲[7]の信号を供給されるORゲート624aによって指示される。この方式では、ηが表5の範囲0~7内にある場合、ORゲート624aの出力が1になり、これにより、加算器/減算器622aが、η+1-[mux608aの出力]、を計算する。あるいは、ηが表5の範囲8~15内にある場合、ORゲート624aの出力が0になり、これにより、加算器/減算器622aが、η+1+[mux608aの出力]、を計算する。
【0116】
第2の加算器/減算器622bには、入力として次のようなオペランド、すなわち、mux608cの出力およびmux608dの出力、が供給される。これらのオペランドに対して実行される加算および/または減算の特定の組合せは、入力として範囲[4]、範囲[8]、範囲[9]、範囲[11]および範囲[12]の信号を供給されるORゲート624bによって指示される。この方式では、ηが表5の範囲4、8、9、11または12内にある場合、ORゲート624bの出力が1になり、これにより、加算器/減算器622bが、[mux608cの出力]-[mux608dの出力]、を計算する。あるいは、ηが表5の残りの範囲のいずれかにある場合、ORゲート624bの出力が0になり、これにより、加算器/減算器622bが、[mux608cの出力]+[mux608dの出力]、を計算する。
【0117】
第3の加算器/減算器622cには、入力として次のようなオペランド、すなわち、加算器/減算器622aの出力、加算器/減算器622bの出力およびmux608bの出力、が供給される。これらのオペランドに対して実行される加算および/または減算の特定の組合せは、入力として範囲[2]、範囲[10]、範囲[11]、範囲[14]および範囲[15]の信号の逆数またはNOT値を供給されるORゲート624cによって指示される。この方式では、ηが表5の範囲2、10、11、14および15以外のいずれかの範囲内にある場合、ORゲート624cの出力が1になり、これにより、加算器/減算器622cが、[加算器/減算器622aの出力]-[加算器/減算器622bの出力]-[mux608bの出力]、を計算する。あるいは、ηが表5の範囲2、10、11、14または15内にある場合、ORゲート624cの出力が0になり、これにより、加算器/減算器622cが、[加算器/減算器622aの出力]-[加算器/減算器622bの出力]+[mux608bの出力]、を計算する。
【0118】
第3の加算器/減算器622cの結果は、
図6Cの加算器/減算器ロジック620の最終的な出力621として機能する。
【0119】
図7は、区分線形近似を用いて実装される指数回路700の一実施形態例を示す。具体的には、指数回路700は、16セグメントの区分線形近似を用いて指数計算を実行する。この方式では、指数回路700にルックアップテーブルは不要であり、必要な乗算器は1つだけであって、指数計算を2クロックサイクルで実行することができる。
【0120】
指数計算のために区分線形近似を実行すべく指数回路700によって使用される式を、下表6に示す。
[表6:指数e
xの区分線形近似方程式]
【表6】
【0121】
表6の方程式は、自然指数関数exの結果を計算または近似するように設計され、ここで、eは、自然指数定数(例えばオイラー数)を表し、xは、32ビット浮動小数点入力701の23ビット仮数部(入力[22:0])を表す。例えば、exを16セグメントの区分線形近似を用いて計算するために、区間[0,1]に渡るxの潜在的な値が、異なる16個の範囲またはセグメントに分割されて範囲0~15として指定され、exの結果を近似するために、各範囲に対して別々の方程式が定義される。さらに、個々の方程式は、専ら以下のタイプのオペランド、すなわち、x、2x、2の累乗で除算されたxの分数および/または定数値、のいずれかに対する加算および/または減算を用いて定義される。この方式において、方程式が必要とする除算は、専ら2の累乗によるものであり、よって、全ての除算演算は、シフタを用いて実装されることが可能である。さらに、限定的な「シフトベース」の除算から生じる精度の損失は、所定の方程式において加算かつ/または減算される定数値の使用によって補償される。したがって、exの個々の方程式は、専ら加算、減算および/またはシフト演算を用いて実装されることが可能である。
【0122】
指数演算を完了するには、次に、結果的に得られる、eの入力701の仮数部分(入力[22:0])の累乗を表すexの値が、eの入力701の指数部分(入力[30:23])の累乗の値で乗算されなければならない。したがって、指数演算に必要な乗算演算は1回だけであり、よって、指数回路700に必要な乗算器回路は、1つだけである。
【0123】
図7は、指数回路700の全体ロジックを示す。図示されている実施形態では、指数回路700に、32ビットの浮動小数点数が入力701として供給され、指数回路700は、入力701で表される浮動小数点数で累乗される自然指数定数e、すなわちe
input、に一致する、対応する32ビットの固定小数点数を出力703として計算する。
【0124】
浮動小数点入力701は、符号ビット(入力[31])と、8ビットの指数部(入力[30:23])と、23ビットの仮数部(入力[22:0])とを含む。入力701の符号と出力703の符号とが常に一致することを所与として、入力701の符号ビット(入力[31])は、出力703の対応するビット(出力[31])へ直に供給される。
【0125】
入力701の指数部分(入力[30:23])は、8ビットの減算器702へ供給され、減算器702は、0x7Fのバイアスを減算して、8ビットの非バイアス指数を生成する。非バイアス指数で累乗された自然指数定数e、すなわちeunbiased_exponent、の値は、次に、mux710によって出力される。例えば、8ビットの非バイアス指数は、28=256の潜在値を有し、その範囲は、-128~+127である。非バイアス指数の256個全ての潜在値で累乗されたeの値(e-128、e-127、...、e0、e1、...、e127)は、事前に計算され、mux710へ定数入力として供給される。減算器702により出力される8ビットの非バイアス指数は、mux710の選択信号として機能し、これにより、mux710は、eunbiased_exponentに対応する事前計算された定数入力を選択する。次に、mux710の出力(eunbiased_exponent)は、さらに後述するように、乗算器712へそのオペランドの1つとして供給される。
【0126】
入力701の仮数部分(入力[22:0])は、表6の方程式に従って処理される。例えば、指数回路700は、仮数部で(入力[22:0])累乗された自然指数定数e、すなわちex、を計算するように設計され、ここでxは、仮数部(入力[22:0])を表す。さらに、指数回路700は、exを、表6の方程式に基づき、区分線形近似を用いて計算する。具体的には、(表6におけるxの値に対応する)入力701の仮数部分(入力[22:0])は、表6から、exの値を計算すべく使用される対応する範囲および式を選択するために使用される。例えば、入力701の仮数部のうちの4つの最上位ビット(入力[22:19])は、範囲選択ロジック704へ入力として供給され、範囲選択ロジック704は、適用可能な範囲に対応する信号が1に設定され、一方で残りの信号は0に設定されるように、表6のxの個々の範囲に対応する16個の1ビット信号(範囲[0]~範囲[15])を出力する。範囲選択ロジック704の出力に基づいて、次には、マルチプレクサ(mux)708a~708dを用いて、表6の対応する式が必要とする、xの必要な分数および方程式に現出する定数値等の所定のオペランドが選択される。
【0127】
例えば、mux708aおよび708bを用いて、表6の対応する式が必要とするxの分数が選択される。例えば、xの値(入力[22:0])は、シフタ706aによる第1の集合に供給され、シフタ706aは各々、所定のビット数に渡るxの右シフトを実行して、表6の方程式全体に現出する2の累乗によるxの様々な分数(例えば、
【数42】
)を計算する。これらのシフタ706aの出力は、次に、
図7に示される方法でmux708aおよび708bへ入力として供給される。mux708aおよび708bは、次に、範囲選択ロジック704の出力に基づいて決定される、表6の対応する方程式が必要とするxの特定の分数を選択する。
【0128】
同様に、mux708cおよび708dを用いて、表6の対応する方程式が必要とする、所定の方程式が必要とする分数定数および/または定数値1等の定数値が選択される。例えば、値1を有する23ビット定数は、シフタ706bによる第2の集合に供給され、シフタ706bは各々、所定のビット数に渡る右シフトを実行して、表6の方程式全体に現出する個々の分数定数(例えば、
【数43】
)を生成する。これらのシフタ706bの出力は、次に、
図7に示される方法でmux708cおよび708dへ入力として供給される。さらに、(表6の所定の方程式が必要とする)定数値1も、mux708dへ入力の1つとして供給される。mux708cおよび708dは、次に、範囲選択ロジック704の出力に基づいて決定される、表6の対応する方程式が必要とする特定の定数の組合せを選択する。
【0129】
表6の対応する方程式に関してmux708a~708dにより選択される個々のオペランドは、次に、加算器/減算器720へ入力として供給される。また、加算/減算器720へは、xの値(入力[22:0])も、表6の対応する方程式がxのオペランドを必要とするか、2xのオペランドを必要とするかに依存してその入力のうちの1つまたは2つのいずれかを介して供給される。例えば、xの値は、常に加算器/減算器720の入力の1つとして直に供給され、かつ場合によっては、mux709を介して加算器/減算器720の別の入力として供給されてもよい。具体的には、xの値および23ビットの定数0がmux709へ入力として供給され、mux709は、これらの値のうちの1つを選択して加算器/減算器720へ入力として供給する。例えば、表6の対応する式がオペランドとして2xではなくxを必要とすれば、xの値は既に加算器/減算器720の別の入力を介して直に供給されているという理由で、mux709は、定数0を加算器/減算器720への出力として選択する。あるいは、表6の対応する式がオペランドとしてxではなく2xを必要とすれば、結果的にxの値が2つの入力を介して加算器/減算器720へ供給されるという理由で、mux709は、xの値をその加算器/減算器720への出力として選択する。
【0130】
加算器/減算器720は、次に、表6の対応する式によって要求される通りに、これらのオペランドに対し、(例えば、範囲選択ロジック704の出力に基づいて)適切な加算および/または減算演算を実行する。この方式において、加算器/減算器720の出力は、入力701の仮数部(入力[22:0])で累乗された自然指数定数eに等しいexの最終結果に一致する。
【0131】
mux710の出力(入力701の非バイアス指数で累乗されたe)、および加算器/減算器720の出力(入力701の仮数部で累乗されたe)は、次に、乗算器712へオペランドとして供給され、乗算器712は、これらの値を乗算して指数回路700の固定小数点出力703の整数部分および小数部分を生成する。
【0132】
図8は、人工ニューラルネットワーク(例えば、深層ニューラルネットワーク(DNN))を実装するために使用される処理アーキテクチャの一例のフローチャート800を示す。フローチャート800は、例えば、本開示を通して記述されている実施形態および機能を用いて実装されてもよい。例えば、実施形態によっては、フローチャート800は、
図2Aおよび
図2Bまたは
図4の活性化回路、
図5A~
図5Cの対数回路、
図6A~
図6Cの逆対数回路および/または
図7の指数回路を用いて実装されてもよい。
【0133】
図示されているこのフローチャートでは、ある特定の活性化関数が、活性化関数のパフォーマンスを加速するように設計される活性化関数回路によって実行される。実施形態によっては、例えば、活性化関数回路は、一般的に人工または深層ニューラルネットワークを実装するために使用される複数のタイプの活性化関数をサポートするように設計されてもよい。さらに、活性化関数回路は、サポートされる活性化関数に関連づけられる計算を加速するために、区分線形近似を用いて実装される対数、逆対数および/または指数回路を活用してもよい。
【0134】
例えば、いくつかの実施形態において、活性化関数回路は、人工ニューラルネットワーク(例えば、深層ニューラルネットワーク、畳み込みニューラルネットワーク、順伝播型ニューラルネットワーク、再帰型ニューラルネットワーク、等々)を用いてアプリケーションを実行するプロセッサ、デバイスおよび/またはシステム上で実装されてもよく、かつ/または上記プロセッサ、デバイスおよび/またはシステムに関連して使用されてもよい。この方式において、アプリケーションは、活性化関数回路を活用して、人工ニューラルネットワークの実装に使用される活性化関数を加速することができる。例えば、人工ニューラルネットワークを有するアプリケーションは、メモリに記憶され、かつ特定のデバイスまたはシステム上のプロセッサによって実行されてもよい。アプリケーションが人工ニューラルネットワークにおいてある動作に関連して活性化関数を実行する必要がある場合、アプリケーションは、プロセッサおよび/または活性化関数回路へ対応する命令またはコマンドを発行し、プロセッサは、次に、活性化関数回路を活用して活性化関数を実行してもよい。活性化関数の結果は、次に、プロセッサおよび/またはアプリケーションへ提供し返され、続いて人工ニューラルネットワークにより使用されてもよい。
【0135】
フローチャートは、ブロック802で始まり、ここで、特定の活性化関数を実行するための命令またはコマンドが受信される。命令またはコマンドは、例えば、アプリケーションによって発行され、かつプロセッサおよび/または活性化関数回路によって受信されてもよい。実施形態によっては、命令またはコマンドは、所望される活性化関数およびこの活性化関数に関連づけられる任意のオペランドまたは他のパラメータを識別してもよい。
【0136】
さらに、場合によっては、選択された活性化関数が、指数演算、乗算演算および/または除算演算の組合せを含んでもよい。したがって、フローチャートは、まず、ブロック804へ進んで活性化関数に関連づけられる任意の指数演算を実行する。実施形態によっては、例えば、指数演算は、これらの演算に関連づけられるレイテンシを(例えば、
図7の指数回路を用いて)減らすために、区分線形近似を用いて実行されてもよい。しかしながら、実施形態によっては、指数演算が底2を含んでいれば、これは、レイテンシを減らすために、指数回路の代わりに逆対数回路を用いて(底2の逆対数演算を用いて)計算されることが可能である。
【0137】
フローチャートは、次に、ブロック806へ進んで活性化関数に関連づけられる任意の乗算および/または除算演算を実行する。実施形態によっては、例えば、活性化関数の乗算および/または除算演算は、対数、逆対数および加算/減算演算の組合せを用いて実行されてもよい。例えば、対数関数の特性を利用することにより、対数および逆対数演算を用いて、高コストの乗算/除算演算を加算および/または減算に変換することができる。さらに、対数および逆対数演算は、これらの演算に関連づけられるレイテンシを減らすために、区分線形近似を用いて実行されることが可能である。
【0138】
実施形態によっては、例えば、区分線形近似を用いて対数演算を実行するために、対数回路(例えば、
図5A~
図5Cの対数回路)が使用されてもよい。例えば、対数回路は、(例えば、指数部および仮数部を用いる)浮動小数点数として表される入力の対数を計算するように設計されてもよく、かつ対数回路は、結果としての出力を(例えば、整数部および小数部を用いる)固定小数点数として表してもよい。対数回路は、まず、対数演算に関連づけられる入力またはオペランドを識別し、次に、区分線形近似を目的として、その入力が包含される特定の範囲を識別または決定する。例えば、区分線形近似を用いて対数演算を実行するために、複数の範囲またはセグメントならびに関連する方程式が定義される。したがって、入力が包含される対応する範囲が識別され、かつその範囲に関する方程式が必要とするオペランドが取得されかつ/または生成される。実施形態によっては、例えば、所定のオペランドは、入力の仮数部等の入力、ならびにシフト回路を用いて(例えば、除算を実行すべくビットをシフトすることにより)生成され得る2の累乗である分母を用いる小数部オペランドを用いて抽出され、取得されかつ/または計算されてもよい。次には、1つまたは複数のマルチプレクサを用いて適切なオペランドが選択され、選択されたオペランドを用いて式の結果が計算される。例えば、結果は、加算器/減算器回路を用いて個々のオペランドに対し加算および/または減算を実行することにより計算されてもよい。さらに、浮動小数点入力の指数は、減算器回路を用いてバイアスを減算することにより、非バイアス指数に変換されてもよい。次に、対応する方程式の結果および非バイアス指数を用いて、対数演算の出力が生成される。例えば、非バイアス指数は、結果としての固定小数点出力の整数部として機能し、かつ方程式の結果は、固定小数点出力の小数部として機能する。
【0139】
同様に、区分線形近似を用いて逆対数演算を実行するために、逆対数回路(例えば、
図6A~
図6Cの逆対数回路)が使用されてもよい。逆対数演算は、同様の方法で実行され得るが、整数/指数部分については異なる計算を使用し、かつ区分線形近似については異なる方程式を使用することが異なる。
【0140】
フローチャートは、次に、ブロック808へ進み、指数、乗算および/または除算演算の結果に基づいて活性化関数の結果が出力される。
【0141】
この時点で、フローチャートは、完了し得る。しかしながら、実施形態によっては、フローチャートは、再開してもよく、かつ/または所定のブロックが繰り返されてもよい。例えば、実施形態によっては、フローチャートは、ブロック802で再開して活性化関数の実行を継続してもよい。
【0142】
[DNNのパフォーマンス]
図9Aおよび
図9Bは、説明している実施形態の、サポートされる並列演算の数に対するスケーラビリティを示す。具体的には、説明している実施形態は、サポートされる並列演算の数を増やすために基本的なハードウェアの複製を可能にするフレキシブルな設計を用いて実装される。この方式において、説明している実施形態は、特定のアプリケーションまたはユースケースにより必要とされる並列演算の数をサポートするために、必要に応じてスケーリングされることが可能である。例えば、
図9Aおよび
図9Bに示されているように、提案しているソリューションは、簡単な複製によって単一のオペランドからn個のオペランドにスケーリングされることが可能である。具体的には、
図9Aは、単一のオペランドに対する提案のソリューションを示し、
図9Bは、n個のオペランドに対する提案のソリューションを示す。さらに、提案しているソリューションは、レイテンシを減らしかつスループットを高めるためにパイプライン化されることが可能である。
【0143】
図10Aは、説明している実施形態の、精度に対するスケーラビリティを示す。具体的には、説明している実施形態は、単に、対数、逆対数および/または指数回路により実装される区分線形近似モデルにおけるセグメントの数を調整することによって、様々なレベルの精度を提供するようにスケーリングされることが可能である。この方式において、説明している実施形態は、異なるアプリケーションおよびユースケースに要求される精度レベルを提供するために、必要に応じてスケーリングされることが可能である。例えば、アプリケーションがより高い精度を要求する場合、より高い精度要件に対応するために、区分線形近似モデルに包含されるセグメントの数を増やすことができる。
【0144】
様々な精度レベルに対する、区分線形近似モデルにおいて必要とされるセグメントの数を、
図10Aに示す。
図10Aに示されているように、例えば、アプリケーションが23ビットの仮数部から23ビット精度を要求すれば、区分線形近似モデルは、少なくとも1,556個のセグメントを用いて実装されるべきである。区分線形近似に使用されるセグメントの数は、提供すべき必要な如何なる精度レベルに対しても同様の方法で調整されることが可能である。
【0145】
図10Bは、対数および逆対数ハードウェアの様々な実装のシリコン面積要件を比較したものである。具体的には、
図10Bは、合成ゲートの数を、ルックアップテーブル法を用いて実装されたソリューション(12ビット精度)の場合と、区分線形近似(PLA)を用いて実装された対数および逆対数回路(10ビットまたは12ビット精度のいずれか)の場合とで比較したものを示す。
図10Bに示されているように、区分線形近似を用いて実装された対数および逆対数回路が用いるゲートの数は、ルックアップテーブル法を用いて実装されたソリューションより著しく少ない。例えば、ルックアップテーブルソリューションは、12ビット精度で8,800個のゲートを用いるが、区分線形近似(PLA)の対数および逆対数回路が用いるゲートは、10ビット精度で各々350および450個、12ビット精度で1,048および1,348個である。
【0146】
図10Cは、活性化関数ハードウェア(10ビット精度)の様々な実装のシリコン面積要件を比較したものである。具体的には、
図10Cは、ルックアップテーブル(LUT)を用いて実装された様々な個々の活性化関数(例えば、シグモイド、双曲線正接(Tanh)およびSwish)の合成ゲートの数と、複数の活性化関数をサポートしかつ区分線形近似(PLA)を用いて実装される統合型活性化関数回路(例えば、
図2Aおよび
図2Bの活性化関数回路200)の合成ゲートの数との比較を示す。
図10Cに示されているように、例えば、統合型回路は、LUTベースの回路のどれよりも使用するゲートの数が著しく少なく、しかも多くの活性化関数をサポートする。例えば、統合型回路の場合、その簡略化された方程式によって、指数、対数および逆対数ブロックを各々僅か4,387、1,048および1,348個の合成ゲートの使用で実装できることから、合計8,321個の合成ゲートを用いて実装されることが可能である。これに比べて、LUTベースの回路は各々、僅か1つの活性化関数に対して約17,000~18,000個の合成ゲートを要する。
【0147】
図10Dは、区分線形近似を用いて実装された対数および逆対数回路(例えば、
図5A~
図5Cおよび
図6A~
図6C)の近似誤差を示し、
図10Eは、区分線形近似を用いて実装された指数回路(例えば
図7)の近似誤差を示す。具体的には、これらの回路は、個々のlog
2、およびantilog
2および指数計算に対して0.045%の絶対誤差(ABS)で実装されることが可能であり、これは、IEEE-754単精度浮動小数点数では12ビットの仮数精度になる(例えば、1符号ビット+8指数ビット+12ビット仮数=21ビット精度)。
【0148】
対数、逆対数および指数回路を用いて実装される統合型活性化関数回路(例えば、
図2Aおよび
図2BのAF回路200)の全体精度は、IEEE-754単精度浮動小数点数に対して10仮数ビットである(例えば、1符号ビット+8指数ビット+10ビット仮数=19ビット精度)。
【0149】
図11A~
図11Cは、従来の活性化関数式(指数定数eの累乗を使用)を用いて実装される深層ニューラルネットワーク(DNN)と、修正された活性化関数式(底2の累乗を使用)を用いて実装される深層ニューラルネットワーク(DNN)とのパフォーマンスを比較したものである。例えば、先に論じたように、
図2Aおよび
図2BのAF回路200および
図4のAF回路400は、共に、区分線形近似を活用して活性化関数を実装する。しかしながら、AF回路200は、従来の活性化関数を実装するのに対して、AF回路400は、指数定数eの累乗ではなく、2の累乗を用いる修正された活性化関数を実装する。これらの個々の手法のパフォーマンスを、
図11A~
図11Cが示す例で比較する。
【0150】
図11Aは、2つの入力ニューロンを有する入力層と、3つのニューロンを有する単一の隠れ層と、1つの出力ニューロンを有する全結合層とを含むDNN1100の一例を示す。説明を簡単にするために、DNN1100は、XORゲートと同じ挙動を有する、表7に示す特徴マッピングを実装する。
[表7:DNN特徴セットのマッピング]
【表7】
【0151】
図示されている例は、これらの特徴セット、すなわちA=1およびB=1、のうちの、出力0を有することが期待される1つに焦点を当てている。図示されている例では、入力ニューロンX1が特徴Aに対応し、入力ニューロンX2が特徴Bに対応する。
【0152】
図11Bは、DNN1100が従来のシグモイド活性化関数
【数44】
を用いて実装される場合に実行される処理を示す。順方向伝播段階の間、重みが以下のように、すなわち、W11=0.8、W12=0.4、W13=0.3、W21=0.2、W22=0.9、WW23=0.5、Wh1=0.3、Wh2=0.5およびWh3=0.9、のようにランダムに選択される。次に、隠れ層ノード(H)の出力が、次のように計算される。
H1=X1*W11+X2*W21=0.8+0.2=1、
H2=X1*W12+X2*W22=0.4+0.9=1.3、
H3=X1*W13+X2*W23=0.3+0.5=0.8。
【0153】
説明を簡単にするために、図示されている例では、バイアス0を採用している。シグモイド活性化関数を適用した後は、更新された隠れ層ニューロンが以下の値を持つ。
H1=0.7310、
H2=0.7858、
H3=0.6899。
【0154】
次には、全結合(FC)層を、次式、FC=H1*Wh1+H2*Wh2+H3*Wh3=0.7310*0.3+0.7858*0.5+0.6899*0.9=1.235、のように計算することができる。シグモイド活性化関数を全結合層に適用すると、FC=0.7746になる。次に、誤差が以下のように計算される。
誤差=期待値-計算値=0-0.7746=-0.7746。
【0155】
逆方向伝播および重み更新段階の間は、シグモイド活性化関数の導関数
【数45】
を用いて、以下の計算が実行される。
ΔFC=f´(活性化関数なしのFC値)*誤差=f´(1.235)*(-0.7746)=-0.13439、
ΔFC=隠れ層ニューロン*隠れ層重み=H1*Wh1+H2*Wh2+H3*Wh3、
ΔWh1=ΔFC/H1=-0.13439/0.7310=-0.1838、
ΔWh2=ΔFC/H2=-0.13439/0.7858=-0.1710、
ΔWh3=ΔFC/H3=-0.13439/0.6899=-0.1920。
【0156】
次に、ΔH1、ΔH2およびΔH3に関して、次の計算が実行される。新しい隠れ層値=ΔFC*f´(活性化関数なしの隠れ層ニューロン値)/隠れ層重み:
ΔH1=ΔFC*f´(1)/Wh1=-0.13439*0.1966/0.3=-0.088、
ΔH2=ΔFC*f´(1.3)/Wh2=-0.13439*0.1683=-0.0452、
ΔH1=ΔFC*f´(0.8)/Wh3=-0.13439*0.2139=-0.0319。
【0157】
逆方向伝播の後、新しい隠れ層重みは、次の値を有する。
Wh1=Wh1+ΔWh1=0.3-0.1838=0.1162、
Wh2=Wh2+ΔWh2=0.5-0.1710=0.392、
Wh3=Wh3+ΔWh3=0.9-0.1920=0.708。
【0158】
次に、入力層と隠れ層との間の重みの更新が次のように計算される。重みのデルタ=隠れ層のデルタ/入力:
ΔW11=ΔH1/X1=-0.088/1=-0.088、
ΔW12=ΔH2/X1=-0.0452/1=-0.0452、
ΔW13=ΔH3/X1=-0.0319/1=-0.0319、
ΔW21=ΔH1/X2=-0.088/1=-0.088、
ΔW22=ΔH2/X2=-0.0452/1=-0.0452、
ΔW23=ΔH3/X2=-0.0319/1=-0.0319、
新しい重み: W11=W11+ΔW11=0.8-0.088=0.712、 W12=W12+ΔW12=0.4-0.0452=0.3548、 W13=W13+ΔW13=0.3-0.0319=0.2681、 W21=W21+ΔW21=0.2-0.088=0.112、 W22=W22+ΔW22=0.9-0.0452=0.8548、 W23=W23+ΔW23=0.5-0.0319=0.4681。
【0159】
図11Bは、上述の計算に基づいて重みが更新された後のDNN1100の状態を示す。この反復後のDNNの出力は、0.69であり、最初の反復後の出力0.77より改善されている。この方式による反復は、損失関数勾配が許容可能なレベルに達するまで続けられる。
【0160】
図11Cは、DNN1100が、底がe、すなわち
【数46】
ではなく底が2の指数項を有する修正されたシグモイド活性化関数を用いて実装される場合に実行される処理を示す。
【0161】
順方向伝播段階の間、重みが以下のように、すなわち、W11=0.8、W12=0.4、W13=0.3、W21=0.2、W22=0.9、WW23=0.5、Wh1=0.3、Wh2=0.5およびWh3=0.9、のようにランダムに選択される。次に、隠れ層ノード(H)の出力が、次のように計算される。
H1=X1*W11+X2*W21=0.8+0.2=1、
H2=X1*W12+X2*W22=0.4+0.9=1.3、
H3=X1*W13+X2*W23=0.3+0.5=0.8。
【0162】
説明を簡単にするために、図示されている例では、バイアス0を採用している。修正されたシグモイド活性化関数を適用した後は、更新された隠れ層ニューロンが以下の値を持つ。
H1=0.6667、
H2=0.7117、
H3=0.6351。
【0163】
次には、全結合(FC)層を、次式、FC=H1*Wh1+H2*Wh2+H3*Wh3=0.6667*0.3+0.7117*0.5+0.6351*0.9=1.1272、のように計算することができる。修正されたシグモイド活性化関数を全結合層に適用すると、FC=0.6859になる。次に、誤差が以下のように計算される。
誤差=期待値-計算値=0-0.6859=-0.6859。
【0164】
逆方向伝播および重み更新段階の間は、修正されたシグモイド活性化関数の導関数
【数47】
を用いて、以下の計算が実行される。
ΔFC=f´(活性化関数なしのFC値)*誤差=f´(1.1272)*(-0.6859)=-0.1024、
ΔFC=隠れ層ニューロン*隠れ層重み=H1*Wh1+H2*Wh2+H3*Wh3、
ΔWh1=ΔFC/H1=-0.1024/0.6667=-0.15364、
ΔWh2=ΔFC/H2=-0.1024/0.7117=-0.14402、
ΔWh3=ΔFC/H3=-0.1024/0.6351=-0.16125。
【0165】
次に、ΔH1、ΔH2およびΔH3に関して、次の計算が実行される。新しい隠れ層値=ΔFC*f`(活性化関数なしの隠れ層ニューロン値)/隠れ層重み:
ΔH1=ΔFC*f´(1)/Wh1=-0.13439*0.1966/0.3=-0.05259、
ΔH2=ΔFC*f´(1.3)/Wh2=-0.13439*0.1683=-0.02917、
ΔH1=ΔFC*f´(0.8)/Wh3=-0.13439*0.2139=-0.01828。
【0166】
逆方向伝播の後、新しい隠れ層重みは、次の値を有する。
Wh1=Wh1+ΔWh1=0.3-0.15364=0.1463、
Wh2=Wh2+ΔWh2=0.5-0.14402=0.3559、
Wh3=Wh3+ΔWh3=0.9-0.16125=0.7387。
【0167】
次に、入力層と隠れ層との間の重みの更新が次のように計算される。重みのデルタ=隠れ層のデルタ/入力:
ΔW11=ΔH1/X1=-0.05259/1=-0.05259、
ΔW12=ΔH2/X1=-0.02917/1=-0.02917、
ΔW13=ΔH3/X1=-0.01828/1=-0.01828、
ΔW21=ΔH1/X2=-0.02917/1=-0.05259、
ΔW22=ΔH2/X2=-0.0452/1=-0.02917、
ΔW23=ΔH3/X2=-0.01828/1=-0.01828、 新しい重み: W11=W11+ΔW11=0.8-0.05259=0.7474、 W12=W12+ΔW12=0.4-0.02917=0.3708、 W13=W13+ΔW13=0.3-0.01828=0.2817、 W21=W21+ΔW21=0.2-0.05259=0.1474、 W22=W22+ΔW22=0.9-0.02917=0.8708、 W23=W23+ΔW23=0.5-0.01828=0.4817。
【0168】
図11Cは、上述の計算に基づいて(例えば、修正されたシグモイド活性化関数を用いて)重みが更新された後のDNN1100の状態を示す。この反復後の
図11CのDNNの出力は、0.70であり、
図11BのDNNの出力0.69に匹敵する。この方式による反復は、損失関数勾配が許容可能なレベルに達するまで続けられる。
【0169】
図12Aおよび
図12Bは、
図11Bおよび
図11Cの個々のDNNについてのトレーニング収束を比較したものである。具体的には、
図12Aは、
図11BのDNNにより使用される元のシグモイド活性化関数の場合の収束速度を示し、
図12Bは、
図11CのDNNにより使用される(例えば、eの代わりに底2の累乗を用いる)修正されたシグモイド活性化関数の場合の収束速度を示す。
図13は、これらの手法の誤り率または精度を示す。
【0170】
[コンピューティングアーキテクチャの例]
図14A~
図18は、本明細書に開示する実施形態に従って使用されることが可能なコンピューティング環境およびアーキテクチャの実装例を示す。様々な実施形態において、例えば、これらのコンピュータアーキテクチャ例は、本開示全体に渡って記述されている深層ニューラルネットワーク(DNN)の処理機能と共に使用されても、かつ/またはこれを実装するために使用されてもよい。
【0171】
また、ラップトップ、デスクトップ、ハンドヘルドPC、パーソナル・デジタル・アシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィクスデバイス、ビデオ・ゲーム・デバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブル・メディア・プレーヤ、ハンドヘルドデバイスおよび他の様々な電子デバイスのための技術上知られる他のシステム設計および構成も適切である。概して、本明細書に開示しているようなプロセッサおよび/または他の実行ロジックを組み込むことができる非常に多様なシステムまたは電子デバイスは、大抵適切である。
【0172】
図14Aは、本発明の実施形態による、例示的なインオーダ・パイプライン、および例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの双方を示すブロック図である。
図14Bは、本発明の実施形態による、プロセッサに含まれるべき、インオーダ・アーキテクチャ・コアの例示的な実施形態、および例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの双方を示すブロック図である。
図14Aおよび
図14Bにおける実線のボックスは、インオーダ・パイプラインおよびインオーダ・コアを示し、オプションで追加された破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであることを所与として、アウトオブオーダ態様について述べる。
【0173】
図14Aにおいて、プロセッサパイプライン1400は、フェッチ段1402と、長さデコード段1404と、デコード段1406と、割当て段1408と、リネーミング段1410と、スケジューリング(発送または発行としても知られる)段1412と、レジスタ読取り/メモリ読取り段1414と、実行段1416と、書戻し/メモリ書込み段1418と、例外処理段1422と、コミット段1424とを含む。
【0174】
図14Bは、実行エンジンユニット1450へ結合されるフロント・エンド・ユニット1430を含むプロセッサコア1490を示し、実行エンジンユニット1450およびフロント・エンド・ユニット1430は共に、メモリユニット1470へ結合される。コア1490は、縮小命令セットコンピューティング(RISC)コアであっても、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、ハイブリッドもしくは代替的コアタイプであってもよい。さらに別の選択肢として、コア1490は、例えばネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット(GPGPU)コア、グラフィクスコアまたはこれらに類似するもの等の専用コアであってもよい。
【0175】
フロント・エンド・ユニット1430は、命令キャッシュユニット1434へ結合される分岐予測ユニット1432を含み、命令キャッシュユニット1434は、命令変換ルックアサイドバッファ(TLB)1436へ結合され、命令変換ルックアサイドバッファ1436は、命令フェッチユニット1438へ結合され、命令フェッチユニット1438は、デコードユニット1440へ結合される。デコードユニット1440(またはデコーダ)は、命令を復号し、かつ出力として、1つまたは複数のマイクロオペレーション、マイクロコード・エントリ・ポイント、マイクロ命令、他の命令または他の制御信号を生成してもよく、これらは、元の命令から復号され、または別段で元の命令を反映し、または元の命令から導出される。デコードユニット1440は、様々な異なる機構を用いて実装されてもよい。適切な機構の例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読取り専用メモリ(ROM)、他が含まれるが、これらに限定されない。ある実施形態において、コア1490は、所定のマクロ命令のためのマイクロコードを記憶するマイクロコードROMまたは他の媒体を(例えば、デコードユニット1440内または他にフロント・エンド・ユニット1430内に)含む。デコードユニット1440は、実行エンジンユニット1450内のリネーム/アロケータユニット1452へ結合される。
【0176】
実行エンジンユニット1450は、リタイアメントユニット1454および1つまたは複数のスケジューラユニット・セット1456へ結合されるリネーム/アロケータユニット1452を含む。スケジューラユニット1456は、予約ステーション、中央命令ウィンドウ、他を含む、任意の数の異なるスケジューラを表す。スケジューラユニット1456は、物理レジスタ・ファイル・ユニット1458へ結合される。物理レジスタ・ファイル・ユニット1458は各々、1つまたは複数の物理レジスタファイルを表し、そのうちの異なるものが、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等の1つまたは複数の異なるデータタイプを記憶する。ある実施形態において、物理レジスタ・ファイル・ユニット1458は、ベクトル・レジスタ・ユニットと、ライト・マスク・レジスタ・ユニットと、スカラ・レジスタ・ユニットとを備える。これらのレジスタユニットは、アーキテクチャ・ベクトル・レジスタ、ベクトル・マスク・レジスタおよび汎用レジスタを提供してもよい。物理レジスタ・ファイル・ユニット1458は、レジスタリネーミングおよびアウトオブオーダ実行が(例えば、リオーダバッファとリタイアメント・レジスタ・ファイルとを用いること、将来ファイルと、履歴バッファとリタイアメント・レジスタ・ファイルとを用いること、レジスタマップとレジスタプールとを用いること、他によって)実装され得る様々な方法を例示するために、リタイアメントユニット1454によってオーバーラップされている。リタイアメントユニット1454および物理レジスタ・ファイル・ユニット1458は、実行クラスタ1460へ結合される。実行クラスタ1460は、1つまたは複数の実行ユニット1462のセットと、1つまたは複数のメモリ・アクセス・ユニット1464のセットとを含む。複数の実行ユニット1462は、様々な演算(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行してもよい。実施形態の中には、特定の関数または関数セット専用のいくつかの実行ユニットを含み得るものもあるが、他の実施形態は、唯一の実行ユニットまたは全てが全ての関数を実行する複数の実行ユニットを含み得る。スケジューラユニット1456、物理レジスタ・ファイル・ユニット1458、および実行クラスタ1460は、所定の実施形態が所定のタイプのデータ/演算に対して別々のパイプラインを生成する(例えば、スカラ整数パイプライン、スカラ浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプラインおよび/またはメモリ・アクセス・パイプライン、これらは各々が独自のスケジューラユニット、物理レジスタ・ファイル・ユニットおよび/または実行クラスタを有し、かつ別個のメモリ・アクセス・パイプラインの場合、このパイプラインの実行クラスタのみがメモリ・アクセス・ユニット1464を有する所定の実施形態が実装される)という理由で、おそらくは複数であるものとして示されている。別個のパイプラインが使用される場合、これらのパイプラインのうちの1つまたは複数がアウトオブオーダ発行/実行であり、残りがインオーダであり得ることも理解されるべきである。
【0177】
メモリ・アクセス・ユニット1464のセットは、メモリユニット1470へ結合され、メモリユニット1470は、データ・キャッシュ・ユニット1474へ結合されるデータTLBユニット1472を含み、データ・キャッシュ・ユニット1474は、レベル2(L2)キャッシュユニット1476へ結合される。ある例示的な実施形態において、複数のメモリ・アクセス・ユニット1464は、ロードユニット、ストア・アドレス・ユニットおよびストア・データ・ユニットを含んでもよく、その各々が、メモリユニット1470内のデータTLBユニット1472へ結合される。命令キャッシュユニット1434は、さらに、メモリユニット1470内のレベル2(L2)キャッシュユニット1476へ結合される。L2キャッシュユニット1476は、1つまたは複数の他のレベルのキャッシュへ、かつ最終的にメインメモリへ結合される。
【0178】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン1400を次のように実装してもよい。1)命令フェッチユニット1438が、フェッチ段1402と、長さデコード段1404とを実行し、2)デコードユニット1440が、デコード段1406を実行し、3)リネーム/アロケータユニット1452が、割当て段1408と、リネーミング段1410とを実行し、4)スケジューラユニット1456が、スケジュール段1412を実行し、5)物理レジスタ・ファイル・ユニット1458およびメモリユニット1470が、レジスタ読取り/メモリ読取り段1414を実行し、実行クラスタ1460が実行段1416を実行し、6)メモリユニット1470および物理レジスタ・ファイル・ユニット1458が、書戻し/メモリ書込み段1418を実行し、7)様々なユニットが、例外処理段1422に関与してもよく、かつ8)リタイアメントユニット1454および物理レジスタ・ファイル・ユニット1458が、コミット段1424を実行する。
【0179】
コア1490は、本明細書に記述している命令を含む、1つまたは複数の命令セット(例えば、x86命令セット(より新しいバージョンでいくつかの拡張が追加されている)、カリフォルニア州サニーベール所在のMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベール所在のARM HoldingsのARM命令セット(NEON等の任意選択の拡張が追加されている))をサポートしてもよい。ある実施形態において、コア1490は、パックデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするためのロジックを含み、これにより、パックデータを用いて、多くのマルチメディアアプリケーションにより使用されるオペレーションを実行することが可能にされる。
【0180】
コアは、(2つ以上の並列のオペレーションまたはスレッドセットを実行する)マルチスレッディングをサポートしてもよく、またこれを、タイムスライスされたマルチスレッディング、同時マルチスレッディング(単一の物理コアが、その物理コアが同時にマルチスレッディングしているスレッドの各々について論理コアを提供する)またはこれらの組合せ(例えば、Intel(登録商標)ハイパースレッディング技術等における、タイムスライスされたフェッチおよびデコードと、その後の同時マルチスレッディング)を含む様々な方法で行ってもよいことは理解されるべきである。
【0181】
レジスタリネーミングについては、アウトオブオーダ実行のコンテキストで説明しているが、レジスタリネーミングがインオーダ・アーキテクチャで使用され得ることは、理解されるべきである。また、図示されているプロセッサの実施形態は、別々の命令キャッシュユニットおよびデータ・キャッシュ・ユニット1434/1474および共有のL2キャッシュユニット1476も含んでいるが、代替実施形態は、例えばレベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュ等、命令およびデータの双方に関して単一の内部キャッシュを有してもよい。実施形態によっては、本システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組合せを含んでもよい。あるいは、キャッシュの全てが、コアおよび/またはプロセッサの外部にあってもよい。
【0182】
図15は、本発明の実施形態による、2つ以上のコアを有し得、統合型メモリコントローラを有し得、かつ統合型グラフィクスを有し得るプロセッサ1500のブロック図である。
図15における実線のボックスは、単一のコア1502A、システムエージェント1510、1つまたは複数のバス・コントローラ・ユニット1516のセットを有するプロセッサ1500を示し、一方で、任意選択で追加される破線のボックスは、複数のコア1502A~1502N、システム・エージェント・ユニット1510内の1つまたは複数の統合型メモリ・コントローラ・ユニット1514のセットおよび専用ロジック1508を有する代替プロセッサ1500を示す。
【0183】
したがって、プロセッサ1500の異なる実装には、1)統合型グラフィクスおよび/または(1つまたは複数のコアを含み得る)科学的(スループット)ロジックである専用ロジック1508と、1つまたは複数の汎用コア(例えば、汎用インオーダ・コア、汎用アウトオブオーダ・コア、これら双方の組合せ)であるコア1502A~1502Nとを有するCPU、2)主としてグラフィクスおよび/または科学的(スループット)用に意図される多数の専用コアであるコア1502A~1502Nを有するコプロセッサ、3)多数の汎用インオーダ・コアであるコア1502A~1502Nを有するコプロセッサ、が含まれ得る。したがって、プロセッサ1500は、汎用プロセッサ、コプロセッサ、または例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィクス処理ユニット)、高スループット多数集積コア(MIC)コプロセッサ(30以上のコアを含む)、埋込みプロセッサまたはこれらに類似するもの等の専用プロセッサ、であってもよい。プロセッサは、1つまたは複数のチップ上に実装されてもよい。プロセッサ1500は、1つまたは複数の基板の一部であってもよく、かつ/または、1つまたは複数の基板上へ、例えば、BiCMOS、CMOSまたはNMOS等のいくつかのプロセス技術のいずれかを用いて実装されてもよい。
【0184】
メモリ階層は、コア内の1つまたは複数のレベルのキャッシュと、1つまたは複数の共有キャッシュユニット1506または共有キャッシュユニット1506のセットと、統合型メモリ・コントローラ・ユニット1514のセットへ結合される外部メモリ(不図示)とを含む。共有キャッシュユニット1506のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)または他のレベルのキャッシュ等の1つまたは複数の中間レベルのキャッシュ、最終レベルのキャッシュ(LLC)および/またはこれらの組合せを含んでもよい。ある実施形態では、リングベースの相互接続ユニット1512が、統合型グラフィクスロジック1508と、共有キャッシュユニット1506のセットと、システム・エージェント・ユニット1510/統合型メモリ・コントローラ・ユニット1514とを相互接続するが、代替実施形態は、このようなユニットを相互接続するために、任意の数の周知技術を用いることがある。ある実施形態では、1つまたは複数のキャッシュユニット1506とコア1502A~1502Nとの間にコヒーレンスが保持される。
【0185】
実施形態によっては、コア1502A~1502Nのうちの1つまたは複数は、マルチスレッディングを行うことができる。システムエージェント1510は、コア1502A~1502Nを連係動作させるコンポーネントを含む。システム・エージェント・ユニット1510は、例えば、電力制御ユニット(PCU)と、表示ユニットとを含んでもよい。PCUは、コア1502A~1502Nおよび統合型グラフィクスロジック1508の電力状態を安定させるために必要なロジックおよびコンポーネントであっても、これらを含むものであってもよい。表示ユニットは、1つまたは複数の外部接続ディスプレイを駆動するためのものである。
【0186】
コア1502A~1502Nは、アーキテクチャ命令セットに関して同種であっても異種であってもよく、すなわち、コア1502A~1502Nのうちの2つ以上は、同じ命令セットを実行できてもよく、一方で、他のものは、その命令セットのうちの1つのサブセットのみ、または異なる命令セットを実行することができてもよい。
【0187】
次に、
図16を参照すると、本発明の一実施形態によるシステム1600のブロック図が示されている。システム1600は、1つまたは複数のプロセッサ1610、1615を含んでもよく、これらは、コントローラハブ1620へ結合される。ある実施形態において、コントローラハブ1620は、グラフィクス・メモリ・コントローラ・ハブ(GMCH)1690と、入力/出力ハブ(IOH)1650(別々のチップ上にあってもよい)とを含み、GMCH1690は、メモリ1640およびコプロセッサ1645が結合されるメモリコントローラおよびグラフィクスコントローラを含み、IOH1650は、入力/出力(I/O)デバイス1660をGMCH1690へ結合する。あるいは、メモリコントローラおよびグラフィクスコントローラの一方または双方は、(本明細書に記述しているような)プロセッサ内に統合され、メモリ1640およびコプロセッサ1645は、プロセッサ1610へ直に結合され、かつコントローラハブ1620は、IOH1650と共に単一のチップ上に存在する。
【0188】
図16には、元来任意選択である追加のプロセッサ1615が破線で示されている。プロセッサ1610、1615は各々、本明細書に記述している処理コアのうちの1つまたは複数を含んでもよく、かつプロセッサ1500の何らかのバージョンであってもよい。
【0189】
メモリ1640は、例えば、ダイナミック・ランダム・アクセス・メモリ(DRAM)、相変化メモリ(PCM)またはこれらの組合せであってもよい。少なくとも1つの実施形態では、コントローラハブ1620は、プロセッサ1610、1615と、フロントサイドバス(FSB)等のマルチドロップバス、クイックパスインターコネクト(QPI)等のポイントツーポイントインタフェースまたは類似の接続1695を介して通信する。
【0190】
ある実施形態において、コプロセッサ1645は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、埋込みプロセッサまたはこれらに類似するもの等の専用プロセッサである。ある実施形態において、コントローラハブ1620は、統合型グラフィクスアクセラレータを含んでもよい。
【0191】
物理リソース1610、1615間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性およびこれらに類似するものを含む利点の測定基準範囲に関して、様々な違いがある可能性がある。
【0192】
ある実施形態において、プロセッサ1610は、汎用タイプのデータ処理動作を制御する命令を実行する。命令には、コプロセッサ命令が埋め込まれていてもよい。プロセッサ1610は、これらのコプロセッサ命令を、接続されているコプロセッサ1645によって実行されるべきタイプのものであると認識する。したがって、プロセッサ1610は、これらのコプロセッサ命令(または、コプロセッサ命令を表す制御信号)をコプロセッサバスまたは他の相互接続上でコプロセッサ1645向けに発行する。コプロセッサ1645は、受信したコプロセッサ命令を受け入れて実行する。
【0193】
次に、
図17を参照すると、本発明の一実施形態による、より具体的な第1の例示的システム1700のブロック図が示されている。
図17に示されているように、マルチプロセッサシステム1700は、ポイントツーポイント相互接続システムであって、ポイントツーポイント相互接続1750を介して結合される第1のプロセッサ1770および第2のプロセッサ1780を含む。プロセッサ1770および1780は各々、プロセッサ1500の何らかのバージョンであってもよい。本発明の一実施形態では、プロセッサ1770および1780は各々、プロセッサ1610および1615であり、コプロセッサ1738は、コプロセッサ1645である。別の実施形態では、プロセッサ1770および1780は各々、プロセッサ1610およびコプロセッサ1645である。
【0194】
プロセッサ1770および1780は、各々、統合型メモリコントローラ(IMC)ユニット1772および1782を包含して示されている。プロセッサ1770は、そのバス・コントローラ・ユニットの一部としてポイントツーポイント(P-P)インタフェース1776および1778も含み、同様に、第2のプロセッサ1780も、P-Pインタフェース1786および1788を含む。プロセッサ1770、1780は、P-Pインタフェース回路1778、1788を使用し、ポイントツーポイント(P-P)インタフェース1750を介して情報を交換してもよい。
図17に示されているように、IMC1772および1782は、これらのプロセッサを個々のメモリ、すなわちメモリ1732およびメモリ1734へ結合し、メモリ1732およびメモリ1734は、個々のプロセッサへ局所的に接続される、メインメモリの一部であってもよい。
【0195】
プロセッサ1770、1780は各々、チップセット1790との間で、ポイントツーポイントインタフェース回路1776、1794、1786、1798を使用し、個々のP-Pインタフェース1752、1754を介して情報を交換してもよい。チップセット1790は、場合により、高性能インタフェース1739を介して、コプロセッサ1738と情報を交換してもよい。ある実施形態において、コプロセッサ1738は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、埋込みプロセッサまたはこれらに類似するもの等の専用プロセッサである。
【0196】
いずれかのプロセッサまたは双方のプロセッサの外部には、共有キャッシュ(不図示)が含まれてもよく、しかもP-P相互接続を介してこれらのプロセッサと接続され、よって、一方のプロセッサが低電力モードに置かれれば、いずれかまたは双方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得る。
【0197】
チップセット1790は、インタフェース1796を介して第1のバス1716へ結合されてもよい。ある実施形態において、第1のバス1716は、周辺機器相互接続(PCI)バスであっても、PCIエクスプレスバスまたは別の第3世代I/O相互接続バス等のバスであってもよいが、本発明の範囲にこうした限定はない。
【0198】
図17に示されているように、第1のバス1716へは、第1のバス1716と第2のバス1720とを結合するバスブリッジ1718と共に、様々なI/Oデバイス1714が結合されてもよい。ある実施形態では、第1のバス1716へ、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィクスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールド・プログラマブル・ゲート・アレイまたは他の任意のプロセッサ等の1つまたは複数の追加的なプロセッサ1715が結合される。ある実施形態において、第2のバス1720は、低ピンカウント(LPC)バスであってもよい。第2のバス1720へは、例えば、キーボードおよび/またはマウス1722、通信デバイス1727、およびある実施形態では命令/コードおよびデータ1730を含み得るディスクドライブまたは他の大容量記憶デバイス等の記憶ユニット1728を含む、様々なデバイスが結合されてもよい。さらに、第2のバス1720には、オーディオI/O1724が結合されてもよい。しかしながら、他のアーキテクチャが可能であることも留意されたい。例えば、
図17のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の類似アーキテクチャを実装してもよい。
【0199】
次に、
図18を参照すると、本発明の一実施形態によるSoC1800のブロック図が示されている。
図15との類似エレメントには、類似の参照番号が付されている。同じく、破線のボックスは、より高度なSoC上のオプション機能である。
図18において、相互接続ユニット1802は、1つまたは複数のコア1802A~1802Nのセットおよび共有キャッシュユニット1806を含むアプリケーションプロセッサ1810と、システム・エージェント・ユニット1810と、バス・コントローラ・ユニット1816と、統合型メモリ・コントローラ・ユニット1814と、統合型グラフィクスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得る1つまたは複数のコプロセッサ1820のセットと、スタティック・ランダム・アクセス・メモリ(SRAM)ユニット1830と、ダイレクト・メモリ・アクセス(DMA)ユニット1832と、1つまたは複数の外部ディスプレイへ結合するための表示ユニット1840と、に結合されている。ある実施形態において、コプロセッサ1820は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋込みプロセッサまたはこれらに類似するもの等の専用プロセッサを含む。
【0200】
本明細書に開示している機構の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこうした実装手法の組合せにおいて実装されてもよい。本発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性および不揮発性メモリおよび/または記憶エレメントを含む)、少なくとも1つの入力デバイスおよび少なくとも1つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【0201】
本明細書に記述している関数を実行して出力情報を生成するためには、
図17に示されているコード1730等のプログラムコードが入力命令に適用されてもよい。出力情報は、1つまたは複数の出力デバイスへ既知の方法で適用されてもよい。この適用を目的として、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【0202】
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向のプログラミング言語で実装されてもよい。また、プログラムコードは、必要であれば、アセンブリ言語または機械語でも実装されてもよい。実際に、本明細書に記述している機構の範囲は、如何なる特定のプログラミング言語にも限定されない。何れの場合も、言語は、コンパイル型言語であっても、インタプリタ型言語であってもよい。
【0203】
少なくとも1つの実施形態の1つまたは複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体に記憶される表示的命令によって実装されてもよく、上記命令が機械により読み取られると、機械は、本明細書に記述している技術を実行するためのロジックを作り上げる。「IPコア」として知られるこうした表示は、有形の機械可読媒体に記憶され、かつ実際にロジックまたはプロセッサを作り上げる製造機械へロードすべく様々なカスタマまたは製造施設へ供給されてもよい。
【0204】
このような機械可読記憶媒体には、ハードディスク、その他フロッピーディスク、光ディスク、コンパクトディスク読取り専用メモリ(CD-ROM)、コンパクト・ディスク・リライタブル(CD-RW)および光磁気ディスクを含む任意タイプのディスク等の記憶媒体と、読取り専用メモリ(ROM)、ダイナミック・ランダム・アクセス・メモリ(DRAM)、スタティック・ランダム・アクセス・メモリ(SRAM)等のランダム・アクセス・メモリ(RAM)、消去可能なプログラム可能読取り専用メモリ(EPROM)、フラッシュメモリ、電気的に消去可能なプログラム可能読取り専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気または光学カード等の半導体デバイスと、もしくはその他、電子命令の記憶に適する任意タイプの媒体とを含む、機械またはデバイスにより製造または形成される物品の非一時的な有形装置が含まれ得るが、この限りではない。
【0205】
したがって、本発明の実施形態は、本明細書に記述している構造、回路、装置、プロセッサおよび/またはシステム特徴を定義する命令を含む、または設計データを含む、ハードウェア記述言語(HDL)等の非一時的な有形機械可読媒体も含む。このような実施形態は、プログラム・プロダクトと呼ばれることもある。
【0206】
諸図におけるフローチャートおよびブロック図は、本開示の様々な態様によるシステム、方法およびコンピュータ・プログラム・プロダクトの可能な実装形態のアーキテクチャ、機能および動作を示している。これに関連して、フローチャートまたはブロック図内の各ブロックは、特定の論理機能を実装するための1つまたは複数の実行可能命令を備えるモジュール、セグメントまたはコードの一部を表すことがある。また、代替実装によっては、ブロック内に記されている機能が、図に示されている順序から外れて行われ得ることにも留意されるべきである。例えば、包含される機能に依存して、連続して示される2つのブロックは、実際には略同時に実行されてもよく、あるいは、これらのブロックは、時として逆順で、または代替の順序で実行されてもよい。また、ブロック図および/またはフローチャート図の各ブロック、およびブロック図および/またはフローチャート図内のブロックの組合せは、特定の機能または活動を実行する専用ハードウェアベースのシステムによって、または専用ハードウェアとコンピュータ命令との組合せによって実装され得ることも、留意されるであろう。
【0207】
これまでに行った開示は、当業者が本開示の様々な態様をよりよく理解し得るように、いくつかの実施形態の特徴を概説している。当業者は、他のプロセスおよび構造を、本明細書で紹介されている実施形態と同じ目的を実行し、かつ/または同じ利点を達成するように設計または変更するための基礎として、本開示を容易に使用し得ることを認識すべきである。また、当業者は、こうした同等の構成が本開示の精神および範囲を逸脱しないこと、および当業者が、本開示の精神および範囲を逸脱することなく本明細書における記載に様々な変更、置換および改変をなし得ることも理解すべきである。
【0208】
本明細書に開示している任意のハードウェアエレメントの全て、または一部は、中央処理装置(CPU)パッケージを含むシステムオンチップ(SoC)に容易に提供され得る。SoCは、コンピュータまたは他の電子システムのコンポーネントを単一のチップに統合する集積回路(IC)を表す。SoCは、デジタル、アナログ、ミックスシグナルおよび無線周波数の各機能を含んでもよく、これらの全てが単一チップ基板上に設けられてもよい。他の実施形態は、マルチチップモジュール(MCM)を含んでもよく、複数のチップが単一の電子パッケージ内に位置決めされ、かつこの電子パッケージを介して互いに密に相互作用するように構成される。他の様々な実施形態において、本明細書に開示しているコンピューティング機能は、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)および他の半導体チップにおける1つまたは複数のシリコンコアに実装されてもよい。
【0209】
本明細書で使用する「プロセッサ」または「マイクロプロセッサ」という用語は、従来のマイクロプロセッサ(Intel(登録商標)の業界トップのx86およびx64アーキテクチャ等)だけでなく、グラフィクスプロセッサ、マトリクスプロセッサ、および任意のASIC、FPGA、マイクロコントローラ、デジタル信号プロセッサ(DSP)、プログラマブルロジックデバイス、プログラマブルロジックアレイ(PLA)、マイクロコード、命令セット、エミュレートされた、または仮想マシンプロセッサ、または命令の実行を許可する類似の「チューリング完全な」デバイス、デバイスの組合せ、またはロジックエレメント(ハードウェアまたはソフトウェア)も包含するものとして理解されるべきである。
【0210】
また、特定の実施形態においては、コンポーネントにより省略されるものもあれば、統合されるものもあることにも留意されたい。一般的な意味において、図示されている配置は、論理上の区分として理解されるべきであるが、物理的アーキテクチャには、これらのエレメントの様々な入替え、組合せおよび/または混成が含まれ得る。本明細書に概説している動作目的を達成するためには、無数の可能な設計構成を使用できる点に留意することが不可欠である。したがって、関連するインフラストラクチャには、無数の代替配置、設計上の選択、デバイスの可能性、ハードウェア構成、ソフトウェア実装および機器のオプションがある。
【0211】
一般的な意味において、適切に構成されたプロセッサは何れも、データまたはマイクロコードに関連づけられる命令を実行して本明細書が詳述する動作を達成することができる。本明細書に開示しているプロセッサは何れも、あるエレメントまたは物品(例えば、データ)をある状態または物から別の状態または物に変換することもできる。別の例では、本明細書で概説したいくつかの活動が、固定ロジックまたはプログラマブルロジック(例えば、プロセッサにより実行されるソフトウェアおよび/またはコンピュータ命令)によって実装され得、かつ本明細書で同定しているエレメントは、何らかのタイプのプログラマブルプロセッサ、プログラマブルデジタルロジック(例えば、フィールド・プログラマブル・ゲート・アレイ(FPGA)、消去可能なプログラム可能読取り専用メモリ(EPROM)、電気的に消去可能なプログラム可能読取り専用メモリ(EEPROM))、デジタルロジック、ソフトウェア、コード、電子命令、フラッシュメモリ、光ディスク、CD-ROM、DVD ROM、磁気または光学カード、電子命令の記憶に適する他のタイプの機械可読媒体を含むASIC、またはこれらの任意の適切な組合せ、であることも可能である。
【0212】
動作において、記憶装置は、情報を、任意の適切なタイプの有形で非一時的記憶媒体(例えば、ランダム・アクセス・メモリ(RAM)、読取り専用メモリ(ROM)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、消去可能なプログラム可能読取り専用メモリ(EPROM)、電気的に消去可能なプログラム可能読取り専用メモリ(EEPROM)またはマイクロコード)、ソフトウェア、ハードウェア(例えば、プロセッサ命令またはマイクロコード)に、あるいは適切であれば、かつ特定のニーズに基づいて、他の任意の適切なコンポーネント、デバイス、エレメントまたはオブジェクトに、記憶してもよい。さらに、追跡され、送信され、受信され、またはプロセッサに記憶される情報は、特定のニーズおよび実装に基づいて、任意のデータベース、レジスタ、テーブル、キャッシュ、キュー、制御リスト、または記憶構造体に提供される可能性もあり、これらの情報は全て、任意の適切な時間フレームにおいて参照されることも可能である。本明細書に開示しているメモリまたは記憶エレメントは、何れも、適宜、広範な意味での「メモリ」および「記憶装置」に包含されるものと解釈されるべきである。本明細書における非一時的記憶媒体は、開示している動作を提供するように、またはプロセッサに開示している動作を実行させるように構成されるあらゆる非一時的な専用またはプログラム可能ハードウェアを包含することが明確に意図されている。また、非一時的記憶媒体は、明確に、ハードウェアコード化命令、および任意選択でハードウェア、ファームウェアまたはソフトウェアにおいて符号化されるマイクロコード命令またはシーケンスを記憶したプロセッサも含む。
【0213】
本明細書に記述している機能の全てまたは一部を実装するコンピュータプログラムロジックは、ハードウェア記述言語、ソースコード形式、コンピュータ実行可能形式、機械命令またはマイクロコード、プログラマブルハードウェア、および様々な中間形式(例えば、HDLプロセッサ、アセンブラ、コンパイラ、リンカまたはロケータにより生成される形式)を含む、但し決してこれらに限定されない、様々な形式で具現される。ある例において、ソースコードは、オブジェクトコード、アセンブリ言語、またはOpenCL、FORTRAN、C、C++、JAVA(登録商標)またはHTML等の様々なオペレーティングシステムまたは動作環境で用いるための高レベル言語等の様々なプログラミング言語で実装される、あるいはSpice、VerilogおよびVHDL等のハードウェア記述言語で実装される、一連のコンピュータプログラム命令を含む。ソースコードは、様々なデータ構造および通信メッセージを定義しかつ使用し得る。ソースコードは、(例えば、インタプリタを介する)コンピュータ実行可能形式であってもよく、または、ソースコードは、(例えば、トランスレータ、アセンブラまたはコンパイラを介して)コンピュータ実行可能形式に変換されても、バイトコード等の中間形式に変換されてもよい。適切であれば、上述の何れもが、シーケンス、組合せ、ステートマシン、その他の何れであるかに関わらず適切なディスクリート回路または集積回路を構築または記述するために使用されてもよい。
【0214】
ある例では、諸図における任意数の電気回路が、関連する電子デバイスのボード上に実装されてもよい。ボードは、電子デバイスの内部電子システムの様々なコンポーネントを保持しかつさらに他の周辺機器用のコネクタを提供することができる、一般的な回路基板であることが可能である。より具体的には、ボードは、システムの他のコンポーネントによる電気的通信を可能にする電気接続を提供することができる。ボードへは、特定の構成ニーズ、処理要求およびコンピューティング設計に基づいて、あらゆる適切なプロセッサおよびメモリを適切に結合することができる。その他、ボードへは、外部記憶装置、追加のセンサ、オーディオ/ビデオディスプレイ用コントローラおよび周辺機器等のコンポーネントが、ケーブルを介してプラグインカードとして取り付けられてもよく、あるいは、ボード自体に統合されてもよい。別の例において、諸図の電気回路は、スタンドアロンモジュール(例えば、特定のアプリケーションまたは機能を実行するように構成される関連のコンポーネントおよび回路を有するデバイス)として実装されても、電子デバイスの特定用途向けハードウェアにプラグインモジュールとして実装されてもよい。
【0215】
本明細書に提供している多くの例では、相互作用が、2つ、3つ、4つ、またはそれ以上の電気コンポーネントに関連して記述され得ることに留意されたい。しかしながら、これは、単に明確さおよび例示を目的として行ったことである。システムが、あらゆる適切な方法で統合または再構成され得ることは、認識されるべきである。類似の代替設計に加えて、諸図の例示されているコンポーネント、モジュールおよびエレメントは何れも、様々な可能構成で組み合わされてもよく、その全てが、本明細書の広範な範囲に含まれる。ある場合には、所与のフローセットの機能のうちの1つまたは複数に関する記述を、単に限られた数の電気エレメントを参照するだけで行う方がより容易であることがある。図示された電気回路およびその教示内容は、拡大縮小が容易であって、多数のコンポーネントならびにより複雑/高度な配置および構成に対処できることは、認識されるべきである。したがって、提供している例は、無数の他のアーキテクチャに潜在的に適用される電気回路の範囲を限定する、もしくはその広範な教示を抑制するものではない。
【0216】
当業者には、他の多くの変更、置換、変形、修正および改変が確認され得、本開示は、こうした変更、置換、変形、修正および改変を添付の特許請求の範囲に記載された範囲内にあるものとして包含することが意図されている。
【0217】
[実装例]
以下の例は、本開示を通して記述されている実施形態に関する。
【0218】
1つまたは複数の実施形態は、対数回路を備える装置を含んでもよく、上記対数回路は、入力レジスタを介して、対数演算に関連づけられる入力を識別し、範囲選択回路を用いて入力が包含される第1の範囲を識別し、第1の方程式に関連づけられる複数のオペランドを取得し、加算器/減算器回路を用いて、複数のオペランドに基づき、第1の方程式の結果を計算し、かつ出力レジスタを介して、対数演算に関連づけられる出力を戻すための回路を備え、上記対数演算は、対数回路により、区分線形近似を用いて実行されるべきものであり、上記第1の範囲は、対数演算の複数の区分線形近似(PLA)方程式に関連づけられる複数の範囲から識別され、かつ上記第1の範囲は、複数のPLA方程式のうちの第1の方程式に対応し、上記出力は、少なくとも部分的に第1の方程式の結果に基づいて生成される。
【0219】
装置の一実施形態例において、対数演算は、人工ニューラルネットワーク演算に関連づけられる。
【0220】
装置の一実施形態例において、入力は、浮動小数点数を含み、上記浮動小数点数は、指数部と、仮数部とを含み、出力は、固定小数点数を含み、固定小数点数は、整数部と小数部とを含む。
【0221】
装置の一実施形態例において、複数のオペランドは、仮数部オペランドと、1つまたは複数の小数部オペランドとを含み、1つまたは複数の小数部オペランドは、各々、2の累乗を含む分母を含む。
【0222】
装置の一実施形態例において、対数回路は、さらに、1つまたは複数の小数部オペランドを生成するための1つまたは複数のシフト回路を備える。
【0223】
装置の一実施形態例において、対数回路は、さらに、非バイアス指数を生成すべく浮動小数点数の指数からバイアスを減算するための減算器回路を備える。
【0224】
装置の一実施形態例において、出力レジスタを介して対数演算に関連づけられる出力を戻すための回路は、さらに、固定小数点数の整数部を非バイアス指数に基づいて生成し、かつ、固定小数点数の小数部を第1の方程式の結果に基づいて生成する。
【0225】
装置の一実施形態例において、対数回路は、さらに、第1の方程式に関連づけられる複数のオペランドを選択するための1つまたは複数のマルチプレクサを備える。
【0226】
装置の一実施形態例において、加算器/減算器回路は、複数のオペランドに対して1つまたは複数の加算演算または減算演算を実行する。
【0227】
装置の一実施形態例において、上記装置は、さらに、逆対数回路を含み、上記逆対数回路は、逆対数演算に関連づけられる第2の入力を識別し、第2の入力が包含される第2の範囲を識別し、第2の方程式の第2の結果を、第2の方程式に関連づけられる第2の複数のオペランドに基づいて計算し、かつ、逆対数演算に関連づけられる第2の出力を生成するための回路を備え、上記逆対数演算は、逆対数回路により、区分線形近似を用いて実行されるべきものであり、上記第2の範囲は、逆対数演算の第2の複数の区分線形近似(PLA)方程式に関連づけられる第2の複数の範囲から識別され、かつ上記第2の範囲は、第2の複数のPLA方程式のうちの第2の方程式に対応し、上記第2の出力は、少なくとも部分的に第2の方程式の第2の結果に基づいて生成される。
【0228】
装置の一実施形態例において、装置は、さらに、活性化関数回路を備え、上記活性化関数回路は、対数回路と、逆対数回路とを備え、かつ上記活性化関数回路は、複数の利用可能な活性化関数から選択される1つの活性化関数を実行するための命令を受信し、1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行し、かつ活性化関数に関連づけられる活性化出力を生成するための回路をさらに備え、上記活性化関数は、1つまたは複数の乗算演算または除算演算を含み、上記1つまたは複数の対数演算は、対数回路を用いて実行され、かつ上記1つまたは複数の逆対数演算は、逆対数回路を用いて実行され、上記活性化出力は、少なくとも部分的に、1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成される。
【0229】
装置の一実施形態例において、活性化関数は、さらに、1つまたは複数の指数演算を含み、かつ活性化関数回路は、さらに、1つまたは複数の指数演算を、区分線形近似を用いて実行するための指数回路を備える。
【0230】
1つまたは複数の実施形態は、アプリケーションに関連づけられる情報を記憶するためのメモリと、上記アプリケーションに関連づけられる1つまたは複数の命令を実行するためのプロセッサと、複数の活性化関数を実行するための活性化関数回路とを備えるシステムを含んでもよく、上記活性化関数回路は、アプリケーションに関連づけられる活性化関数を実行するための命令を受信し、1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行し、かつ活性化関数に関連づけられる出力を生成するための回路を備え、上記活性化関数は、複数の活性化関数から選択され、かつ上記活性化関数は、1つまたは複数の乗算演算または除算演算を含み、上記1つまたは複数の対数演算は、対数回路により、区分線形近似を用いて実行され、かつ上記1つまたは複数の逆対数演算は、逆対数回路により、区分線形近似を用いて実行され、上記出力は、少なくとも部分的に1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成される。
【0231】
システムの一実施形態例において、アプリケーションは、人工ニューラルネットワークを含み、かつ活性化関数は、人工ニューラルネットワークの動作に関連づけられる。
【0232】
システムの一実施形態例において、1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行するための回路は、さらに、1つまたは複数の乗算演算または除算演算に関連づけられる1つまたは複数のオペランドに対して、1つまたは複数の底2の対数演算を実行し、1つまたは複数の底2の対数演算の1つまたは複数の結果に対して、1つまたは複数の加算演算または減算演算を実行し、かつ1つまたは複数の加算演算または減算演算の1つまたは複数の結果に対して、1つまたは複数の底2の逆対数演算を実行し、上記1つまたは複数の底2の対数演算は、区分線形近似を用いて実行され、上記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される。
【0233】
システムの一実施形態例において、活性化関数は、さらに、1つまたは複数の指数演算を含み、かつ活性化関数回路は、さらに、1つまたは複数の指数演算を、区分線形近似を用いて実行するための回路を備える。
【0234】
システムの一実施形態例において、1つまたは複数の指数演算は、各々、底2を含み、かつ1つまたは複数の指数演算を、区分線形近似を用いて実行するための回路は、さらに、1つまたは複数の指数演算を、1つまたは複数の底2の逆対数演算を用いて実行し、1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される。
【0235】
システムの一実施形態例において、複数の活性化関数には、シグモイド関数と、双曲線正接関数と、swish関数と、正規化線形ユニット関数とが含まれる。
【0236】
システムの一実施形態例において、シグモイド関数、双曲線正接関数またはswish関数のうちの少なくとも1つは、専ら底2を含む1つまたは複数の指数演算を用いて定義され、かつ活性化関数回路は、さらに、1つまたは複数の指数演算を、1つまたは複数の底2の逆対数演算を用いて実行するための回路を含み、1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される。
【0237】
1つまたは複数の実施形態は、命令を記憶している少なくとも1つの機械アクセス可能記憶媒体を含んでもよく、命令は、機械上で実行されると、機械に、活性化関数回路により、複数の利用可能な活性化関数から選択される活性化関数を実行するための命令を受信させ、1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行させ、かつ活性化関数に関連づけられる出力を生成させ、上記活性化関数は、1つまたは複数の乗算演算または除算演算を含み、上記1つまたは複数の対数演算および上記1つまたは複数の逆対数演算は、区分線形近似を用いて実行され、上記出力は、少なくとも部分的に、1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成される。
【0238】
記憶媒体の一実施形態例において、機械に、1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行させるための命令は、さらに、機械に、1つまたは複数の乗算演算または除算演算に関連づけられる1つまたは複数のオペランドに対して、1つまたは複数の底2の対数演算を実行させ、1つまたは複数の底2の対数演算の1つまたは複数の結果に対して、1つまたは複数の加算演算または減算演算を実行させ、かつ1つまたは複数の加算演算または減算演算の1つまたは複数の結果に対して、1つまたは複数の底2の逆対数演算を実行させ、上記1つまたは複数の底2の対数演算は、区分線形近似を用いて実行され、上記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される。
【0239】
記憶媒体の一実施形態例において、活性化関数は、さらに、1つまたは複数の指数演算を含み、かつ命令は、さらに、機械に、1つまたは複数の指数演算を、区分線形近似を用いて実行させる。
【0240】
記憶媒体の一実施形態例において、複数の利用可能な活性化関数のうちの少なくとも1つの活性化関数は、専ら底2を含む1つまたは複数の指数演算を用いて定義され、かつ命令は、さらに、機械に、1つまたは複数の指数演算を、1つまたは複数の底2の逆対数演算を用いて実行させ、1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される。
【0241】
1つまたは複数の実施形態は、方法を含んでもよく、上記方法は、活性化関数回路により、複数の利用可能な活性化関数から選択される活性化関数を実行するための命令を受信することであって、上記活性化関数は、1つまたは複数の乗算演算または除算演算を含むことと、1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行することであって、上記1つまたは複数の対数演算および上記1つまたは複数の逆対数演算は、区分線形近似を用いて実行されることと、活性化関数に関連づけられる出力を生成することであって、上記出力は、少なくとも部分的に、1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成されることと、を含む。
【0242】
方法の一実施形態例において、上記方法は、さらに、1つまたは複数の乗算演算または除算演算に関連づけられる1つまたは複数のオペランドに対して、1つまたは複数の底2の対数演算を実行することであって、上記1つまたは複数の底2の対数演算は、区分線形近似を用いて実行されることと、1つまたは複数の底2の対数演算の1つまたは複数の結果に対して、1つまたは複数の加算演算または減算演算を実行することと、1つまたは複数の加算演算または減算演算の1つまたは複数の結果に対して、1つまたは複数の底2の逆対数演算を実行することと、を含み、上記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される。
[他の可能なクレーム]
(項目1)
対数回路を備える装置であって、上記対数回路は、
入力レジスタを介して、対数演算に関連づけられる入力を識別し、
範囲選択回路を用いて上記入力が包含される第1の範囲を識別し、
加算器/減算器回路を用いて、複数のオペランドに基づき、第1の方程式の結果を計算し、かつ、
出力レジスタを介して、上記対数演算に関連づけられる出力を戻すための回路を備え、
上記対数演算は、上記対数回路により、区分線形近似を用いて実行されるべきものであり、
上記第1の範囲は、上記対数演算の複数の区分線形近似(PLA)方程式に関連づけられる複数の範囲から識別され、かつ上記第1の範囲は、上記複数のPLA方程式のうちの第1の方程式に対応し、
上記出力は、少なくとも部分的に上記第1の方程式の上記結果に基づいて生成される、装置。
(項目2)
上記対数演算は、人工ニューラルネットワーク演算に関連づけられる、項目1に記載の装置。
(項目3)
上記入力は、浮動小数点数を含み、上記浮動小数点数は、指数部と、仮数部とを含み、かつ、
上記出力は、固定小数点数を含み、上記固定小数点数は、整数部と小数部とを含む、項目1に記載の装置。
(項目4)
上記複数のオペランドは、上記仮数部オペランドと、1つまたは複数の小数部オペランドとを含み、上記1つまたは複数の小数部オペランドは、各々、2の累乗を含む分母を含む、項目3に記載の装置。
(項目5)
上記対数回路は、さらに、上記1つまたは複数の小数部オペランドを生成するための1つまたは複数のシフト回路を備える、項目4に記載の装置。
(項目6)
上記対数回路は、さらに、非バイアス指数を生成すべく上記浮動小数点数の上記指数部からバイアスを減算するための減算器回路を備える、項目3に記載の装置。
(項目7)
上記出力レジスタを介して上記対数演算に関連づけられる上記出力を戻すための上記回路は、さらに、
上記固定小数点数の整数部を上記非バイアス指数部に基づいて生成し、かつ、
上記固定小数点数の上記小数部を上記第1の方程式の上記結果に基づいて生成する、項目6に記載の装置。
(項目8)
上記対数回路は、さらに、上記第1の方程式に関連づけられる上記複数のオペランドを選択するための1つまたは複数のマルチプレクサを備える、項目1に記載の装置。
(項目9)
上記加算器/減算器回路は、上記複数のオペランドに対して1つまたは複数の加算演算または減算演算を実行する、項目1に記載の装置。
(項目10)
逆対数回路をさらに備え、上記逆対数回路は、
逆対数演算に関連づけられる第2の入力を識別し、
上記第2の入力が包含される第2の範囲を識別し、
第2の方程式の第2の結果を、上記第2の方程式に関連づけられる第2の複数のオペランドに基づいて計算し、かつ、
上記逆対数演算に関連づけられる第2の出力を生成するための回路を備え、
上記逆対数演算は、上記逆対数回路により、区分線形近似を用いて実行されるべきものであり、
上記第2の範囲は、上記逆対数演算の第2の複数の区分線形近似(PLA)方程式に関連づけられる第2の複数の範囲から識別され、かつ上記第2の範囲は、上記第2の複数のPLA方程式のうちの第2の方程式に対応し、
上記第2の出力は、少なくとも部分的に上記第2の方程式の上記第2の結果に基づいて生成される、項目1に記載の装置。
(項目11)
活性化関数回路をさらに備え、上記活性化関数回路は、上記対数回路と、上記逆対数回路とを備え、かつ上記活性化関数回路は、
複数の利用可能な活性化関数から選択される1つの活性化関数を実行するための命令を受信し、
1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行し、かつ、
上記活性化関数に関連づけられる活性化出力を生成するための回路をさらに備え、
上記活性化関数は、上記1つまたは複数の乗算演算または除算演算を含み、
上記1つまたは複数の対数演算は、上記対数回路を用いて実行され、かつ上記1つまたは複数の逆対数演算は、上記逆対数回路を用いて実行され、
上記活性化出力は、少なくとも部分的に、上記1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成される、項目10に記載の装置。
(項目12)
上記活性化関数は、さらに、1つまたは複数の指数演算を含み、かつ、
上記活性化関数回路は、さらに、上記1つまたは複数の指数演算を、区分線形近似を用いて実行するための指数回路を備える、項目11に記載の装置。
(項目13)
システムであって、
アプリケーションに関連づけられる情報を記憶するためのメモリと、
上記アプリケーションに関連づけられる1つまたは複数の命令を実行するためのプロセッサと、
複数の活性化関数を実行するための活性化関数回路とを備え、上記活性化関数回路は、
上記アプリケーションに関連づけられる活性化関数を実行するための命令を受信し、
1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行し、かつ、
上記活性化関数に関連づけられる出力を生成するための回路を備え、
上記活性化関数は、上記複数の活性化関数から選択され、かつ上記活性化関数は、上記1つまたは複数の乗算演算または除算演算を含み、
上記1つまたは複数の対数演算は、対数回路により、区分線形近似を用いて実行され、かつ上記1つまたは複数の逆対数演算は、逆対数回路により、区分線形近似を用いて実行され、
上記出力は、少なくとも部分的に、上記1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成される、システム。
(項目14)
上記アプリケーションは、人工ニューラルネットワークを含み、かつ上記活性化関数は、上記人工ニューラルネットワークの動作に関連づけられる、項目13に記載のシステム。
(項目15)
上記1つまたは複数の乗算演算または除算演算を、上記1つまたは複数の対数演算および上記1つまたは複数の逆対数演算を用いて実行するための上記回路は、さらに、
上記1つまたは複数の乗算演算または除算演算に関連づけられる1つまたは複数のオペランドに対して、1つまたは複数の底2の対数演算を実行し、
上記1つまたは複数の底2の対数演算の1つまたは複数の結果に対して、1つまたは複数の加算演算または減算演算を実行し、かつ、
上記1つまたは複数の加算演算または減算演算の1つまたは複数の結果に対して、1つまたは複数の底2の逆対数演算を実行し、
上記1つまたは複数の底2の対数演算は、区分線形近似を用いて実行され、
上記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、項目13に記載のシステム。
(項目16)
上記活性化関数は、さらに、1つまたは複数の指数演算を含み、かつ、
上記活性化関数回路は、さらに、上記1つまたは複数の指数演算を、区分線形近似を用いて実行するための回路を備える、項目13に記載のシステム。
(項目17)
上記1つまたは複数の指数演算は、各々、底2を含み、かつ、
上記1つまたは複数の指数演算を、区分線形近似を用いて実行するための回路は、さらに、上記1つまたは複数の指数演算を、1つまたは複数の底2の逆対数演算を用いて実行し、上記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、項目16に記載のシステム。
(項目18)
上記複数の活性化関数には、
シグモイド関数と、
双曲線正接関数と、
swish関数と、
正規化線形ユニット関数とが含まれる、項目13に記載のシステム。
(項目19)
上記シグモイド関数、上記双曲線正接関数または上記swish関数のうちの少なくとも1つは、専ら底2を含む1つまたは複数の指数演算を用いて定義され、かつ、
上記活性化関数回路は、さらに、上記1つまたは複数の指数演算を、1つまたは複数の底2の逆対数演算を用いて実行するための回路を備え、上記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、項目18に記載のシステム。
(項目20)
命令を記憶している少なくとも1つの機械アクセス可能記憶媒体であって、上記命令は、機械上で実行されると、上記機械に、
活性化関数回路により、複数の利用可能な活性化関数から選択される活性化関数を実行するための命令を受信させ、
1つまたは複数の乗算演算または除算演算を、1つまたは複数の対数演算および1つまたは複数の逆対数演算を用いて実行させ、かつ、
上記活性化関数に関連づけられる出力を生成させ、
上記活性化関数は、上記1つまたは複数の乗算演算または除算演算を含み、
上記1つまたは複数の対数演算および上記1つまたは複数の逆対数演算は、区分線形近似を用いて実行され、かつ、
上記出力は、少なくとも部分的に、上記1つまたは複数の乗算演算または除算演算の1つまたは複数の結果に基づいて生成される、少なくとも1つの機械アクセス可能記憶媒体。
(項目21)
上記機械に、上記1つまたは複数の乗算演算または除算演算を、上記1つまたは複数の対数演算および上記1つまたは複数の逆対数演算を用いて実行させる上記命令は、さらに、上記機械に、
上記1つまたは複数の乗算演算または除算演算に関連づけられる1つまたは複数のオペランドに対して、1つまたは複数の底2の対数演算を実行させ、
上記1つまたは複数の底2の対数演算の1つまたは複数の結果に対して、1つまたは複数の加算演算または減算演算を実行させ、かつ、
上記1つまたは複数の加算演算または減算演算の1つまたは複数の結果に対して、1つまたは複数の底2の逆対数演算を実行させ、
上記1つまたは複数の底2の対数演算は、区分線形近似を用いて実行され、
上記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、項目20に記載の記憶媒体。
(項目22)
上記活性化関数は、さらに、1つまたは複数の指数演算を含み、かつ、
上記命令は、さらに、上記機械に、上記1つまたは複数の指数演算を、区分線形近似を用いて実行させる、項目20に記載の記憶媒体。(項目23) 上記複数の利用可能な活性化関数のうちの少なくとも1つの活性化関数は、専ら底2を含む1つまたは複数の指数演算を用いて定義され、かつ、
上記命令は、さらに、上記機械に、上記1つまたは複数の指数演算を、1つまたは複数の底2の逆対数演算を用いて実行させ、上記1つまたは複数の底2の逆対数演算は、区分線形近似を用いて実行される、項目20に記載の記憶媒体。
【手続補正書】
【提出日】2023-12-18
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
深層ニューラルネットワークを実装するための方法であって、
前記深層ニューラルネットワークで処理される入力ベクトルを受信する段階であって、前記入力ベクトルは、1つまたは複数の浮動小数点入力エレメントを含み、前記深層ニューラルネットワークは、1つまたは複数の隠れ層を含む、受信する段階、
前記1つまたは複数の浮動小数点入力エレメントを、1つまたは複数の固定小数点入力エレメントに変換する段階、
前記1つまたは複数の固定小数点入力エレメントを、前記1つまたは複数の隠れ層に入力する段階、
前記1つまたは複数の隠れ層によって、前記1つまたは複数の固定小数点入力エレメントに基づいて、1つまたは複数の固定小数点出力エレメントを演算する段階、
前記1つまたは複数の固定小数点出力エレメントを、1つまたは複数の浮動小数点出力エレメントに変換する段階、および
前記1つまたは複数の浮動小数点出力エレメントを用いて前記深層ニューラルネットワークの出力を生成する段階、
を備える、方法。
【請求項2】
前記1つまたは複数の浮動小数点入力エレメントを、前記1つまたは複数の固定小数点入力エレメントに変換する段階は、
底2の対数関数を前記1つまたは複数の浮動小数点入力エレメントに適用し、前記底2の対数関数は前記1つまたは複数の固定点入力エレメントを出力する段階を含む、
請求項1に記載の方法。
【請求項3】
前記1つまたは複数の固定小数点出力エレメントを、前記1つまたは複数の浮動小数点出力エレメントに変換する段階は、
底2の逆対数関数を前記1つまたは複数の固定小数点出力エレメントに適用し、前記底2の逆対数関数は前記1つまたは複数の浮動小数点出力エレメントを出力する段階を含む、
請求項1に記載の方法。
【請求項4】
重みベクトルを受信する段階であって、前記重みベクトルは、前記1つまたは複数の隠れ層の1つまたは複数の浮動小数点重みを含む、受信する段階、
前記1つまたは複数の浮動小数点重みを、1つまたは複数の固定小数点重みに変換する段階、および
前記1つまたは複数の固定小数点重みを、前記1つまたは複数の隠れ層に入力する段階、をさらに含み、
前記1つまたは複数の隠れ層は、前記1つまたは複数の固定小数点入力エレメントおよび前記1つまたは複数の固定小数点重みに基づいて、前記1つまたは複数の固定小数点出力エレメントを演算する、
請求項1に記載の方法。
【請求項5】
前記1つまたは複数の隠れ層は、1つまたは複数の畳み込み層、1つまたは複数のプーリング層、または、1つまたは複数の全結合層を含む、
請求項1に記載の方法。
【請求項6】
前記1つまたは複数の隠れ層は、複数の畳み込み層を含み、前記複数の畳み込み層のそれぞれは重みベクトルを有し、前記重みベクトルは、1つまたは複数の浮動小数点重みを含み、前記1つまたは複数の隠れ層によって、前記1つまたは複数の固定小数点入力エレメントに基づいて、前記1つまたは複数の固定小数点出力エレメントを演算する段階は、
前記1つまたは複数の浮動小数点重みを、1つまたは複数の固定小数点重みに変換する段階、および
前記1つまたは複数の固定小数点重みを、前記畳み込み層に入力する段階を含み、
前記畳み込み層において、前記1つまたは複数の固定小数点重みに対し畳み込みが実行される、
請求項5に記載の方法。
【請求項7】
前記1つまたは複数の隠れ層によって、前記1つまたは複数の固定小数点入力エレメントに基づいて、前記1つまたは複数の固定小数点出力エレメントを演算する段階は、
前記1つまたは複数の固定小数点入力エレメントに対し、1つまたは複数の固定小数点加算を実行する段階を含む、
請求項1に記載の方法。
【請求項8】
深層ニューラルネットワークを実装するための演算を実行するために実行可能な命令を記憶する1つまたは複数の非一時的なコンピュータ可読媒体であって、前記演算は、
前記深層ニューラルネットワークで処理される入力ベクトルを受信する手順であって、前記入力ベクトルは、1つまたは複数の浮動小数点入力エレメントを含み、前記深層ニューラルネットワークは、1つまたは複数の隠れ層を含む、受信する手順、
前記1つまたは複数の浮動小数点入力エレメントを、1つまたは複数の固定小数点入力エレメントに変換する手順、
前記1つまたは複数の固定小数点入力エレメントを、前記1つまたは複数の隠れ層に入力する手順、
前記1つまたは複数の隠れ層によって、前記1つまたは複数の固定小数点入力エレメントに基づいて、1つまたは複数の固定小数点出力エレメントを演算する手順、
前記1つまたは複数の固定小数点出力エレメントを、1つまたは複数の浮動小数点出力エレメントに変換する手順、および
前記1つまたは複数の浮動小数点出力エレメントを用いて前記深層ニューラルネットワークの出力を生成する手順、
を備える、1つまたは複数の非一時的なコンピュータ可読媒体。
【請求項9】
前記1つまたは複数の浮動小数点入力エレメントを、前記1つまたは複数の固定小数点入力エレメントに変換する手順は、
底2の対数関数を前記1つまたは複数の浮動小数点入力エレメントに適用し、前記底2の対数関数は前記1つまたは複数の固定点入力エレメントを出力する手順を含む、
請求項8に記載の1つまたは複数の非一時的なコンピュータ可読媒体。
【請求項10】
前記1つまたは複数の固定小数点出力エレメントを、前記1つまたは複数の浮動小数点出力エレメントに変換する手順は、
底2の逆対数関数を前記1つまたは複数の固定小数点出力エレメントに適用し、前記底2の逆対数関数は前記1つまたは複数の浮動小数点出力エレメントを出力する手順を含む、
請求項8に記載の1つまたは複数の非一時的なコンピュータ可読媒体。
【請求項11】
前記演算は、
重みベクトルを受信する手順であって、前記重みベクトルは、前記1つまたは複数の隠れ層の1つまたは複数の浮動小数点重みを含む、受信する手順、
前記1つまたは複数の浮動小数点重みを、1つまたは複数の固定小数点重みに変換する手順、および
前記1つまたは複数の固定小数点重みを、前記1つまたは複数の隠れ層に入力する手順、をさらに備え、
前記1つまたは複数の隠れ層は、前記1つまたは複数の固定小数点入力エレメントおよび前記1つまたは複数の固定小数点重みに基づいて、前記1つまたは複数の固定小数点出力エレメントを演算する、
請求項8に記載の1つまたは複数の非一時的なコンピュータ可読媒体。
【請求項12】
前記1つまたは複数の隠れ層は、1つまたは複数の畳み込み層、1つまたは複数のプーリング層、または、1つまたは複数の全結合層を含む、
請求項8に記載の1つまたは複数の非一時的なコンピュータ可読媒体。
【請求項13】
前記1つまたは複数の隠れ層は、複数の畳み込み層を含み、前記複数の畳み込み層のそれぞれは重みベクトルを有し、前記重みベクトルは、1つまたは複数の浮動小数点重みを含み、前記1つまたは複数の隠れ層によって、前記1つまたは複数の固定小数点入力エレメントに基づいて、前記1つまたは複数の固定小数点出力エレメントを演算する手順は、
前記1つまたは複数の浮動小数点重みを、1つまたは複数の固定小数点重みに変換する手順、および
前記1つまたは複数の固定小数点重みを、前記畳み込み層に入力する手順を含み、
前記畳み込み層において、前記1つまたは複数の固定小数点重みに対し畳み込みが実行される、
請求項12に記載の1つまたは複数の非一時的なコンピュータ可読媒体。
【請求項14】
前記1つまたは複数の隠れ層によって、前記1つまたは複数の固定小数点入力エレメントに基づいて、前記1つまたは複数の固定小数点出力エレメントを演算する手順は、
前記1つまたは複数の固定小数点入力エレメントに対し、1つまたは複数の固定小数点加算を実行する手順を含む、
請求項8に記載の1つまたは複数の非一時的なコンピュータ可読媒体。
【請求項15】
コンピュータプログラム命令を実行するためのコンピュータプロセッサ、および
深層ニューラルネットワークを実装するための演算を実行するために前記コンピュータプロセッサによって実行可能なコンピュータプログラム命令を記憶する非一時的なコンピュータ可読メモリを備える装置であって、前記演算は、
前記深層ニューラルネットワークで処理される入力ベクトルを受信する手順であって、前記入力ベクトルは、1つまたは複数の浮動小数点入力エレメントを含み、前記深層ニューラルネットワークは、1つまたは複数の隠れ層を含む、受信する手順、
前記1つまたは複数の浮動小数点入力エレメントを、1つまたは複数の固定小数点入力エレメントに変換する手順、
前記1つまたは複数の固定小数点入力エレメントを、前記1つまたは複数の隠れ層に入力する手順、
前記1つまたは複数の隠れ層によって、前記1つまたは複数の固定小数点入力エレメントに基づいて、1つまたは複数の固定小数点出力エレメントを演算する手順、
前記1つまたは複数の固定小数点出力エレメントを、1つまたは複数の浮動小数点出力エレメントに変換する手順、および
前記1つまたは複数の浮動小数点出力エレメントを用いて前記深層ニューラルネットワークの出力を生成する手順、
を備える、装置。
【請求項16】
前記1つまたは複数の浮動小数点入力エレメントを、前記1つまたは複数の固定小数点入力エレメントに変換する手順は、
底2の対数関数を前記1つまたは複数の浮動小数点入力エレメントに適用し、前記底2の対数関数は前記1つまたは複数の固定点入力エレメントを出力する手順を含む、
請求項15に記載の装置。
【請求項17】
前記1つまたは複数の固定小数点出力エレメントを、前記1つまたは複数の浮動小数点出力エレメントに変換する手順は、
底2の逆対数関数を前記1つまたは複数の固定小数点出力エレメントに適用し、前記底2の逆対数関数は前記1つまたは複数の浮動小数点出力エレメントを出力する手順を含む、
請求項15に記載の装置。
【請求項18】
前記演算は、
重みベクトルを受信する手順であって、前記重みベクトルは、前記1つまたは複数の隠れ層の1つまたは複数の浮動小数点重みを含む、受信する手順、
前記1つまたは複数の浮動小数点重みを、1つまたは複数の固定小数点重みに変換する手順、および
前記1つまたは複数の固定小数点重みを、前記1つまたは複数の隠れ層に入力する手順、をさらに備え、
前記1つまたは複数の隠れ層は、前記1つまたは複数の固定小数点入力エレメントおよび前記1つまたは複数の固定小数点重みに基づいて、前記1つまたは複数の固定小数点出力エレメントを演算する、
請求項15に記載の装置。
【請求項19】
前記1つまたは複数の隠れ層は、複数の畳み込み層を含み、前記複数の畳み込み層のそれぞれは重みベクトルを有し、前記重みベクトルは、1つまたは複数の浮動小数点重みを含み、前記1つまたは複数の隠れ層によって、前記1つまたは複数の固定小数点入力エレメントに基づいて、前記1つまたは複数の固定小数点出力エレメントを演算する手順は、
前記1つまたは複数の浮動小数点重みを、1つまたは複数の固定小数点重みに変換する手順、および
前記1つまたは複数の固定小数点重みを、前記畳み込み層に入力する手順を含み、
前記畳み込み層において、前記1つまたは複数の固定小数点重みに対し畳み込みが実行される、
請求項15に記載の装置。
【請求項20】
前記1つまたは複数の隠れ層によって、前記1つまたは複数の固定小数点入力エレメントに基づいて、前記1つまたは複数の固定小数点出力エレメントを演算する手順は、
前記1つまたは複数の固定小数点入力エレメントに対し、1つまたは複数の固定小数点加算を実行する手順を含む、
請求項15に記載の装置。
【外国語明細書】