(57)【要約】      （修正有）【課題】大量の電力消費、長いレイテンシ、多大なシリコン面積要件、等々を含む、ＤＮＮ用の既存のハードウェアソリューションの様々な制限を改善する。【解決手段】深層ニューラルネットワーク１００は、対数演算に関連づけられる入力を識別し、入力が包含される第１の範囲を識別し、第１の方程式の結果を、第１の方程式に関連づけられる複数のオペランドに基づいて計算し、かつ対数演算に関連づけられる出力を戻すための対数回路１１０、２１０を備える。対数演算は、対数回路１１０、２１０により、区分線形近似を用いて実行されるべきものであり、第１の範囲は、対数演算の複数の区分線形近似（ＰＬＡ）方程式に関連づけられる複数の範囲から識別され、かつ、複数のＰＬＡ方程式のうちの第１の方程式に対応する。上記出力は、少なくとも部分的に、第１の方程式の結果に基づいて生成される。【選択図】図１
2020004398.tif 000002
【特許請求の範囲】
【請求項１】
対数回路を備える装置であって、前記対数回路は、
入力レジスタを介して、対数演算に関連づけられる入力を識別し、
範囲選択回路を用いて前記入力が包含される第１の範囲を識別し、
加算器／減算器回路を用いて、複数のオペランドに基づき、第１の方程式の結果を計算し、かつ、
出力レジスタを介して、前記対数演算に関連づけられる出力を戻すための回路を備え、
前記対数演算は、前記対数回路により、区分線形近似を用いて実行されるべきものであり、
前記第１の範囲は、前記対数演算の複数の区分線形近似（ＰＬＡ）方程式に関連づけられる複数の範囲から識別され、かつ前記第１の範囲は、前記複数のＰＬＡ方程式のうちの第１の方程式に対応し、
前記出力は、少なくとも部分的に前記第１の方程式の前記結果に基づいて生成される、装置。
【請求項２】
前記対数演算は、人工ニューラルネットワーク演算に関連づけられる、請求項１に記載の装置。
【請求項３】
前記入力は、浮動小数点数を含み、前記浮動小数点数は、指数部と、仮数部とを含み、かつ、
前記出力は、固定小数点数を含み、前記固定小数点数は、整数部と小数部とを含む、請求項１に記載の装置。
【請求項４】
前記複数のオペランドは、前記仮数部と、１つまたは複数の小数部オペランドとを含み、前記１つまたは複数の小数部オペランドは、各々、２の累乗を含む分母を含む、請求項３に記載の装置。
【請求項５】
前記対数回路は、さらに、前記１つまたは複数の小数部オペランドを生成するための１つまたは複数のシフト回路を備える、請求項４に記載の装置。
【請求項６】
前記対数回路は、さらに、非バイアス指数部を生成すべく前記浮動小数点数の前記指数部からバイアスを減算するための減算器回路を備える、請求項３に記載の装置。
【請求項７】
前記出力レジスタを介して前記対数演算に関連づけられる前記出力を戻すための前記回路は、さらに、
前記固定小数点数の整数部を前記非バイアス指数部に基づいて生成し、かつ、
前記固定小数点数の前記小数部を前記第１の方程式の前記結果に基づいて生成する、請求項６に記載の装置。
【請求項８】
前記対数回路は、さらに、前記第１の方程式に関連づけられる前記複数のオペランドを選択するための１つまたは複数のマルチプレクサを備える、請求項１〜７のいずれか一項に記載の装置。
【請求項９】
前記加算器／減算器回路は、前記複数のオペランドに対して１つまたは複数の加算演算または減算演算を実行する、請求項１〜７のいずれか一項に記載の装置。
【請求項１０】
逆対数回路をさらに備え、前記逆対数回路は、
逆対数演算に関連づけられる第２の入力を識別し、
前記第２の入力が包含される第２の範囲を識別し、
第２の方程式の第２の結果を、前記第２の方程式に関連づけられる第２の複数のオペランドに基づいて計算し、かつ、
前記逆対数演算に関連づけられる第２の出力を生成するための回路を備え、
前記逆対数演算は、前記逆対数回路により、区分線形近似を用いて実行されるべきものであり、
前記第２の範囲は、前記逆対数演算の第２の複数の区分線形近似（ＰＬＡ）方程式に関連づけられる第２の複数の範囲から識別され、かつ前記第２の範囲は、前記第２の複数のＰＬＡ方程式のうちの第２の方程式に対応し、
前記第２の出力は、少なくとも部分的に前記第２の方程式の前記第２の結果に基づいて生成される、請求項１〜７のいずれか一項に記載の装置。
【請求項１１】
活性化関数回路をさらに備え、前記活性化関数回路は、前記対数回路と、前記逆対数回路とを備え、かつ前記活性化関数回路は、
複数の利用可能な活性化関数から選択される１つの活性化関数を実行するための命令を受信し、
１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行し、かつ、
前記活性化関数に関連づけられる活性化出力を生成するための回路をさらに備え、
前記活性化関数は、前記１つまたは複数の乗算演算または除算演算を含み、
前記１つまたは複数の対数演算は、前記対数回路を用いて実行され、かつ前記１つまたは複数の逆対数演算は、前記逆対数回路を用いて実行され、
前記活性化出力は、少なくとも部分的に、前記１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成される、請求項１０に記載の装置。
【請求項１２】
前記活性化関数は、さらに、１つまたは複数の指数演算を含み、かつ、
前記活性化関数回路は、さらに、前記１つまたは複数の指数演算を、区分線形近似を用いて実行するための指数回路を備える、請求項１１に記載の装置。
【請求項１３】
システムであって、
アプリケーションに関連づけられる情報を記憶するためのメモリと、
前記アプリケーションに関連づけられる１つまたは複数の命令を実行するためのプロセッサと、
複数の活性化関数を実行するための活性化関数回路とを備え、前記活性化関数回路は、
前記アプリケーションに関連づけられる活性化関数を実行するための命令を受信し、
１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行し、かつ、
前記活性化関数に関連づけられる出力を生成するための回路を備え、
前記活性化関数は、前記複数の活性化関数から選択され、かつ前記活性化関数は、前記１つまたは複数の乗算演算または除算演算を含み、
前記１つまたは複数の対数演算は、対数回路により、区分線形近似を用いて実行され、かつ前記１つまたは複数の逆対数演算は、逆対数回路により、区分線形近似を用いて実行され、
前記出力は、少なくとも部分的に、前記１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成される、システム。
【請求項１４】
前記アプリケーションは、人工ニューラルネットワークを含み、かつ前記活性化関数は、前記人工ニューラルネットワークの動作に関連づけられる、請求項１３に記載のシステム。
【請求項１５】
前記１つまたは複数の乗算演算または除算演算を、前記１つまたは複数の対数演算および前記１つまたは複数の逆対数演算を用いて実行するための前記回路は、さらに、
前記１つまたは複数の乗算演算または除算演算に関連づけられる１つまたは複数のオペランドに対して、１つまたは複数の底２の対数演算を実行し、
前記１つまたは複数の底２の対数演算の１つまたは複数の結果に対して、１つまたは複数の加算演算または減算演算を実行し、かつ、
前記１つまたは複数の加算演算または減算演算の１つまたは複数の結果に対して、１つまたは複数の底２の逆対数演算を実行し、
前記１つまたは複数の底２の対数演算は、区分線形近似を用いて実行され、
前記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、請求項１３に記載のシステム。
【請求項１６】
前記活性化関数は、さらに、１つまたは複数の指数演算を含み、かつ、
前記活性化関数回路は、さらに、前記１つまたは複数の指数演算を、区分線形近似を用いて実行するための回路を備える、請求項１３〜１５のいずれか一項に記載のシステム。
【請求項１７】
前記１つまたは複数の指数演算は、各々、底２を含み、かつ、
前記１つまたは複数の指数演算を、区分線形近似を用いて実行するための回路は、さらに、前記１つまたは複数の指数演算を、１つまたは複数の底２の逆対数演算を用いて実行し、前記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、請求項１６に記載のシステム。
【請求項１８】
前記複数の活性化関数には、
シグモイド関数と、
双曲線正接関数と、
ｓｗｉｓｈ関数と、
正規化線形ユニット関数とが含まれる、請求項１３〜１５のいずれか一項に記載のシステム。
【請求項１９】
前記シグモイド関数、前記双曲線正接関数または前記ｓｗｉｓｈ関数のうちの少なくとも１つは、専ら底２を含む１つまたは複数の指数演算を用いて定義され、かつ、
前記活性化関数回路は、さらに、前記１つまたは複数の指数演算を、１つまたは複数の底２の逆対数演算を用いて実行するための回路を備え、前記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、請求項１８に記載のシステム。
【請求項２０】
機械に、
活性化関数回路により、複数の利用可能な活性化関数から選択される活性化関数を実行するための命令を受信する手順と、
１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行する手順と、
前記活性化関数に関連づけられる出力を生成する手順と
を実行させるためのプログラムであって
前記活性化関数は、前記１つまたは複数の乗算演算または除算演算を含み、
前記１つまたは複数の対数演算および前記１つまたは複数の逆対数演算は、区分線形近似を用いて実行され、かつ、
前記出力は、少なくとも部分的に、前記１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成される、プログラム。
【請求項２１】
前記機械に、前記１つまたは複数の乗算演算または除算演算を、前記１つまたは複数の対数演算および前記１つまたは複数の逆対数演算を用いて実行させる前記命令は、さらに、前記機械に、
前記１つまたは複数の乗算演算または除算演算に関連づけられる１つまたは複数のオペランドに対して、１つまたは複数の底２の対数演算を実行させ、
前記１つまたは複数の底２の対数演算の１つまたは複数の結果に対して、１つまたは複数の加算演算または減算演算を実行させ、かつ、
前記１つまたは複数の加算演算または減算演算の１つまたは複数の結果に対して、１つまたは複数の底２の逆対数演算を実行させ、
前記１つまたは複数の底２の対数演算は、区分線形近似を用いて実行され、
前記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、請求項２０に記載のプログラム。
【請求項２２】
前記活性化関数は、さらに、１つまたは複数の指数演算を含み、かつ、
前記命令は、さらに、前記機械に、前記１つまたは複数の指数演算を、区分線形近似を用いて実行させる、請求項２０に記載のプログラム。
【請求項２３】
前記複数の利用可能な活性化関数のうちの少なくとも１つの活性化関数は、専ら底２を含む１つまたは複数の指数演算を用いて定義され、かつ、
前記命令は、さらに、前記機械に、前記１つまたは複数の指数演算を、１つまたは複数の底２の逆対数演算を用いて実行させ、前記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、請求項２０〜２２のいずれか一項に記載のプログラム。
【請求項２４】
請求項２０から２３のいずれか一項に記載のプログラムを記憶するコンピュータ可読記憶媒体。
【請求項２５】
対数回路であって、
入力レジスタを介して、対数演算に関連づけられる入力を識別するための手段であって、前記対数演算は、前記対数回路により、区分線形近似を用いて実行されるべきものである、手段と、
範囲選択回路を用いて前記入力が包含される第１の範囲を識別するための手段であって、前記第１の範囲は、前記対数演算の複数の区分線形近似（ＰＬＡ）方程式に関連づけられる複数の範囲から識別され、かつ前記第１の範囲は、前記複数のＰＬＡ方程式のうちの第１の方程式に対応する、手段と、
加算器／減算器回路を用いて、複数のオペランドに基づき、前記第１の方程式の結果を計算するための手段と、
出力レジスタを介して、前記対数演算に関連づけられる出力を戻すための手段であって、前記出力は、少なくとも部分的に前記第１の方程式の前記結果に基づいて生成される、手段と
を備える対数回路。
【請求項２６】
前記入力は、浮動小数点数を含み、前記浮動小数点数は、指数部と、仮数部とを含み、かつ、
前記出力は、固定小数点数を含み、前記固定小数点数は、整数部と小数部とを含む、請求項２５に記載の対数回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、コンピュータアーキテクチャおよび設計の分野に関し、より具体的には、排他的でなく、深層ニューラルネットワーク（ＤＮＮ）のための処理アーキテクチャに関する。
【背景技術】
【０００２】
多くの異なるユースケース用に開発されている深層学習アプリケーションの数が増加の一途であることにより、深層ニューラルネットワーク（ＤＮＮ）用に設計される専用ハードウェアに対する需要が高まっている。例えば、ＤＮＮは、典型的には、かなりの量のリアルタイム処理を必要とし、これには、畳み込み層、プーリング層、全結合層、等々といった、浮動小数点数に対する複数の複雑な演算層が包含されることが多い。しかしながら、ＤＮＮ用の既存のハードウェアソリューションは、大量の電力消費、長いレイテンシ、多大なシリコン面積要件、等々を含む、様々な制限を抱えている。
【図面の簡単な説明】
【０００３】
本開示は、添付の図面を参照して以下の詳細な説明を読めば、最もよく理解される。業界の標準的慣例に従って、様々な特徴は、必ずしも一定の縮尺で描かれず、単に例示のために使用されていることを強調しておく。明確に、または暗に示されている場合の縮尺は、単なる１つの例示を提供するものに過ぎない。他の実施形態において、様々な特徴の寸法は、説明を明確にするために任意に拡大または縮小されることがある。
【０００４】
【図１】対数および逆対数区分線形近似回路を用いて実装される深層ニューラルネットワーク（ＤＮＮ）の一実施形態例を示す。
【０００５】
【図２Ａ】深層ニューラルネットワーク（ＤＮＮ）の統合型活性化関数回路の一実施形態例を示す。
【図２Ｂ】深層ニューラルネットワーク（ＤＮＮ）の統合型活性化関数回路の一実施形態例を示す。
【０００６】
【図３Ａ】統合型活性化関数回路の活性化関数の例を示す。
【図３Ｂ】統合型活性化関数回路の活性化関数の例を示す。
【図３Ｃ】統合型活性化関数回路の活性化関数の例を示す。
【図３Ｄ】統合型活性化関数回路の活性化関数の例を示す。
【図３Ｅ】統合型活性化関数回路の活性化関数の例を示す。
【０００７】
【図４】底２の指数項を有する修正された活性化関数式を用いて実装される統合型活性化関数回路の一実施形態例を示す。
【０００８】
【図５Ａ】区分線形近似を用いて実装される対数回路の一実施形態例を示す。
【図５Ｂ】区分線形近似を用いて実装される対数回路の一実施形態例を示す。
【図５Ｃ】区分線形近似を用いて実装される対数回路の一実施形態例を示す。
【０００９】
【図６Ａ】区分線形近似を用いて実装される逆対数回路の実施形態例を示す。
【図６Ｂ】区分線形近似を用いて実装される逆対数回路の実施形態例を示す。
【図６Ｃ】区分線形近似を用いて実装される逆対数回路の実施形態例を示す。
【００１０】
【図７】区分線形近似を用いて実装される指数回路の一実施形態例を示す。
【００１１】
【図８】人工ニューラルネットワークを実装するために使用される処理アーキテクチャの一例のフローチャートを示す。
【００１２】
【図９Ａ】人工ニューラルネットワークの処理アーキテクチャ例の、サポートされる並列演算数に対するスケーラビリティを示す。
【図９Ｂ】人工ニューラルネットワークの処理アーキテクチャ例の、サポートされる並列演算数に対するスケーラビリティを示す。
【００１３】
【図１０Ａ】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【図１０Ｂ】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【図１０Ｃ】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【図１０Ｄ】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【図１０Ｅ】人工ニューラルネットワークの処理アーキテクチャ例の一パフォーマンス態様を示す。
【００１４】
【図１１Ａ】従来の活性化関数を用いて実装されるＤＮＮと、底２の指数項による修正された活性化関数を用いて実装されるＤＮＮの例を示す。
【図１１Ｂ】従来の活性化関数を用いて実装されるＤＮＮの例を示す。
【図１１Ｃ】底２の指数項による修正された活性化関数を用いて実装されるＤＮＮの例を示す。
【００１５】
【図１２Ａ】従来の活性化関数を用いて実装されるＤＮＮのパフォーマンス態様を示す。
【図１２Ｂ】修正された活性化関数を用いて実装されるＤＮＮのパフォーマンス態様を示す。
【図１３】従来の活性化関数を用いて実装されるＤＮＮと修正された活性化関数を用いて実装されるＤＮＮとのパフォーマンス態様の比較を示す。
【００１６】
【図１４Ａ】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【図１４Ｂ】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【図１５】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【図１６】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【図１７】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【図１８】本明細書に開示する実施形態に従って使用されることが可能なコンピュータアーキテクチャの実装例を示す。
【発明を実施するための形態】
【００１７】
以下の開示は、本開示の異なる特徴を実装するための多くの異なる実施形態、または実施例を提供する。以下、本開示を単純化するために、コンポーネントおよび配置の具体例を記述する。当然ながら、これらは単なる例であって、限定を意図するものではない。さらに、本開示では、様々な例において参照番号および／または文字を繰り返す場合がある。この繰り返しは、単純さおよび明瞭さを目的とするものであって、それ自体、論じる様々な実施形態および／または構成間の関係を示すものではない。異なる実施形態は、異なる利点を有する場合があり、よって必ずしも特定の利点がいずれかの実施形態の要件であるとは限らない。
【００１８】
［対数／逆対数区分線形近似回路を用いる深層ニューラルネットワーク（ＤＮＮ）推論］
機械学習（例えば、深層学習）に依存する人工知能アプリケーションの数は、増加の一途であることから、人工ニューラルネットワーク（例えば、深層ニューラルネットワーク、畳み込みニューラルネットワーク、順伝播型ニューラルネットワーク、再帰型ニューラルネットワーク、等々）を実装するように設計される専用ハードウェアが強く求められている。深層学習アプリケーションには、低電力、小面積および高速のハードウェアが理想的である。
【００１９】
具体的には、深層ニューラルネットワーク（ＤＮＮ）等の人工ニューラルネットワークは、畳み込み層、プーリング層、全結合層、等々のような複数層の処理ノードまたは「ニューロン」を用いて実装される。各層内のノードは、入力および関連する重み（典型的には、ベクトルとして表される）の集まりに対し計算を実行して出力を生成し、これらの出力が次に、次層のノードへの入力として使用される。各層内のノードにより実行される計算は、典型的には、関連づけられる重み、ならびに各ノードが「活性化される」べきかどうかの決定に使用される活性化関数に基づいて、入力を変換することを含む。さらに、これらの層は、典型的には、大域的最小値に到達するために、特定用途の要件に基づいてこの方法で反復される。
【００２０】
さらに、最先端のＤＮＮは、典型的には、単精度（３２ビット）の浮動小数点形式を用いて表される数値に対する演算を用いて実装される。ＤＮＮ推論は、畳み込み層、プーリング層、全結合層、等々のような複数の複雑な演算層を包含することから、概して、これらの浮動小数点数に対する大量のリアルタイム処理を必要とする。さらに、これらの複雑な演算は、乗算を伴うことが多く、既存のＤＮＮソリューションにおいては、浮動小数点乗算器が重要なコンポーネントの１つとなる。しかしながら、浮動小数点乗算器は、消費電力、シリコン面積およびレイテンシの点で極めてコスト高である。さらに、場合によっては、ＤＮＮ演算を単純化するためにルックアップテーブル（ＬＵＴ）が使用されることもあるが、ＬＵＴも同様に、コストの高いシリコン面積を必要とする。
【００２１】
したがって、場合によっては、ＤＮＮおよび他のタイプの人工ニューラルネットワークの実装に使用されるハードウェアのパフォーマンスを高めかつ／または必要なシリコン面積を縮小するために、ＤＮＮ最適化技術が活用されることがある。しかしながら、これらのＤＮＮ最適化技術は、典型的には、演算コストを、全体的な精度を下げかつ／または基本的な演算の数を減らして（例えば、畳み込み層、プーリング層、等々の数を制限して）削減することに焦点を合わせたものである。例えば、いくつかの実施形態において、ＤＮＮの実装に使用されるハードウェアは、より少ないビット数を有し、よってより低い精度を提供する浮動小数点表示（例えば、８ビットの量子化浮動小数点から１６ビットの固定小数点表示まで）を処理するように設計されることがある。しかしながら、より低い精度の浮動小数点表示の使用は、場合により、特により大きいデータセットに対して、受け入れ難い精度損失を招く。さらに、基本的な演算層の数を減らすＤＮＮ最適化技術は、ＤＮＮトレーニングの間に大域的最小値に到達するための収束時間が不足するといった悪影響を与えることがある。さらに、これらの様々な最適化は、やはり浮動小数点乗算器を必要とし、同じく乗算器回路の電力、面積およびパフォーマンスの面で制限がある。
【００２２】
事例によっては、乗算器回路の要件を緩和するために、ＤＮＮは、ルックアップテーブル（ＬＵＴ）を用いて対数、逆対数および／または指数計算を実行する回路を使用して実装されることがある。例えば、いくつかの実施形態において、対数、逆対数および／または指数演算の放物曲線は、複数のセグメントに分割されてもよく、個々の係数値は、曲線当てはめアルゴリズムを用いて事前に計算されてもよく、事前に計算された係数は、次に、メモリコンポーネント（例えば、ＲＯＭ）を用いて実装されるルックアップテーブルに記憶されてもよい。この方式では、曲線上の任意の点についてａｘ２＋ｂｘ＋ｃを計算するために、まず、係数ａ、ｂおよびｃの値がルックアップテーブルからフェッチされ、次に、乗算器および加算器を用いて結果が計算される。しかしながら、この手法は、関連するＬＵＴおよび乗算器用に多大なシリコン面積を必要とし、また、上式を計算するために複数のクロックサイクル（例えば、５〜８クロックサイクル）を消費する場合がある。
【００２３】
したがって、本開示は、ＤＮＮ計算を、ルックアップテーブルおよび／または乗算器に依存することなく効率的に実行できるハードウェアの様々な実施形態について記述する。以下、添付の図面をより具体的に参照して、本開示の特徴および機能性を実装するために使用され得る実施形態例について説明する。
【００２４】
図１は、対数および逆対数区分線形近似回路を用いて実装される深層ニューラルネットワーク（ＤＮＮ）１００の一実施形態例を示す。図示されている例では、ＤＮＮ１００が、第１の畳み込み層１０６ａと、最大プーリング層１０６ｂと、第２の畳み込み層１０６ｃと、第３の畳み込み層１０６ｄと、全結合層１０６ｅとを含む複数の層１０６ａ〜１０６ｅを用いて実装されている。さらに、ＤＮＮ１００は、乗算器のないニューラルネットワーク・マイクロアーキテクチャを用いて実装され、上記アーキテクチャは、個々のＤＮＮ層１０６ａ〜１０６ｅに対する計算を実行するために、乗算器回路ではなく対数および逆対数回路１１０、１２０を用いる。具体的には、対数および逆対数回路１１０、１２０は、底２の対数（ｌｏｇ２）および底２の逆対数（ａｎｔｉｌｏｇ２）をとる計算を実行するが、これらの計算は、典型的には所定のＤＮＮ層１０６において必要とされる乗算演算を加算へ変換するために活用されることが可能である。さらに、対数および逆対数回路１１０、１２０は、区分線形近似を用いてｌｏｇ２およびａｎｔｉｌｏｇ２計算を実行し、これにより、各計算を単一のクロックサイクルで、かつルックアップテーブルも乗算器も使用せずに実行することができる。この方式において、図示されている実施形態は、ＤＮＮ処理レイテンシを短縮すると同時に、乗算器回路およびルックアップテーブルの必要性も排除し、これにより、ハードウェアに必要なシリコン面積が著しく減少する。対数回路１１０および逆対数回路１２０の実装例については、図５Ａ〜図５Ｃおよび図６Ａ〜図６Ｃに関連してさらに示しかつ説明する。
【００２５】
一例として、ＤＮＮの畳み込み層（例えば、ＤＮＮ１００の層１０６ａ、１０６ｃ、１０６ｄ）に関しては、畳み込みを、概して、次式で表すことができる（ここで、ｆ（ｎ）およびｇ（ｎ）は、浮動小数点ベクトルである）。
【数１】
2020004398.tif 000003
この式では、各加算項が乗算を用いて計算される。しかしながら、式の両側に対してｌｏｇ２をとると、上式は、次のようになる。
【数２】
2020004398.tif 000004
さらに、式の左辺を、ｙ（ｎ）として定義すると、すなわち、ｌｏｇ２（ｆ＊ｇ）（ｎ）＝ｙ（ｎ）とすると、式は、
【数３】
2020004398.tif 000005
になる。しかしながら、畳み込みは、ｌｏｇ２計算の結果の累積によっては実行され得ないことから、上式は、もはや畳み込みを目的とするものではなくなる。したがって、各加算項に対し、その累積に先行して（例えば、各加算項をｌｏｇ２ドメインから元のドメインへ戻すために）ａｎｔｉｌｏｇ２をとる必要がある。
【数４】
2020004398.tif 000006
これで、畳み込みのためのこの代替方程式では、各加算項が加算を用いて計算される。こうして、先に示した元の畳み込み方程式は、各加算項の計算に乗算を必要とするが、この代替的な畳み込み方程式は、乗算ではなく加算を必要とする。したがって、この代替方程式は、基本的に、元の畳み込み方程式に必要な乗算を加算に変換するために、ｌｏｇ２（およびａｎｔｉｌｏｇ２）演算を活用する。例えば、畳み込み方程式におけるｆ（ｎ）およびｇ（ｎ）は、浮動小数点数（例えば、ＩＥＥＥ−７５４単精度浮動小数点数）であることから、図５Ａ〜図５Ｃおよび図６Ａ〜図６Ｃに関連してさらに論じるように、仮数ビットに対してｌｏｇ２およびａｎｔｉｌｏｇ２をとり、一方で指数および符号ビットは、別々に処理される。このようにして、対数および逆対数回路１１０、１２０は、複雑な浮動小数点乗算演算を回避するために、元の式の代わりにこの代替方程式を使用する畳み込みを実行するために使用されることが可能である。
【００２６】
別の例として、全結合層（例えば、ＤＮＮ１００の層１０６ｅ）は、ＤＮＮの最後の層であって、最終的な推論および決定の実行を担当する。概して、全結合層は、畳み込み層に類似するが、典型的には、一次元ベクトルを包含する。したがって、全結合層は、乗算演算を加算に変換するために、畳み込み層と同様の方法でｌｏｇ２計算を活用することができる。しかしながら、全結合層は、ＤＮＮの最後の層であることから、最終的な出力は、ｌｏｇ２ドメインではなく通常のドメインになければならない。
【００２７】
例示すると、全結合層は、概して、次式を用いて表すことができる。
【数５】
2020004398.tif 000007
畳み込みと同様に、加算項において乗算を加算に変換するために、方程式の両側に対してｌｏｇ２をとることができる。式の両側に対してｌｏｇ２をとり、さらに式の左辺をｙｆｃｌで置換すると、式は、次のようになる。
【数６】
2020004398.tif 000008
次いで、個々の加算項に対して、その累積に先行してａｎｔｉｌｏｇ２をとることができ、こうして、加算項がｌｏｇ２ドメインから元の通常のドメインへ戻される。
【数７】
2020004398.tif 000009
このようにして、全結合層の最終的な出力は、ｌｏｇ２ドメインではなく通常のドメインに存する。さらに、元の式で必要とされる乗算は、この代替方程式では加算に変換されている。
【００２８】
図示されている実施形態では、例えば、ＤＮＮ１００が、第１の畳み込み層１０６ａと、最大プーリング層１０６ｂと、第２の畳み込み層１０６ｃと、第３の畳み込み層１０６ｄと、全結合層１０６ｅとを含む複数の層１０６ａ〜１０６ｅを用いて実装されている。各層１０６ａ〜１０６ｅは、入力（Ｘ）１０１ａ〜１０１ｅを、所定の層の重みベクトル（Ｗ）１０２ａ〜１０２ｄと共に用いて計算を実行し、対応する出力（Ｙ）１０３ａ〜１０３ｆを生成する。さらに、最初の入力ベクトル（Ｘ）１０１ａは、ＤＮＮ１００の第１の畳み込み層１０６ａに供給され、残りの各層１０６ｂ〜１０６ｅには、先行層の出力（Ｙ）１０３ａ〜１０３ｄがその入力（Ｘ）１０１ｂ〜１０１ｅとして供給される。
【００２９】
さらに、区分線形近似を用いて実装される対数および逆対数回路１１０、１２０が、ＤＮＮ１００の各層１０６における計算を実行するために活用され、こうして乗算器回路およびルックアップテーブルの必要性が排除され、同時にレイテンシも短縮される。例えば、対数回路１１０は、ｌｏｇ２計算を実行して浮動小数点数を固定小数点数に変換し、これにより、浮動小数点乗算等の複雑な演算が固定小数点加算に変換されることを可能にし、かつ逆対数回路１２０は、続いて固定小数点数を浮動小数点数へ戻すためにａｎｔｉｌｏｇ２計算を実行する。さらに、対数および逆対数回路１１０、１２０は、区分線形近似を用いて各々のｌｏｇ２およびａｎｔｉｌｏｇ２計算を実行し、これにより、各計算が単一のクロックサイクルにおいて実行されることを可能にする。
【００３０】
図示されている実施形態では、例えば、対数回路１１０は、元の入力ベクトル（Ｘ）１０１ａおよび各重みベクトル（Ｗ）１０２ａ〜１０２ｄを、それらがＤＮＮ１００へ供給される前にｌｏｇ２ドメインに変換するために使用され、一方で、逆対数回路１２０は、全結合層１０６ｅの最終的な出力（Ｙ）１０３ｆをｌｏｇ２ドメインから通常のドメインへ戻すために使用される。さらに、必要に応じてｌｏｇ２ドメインと通常のドメインとの間で変換するために、ＤＮＮ１００の隠れ層（例えば入力層と出力層との間の中間層）全体にわたって追加的なａｎｔｉｌｏｇ２およびｌｏｇ２演算（不図示）も実行される。例えば、先に説明したように、畳み込み層は、各加算項が、その累積に先行して通常のドメインに戻されることを必要とし、よって、各加算項を累積する前にａｎｔｉｌｏｇ２演算が実行されなければならない。しかしながら、隠れ層の最終的な出力は、続いてｌｏｇ２ドメインへ戻された後に次の層へ提供され、次層における乗算演算が引き続き回避される。
【００３１】
例えば、各隠れ層ノードの結果は、典型的には、そのノードが「活性化」されるべきかどうかを決定する活性化関数へ送られ、次いで活性化関数の出力が次層へ入力として供給される。したがって、次層における乗算演算を回避するために、隠れ層ノードの活性化関数のｌｏｇ２が次層へ供給される。例えば、隠れ層ノードが畳み込み成分の計算を目的としてａｎｔｉｌｏｇ２演算を実行すると、結果は、活性化関数へ送られる前にｌｏｇ２ドメインへ戻される。この方式では、各隠れ層ノードによって計算される出力（Ｙ）は、それが次層への入力（Ｘ）として提供される時点で既にｌｏｇ２ドメインにある。
【００３２】
したがって、図示されている実施形態は、スケーラビリティが高く携帯可能なフレキシブルで小面積のハードウェア設計を用いて、低レイテンシ、高精度および電力消費低減を含む多くの利点を提供する。例えば、図示されている実施形態では、ＤＮＮ１００は、区分線形近似を用いてｌｏｇ２およびａｎｔｉｌｏｇ２計算を実行する対数および逆対数回路１１０、１２０を使用して実装され、これにより、ハードウェア設計における乗算器回路およびルックアップテーブルの必要性が排除される。この方式において、図示されている実施形態は、（例えば、乗算器およびルックアップテーブルの排除により）ハードウェアの必要なシリコン面積、電力消費、およびレイテンシを大幅に減らし、しかも高精度を提供する。具体的には、提案しているマイクロアーキテクチャは、各ｌｏｇ２およびａｎｔｉｌｏｇ２計算を単一のクロックサイクルで実行し、これにより、データパスを介する遅延を減らし、ひいてはハードウェアの全体的なレイテンシを短縮する。
【００３３】
提案しているマイクロアーキテクチャは、高度にスケーラブルでもある。具体的には、提案しているマイクロアーキテクチャのフレキシブルな実装は、サポートされる並列演算の数を増やすために、ハードウェアが必要に応じて複製されることを可能にする。例えば、提案しているマイクロアーキテクチャは、任意の数の対数および逆対数回路１１０、１２０を用いて実装されてもよい。この方式において、提案しているマイクロアーキテクチャは、特定のアプリケーションまたはユースケースにより必要とされる並列演算の数をサポートするために、容易にスケーリングされることが可能である。また、提案しているマイクロアーキテクチャの精度も、アプリケーションの要件に基づいてスケーリングされることが可能である。例えば、あるアプリケーションがより高い精度を要求すれば、対数および逆対数回路１１０、１２０により使用される区分線形近似モデルにおけるセグメントの数を増やして、精度要件に対処することができる。この方式において、提案しているマイクロアーキテクチャは、モバイルデバイス（例えば、ハンドヘルドまたはウェアラブルデバイス）、ドローン、サーバおよび／またはその他、ＤＮＮ演算を依存性または修正なしに必要とする任意の人工知能ソリューションを含む任意の製品またはフォームファクタ用に容易に移植される、かつ／またはスケーリングされることが可能であることから、極めてポータブルでもある。
【００３４】
［区分線形近似を用いるＤＮＮ活性化関数回路］
人工知能（ＡＩ）能力を用いて設計される製品の数は、増加の一途であることから、基本的なＡＩ演算（例えば、ニューラルネットワーク活性化関数）を加速できる、かつ同時に、特にリソースに制約のあるフォームファクタ（例えば、小型、低電力エッジデバイス）用の様々な異なる実装例および関連アルゴリズムをサポートするのに十分な汎用性も残している専用ハードウェアが強く求められている。
【００３５】
具体的には、機械学習（例えば、深層学習）に依存するＡＩソリューションの人気の高まりにより、人工ニューラルネットワーク（例えば、深層ニューラルネットワーク、畳み込みニューラルネットワーク、順伝播型ニューラルネットワーク、再帰型ニューラルネットワーク、等々）用に設計されるハードウェアアクセラレーションが求められることとなっている。例えば、深層ニューラルネットワーク（ＤＮＮ）は複数層の「人工ニューロン」を用いて実装され、それらの人工ニューロンは典型的には、非線形活性化関数を用い、それぞれが特定の入力に応答して「活性化」すべきかどうかを決定する処理ノードである。例えば、ある活性化関数は、特定の処理ノードまたは「人工ニューロン」が活性化すべきかどうかを判断するために、典型的には非線形変換を用いて入力を出力にマッピングする関数である。活性化関数の使用は、ＤＮＮの重要な一態様であるが、それはまた極めて計算集約的でもあり得る。
【００３６】
ＤＮＮの実装に使用できる活性化関数には、例の中でもとりわけシグモイド、双曲線正接（Ｔａｎｈ）、正規化線形ユニット（ＲｅＬＵ）、漏洩ＲｅＬＵおよびＳｗｉｓｈを含む多くの異なるタイプがある。活性化関数の選択は、ＤＮＮのトレーニングダイナミクスおよびタスクパフォーマンスに大きく影響する。したがって、場合によっては、トレーニングダイナミクスおよびパフォーマンスを向上させるために、ＤＮＮは、単一のニューラルネットワーク内で複数の活性化関数を用いて実装されてもよい。ＤＮＮの計算エンジンは、これらの活性化関数を実装するための専用ハードウェアにも依存することがあり、これは、典型的には、シリコン上でかなりの面積を占める。例えば、最先端のＤＮＮ用に設計されるハードウェアは、典型的には、単精度（３２ビット）浮動小数点数を処理し、かつルックアップテーブル（ＬＵＴ）手法を用いて活性化関数を実装する。しかしながら、活性化関数に対するルックアップテーブル（ＬＵＴ）手法の使用は、シリコン面積、電力消費およびレイテンシを増加させ、これらは各々、ＤＮＮ内のニューロン数の増加に伴って増加し続ける。さらに、各活性化関数は、その固有のルックアップテーブルを必要とすることから、単一のＤＮＮにおける複数の活性化関数の使用は、必要なルックアップテーブルの数を増やし、よってシリコン面積、電力およびレイテンシにさらに影響を与える。
【００３７】
一例として、ルックアップテーブル手法を使用すると、活性化関数の曲線は、典型的には、ある区間［−ｍ、ｍ］（「ｍ」は実数）で境界が定められ、境界を定めた曲線は、次に、複数のセグメントに分割されることがある。次には、曲線当てはめアルゴリズムを用いて個々の係数の値が事前に計算されてもよく、事前に計算された係数は、次に、メモリコンポーネント（例えば、ＲＯＭ）を用いて実装されるルックアップテーブルに記憶されてもよい。この方式では、曲線上の任意の点についてａｘ２＋ｂｘ＋ｃを計算するために、まず、係数ａ、ｂおよびｃの値がルックアップテーブルからフェッチされ、次に、乗算器および加算器を用いて結果が計算される。しかしながら、この手法は、関連するルックアップテーブルおよび乗算器用に多大なシリコン面積を必要とし、また、上記の式を計算するために複数のクロックサイクル（例えば、５〜８クロックサイクル）を消費する場合がある。
【００３８】
例示すると、６４ビットの係数幅（ａ：２０ビット、ｂ：２０ビット、ｃ：２４ビット）を有する２５６個の均一なセグメントに分割される、区間［−３、３］に渡る有界曲線は、ＩＥＥＥ−７５４単精度浮動小数点数に対して２１ビットの仮数精度を生み出す。所定の実施形態において、この手法は、各々４１，８５３個および５，５７４個の合成ゲート（例えば、ＮＡＮＤ等価ゲート）を備える２５６×６４ＲＯＭおよび計算ブロックを必要とする。このハードウェアをより低い精度（例えば、１２ビットまたは１０ビットの精度）でスケールダウンしても、ＲＯＭ領域が節約されるだけである。例えば、所定の実施形態において、精度１０ビットのシグモイド活性化関数に必要とされる推定シリコン面積は、１７，１２０個の合成ゲートである。さらに、この面積は、ハードウェアがサポートする必要がある並列演算の数に基づいて、さらに複製またはインスタンス化されなければならない。
【００３９】
したがって、ＤＮＮの活性化関数を実装するために使用される既存のハードウェア（例えば、ルックアップテーブルを用いて実装されるハードウェア）は、例の中でもとりわけ、コストの高いシリコン面積要件、不満足な電力消費および長い処理レイテンシを含む様々な欠点を有する。これらの欠点は、人工ニューロン、並列演算および／または活性化関数の数を増やすこと等によりハードウェアがスケーリングされるにつれてさらに拡大する。さらに、各活性化関数に対して別々のハードウェアブロックおよび／またはルックアップテーブルを使用することなく複数の活性化関数を実装できる統合されたハードウェアソリューションは、存在しない。
【００４０】
したがって、本開示は、後に詳述するように、ルックアップテーブルを使用することなく複数のＤＮＮ活性化関数をサポートする統合されたハードウェアソリューションの様々な実施形態について記述する。
【００４１】
図２Ａおよび図２Ｂは、人工ニューラルネットワーク（例えば、深層ニューラルネットワーク（ＤＮＮ））の統合型活性化関数（ＡＦ）回路２００の一実施形態例を示す。具体的には、ＡＦ回路２００は、単一のハードウェアコンポーネント上でルックアップテーブルに依存することなく複数のＤＮＮ活性化関数をサポートする。
【００４２】
例えば、図示されている実施形態において、ＡＦ回路２００は、各活性化関数の必要な計算を単純化するために、区分線形近似を用いて実装される指数、底２の対数（ｌｏｇ２）および底２の逆対数（ａｎｔｉｌｏｇ２）をとる計算を活用する新規アルゴリズムを用いて、個々の活性化関数を実装する。例えば、多くの活性化関数は、典型的にはコストの高い乗算器回路を用いて実装される複雑な指数、除算および／または乗算演算を包含する非線形関数である（例えば、除算は、分子に分母の逆数を乗じる乗算器回路を用いて実装されることがある）。しかしながら、ＡＦ回路２００は、ｌｏｇ２およびａｎｔｉｌｏｇ２計算を活用して、所定の活性化関数に必要な複雑な除算および／または乗算演算を排除し、代わりにこれらを減算および／または加算に変換する。さらに、ＡＦ回路２００は、活性化関数に必要な計算をさらに単純化するために、指数、ｌｏｇ２およびａｎｔｉｌｏｇ２計算を、区分線形近似を用いて実装する。その結果、ｌｏｇ２およびａｎｔｉｌｏｇ２の計算を、単一のクロックサイクルで実行し、一方で指数計算を２クロックサイクルで実行することができる。この方式では、１つの活性化関数を僅か５クロックサイクルで計算することができ、かつスループットを増加させるために基本的な計算を容易にパイプライン化することができる。したがって、ＡＦ回路２００は、区分線形近似を用いて実装されるｌｏｇ２、ａｎｔｉｌｏｇ２および指数計算を活用して、活性化関数の基本的計算を単純化し、これにより、活性化関数のルックアップテーブルの必要性をなくし、乗算器回路要件を低減しかつ全体的なレイテンシを短縮する。この手法は、同様の精度を有する典型的なルックアップテーブル手法と比較して必要な合成ゲートの数が遙かに少ないことから、（例えば、ルックアップテーブルの排除および乗算器回路の低減に起因して）シリコン面積の大幅な節約に直結する。
【００４３】
図示されている実施形態では、例えば、ＡＦ回路２００は、区分線形近似を用いて各々ｌｏｇ２、ａｎｔｉｌｏｇ２および指数計算を実行するための対数、逆対数および指数ブロック２１０、２２０、２３０を含む。例えば、実施形態によっては、対数、逆対数および指数ブロック２１０、２２０、２３０は、１６セグメントの区分線形近似を用いて、ＩＥＥＥ−７５４単精度浮動小数点数の仮数部における１２ビット精度（すなわち、１符号ビット＋８指数ビット＋１２仮数ビット＝２１ビット精度）で実装されてもよい。対数ブロック、逆対数ブロックおよび指数ブロック２１０、２２０、２３０の実装例については、図５Ａ〜図５Ｃ、図６Ａ〜図６Ｃ、および図７に関連してさらに示し、かつ説明する。
【００４４】
ＡＦ回路２００は、次のような活性化関数、すなわち、シグモイド、双曲線正接（Ｔａｎｈ）、正規化線形ユニット（ＲｅＬＵ）、漏洩ＲｅＬＵおよびＳｗｉｓｈ、をサポートする構成可能回路である。しかしながら、他の実施形態では、ＡＦ回路２００は、任意のタイプまたは数の活性化関数をサポートするように設計されてもよい。ＡＦ回路２００は、オペコードを用いて、サポートされる活性化関数の何れをも使用するように構成されることが可能である。例えば、図示されている実施形態において、ＡＦ回路２００は、ＤＮＮの実装における特定の一層またはノードにより望まれる活性化関数のタイプを選択するために、５ビットのオペコードを使用し、かつ本回路は、オペコード値を変更するだけで、他のタイプの活性化関数用に再構成されることが可能である。図示されている実施形態では、５つのオペコードビット２０２ａ〜２０２ｅが、Ｔａｎｈ２０２ａ、シグモイド２０２ｂ、Ｓｗｉｓｈ２０２ｃ、ＲｅＬＵ２０２ｄおよび漏洩ＲｅＬＵ２０２ｅとして示され、これらの個々のビット値は、所望される活性化関数のタイプに基づいて設定される。表１は、オペコードビット２０２ａ〜２０２ｅの値に基づく、サポートされる様々な活性化関数のためのＡＦ回路２００のハードウェア構成を明記したものである。
［表１：活性化関数のオペコード］
【表１】
2020004398.tif 000010
【００４５】
ＡＦ回路２００の動作は、オペコードビット２０２ａ〜２０２ｅを介してどの活性化関数が選択されるかに依存して変わる。したがって、ＡＦ回路２００の機能性については、後に、ＡＦ回路２００によりサポートされる様々な活性化関数を示す図３Ａ〜図３Ｅに関連してさらに説明する。
【００４６】
図３Ａは、シグモイド活性化関数のグラフを示し、数学的には、これを
【数８】
2020004398.tif 000011
で表す。シグモイドの出力（ｙ軸）は、０〜１の範囲を有し、その形状は、滑らかな階段関数に似ていて、これが、シグモイドをＤＮＮ活性化関数として有益にする重要な特性である。具体的には、この関数は、滑らかで連続微分可能であって、勾配は、−４〜４の区間で急峻である。これは、Ｘの僅かな変化がＹの大きい変化を引き起こすことを意味し、ＤＮＮにおける誤差逆伝播法の重要な特性となる。しかしながら、シグモイド関数には、いくつかの欠点もある。例えば、シグモイドは、この関数が＋４および−４を超える領域においてほぼ平坦であって勾配が極小となることから、ＤＮＮによるコース補正の実行を困難にするという勾配消失問題を抱える。さらに、出力の範囲が０〜１であることから、出力は、原点を中心とする対称性ではなく、よって、勾配の更新が正方向に進む。
【００４７】
概して、単精度浮動小数点形式で表現される所与の入力Ｘに対し、Ｘのシグモイド、またはＳｉｇｍｏｉｄ（Ｘ）は、次式を用いて計算することができる。
【数９】
2020004398.tif 000012
しかしながら、上述の式は、コストの高い除算演算を必要とすることから、ｌｏｇ２およびａｎｔｉｌｏｇ２計算を活用して除算を回避することができる。例えば、対数関数の特性に基づいて、式の両辺にｌｏｇ２を取り込めば、除算を減算に変換することができる。
【数１０】
2020004398.tif 000013
しかしながら、ｆ（Ｘ）を解くためには、式の両辺にａｎｔｉｌｏｇ２も取り込まなければならない。
【数１１】
2020004398.tif 000014
シグモイド関数のこの代替式は、除算が減算およびｌｏｇ２／ａｎｔｉｌｏｇ２計算に置き換えられていることから、もはや除算を必要としない。さらに、指数、ｌｏｇ２およびａｎｔｉｌｏｇ２計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装されることが可能である。
【００４８】
したがって、図２Ａおよび図２Ｂに戻ると、ＡＦ回路２００は、シグモイド関数を、上述の単純化された手法を用いて実装する。例えば、ＡＦ回路２００がシグモイド関数用に構成される場合、シグモイドオペコードビット（参照番号２０２ｂ）は、１に設定され、他の活性化関数の残りのオペコードビット（参照番号２０２ａ、ｃ、ｄ、ｅ）は、０に設定される。この方式では、入力Ｘ（参照番号２０１）は、ＡＦ回路２００に供給されると、ｍｕｘ２０６ａおよびｄｅｍｕｘ２０７を通過してバイアスブロック２０８に至り、バイアスブロック２０８は、入力Ｘにバイアスを加えてこれを負数（−Ｘ）に変換する。次に、結果−Ｘは、指数ブロック２３０へ送られてｅ−Ｘが計算され、次にこの結果は、加算器２１２へ送られて１＋ｅ−Ｘが計算される。１＋ｅ−Ｘの結果は、ｍｕｘ２０６ｄを通過して対数ブロック２１０ｂに至り、次いで対数ブロック２１０ｂがｌｏｇ２（１＋ｅ−Ｘ）を計算する。
【００４９】
これとは別に、減算器２１１へは、その第１のオペランドとして定数１が供給され、同時にその第２のオペランドとしてｍｕｘ２０６ｅの出力が供給される。この場合、ｍｕｘ２０６ｅへ供給されるシグモイドのオペコードビット２０２ｂは、１に設定されていることから、ｍｕｘ２０６ｅは、定数値０をその出力として選択する。したがって、減算器２１１へは、定数値１および０が個々のオペランドとして供給され、よって減算器２１１は、１−０＝１を計算する。結果としての値１は、次に、ｍｕｘ２０６ｆを通って対数ブロック２１０ａへ送られ、次に、対数ブロック２１０ａは、ｌｏｇ２（１）（これは、０になる）を計算する。
【００５０】
したがって、対数ブロック２１０ａおよび２１０ｂは、各々ｌｏｇ２（１）およびｌｏｇ２（１＋ｅ−Ｘ）の結果を出力し、次に、これらの結果が加算器／減算器２１３へオペランドとして送られる。この場合、加算器／減算器２１３は、減算を行ってｌｏｇ２（１）−ｌｏｇ２（１＋ｅ−Ｘ）を計算し、次に、その結果が逆対数ブロック２２０へ送られ、そこでａｎｔｉｌｏｇ２計算
【数１２】
2020004398.tif 000015
が実行される。この方式では、逆対数ブロック２２０により計算される結果がシグモイド関数の最終結果に一致する。例えば、先に論じた対数関数の特性に基づいて、
【数１３】
2020004398.tif 000016
となる。したがって、ＡＦ回路２００は、逆対数ブロック２２０の結果をシグモイド関数の最終出力Ｙ（参照番号２０３）として出力する。
【００５１】
さらに、先に述べたように、ＡＦ回路２００の個々の指数、対数および逆対数ブロック２１０〜２３０により実行される指数、ｌｏｇ２およびａｎｔｉｌｏｇ２計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装される。
【００５２】
図３Ｂは、双曲線正接（Ｔａｎｈ）活性化関数のグラフを示し、数学的には、これを
【数１４】
2020004398.tif 000017
で表す。この関数は、−１〜１の範囲の出力を有し、かつ原点を中心に対称性であって、シグモイド関数より急峻な勾配を有するが、やはり勾配消失問題を抱えている。
【００５３】
概して、単精度浮動小数点形式で表現される所与の入力Ｘに対し、Ｘの双曲線正接、またはＴａｎｈ（Ｘ）は、次式を用いて計算することができる。
【数１５】
2020004398.tif 000018
上式は、コストの高い除算演算を必要とすることから、図３Ａのシグモイド関数に関して述べたものと同様にしてｌｏｇ２およびａｎｔｉｌｏｇ２計算を活用することにより、除算を回避することができる。例えば、式の両辺にｌｏｇ２を取り込めば、除算を減算に変換することができる。
【数１６】
2020004398.tif 000019
さらに、ｆ（Ｘ）を解くために、式の両辺にａｎｔｉｌｏｇ２を取り込むことができる。
【数１７】
2020004398.tif 000020
Ｔａｎｈ関数のこの代替式は、除算が減算およびｌｏｇ２／ａｎｔｉｌｏｇ２計算に置き換えられていることから、もはや除算を必要としない。さらに、指数、ｌｏｇ２およびａｎｔｉｌｏｇ２計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装されることが可能である。
【００５４】
したがって、図２Ａおよび図２Ｂに戻ると、ＡＦ回路２００は、Ｔａｎｈ関数を、上述の単純化された手法を用いて実装する。例えば、ＡＦ回路２００がＴａｎｈ関数用に構成される場合、Ｔａｎｈオペコードビット（参照番号２０２ａ）は、１に設定され、他の活性化関数の残りのオペコードビット（参照番号２０２ｂ、ｃ、ｄ、ｅ）は、０に設定される。この方式では、入力Ｘ（参照番号２０１）は、ＡＦ回路２００へ入力されると、まずシフタ２０４を通り、シフタ２０４は、Ｘを１ビットだけ左シフトしてその値を２倍にし、こうして出力２Ｘを生成する。さらに、ＡＦ回路２００は、Ｔａｎｈ関数用に構成されることから、シフタ２０４からの出力２Ｘは、次に、ｍｕｘ２０６ａおよびｄｅｍｕｘ２０７を介してバイアスブロック２０８へ送られる。例えば、ｍｕｘ２０６ａの選択信号は、Ｔａｎｈオペコードビット２０２ａを基礎とし、これが１に設定されていることから、ｍｕｘ２０６ａは、ｄｅｍｕｘ２０７へ送る出力として２Ｘを選択する。さらに、ｄｅｍｕｘ２０７の選択信号は、共に０に設定されるＲｅＬＵ／漏洩ＲｅＬＵオペコードビット２０２ｄ、ｅを入力として供給されるＯＲゲート２０５の出力を基礎とすることから、ｄｅｍｕｘ２０７は、値２Ｘをバイアスブロック２０８へルーティングする。
【００５５】
バイアスブロック２０８は、次に、２Ｘにバイアスを加算してこれを負数（−２Ｘ）に変換し、結果としての値−２Ｘは、次に指数ブロック２３０へ送られ、指数ブロック２３０が値ｅ−２Ｘを出力する。指数ブロック２３０からの出力ｅ−２Ｘは、次に、減算器２１１（ｍｕｘ２０６ｅを介して）および加算器２１２の双方へ送られ、減算器２１１は、次に、１−ｅ−２Ｘの値を計算し、一方で加算器２１２は、１＋ｅ−２Ｘの値を計算する。減算器２１１および加算器２１２からの出力は、各々対数ブロック２１０ａおよび２１０ｂへ送られ、対数ブロック２１０ａおよび２１０ｂは、各々、ｌｏｇ２（１−ｅ−２Ｘ）およびｌｏｇ２（１＋ｅ−２Ｘ）の値を計算する。
【００５６】
対数ブロック２１０ａおよび２１０ｂからの個々の出力は、次に、加算器／減算器２１３へオペランドとして送られ、加算器／減算器２１３は、減算を実行してｌｏｇ２（１−ｅ−２Ｘ）−ｌｏｇ２（１＋ｅ−２Ｘ）を計算し、次にその結果が、逆対数ブロック２２０へ送られ、逆対数ブロック２２０がａｎｔｉｌｏｇ２計算
【数１８】
2020004398.tif 000021
を実行する。この方式では、逆対数ブロック２２０により計算される結果がＴａｎｈ関数の最終結果に一致する。例えば、先に論じた対数関数の特性に基づいて、
【数１９】
2020004398.tif 000022
となる。したがって、ＡＦ回路２００は、逆対数ブロック２２０の結果をＴａｎｈ関数の最終出力Ｙ（参照番号２０３）として出力する。
【００５７】
さらに、先に述べたように、ＡＦ回路２００の個々の指数、対数および逆対数ブロック２１０〜２３０により実行される指数、ｌｏｇ２およびａｎｔｉｌｏｇ２計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装される。
【００５８】
図３Ｃは、正規化線形ユニット（ＲｅＬＵ）活性化関数のグラフを示し、数学的には、これをＹ＝ｍａｘ（０，Ｘ）で表す。ＲｅＬＵは、広範に使用されている活性化関数であって、様々な利点を提供する。具体的には、ＲｅＬＵは、勾配消失問題を回避する非線形関数であり、他の活性化関数ほど複雑でなく、よって計算コストがより低い、かつＤＮＮを疎にかつより効率的にする好ましい特性を有する（例えば、その入力が負の場合、出力はゼロになり、よって対応するニューロンは活性化されない）。一方で、ＲｅＬＵの出力がゼロになると、逆伝播の間に重みを更新することができず、よってＲｅＬＵは、ニューラルネットワークの隠れ層でしか使用され得ない。
【００５９】
概して、単精度浮動小数点形式で表現される所与の入力Ｘに対し、ＸのＲｅＬＵ、またはＲｅＬＵ（Ｘ）は、次式を用いて計算することができる。
【数２０】
2020004398.tif 000023
上式は、単純であって、コストの高い計算を全く必要とせず、よってその実装は、指数、ｌｏｇ２またはａｎｔｉｌｏｇ２計算を利用する必要がないことにより、比較的簡単である。
【００６０】
例えば、図２Ａおよび図２Ｂに戻ると、ＡＦ回路２００がＲｅＬＵ関数用に構成される場合、ＲｅＬＵオペコードビット（参照番号２０２ｄ）は、１に設定され、他の活性化関数の残りのオペコードビット（参照番号２０２ａ、ｂ、ｃ、ｅ）は、０に設定される。この方式では、入力Ｘ（参照番号２０１）がＡＦ回路２００へ供給されると、Ｘは、まずｍｕｘ２０６ａを通ってｄｅｍｕｘ２０７へ進み、次に、ｄｅｍｕｘ２０７がＸをｍｕｘ２０６ｃへルーティングする。これとは別に、ｍｕｘ２０６ｃへは、（ｍｕｘ２０６ｂを介して）定数値１も供給される。さらに、ｍｕｘ２０６ｃの選択信号は、Ｘの符号ビットを基礎とするものであることから、ｍｕｘ２０６ｃは、Ｘが正であるか負であるかに依存して、Ｘまたは０のいずれかをその出力として選択する。ｍｕｘ２０６ｃの出力は、ＲｅＬＵ関数の最終結果であることから、ＡＦ回路２００の残りのロジックは、バイパスされ、よって、ｍｕｘ２０６ｃの出力が最終的に、ＲｅＬＵ関数に関するＡＦ回路２００の最終的な出力Ｙ（参照番号２０３）として使用される。
【００６１】
図３Ｄは、漏洩正規化線形ユニット（漏洩ＲｅＬＵ）活性化関数のグラフを示し、数学的には、これを
【数２１】
2020004398.tif 000024
で表す。ここで、ａ＝０．０１である。漏洩ＲｅＬＵは、ＲｅＬＵを改良した変形版である。例えば、ＲｅＬＵの場合、入力が負であるとき、出力および勾配はゼロになり、逆伝播における重みの更新中に問題が生じる。漏洩ＲｅＬＵは、入力が負の場合のこの問題に、入力と小値の線形成分（０．０１）との乗算を用いることによって対処し、これにより、ニューロンが死滅することを防ぎ、かつ勾配がゼロになることも防ぐ。
【００６２】
概して、単精度浮動小数点形式で表現される所与の入力Ｘに対し、Ｘの漏洩ＲｅＬＵ、またはＬｅａｋｙＲｅＬＵ（Ｘ）は、次式を用いて計算することができる。
【数２２】
2020004398.tif 000025
ＲｅＬＵの場合と同様に、漏洩ＲｅＬＵの式は、単純であって、コストの高い計算を全く必要とせず、よってその実装は、指数、ｌｏｇ２またはａｎｔｉｌｏｇ２計算を利用する必要がないことにより、比較的簡単である。
【００６３】
例えば、図２Ａおよび図２Ｂに戻ると、ＡＦ回路２００が漏洩ＲｅＬＵ関数用に構成される場合、漏洩ＲｅＬＵオペコードビット（参照番号２０２ｅ）は、１に設定され、他の活性化関数の残りのオペコードビット（参照番号２０２ａ、ｂ、ｃ、ｄ）は、０に設定される。この方式では、入力Ｘ（参照番号２０１）がＡＦ回路２００へ供給されると、Ｘは、まずｍｕｘ２０６ａを通ってｄｅｍｕｘ２０７へ進み、次に、ｄｅｍｕｘ２０７がＸをｍｕｘ２０６ｃへルーティングする。これとは別に、ｍｕｘ２０６ｃへは、（ｍｕｘ２０６ｂを介して）定数値０．０１も供給される。さらに、ｍｕｘ２０６ｃの選択信号は、Ｘの符号ビットを基礎とするものであることから、ｍｕｘ２０６ｃは、Ｘが正であるか負であるかに依存して、Ｘまたは０．０１のいずれかをその出力として選択する。ｍｕｘ２０６ｃの出力は、漏洩ＲｅＬＵ関数の最終結果であることから、ＡＦ回路２００の残りのロジックは、バイパスされ、よって、ｍｕｘ２０６ｃの出力が最終的に、漏洩ＲｅＬＵ関数に関するＡＦ回路２００の最終的な出力Ｙ（参照番号２０３）として使用される。
【００６４】
図３Ｅは、Ｓｗｉｓｈ活性化関数のグラフを示し、数学的には、これをＹ＝Ｘ＊Ｓｉｇｍｏｉｄ（Ｘ）で表す。多くの場合、Ｓｗｉｓｈは、他の活性化関数（例えば、ＲｅＬＵ）より高い精度を提供することが証明されている。
【００６５】
概して、単精度浮動小数点形式で表現される所与の入力Ｘに対し、ＸのＳｗｉｓｈ、またはＳｗｉｓｈ（Ｘ）は、次式を用いて計算することができる。
【数２３】
2020004398.tif 000026
上式は、コストの高い除算演算を必要とすることから、図３Ａのシグモイド関数に関して述べたものと同様にしてｌｏｇ２およびａｎｔｉｌｏｇ２計算を活用することにより、除算を回避することができる。例えば、式の両辺にｌｏｇ２を取り込めば、除算を減算に変換することができる。
【数２４】
2020004398.tif 000027
さらに、ｆ（Ｘ）を解くために、式の両辺にａｎｔｉｌｏｇ２を取り込むことができる。
【数２５】
2020004398.tif 000028
Ｓｗｉｓｈ関数のこの代替式は、除算が減算およびｌｏｇ２／ａｎｔｉｌｏｇ２計算に置き換えられていることから、もはや除算を必要としない。さらに、指数、ｌｏｇ２およびａｎｔｉｌｏｇ２計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装されることが可能である。
【００６６】
したがって、図２Ａおよび図２Ｂに戻ると、ＡＦ回路２００は、Ｓｗｉｓｈ関数を、上述の単純化された手法を用いて実装する。例えば、ＡＦ回路２００がＳｗｉｓｈ関数用に構成される場合、Ｓｗｉｓｈオペコードビット（参照番号２０２ｃ）は、１に設定され、他の活性化関数の残りのオペコードビット（参照番号２０２ａ、ｂ、ｄ、ｅ）は、０に設定される。この方式では、入力Ｘ（参照番号２０１）がＡＦ回路２００へ供給されると、Ｘは、ｍｕｘ２０６ａを通ってｄｅｍｕｘ２０７へ進み、次に、ｄｅｍｕｘ２０７がＸをバイアスブロック２０８へルーティングする。例えば、ｍｕｘ２０６ａの選択信号は、Ｔａｎｈオペコードビット２０２ａを基礎とし、これが０に設定されていることから、ｍｕｘ２０６ａは、ｄｅｍｕｘ２０７へ送る出力としてＸを選択する。さらに、ｄｅｍｕｘ２０７の選択信号は、共に０に設定されるＲｅＬＵ／漏洩ＲｅＬＵオペコードビット２０２ｄ、ｅを入力として供給されるＯＲゲート２０５の出力を基礎とすることから、ｄｅｍｕｘ２０７は、値Ｘをバイアスブロック２０８へルーティングする。
【００６７】
バイアスブロック２０８は、次に、Ｘにバイアスを加算してこれを負数（−Ｘ）に変換し、結果としての値−Ｘは、次に指数ブロック２３０へ送られ、指数ブロック２３０が値ｅ−Ｘを出力する。指数ブロック２３０の出力ｅ−Ｘは、次に、加算器２１２へ送られて１＋ｅ−Ｘが計算され、その結果は、次にｍｕｘ２０６ｄを介して対数ブロック２１０ｂへ送られ、次に対数ブロック２１０ｂがｌｏｇ２（１＋ｅ−Ｘ）を計算する。
【００６８】
これとは別に、ｍｕｘ２０６ｆの選択信号は、Ｓｗｉｓｈオペコードビット２０２ｃを基礎とし、これが１に設定されていることから、ｍｕｘ２０６ｆは、対数ブロック２１０ａへ送る出力としてＸを選択し、次に対数ブロック２１０ａがｌｏｇ２（Ｘ）を計算する。
【００６９】
対数ブロック２１０ａおよび２１０ｂからの個々の出力は、次に、加算器／減算器２１３へオペランドとして送られ、加算器／減算器２１３は、減算を実行してｌｏｇ２（Ｘ）−ｌｏｇ２（１＋ｅ−Ｘ）を計算し、次にその結果が、逆対数ブロック２２０へ送られ、逆対数ブロック２２０がａｎｔｉｌｏｇ２計算
【数２６】
2020004398.tif 000029
を実行する。この方式では、逆対数ブロック２２０により計算される結果がＳｗｉｓｈ関数の最終結果に一致する。例えば、先に論じた対数関数の特性に基づいて、
【数２７】
2020004398.tif 000030
となる。したがって、ＡＦ回路２００は、逆対数ブロック２２０の結果をＳｗｉｓｈ関数の最終出力Ｙ（参照番号２０３）として出力する。
【００７０】
さらに、先に述べたように、ＡＦ回路２００の個々の指数、対数および逆対数ブロック２１０〜２３０により実行される指数、ｌｏｇ２およびａｎｔｉｌｏｇ２計算は、この代替式が必要とする計算をさらに単純化するために、区分線形近似を用いて実装される。
【００７１】
したがって、図２Ａおよび図２ＢのＡＦ回路２００の図示されている実施形態は、複数の活性化関数をサポートしかつスケーラビリティが高く携帯可能なフレキシブルで小面積のハードウェア設計を用いて、低レイテンシ、高精度および電力消費低減を含む多くの利点を提供する。具体的には、ＡＦ回路２００は、ルックアップテーブルに依存することなく、（例えば、各活性化関数に別々のハードウェアコンポーネントを使用せず）単一のハードウェアコンポーネント上に複数のＤＮＮ活性化関数を実装する統合されたソリューションである。例えば、図示されている実施形態では、ＡＦ回路２００は、区分線形近似を用いてｌｏｇ２、ａｎｔｉｌｏｇ２および指数計算を実行する対数、逆対数および指数回路２１０、２２０、２３０を使用して実装され、これにより、ハードウェア設計におけるルックアップテーブルの必要性が排除され、かつ必要な乗算器回路が低減される。
【００７２】
この方式において、図示されている実施形態は、ハードウェアの必要なシリコン面積、電力消費およびレイテンシを大幅に減らし、しかも高精度を提供する。例えば、同様の精度を有する典型的なルックアップテーブル手法と比較して必要な合成ゲートの数が遙かに少ないことから、ルックアップテーブルの排除および乗算器回路の低減は、シリコン面積の大幅な節約に直結する。さらに、ｌｏｇ２およびａｎｔｉｌｏｇ２の計算を、単一のクロックサイクルで実行し、一方で指数計算を２クロックサイクルで実行することができ、これにより、活性化関数の僅か５クロックサイクルでの計算が可能にされる。さらには、スループットを向上させるために、基本的な計算を容易にパイプライン化することができる。
【００７３】
ＡＦ回路２００は、単に適切なオペコードをプログラムするだけで異なる活性化関数用に構成され得ることから、ＡＦ回路２００は、異なる活性化関数に関連づけられるルックアップテーブルをロード／プログラミングするためのソフトウェアへの依存も排除する。ＡＦ回路２００上でオペコードをプログラムすることは、活性化関数用のルックアップテーブルをプログラムすることに比較して遙かに単純であり、必要とするクロックサイクル数も減る。
【００７４】
ＡＦ回路２００は、極めてスケーラブルでもある。具体的には、ＡＦ回路２００のフレキシブルな実装は、サポートされる並列演算の数を増やすために、基本的なハードウェアが必要に応じて複製されることを可能にする。この方式では、ＡＦ回路２００は、特定のアプリケーションまたはユースケースによって必要とされる並列演算の数をサポートするように、容易にスケーリングされることが可能である。また、ＡＦ回路２００の精度も、アプリケーションの要件に基づいてスケーリングされることが可能である。例えば、あるアプリケーションがより高い精度を要求すれば、対数、逆対数および指数回路２１０、２２０、２３０により使用される区分線形近似モデルにおけるセグメントの数を増やして、精度要件に対処することができる。この方式において、ＡＦ回路２００は、モバイルデバイス（例えば、ハンドヘルドまたはウェアラブルデバイス）、ドローン、サーバおよび／またはその他、ＤＮＮ演算を依存性または修正なしに必要とする任意の人工知能ソリューションを含む任意の製品またはフォームファクタ用に容易に移植される、かつ／またはスケーリングされることが可能であることから、極めてポータブルでもある。
【００７５】
図４は、人工ニューラルネットワーク（例えば、深層ニューラルネットワーク（ＤＮＮ））の統合型活性化関数（ＡＦ）回路４００の代替実施形態を示す。具体的には、ＡＦ回路４００は、図２Ａおよび図２ＢのＡＦ回路２００に類似するものであるが、所定の活性化関数は、指数定数ｅの累乗ではなく２の累乗を用いる修正された式を用いて実装されることが異なる。例示のために、シグモイド、Ｓｗｉｓｈおよび双曲線正接活性化関数の元の式および修正された式を表２に記す。
［表２：２の累乗を用いる修正型活性化関数式］
【表２】
2020004398.tif 000031
【００７６】
表２に示すように、元の式における底ｅの指数は、修正された式において底２の指数に置き換えられる。この方式では、修正された式により、活性化関数の重要な非線形特性（例えば、曲線形状）がなおも示されているが、基本的な活性化関数ハードウェアは、遙かに効率的に実装されることが可能である。具体的には、底ｅの指数を底２の指数で置き換えることにより、指数演算の全てを逆対数回路によって実行することができることから、修正された式に指数回路はもはや必要ない。例えば、変数ｘの逆対数の底２は、２のｘ乗、（２ｘ）と等価であることから、底２の逆対数演算を実行する逆対数回路を用いて、修正された活性化関数式に現出する底２の累乗を計算することができる。
【００７７】
さらに、指数回路ではなく逆対数回路を用いて指数演算を実行することにより、ＡＦ回路４００のレイテンシおよびシリコン面積の双方が減少する。比較として、例えば、図２Ａおよび図２ＢのＡＦ回路２００は、区分線形近似を用いて実装される指数回路（例えば、図７の指数回路）を使用して指数演算を実行し、これにより、指数演算を２クロックサイクルで実行することができ、かつ少なくとも１つの乗算器を必要とする。しかしながら、ＡＦ回路４００は、区分線形近似を用いて実装される逆対数回路（例えば、図６Ａ〜図６Ｃの逆対数回路）を使用して指数演算を実行し、これにより、底２の逆対数演算を単一のクロックサイクルで実行することができ、乗算器を必要としない。したがって、指数回路を逆対数回路に置き換えることにより、ＡＦ回路４００の全体的なレイテンシが１クロックサイクル短縮され、よって、図２Ａおよび図２Ｂの活性化関数回路の５クロックサイクルに比較して、活性化関数が僅か４クロックサイクルで計算されることが可能にされる。さらに、ＡＦ回路４００は、もはや如何なる乗算器回路も必要とせず、排除された指数回路は、乗算器を必要とする唯一のコンポーネントであったことから、結果的にかなりのシリコン面積が節約される。例えば、図２Ａおよび図２ＢのＡＦ回路２００は、８，３２１個のゲートを用いて実装され得るが、ＡＦ回路４００は、僅か７，２２１個のゲートを用いて実施されることが可能である。
【００７８】
さらに、図２Ａおよび図２ＢのＡＦ回路２００と同様に、ＡＦ回路４００は、所定の活性化関数に必要な計算を単純化するために、区分線形近似を用いる底２の対数（ｌｏｇ２）および底２の逆対数（ａｎｔｉｌｏｇ２）をとる計算を活用する。例えば、ｌｏｇ２およびａｎｔｉｌｏｇ２計算は、所定の活性化関数に必要な複雑な除算および／または乗算演算を排除し、代わりにこれらを減算および／または加算に変換するために使用されることが可能である。表３は、表２の修正されたシグモイド、Ｓｗｉｓｈおよび双曲線正接活性化関数（ｅの代わりに２の累乗を用いる）の対数／逆対数方程式を記述している。修正された活性化関数についてのこれらの対数／逆対数方程式は、図３Ａ〜図３Ｅに関連して記述したような元の活性化関数の方式と同様の方式で導出される。
［表３：修正型活性化関数（２の累乗を用いる）の対数／逆対数バージョン］
【表３】
2020004398.tif 000032
【００７９】
図示されている実施形態において、ＡＦ回路４００は、シグモイド、Ｓｗｉｓｈ、Ｔａｎｈ、ＲｅＬＵおよび漏洩ＲｅＬＵ活性化関数を実装するように設計されている。シグモイド、ＳｗｉｓｈおよびＴａｎｈ活性化関数は、表３の対数／逆対数方程式を用いて実装されるが、ＲｅＬＵおよび漏洩ＲｅＬＵ活性化関数は、複雑な除算、乗算または指数演算を必要としないことから、図３Ｃ〜図３Ｄの元の方程式を用いて実装される。これ以外のＡＦ回路４００の動作は、図２Ａおよび図２ＢのＡＦ回路２００と同様である。
【００８０】
［区分線形近似を用いて実装される対数、逆対数および指数回路］
図５Ａ〜図５Ｃは、区分線形近似を用いて実装される対数回路５００の一実施形態例を示す。具体的には、図５Ａが対数回路５００の全体的実装を示し、図５Ｂおよび５Ｃが対数回路５００の所定のコンポーネントの実装を示す。
【００８１】
対数回路５００は、１６セグメントの区分線形近似を用いて対数計算を実行する。この方式では、対数回路５００にルックアップテーブルまたは乗算器回路は不要であり、対数計算を単一のクロックサイクルで実行することができる。対数計算のために区分線形近似を実行すべく対数回路５００によって使用される式を、下表４に示す。
［表４：ｌｏｇ２（１＋ｍ）の区分線形近似方程式］
【表４】
2020004398.tif 000033
【００８２】
表４の式は、ｌｏｇ２（１＋ｍ）の結果を計算または近似するように設計され、ここで、ｍは、単精度浮動小数点入力５０１の仮数部分を表す。例えば、仮数ｍは、常に０と１の間にあり、かつｌｏｇ２（０）の結果は不定であることから、ｍが０のときの不確定な結果を避けるために、ｌｏｇ２（ｍ）ではなくｌｏｇ２（１＋ｍ）が計算される。さらに、ｌｏｇ２（１＋ｍ）を１６セグメントの区分線形近似を用いて計算するために、区間［０，１］に渡るｍの潜在的な値が、異なる１６個の範囲またはセグメントに分割されて範囲０〜１５として指定され、ｌｏｇ２（１＋ｍ）の結果を近似するために、各範囲に対して別々の方程式が定義される。さらに、個々の方程式は、専ら以下のタイプのオペランド、すなわち、ｍ、２の累乗で除算されたｍの分数および／または定数値、のいずれかに対する加算および／または減算を用いて定義される。この方式において、方程式が必要とする除算は、専ら２の累乗によるものであり、よって、全ての除算演算は、シフタを用いて実装されることが可能である。さらに、限定的な「シフトベース」の除算から生じる精度の損失は、所定の方程式において加算かつ／または減算される定数値の使用によって補償される。したがって、個々の方程式は、専ら加算、減算および／またはシフト演算を用いて実装されることが可能であり、よって、複雑な乗算／除算回路の必要性が排除される。
【００８３】
図５Ａは、表４の方程式を実装するように設計された対数回路５００の全体的ロジックを示している。図示されている実施形態では、対数回路５００に３２ビットの単精度浮動小数点数が、入力５０１として供給され（例えば、入力レジスタを介して供給され）、対数回路５００は、（例えば、出力レジスタを介して返される）出力５０３として、入力５０１のｌｏｇ２値を表す対応する３２ビットの固定小数点数を計算する。
【００８４】
入力５０１は、符号ビット（入力［３１］）と、８ビットの指数ｅ（入力［３０：２３］）と、２３ビットの仮数ｍ（入力［２２：０］）とを含む。入力５０１の符号と出力５０３の符号とが常に一致することを所与として、入力５０１の符号ビット（入力［３１］）は、出力５０３の対応するビット（出力［３１］）へ直に供給される。さらに、入力５０１の指数ｅ（入力［３０：２３］）は、８ビットの減算器５０２へ供給され、減算器５０２は、指数ｅから０ｘ７Ｆのバイアスを減算して、対応する８ビットの非バイアス指数を生成する。例えば、数学的観点からすると、浮動小数点数の指数からバイアスを減算すると、結果は常に、指数のｌｏｇ２に等しい値になる。したがって、結果としての非バイアス指数は、出力５０３に表される固定小数点数の整数部分（出力［３０：２３］）として機能する。
【００８５】
さらに、入力５０１の仮数ｍは、表４から、出力５０３の小数フィールド（出力［２２：０］）を計算するために使用されることになる対応する範囲および方程式を選択するために使用される。例えば、仮数ｍのうちの４つの最上位ビット（入力［２２：１９］）は、範囲選択ロジック５０４へ入力として供給され、範囲選択ロジック５０４は、適用可能な範囲に対応する信号が１に設定され、一方で残りの信号は０に設定されるように、表４のｍの個々の範囲に対応する１６個の１ビット信号（範囲［０］〜範囲［１５］）を出力する。
【００８６】
範囲選択ロジック５０４の出力に基づいて、次に、マルチプレクサ（ｍｕｘ）５０８ａ〜５０８ｃを用いて、表４から選択された方程式に対応するオペランドが選択され、これらのオペランドは、次に、加算器／減算器ロジック５２０へ入力として供給される。具体的には、ｍｕｘ５０８ａ〜５０８ｃは、仮数ｍの（例えば、シフト演算を用いて生成される）様々な分数、ならびに所定の定数値を選択する。例えば、仮数ｍは、複数のシフタ５０６に供給され、シフタ５０６は各々、所定のビット数に渡るｍの右シフトを実行して、表４の方程式全体に現出する２の累乗によるｍの様々な分数（例えば、
【数２８】
2020004398.tif 000034
）を計算する。これらのシフタ５０６の出力は、次に、図５Ａに示される方法で個々のｍｕｘ５０８ａ〜５０８ｃへ入力として供給される。ｍｕｘ５０８ｂへは、別途ｍｕｘ５０８ｂからのオペランドを必要としない所定の方程式に関してはｍｕｘ５０８ｂによってそれが出力されるという理由で、定数値０が入力の１つとして追加供給される。最後に、表４の所定の式に必要な定数値（例えば、
【数２９】
2020004398.tif 000035
）が定数生成ロジック５１０によって生成され、さらに、ｍｕｘ５０８ｃへ入力として供給される。定数生成ロジック５１０の実装については、後に図５Ｂに関連してさらに例示し、かつ説明する。
【００８７】
各ｍｕｘ５０８ａ〜５０８ｃは、次に、表４の適用可能な方程式のオペランドの１つに対応する適切な出力を（例えば、範囲選択ロジック５０４に基づいて）選択し、これらの出力は、次に、加算器／減算器ロジック５２０へ入力として供給される。さらに、加算器／減算器ロジック５２０へは、仮数ｍも、それが表４の全ての方程式に対するオペランドであるという理由で、別の入力として直に供給される。
【００８８】
加算器／減算器ロジック５２０は、次に、入力として供給された種々のオペランドに対して適切な加算および／または減算演算を実行し、計算結果は、次に、出力５０３の２３ビットの小数フィールド（出力［２２：０］）として機能する。加算器／減算器ロジック５２０の実装については、後に図５Ｃに関連してさらに例示し、かつ説明する。
【００８９】
図５Ｂは、表４の所定の方程式が必要とする定数値の生成に使用される、図５Ａの対数回路５００の定数生成ロジック５１０の一実装例を示す。図示されている実施形態において、定数生成ロジック５１０は、表４の方程式全体に現出する定数値の集合を生成するためのシフタ５１２と、表４の選択された式の対応する定数値を選択するためのマルチプレクサ（ｍｕｘ）５１４ａ、５１４ｂと、選択された定数値を加算するための加算器５１６とを含む。
【００９０】
図示されている実施形態では、個々のシフタ５１２へ、（例えば、各シフタ５１２が生成する分数定数が正であるか、負であるかに依存して）＋１または−１のいずれかである２３ビットの定数値が入力として供給される。例えば、＋１である２３ビット定数値は、１つのシフタを除く、正の結果を生成する全てのシフタへ入力として供給され、一方で、−１である２３ビットの符号付き表現は、負の結果を生成する唯一の残りのシフタ（例えば、９ビットの右シフトを実行して
【数３０】
2020004398.tif 000036
を生成するシフタ）へ入力として供給される。各シフタ５１２は、次に、所定のビット数による右シフトを実行して、表４の方程式全体に現出する個々の分数定数（例えば、
【数３１】
2020004398.tif 000037
）を生成する。
【００９１】
さらに、表４の個々の方程式は、これらの分数定数のうちの０個、１個または２個のいずれかを必要とすることから、表４から選択される方程式に対する分数定数の適切な組合せが、２つのｍｕｘ５１４ａ、５１４ｂを用いて選択される。具体的には、シフタ５１２の出力が、図５Ｂに示される方式で２つのｍｕｘ５１４ａ、５１４ｂへ入力として供給され、かつ２３ビットの定数値０も、各ｍｕｘ５１４ａ、５１４ｂへ入力として供給される。各ｍｕｘ５１４ａ、５１４ｂは、次に、特定の分数定数または値０のいずれかを出力する。この方式では、ｍｕｘ５１４ａ、５１４ｂは、表４から選択される特定の方程式に依存して（例えば、図５Ａの対数回路５００の範囲選択ロジック５０４を用いた決定の通りに）、シフタ５１２により生成される個々の分数定数のうちのゼロ個、１個または２個をまとめて出力することができる。
【００９２】
ｍｕｘ５１４ａ、５１４ｂの出力は、次に、加算器５１６へ入力として供給され、加算器５１６は、これらの合計を計算する。加算器５１６からの結果は、次に、図５Ｂの定数生成ロジック５１０により出力される最終的な定数値５１１として機能する。
【００９３】
図５Ｃは、表４から選択される方程式のオペランドに対して加算および／または減算を実行するために使用される、図５Ａの対数回路５００の加算器／減算器ロジック５２０の一実装例を示す。図示されている実施形態において、加算器／減算器ロジック５２０は、２つの加算器／減算器５２２ａ、５２２ｂと、２つのＯＲゲート５２４ａ、５２４ｂとを含み、以下、これらについて詳述する。
【００９４】
第１の加算器／減算器５２２ａには、仮数ｍと、対数回路５００のｍｕｘ５０８ｂおよび５０８ｃの出力とがそのオペランドとして供給される。さらに、加算器／減算器５２２ａによってこれらのオペランドに対し実行される加算および／または減算の特定の組合せは、ＯＲゲート５２４ａによって指示される。例えば、ＯＲゲート５２４ａには、入力として（例えば、対数回路５００の範囲選択ロジック５０４により生成されるような）表４からの範囲１１および１５に対応する信号が供給され、ＯＲゲート５２４ａの出力は、次に、加算器／減算器５２２ａへ供給される。この方式では、ＯＲゲート５２４ａの出力が０であるとき、加算器／減算器５２２ａは、全てのオペランドを合計するが、ＯＲゲート５２４ａの出力が１であるとき（例えば、仮数ｍが範囲１１または範囲１５のいずれかに含まれるとき）、加算器／減算器５２２ａは、ｍｕｘ５０８ｂの出力に対応するオペランドを減算し、かつ残りのオペランドを加算する。言い換えれば、範囲１１および１５を除く、表４のｍの何れの範囲に対しても、加算器／減算器５２２ａは、ｍ＋［ｍｕｘ５０８ｂの出力］＋［ｍｕｘ５０８ｃの出力］、の結果を出力するが、範囲１１および１５に対しては、加算器／減算器５２２ａは、ｍ−［ｍｕｘ５０８ｂの出力］＋［ｍｕｘ５０８ｃの出力］、の結果を出力する。
【００９５】
第２の加算器／減算器５２２ｂには、第１の加算器／減算器５２２ａの出力、および対数回路５００のｍｕｘ５０８ａの出力が各々そのオペランドとして供給される。ＯＲゲート５２４ｂの出力は、加算器／減算器５２２ｂがこれらのオペランドに対して加算を実行するか、減算を実行するかを指示する。例えば、ＯＲゲート５２４ｂは、（例えば、対数回路５００の範囲選択ロジック５０４により生成されるような）入力として表４の範囲７〜１５に対応する信号を供給され、ＯＲゲート５２４ｂの出力は、次に、加算器／減算器５２２ｂへ供給される。この方式では、ＯＲゲート５２４ｂの出力が０であるとき、加算器／減算器５２２ｂは、双方のオペランドを合計するが、ＯＲゲート５２４ｂの出力が１であるとき（例えば、仮数ｍが範囲７〜１５のいずれかに含まれるとき）は、ｍｕｘ５０８ａの出力が第１の加算器／減算器５２２ａの出力から減算される。言い換えれば、ｍが表４の範囲０〜６内にあるとき、加算器／減算器５２２ｂは、［第１の加算器／減算器５２２ａの出力］＋［ｍｕｘ５０８ａの出力］を計算するが、ｍが範囲７〜１５内にあるとき、加算器／減算器５２２ｂは、［第１の加算器／減算器５２２ａの出力］−［ｍｕｘ５０８ａの出力］を計算する。第２の加算器／減算器５２２ｂの結果は、図５Ｃの加算器／減算器ロジック５２０の最終的な出力５２１として機能する。
【００９６】
対数回路５００の動作を例示するために、入力例５０１の処理の流れを説明する。入力５０１の符号および指数フィールドは、それらの基本的な値に関係なく常に同じ方法で処理されることから、この例では、入力５０１の仮数ｍに関連づけられる処理に焦点を当てる。この例では、入力５０１の仮数ｍ（入力［２２：０］）を、表４の範囲２に対応する、範囲０．１２５≦ｍ＜０．１８７５内にあるものとする。したがって、対数回路５００は、表４の範囲２の対応する方程式、すなわち
【数３２】
2020004398.tif 000038
を実行する。対数回路５００は、まず、元の入力５０１を処理して先に参照した方程式に対する個々のオペランドを生成しかつ／または取得し、対数回路５００は、次に、式の結果を計算するためにこれらのオペランドを加算器／減算器ロジック５２０へ供給する。
【００９７】
入力５０１の仮数フィールド（入力［２２：０］）に対応する第１のオペランドｍは、入力５０１の関連するビットフィールドから加算器／減算器ロジック５２０へ直に供給される。
【００９８】
先に参照した方程式の残りのオペランドは、ｍｕｘ５０８ａ〜５０８ｃによって加算器／減算器ロジック５２０へ供給される。具体的には、表４の様々な式全体に渡って現出するオペランドの集合が、ｍｕｘ５０８ａ〜５０８ｃへ入力として供給され、ｍｕｘ５０８ａ〜５０８ｃは、次に、表４の適切な式に必要な特定のオペランドを出力する。例えば、仮数ｍの４つの最上位ビットに基づいて、範囲選択ロジック５０４は、ｍが包含される表４の特定の範囲を識別する信号を出力し、この範囲信号が、ｍｕｘ５０８ａ〜５０８ｃにより、出力される適切なオペランドを選択するために使用される。この例では、ｍが表４の範囲２内にあることから、範囲選択ロジック５０４は、範囲２に対応する、別段で範囲［２］信号として示される範囲信号を出力する。範囲［２］信号に基づいて、ｍｕｘ５０８ａは、
【数３３】
2020004398.tif 000039
（ｍ＞＞２）をその出力として選択し、ｍｕｘ５０８ｂは、０をその出力として選択し、かつｍｕｘ５０８ｃは、定数生成ロジック５１０により生成される定数５１１をその出力として選択する。図５Ｂの定数生成ロジック５１０を参照すると、例えば、範囲［２］信号により、ｍｕｘ５１４ａおよび５１４ｂは、
【数３４】
2020004398.tif 000040
（１＞＞６）および
【数３５】
2020004398.tif 000041
（−１＞＞９）をその個々の出力として選択し、これらの値は、次に、加算器５１６によって合計され、結果として得られる定数５１１が定数生成ロジック５１０によって出力される。したがって、ｍｕｘ５０８ｃは、対応する値
【数３６】
2020004398.tif 000042
を有するこの定数５１１をその出力として選択する。
【００９９】
この方式では、最終的に以下のオペランドが加算器／減算器ロジック５２０へ供給される。
ｍ：（入力５０１から直に供給）、
【数３７】
2020004398.tif 000043
：（ｍｕｘ５０８ａより供給）、
０：（ｍｕｘ５０８ｂより供給）、
【数３８】
2020004398.tif 000044
：（ｍｕｘ５０８ｃより供給）。範囲［２］信号により、加算器／減算器ロジック５２０は、これら全てのオペランドに対する加算を実行し、よって、表４の範囲２の方程式である、式
【数３９】
2020004398.tif 000045
の結果を計算する。したがって、結果として得られる値は、対数回路５００により生成される出力５０３における２３ビットの小数フィールド（出力［２２：０］）として機能する。
【０１００】
図６Ａ〜図６Ｃは、区分線形近似を用いて実装される逆対数回路６００の実施形態例を示す。具体的には、図６Ａおよび６Ｂは、逆対数回路６００全体の代替実装を示し、図６Ｃは、逆対数回路６００の基本的な加算器／減算器ロジック６２０を示す。
【０１０１】
逆対数回路６００は、１６セグメントの区分線形近似を用いて逆対数計算を実行する。この方式では、逆対数回路６００にルックアップテーブルまたは乗算器回路は不要であり、逆対数計算を単一のクロックサイクルで実行することができる。逆対数計算のために区分線形近似を実行すべく逆対数回路６００によって使用される式を、下表５に示す。
［表５：ａｎｔｉｌｏｇ２（η）＝２ηの区分線形近似方程式］
【表５】
2020004398.tif 000046
【０１０２】
表５の方程式は、ηのａｎｔｉｌｏｇ２、すなわち２のη乗、または２η、の結果を計算または近似するように設計され、ここで、ηは、固定小数点入力数６０１の小数部分（入力［２２：０］）を表す。例えば、逆対数回路６００の固定小数点入力６０１は、典型的には、図５Ａ〜図５Ｃの対数回路５００の固定小数点出力５０３に対する中間的ＤＮＮ計算から導出される。さらに、先に論じたように、対数回路５００の固定小数点出力５０３の小数部分は、ｍ＝０のときの不確定結果を回避するために、ｌｏｇ２（ｍ）ではなくｌｏｇ２（１＋ｍ）として計算される。したがって、ａｎｔｉｌｏｇ２（η）＝２ηを計算するための表５の方程式は、各方程式における定数値＋１によって反映されるような、１＋ｍに等しい値を生成するように設計されている。
【０１０３】
ａｎｔｉｌｏｇ２（η）＝２ηを、例えば１６セグメントの区分線形近似を用いて計算するために、区間［０，１］に渡るηの潜在的値が、異なる１６の範囲またはセグメントに分割されて範囲０〜１５として指定され、ａｎｔｉｌｏｇ２（η）または２ηの結果を近似するために、各範囲に別々の方程式が定義される。さらに、個々の方程式は、専ら以下のタイプのオペランド、すなわち、η、２の累乗で除算されたηの分数および／または定数値、のいずれかに対する加算および／または減算を用いて定義される。この方式において、方程式が必要とする除算は、専ら２の累乗によるものであり、よって、全ての除算演算は、シフタを用いて実装されることが可能である。さらに、限定的な「シフトベース」の除算から生じる精度の損失は、所定の方程式において加算かつ／または減算される定数値の使用によって補償される。したがって、個々の方程式は、専ら加算、減算および／またはシフト演算を用いて実装されることが可能であり、よって、複雑な乗算／除算回路の必要性が排除される。
【０１０４】
図６Ａは、表５の方程式を実装するように設計された逆対数回路６００の全体的ロジックを示している。図示されている実施形態では、逆対数回路６００に３２ビットの固定小数点数が、（例えば、入力レジスタを介して供給される）入力６０１として供給され、逆対数回路６００は、（例えば、出力レジスタを介して返される）出力６０３として、入力６０１のａｎｔｉｌｏｇ２結果を表す対応する３２ビットの浮動小数点数を計算する。
【０１０５】
入力６０１は、符号ビット（入力［３１］）と、８ビットの整数部（入力［３０：２３］）と、２３ビットの小数部（入力［２２：０］）とを含む。入力６０１の符号と出力６０３の符号とが常に一致することを所与として、入力６０１の符号ビット（入力［３１］）は、出力６０３の対応するビット（出力［３１］）へ直に供給される。入力６０１の整数部分（入力［３０：２３］）は、８ビット加算器６０２へ供給され、８ビット加算器６０２は、０ｘ７Ｆのバイアスを加え戻して、浮動小数点出力６０３の指数フィールドとして機能する８ビットのバイアス指数を生成する。
【０１０６】
さらに、表５におけるηの値に対応する、入力６０１の小数部分（入力［２２：０］）は、表５から、浮動小数点出力６０３の仮数部（出力［２２：０］）を計算するために使用される対応する範囲および式を選択するために使用される。例えば、入力６０１の小数部分のうちの４つの最上位ビット（入力［２２：１９］）は、範囲選択ロジック６０４へ入力として供給され、範囲選択ロジック６０４は、適用可能な範囲に対応する信号が１に設定され、一方で残りの信号は０に設定されるように、表５のηの個々の範囲に対応する１６個の１ビット信号（範囲［０］〜範囲［１５］）を出力する。範囲選択ロジック６０４の出力に基づいて、次には、マルチプレクサ（ｍｕｘ）６０８ａ〜６０８ｄを用いて、表５の対応する式が必要とする、ηの必要な分数および分数定数等の所定のオペランドが選択される。
【０１０７】
具体的には、ｍｕｘ６０８ａおよび６０８ｂを用いて、表５の対応する式が必要とするηの分数が選択される。例えば、ηの値（入力［２２：０］）は、シフタ６０６ａによる第１の集合に供給され、シフタ６０６ａは各々、所定のビット数に渡るηの右シフトを実行して、表５の方程式全体に現出する２の累乗によるηの様々な分数（例えば、
【数４０】
2020004398.tif 000047
）を計算する。これらのシフタ６０６ａの出力は、次に、図６Ａに示される方法でｍｕｘ６０８ａおよび６０８ｂへ入力として供給される。ｍｕｘ６０８ａおよび６０８ｂは、次に、範囲選択ロジック６０４の出力に基づいて決定される、表５の対応する方程式が必要とするηの特定の分数を選択する。
【０１０８】
同様に、ｍｕｘ６０８ｃおよび６０８ｄを用いて、表５の対応する方程式が必要とする分数定数が選択される。例えば、値１を有する２３ビット定数は、シフタ６０６ｂによる第２の集合に供給され、シフタ６０６ｂは各々、所定のビット数に渡る右シフトを実行して、表５の方程式全体に現出する個々の分数定数（例えば、
【数４１】
2020004398.tif 000048
）を生成する。これらのシフタ６０６ｂの出力は、次に、図６Ａに示される方法でｍｕｘ６０８ｃおよび６０８ｄへ入力として供給される。ｍｕｘ６０８ｃおよび６０８ｄは、次に、範囲選択ロジック６０４の出力に基づいて決定される、表５の対応する方程式が必要とする特定の分数定数を選択する。
【０１０９】
表５の対応する方程式に関してｍｕｘ６０８ａ〜６０８ｄにより選択される個々のオペランドは、次に、加算器／減算器ロジック６２０へ入力として供給される。ηの値（入力［２２：０］）および定数値１もまた、これらの値が表５の方程式の全てにおけるオペランドであるという理由で、加算器／減算器ロジック６２０へ入力として供給される。加算器／減算器ロジック６２０は、次に、表５の対応する式によって要求される通りに、これらのオペランドに対し、（例えば、範囲選択ロジック６０４の出力に基づいて）適切な加算および／または減算演算を実行する。加算器／減算器ロジック６２０からの結果は、次に、逆対数回路６００の浮動小数点出力６０３（出力［２２：０］）の２３ビットの仮数部分として機能する。加算器／減算器ロジック６２０の実装については、後に図６Ｃに関連してさらに例示し、かつ説明する。
【０１１０】
図６Ｂは、区分線形近似を用いて実装される逆対数回路の代替実装６００を示す。具体的には、図６Ａの逆対数回路が入力として固定小数点数の逆対数を計算するように設計されるのに対して、図６Ｂの逆対数回路は、入力として、固定小数点数または浮動小数点数のいずれかの逆対数を計算することができる。この方式において、図６Ｂの逆対数回路は、（例えば、図５Ａ〜図５Ｃの対数回路５００の出力から導出される）ｌｏｇ２ドメインにおける固定小数点数、またはその元のドメインにおける浮動小数点数のいずれかのａｎｔｉｌｏｇ２を計算することができる。例えば、図４に関連して説明したように、活性化関数（ＡＦ）回路４００は、逆対数回路を２つの目的で、すなわち、（１）ｌｏｇ２ドメインにおける固定小数点数を元のドメインにおける浮動小数点数に戻すためと、（２）底２の浮動小数点指数の累乗を計算するために用いる。したがって、ＡＦ回路４００の逆対数回路のオペランドは、（例えば、ｌｏｇ２ドメイン変換のための）固定小数点数、および（例えば、底２の累乗のための）浮動小数点数の双方を含む。したがって、ＡＦ回路４００の逆対数回路は、固定小数点数または浮動小数点数のいずれかで表される入力を処理することができる図６Ｂの逆対数回路を用いて実装されることが可能である。
【０１１１】
図６Ｂの逆対数回路の動作は、図６Ａのそれに類似するものであるが、後に詳述するように、入力６０１の整数または指数フィールド（入力［３０：２３］）の処理方法が異なる。
【０１１２】
具体的には、入力６０１が固定小数点数であれば、これは、整数フィールド（入力［３０：２３］）を含み、ｍｕｘ６１６へ入力の１つとして供給される。ｍｕｘ６１６の選択信号は、入力６０１が固定小数点数であるかどうかを示す２進信号である。したがって、ｍｕｘ６１６の選択信号は、入力６０１が固定小数点数である場合に値１を有し、これにより、ｍｕｘ６１６は、入力６０１の整数部分（入力［３０：２３］）をその出力として選択し、次にこれが８ビット加算器６０２へオペランドとして供給される。加算器６０２は、次に、入力６０１の整数部分（入力［３０：２３］）に０ｘ７Ｆのバイアスを加え戻して８ビットのバイアス指数を生成し、次には、これが浮動小数点出力６０３の指数部分として機能する。
【０１１３】
あるいは、入力６０１が浮動小数点数であれば、これは、指数フィールド（入力［３０：２３］）を含むことになる。指数フィールド（入力［３０：２３］）は、８ビット減算器６１２へ供給され、８ビット減算器６１２は、０ｘ７Ｆのバイアスを減算して、数学的には指数のｌｏｇ２値を表す対応する８ビットの非バイアス指数を生成する。減算器６１２の出力は、次に、シフタ６１４へ供給され、シフタ６１４は、２の非バイアス指数累乗分だけ左シフトを実行して対応するａｎｔｉｌｏｇ２値を計算し、これが次に、ｍｕｘ６１６へ入力の１つとして供給される。ｍｕｘ６１６の選択信号は、入力６０１が浮動小数点数である場合に値０を有し、これにより、ｍｕｘ６１６は、シフタ６１４からの値をその出力として選択する。ｍｕｘ６１６の出力は、次に、８ビット加算器６０２へオペランドとして供給され、８ビット加算器６０２は、０ｘ７Ｆのバイアスを加え戻して８ビットのバイアス指数を生成し、次にこれが、浮動小数点出力６０３の指数部分として機能する。
【０１１４】
図６Ｃは、表５の対応する方程式のオペランドに対して加算および／または減算を実行するために使用される、図６Ａおよび６Ｂの逆対数回路６００の加算器／減算器ロジック６２０の一実装例を示す。図示されている実施形態において、加算器／減算器ロジック６２０は、３つの加算器／減算器６２２ａ〜６２２ｃと、３つのＯＲゲート６２４ａ〜６２４ｃとを含み、以下、これらについて詳述する。
【０１１５】
第１の加算器／減算器６２２ａには、入力として次のようなオペランド、すなわち、ηの値（入力［２２：０］）、定数値１およびｍｕｘ６０８ａの出力、が供給される。これらのオペランドに対して実行される加算および／または減算の特定の組合せは、入力として範囲［０］〜範囲［７］の信号を供給されるＯＲゲート６２４ａによって指示される。この方式では、ηが表５の範囲０〜７内にある場合、ＯＲゲート６２４ａの出力が１になり、これにより、加算器／減算器６２２ａが、η＋１−［ｍｕｘ６０８ａの出力］、を計算する。あるいは、ηが表５の範囲８〜１５内にある場合、ＯＲゲート６２４ａの出力が０になり、これにより、加算器／減算器６２２ａが、η＋１＋［ｍｕｘ６０８ａの出力］、を計算する。
【０１１６】
第２の加算器／減算器６２２ｂには、入力として次のようなオペランド、すなわち、ｍｕｘ６０８ｃの出力およびｍｕｘ６０８ｄの出力、が供給される。これらのオペランドに対して実行される加算および／または減算の特定の組合せは、入力として範囲［４］、範囲［８］、範囲［９］、範囲［１１］および範囲［１２］の信号を供給されるＯＲゲート６２４ｂによって指示される。この方式では、ηが表５の範囲４、８、９、１１または１２内にある場合、ＯＲゲート６２４ｂの出力が１になり、これにより、加算器／減算器６２２ｂが、［ｍｕｘ６０８ｃの出力］−［ｍｕｘ６０８ｄの出力］、を計算する。あるいは、ηが表５の残りの範囲のいずれかにある場合、ＯＲゲート６２４ｂの出力が０になり、これにより、加算器／減算器６２２ｂが、［ｍｕｘ６０８ｃの出力］＋［ｍｕｘ６０８ｄの出力］、を計算する。
【０１１７】
第３の加算器／減算器６２２ｃには、入力として次のようなオペランド、すなわち、加算器／減算器６２２ａの出力、加算器／減算器６２２ｂの出力およびｍｕｘ６０８ｂの出力、が供給される。これらのオペランドに対して実行される加算および／または減算の特定の組合せは、入力として範囲［２］、範囲［１０］、範囲［１１］、範囲［１４］および範囲［１５］の信号の逆数またはＮＯＴ値を供給されるＯＲゲート６２４ｃによって指示される。この方式では、ηが表５の範囲２、１０、１１、１４および１５以外のいずれかの範囲内にある場合、ＯＲゲート６２４ｃの出力が１になり、これにより、加算器／減算器６２２ｃが、［加算器／減算器６２２ａの出力］−［加算器／減算器６２２ｂの出力］−［ｍｕｘ６０８ｂの出力］、を計算する。あるいは、ηが表５の範囲２、１０、１１、１４または１５内にある場合、ＯＲゲート６２４ｃの出力が０になり、これにより、加算器／減算器６２２ｃが、［加算器／減算器６２２ａの出力］−［加算器／減算器６２２ｂの出力］＋［ｍｕｘ６０８ｂの出力］、を計算する。
【０１１８】
第３の加算器／減算器６２２ｃの結果は、図６Ｃの加算器／減算器ロジック６２０の最終的な出力６２１として機能する。
【０１１９】
図７は、区分線形近似を用いて実装される指数回路７００の一実施形態例を示す。具体的には、指数回路７００は、１６セグメントの区分線形近似を用いて指数計算を実行する。この方式では、指数回路７００にルックアップテーブルは不要であり、必要な乗算器は１つだけであって、指数計算を２クロックサイクルで実行することができる。
【０１２０】
指数計算のために区分線形近似を実行すべく指数回路７００によって使用される式を、下表６に示す。
［表６：指数ｅｘの区分線形近似方程式］
【表６】
2020004398.tif 000049
【０１２１】
表６の方程式は、自然指数関数ｅｘの結果を計算または近似するように設計され、ここで、ｅは、自然指数定数（例えばオイラー数）を表し、ｘは、３２ビット浮動小数点入力７０１の２３ビット仮数部（入力［２２：０］）を表す。例えば、ｅｘを１６セグメントの区分線形近似を用いて計算するために、区間［０，１］に渡るｘの潜在的な値が、異なる１６個の範囲またはセグメントに分割されて範囲０〜１５として指定され、ｅｘの結果を近似するために、各範囲に対して別々の方程式が定義される。さらに、個々の方程式は、専ら以下のタイプのオペランド、すなわち、ｘ、２ｘ、２の累乗で除算されたｘの分数および／または定数値、のいずれかに対する加算および／または減算を用いて定義される。この方式において、方程式が必要とする除算は、専ら２の累乗によるものであり、よって、全ての除算演算は、シフタを用いて実装されることが可能である。さらに、限定的な「シフトベース」の除算から生じる精度の損失は、所定の方程式において加算かつ／または減算される定数値の使用によって補償される。したがって、ｅｘの個々の方程式は、専ら加算、減算および／またはシフト演算を用いて実装されることが可能である。
【０１２２】
指数演算を完了するには、次に、結果的に得られる、ｅの入力７０１の仮数部分（入力［２２：０］）の累乗を表すｅｘの値が、ｅの入力７０１の指数部分（入力［３０：２３］）の累乗の値で乗算されなければならない。したがって、指数演算に必要な乗算演算は１回だけであり、よって、指数回路７００に必要な乗算器回路は、１つだけである。
【０１２３】
図７は、指数回路７００の全体ロジックを示す。図示されている実施形態では、指数回路７００に、３２ビットの浮動小数点数が入力７０１として供給され、指数回路７００は、入力７０１で表される浮動小数点数で累乗される自然指数定数ｅ、すなわちｅｉｎｐｕｔ、に一致する、対応する３２ビットの固定小数点数を出力７０３として計算する。
【０１２４】
浮動小数点入力７０１は、符号ビット（入力［３１］）と、８ビットの指数部（入力［３０：２３］）と、２３ビットの仮数部（入力［２２：０］）とを含む。入力７０１の符号と出力７０３の符号とが常に一致することを所与として、入力７０１の符号ビット（入力［３１］）は、出力７０３の対応するビット（出力［３１］）へ直に供給される。
【０１２５】
入力７０１の指数部分（入力［３０：２３］）は、８ビットの減算器７０２へ供給され、減算器７０２は、０ｘ７Ｆのバイアスを減算して、８ビットの非バイアス指数を生成する。非バイアス指数で累乗された自然指数定数ｅ、すなわちｅｕｎｂｉａｓｅｄ＿ｅｘｐｏｎｅｎｔ、の値は、次に、ｍｕｘ７１０によって出力される。例えば、８ビットの非バイアス指数は、２８＝２５６の潜在値を有し、その範囲は、−１２８〜＋１２７である。非バイアス指数の２５６個全ての潜在値で累乗されたｅの値（ｅ−１２８、ｅ−１２７、...、ｅ０、ｅ１、...、ｅ１２７）は、事前に計算され、ｍｕｘ７１０へ定数入力として供給される。減算器７０２により出力される８ビットの非バイアス指数は、ｍｕｘ７１０の選択信号として機能し、これにより、ｍｕｘ７１０は、ｅｕｎｂｉａｓｅｄ＿ｅｘｐｏｎｅｎｔに対応する事前計算された定数入力を選択する。次に、ｍｕｘ７１０の出力（ｅｕｎｂｉａｓｅｄ＿ｅｘｐｏｎｅｎｔ）は、さらに後述するように、乗算器７１２へそのオペランドの１つとして供給される。
【０１２６】
入力７０１の仮数部分（入力［２２：０］）は、表６の方程式に従って処理される。例えば、指数回路７００は、仮数部で（入力［２２：０］）累乗された自然指数定数ｅ、すなわちｅｘ、を計算するように設計され、ここでｘは、仮数部（入力［２２：０］）を表す。さらに、指数回路７００は、ｅｘを、表６の方程式に基づき、区分線形近似を用いて計算する。具体的には、（表６におけるｘの値に対応する）入力７０１の仮数部分（入力［２２：０］）は、表６から、ｅｘの値を計算すべく使用される対応する範囲および式を選択するために使用される。例えば、入力７０１の仮数部のうちの４つの最上位ビット（入力［２２：１９］）は、範囲選択ロジック７０４へ入力として供給され、範囲選択ロジック７０４は、適用可能な範囲に対応する信号が１に設定され、一方で残りの信号は０に設定されるように、表６のｘの個々の範囲に対応する１６個の１ビット信号（範囲［０］〜範囲［１５］）を出力する。範囲選択ロジック７０４の出力に基づいて、次には、マルチプレクサ（ｍｕｘ）７０８ａ〜７０８ｄを用いて、表６の対応する式が必要とする、ｘの必要な分数および方程式に現出する定数値等の所定のオペランドが選択される。
【０１２７】
例えば、ｍｕｘ７０８ａおよび７０８ｂを用いて、表６の対応する式が必要とするｘの分数が選択される。例えば、ｘの値（入力［２２：０］）は、シフタ７０６ａによる第１の集合に供給され、シフタ７０６ａは各々、所定のビット数に渡るｘの右シフトを実行して、表６の方程式全体に現出する２の累乗によるｘの様々な分数（例えば、
【数４２】
2020004398.tif 000050
）を計算する。これらのシフタ７０６ａの出力は、次に、図７に示される方法でｍｕｘ７０８ａおよび７０８ｂへ入力として供給される。ｍｕｘ７０８ａおよび７０８ｂは、次に、範囲選択ロジック７０４の出力に基づいて決定される、表６の対応する方程式が必要とするｘの特定の分数を選択する。
【０１２８】
同様に、ｍｕｘ７０８ｃおよび７０８ｄを用いて、表６の対応する方程式が必要とする、所定の方程式が必要とする分数定数および／または定数値１等の定数値が選択される。例えば、値１を有する２３ビット定数は、シフタ７０６ｂによる第２の集合に供給され、シフタ７０６ｂは各々、所定のビット数に渡る右シフトを実行して、表６の方程式全体に現出する個々の分数定数（例えば、
【数４３】
2020004398.tif 000051
）を生成する。これらのシフタ７０６ｂの出力は、次に、図７に示される方法でｍｕｘ７０８ｃおよび７０８ｄへ入力として供給される。さらに、（表６の所定の方程式が必要とする）定数値１も、ｍｕｘ７０８ｄへ入力の１つとして供給される。ｍｕｘ７０８ｃおよび７０８ｄは、次に、範囲選択ロジック７０４の出力に基づいて決定される、表６の対応する方程式が必要とする特定の定数の組合せを選択する。
【０１２９】
表６の対応する方程式に関してｍｕｘ７０８ａ〜７０８ｄにより選択される個々のオペランドは、次に、加算器／減算器７２０へ入力として供給される。また、加算／減算器７２０へは、ｘの値（入力［２２：０］）も、表６の対応する方程式がｘのオペランドを必要とするか、２ｘのオペランドを必要とするかに依存してその入力のうちの１つまたは２つのいずれかを介して供給される。例えば、ｘの値は、常に加算器／減算器７２０の入力の１つとして直に供給され、かつ場合によっては、ｍｕｘ７０９を介して加算器／減算器７２０の別の入力として供給されてもよい。具体的には、ｘの値および２３ビットの定数０がｍｕｘ７０９へ入力として供給され、ｍｕｘ７０９は、これらの値のうちの１つを選択して加算器／減算器７２０へ入力として供給する。例えば、表６の対応する式がオペランドとして２ｘではなくｘを必要とすれば、ｘの値は既に加算器／減算器７２０の別の入力を介して直に供給されているという理由で、ｍｕｘ７０９は、定数０を加算器／減算器７２０への出力として選択する。あるいは、表６の対応する式がオペランドとしてｘではなく２ｘを必要とすれば、結果的にｘの値が２つの入力を介して加算器／減算器７２０へ供給されるという理由で、ｍｕｘ７０９は、ｘの値をその加算器／減算器７２０への出力として選択する。
【０１３０】
加算器／減算器７２０は、次に、表６の対応する式によって要求される通りに、これらのオペランドに対し、（例えば、範囲選択ロジック７０４の出力に基づいて）適切な加算および／または減算演算を実行する。この方式において、加算器／減算器７２０の出力は、入力７０１の仮数部（入力［２２：０］）で累乗された自然指数定数ｅに等しいｅｘの最終結果に一致する。
【０１３１】
ｍｕｘ７１０の出力（入力７０１の非バイアス指数で累乗されたｅ）、および加算器／減算器７２０の出力（入力７０１の仮数部で累乗されたｅ）は、次に、乗算器７１２へオペランドとして供給され、乗算器７１２は、これらの値を乗算して指数回路７００の固定小数点出力７０３の整数部分および小数部分を生成する。
【０１３２】
図８は、人工ニューラルネットワーク（例えば、深層ニューラルネットワーク（ＤＮＮ））を実装するために使用される処理アーキテクチャの一例のフローチャート８００を示す。フローチャート８００は、例えば、本開示を通して記述されている実施形態および機能を用いて実装されてもよい。例えば、実施形態によっては、フローチャート８００は、図２Ａおよび図２Ｂまたは図４の活性化回路、図５Ａ〜図５Ｃの対数回路、図６Ａ〜図６Ｃの逆対数回路および／または図７の指数回路を用いて実装されてもよい。
【０１３３】
図示されているこのフローチャートでは、ある特定の活性化関数が、活性化関数のパフォーマンスを加速するように設計される活性化関数回路によって実行される。実施形態によっては、例えば、活性化関数回路は、一般的に人工または深層ニューラルネットワークを実装するために使用される複数のタイプの活性化関数をサポートするように設計されてもよい。さらに、活性化関数回路は、サポートされる活性化関数に関連づけられる計算を加速するために、区分線形近似を用いて実装される対数、逆対数および／または指数回路を活用してもよい。
【０１３４】
例えば、いくつかの実施形態において、活性化関数回路は、人工ニューラルネットワーク（例えば、深層ニューラルネットワーク、畳み込みニューラルネットワーク、順伝播型ニューラルネットワーク、再帰型ニューラルネットワーク、等々）を用いてアプリケーションを実行するプロセッサ、デバイスおよび／またはシステム上で実装されてもよく、かつ／または上記プロセッサ、デバイスおよび／またはシステムに関連して使用されてもよい。この方式において、アプリケーションは、活性化関数回路を活用して、人工ニューラルネットワークの実装に使用される活性化関数を加速することができる。例えば、人工ニューラルネットワークを有するアプリケーションは、メモリに記憶され、かつ特定のデバイスまたはシステム上のプロセッサによって実行されてもよい。アプリケーションが人工ニューラルネットワークにおいてある動作に関連して活性化関数を実行する必要がある場合、アプリケーションは、プロセッサおよび／または活性化関数回路へ対応する命令またはコマンドを発行し、プロセッサは、次に、活性化関数回路を活用して活性化関数を実行してもよい。活性化関数の結果は、次に、プロセッサおよび／またはアプリケーションへ提供し返され、続いて人工ニューラルネットワークにより使用されてもよい。
【０１３５】
フローチャートは、ブロック８０２で始まり、ここで、特定の活性化関数を実行するための命令またはコマンドが受信される。命令またはコマンドは、例えば、アプリケーションによって発行され、かつプロセッサおよび／または活性化関数回路によって受信されてもよい。実施形態によっては、命令またはコマンドは、所望される活性化関数およびこの活性化関数に関連づけられる任意のオペランドまたは他のパラメータを識別してもよい。
【０１３６】
さらに、場合によっては、選択された活性化関数が、指数演算、乗算演算および／または除算演算の組合せを含んでもよい。したがって、フローチャートは、まず、ブロック８０４へ進んで活性化関数に関連づけられる任意の指数演算を実行する。実施形態によっては、例えば、指数演算は、これらの演算に関連づけられるレイテンシを（例えば、図７の指数回路を用いて）減らすために、区分線形近似を用いて実行されてもよい。しかしながら、実施形態によっては、指数演算が底２を含んでいれば、これは、レイテンシを減らすために、指数回路の代わりに逆対数回路を用いて（底２の逆対数演算を用いて）計算されることが可能である。
【０１３７】
フローチャートは、次に、ブロック８０６へ進んで活性化関数に関連づけられる任意の乗算および／または除算演算を実行する。実施形態によっては、例えば、活性化関数の乗算および／または除算演算は、対数、逆対数および加算／減算演算の組合せを用いて実行されてもよい。例えば、対数関数の特性を利用することにより、対数および逆対数演算を用いて、高コストの乗算／除算演算を加算および／または減算に変換することができる。さらに、対数および逆対数演算は、これらの演算に関連づけられるレイテンシを減らすために、区分線形近似を用いて実行されることが可能である。
【０１３８】
実施形態によっては、例えば、区分線形近似を用いて対数演算を実行するために、対数回路（例えば、図５Ａ〜図５Ｃの対数回路）が使用されてもよい。例えば、対数回路は、（例えば、指数部および仮数部を用いる）浮動小数点数として表される入力の対数を計算するように設計されてもよく、かつ対数回路は、結果としての出力を（例えば、整数部および小数部を用いる）固定小数点数として表してもよい。対数回路は、まず、対数演算に関連づけられる入力またはオペランドを識別し、次に、区分線形近似を目的として、その入力が包含される特定の範囲を識別または決定する。例えば、区分線形近似を用いて対数演算を実行するために、複数の範囲またはセグメントならびに関連する方程式が定義される。したがって、入力が包含される対応する範囲が識別され、かつその範囲に関する方程式が必要とするオペランドが取得されかつ／または生成される。実施形態によっては、例えば、所定のオペランドは、入力の仮数部等の入力、ならびにシフト回路を用いて（例えば、除算を実行すべくビットをシフトすることにより）生成され得る２の累乗である分母を用いる小数部オペランドを用いて抽出され、取得されかつ／または計算されてもよい。次には、１つまたは複数のマルチプレクサを用いて適切なオペランドが選択され、選択されたオペランドを用いて式の結果が計算される。例えば、結果は、加算器／減算器回路を用いて個々のオペランドに対し加算および／または減算を実行することにより計算されてもよい。さらに、浮動小数点入力の指数は、減算器回路を用いてバイアスを減算することにより、非バイアス指数に変換されてもよい。次に、対応する方程式の結果および非バイアス指数を用いて、対数演算の出力が生成される。例えば、非バイアス指数は、結果としての固定小数点出力の整数部として機能し、かつ方程式の結果は、固定小数点出力の小数部として機能する。
【０１３９】
同様に、区分線形近似を用いて逆対数演算を実行するために、逆対数回路（例えば、図６Ａ〜図６Ｃの逆対数回路）が使用されてもよい。逆対数演算は、同様の方法で実行され得るが、整数／指数部分については異なる計算を使用し、かつ区分線形近似については異なる方程式を使用することが異なる。
【０１４０】
フローチャートは、次に、ブロック８０８へ進み、指数、乗算および／または除算演算の結果に基づいて活性化関数の結果が出力される。
【０１４１】
この時点で、フローチャートは、完了し得る。しかしながら、実施形態によっては、フローチャートは、再開してもよく、かつ／または所定のブロックが繰り返されてもよい。例えば、実施形態によっては、フローチャートは、ブロック８０２で再開して活性化関数の実行を継続してもよい。
【０１４２】
［ＤＮＮのパフォーマンス］
図９Ａおよび図９Ｂは、説明している実施形態の、サポートされる並列演算の数に対するスケーラビリティを示す。具体的には、説明している実施形態は、サポートされる並列演算の数を増やすために基本的なハードウェアの複製を可能にするフレキシブルな設計を用いて実装される。この方式において、説明している実施形態は、特定のアプリケーションまたはユースケースにより必要とされる並列演算の数をサポートするために、必要に応じてスケーリングされることが可能である。例えば、図９Ａおよび図９Ｂに示されているように、提案しているソリューションは、簡単な複製によって単一のオペランドからｎ個のオペランドにスケーリングされることが可能である。具体的には、図９Ａは、単一のオペランドに対する提案のソリューションを示し、図９Ｂは、ｎ個のオペランドに対する提案のソリューションを示す。さらに、提案しているソリューションは、レイテンシを減らしかつスループットを高めるためにパイプライン化されることが可能である。
【０１４３】
図１０Ａは、説明している実施形態の、精度に対するスケーラビリティを示す。具体的には、説明している実施形態は、単に、対数、逆対数および／または指数回路により実装される区分線形近似モデルにおけるセグメントの数を調整することによって、様々なレベルの精度を提供するようにスケーリングされることが可能である。この方式において、説明している実施形態は、異なるアプリケーションおよびユースケースに要求される精度レベルを提供するために、必要に応じてスケーリングされることが可能である。例えば、アプリケーションがより高い精度を要求する場合、より高い精度要件に対応するために、区分線形近似モデルに包含されるセグメントの数を増やすことができる。
【０１４４】
様々な精度レベルに対する、区分線形近似モデルにおいて必要とされるセグメントの数を、図１０Ａに示す。図１０Ａに示されているように、例えば、アプリケーションが２３ビットの仮数部から２３ビット精度を要求すれば、区分線形近似モデルは、少なくとも１，５５６個のセグメントを用いて実装されるべきである。区分線形近似に使用されるセグメントの数は、提供すべき必要な如何なる精度レベルに対しても同様の方法で調整されることが可能である。
【０１４５】
図１０Ｂは、対数および逆対数ハードウェアの様々な実装のシリコン面積要件を比較したものである。具体的には、図１０Ｂは、合成ゲートの数を、ルックアップテーブル法を用いて実装されたソリューション（１２ビット精度）の場合と、区分線形近似（ＰＬＡ）を用いて実装された対数および逆対数回路（１０ビットまたは１２ビット精度のいずれか）の場合とで比較したものを示す。図１０Ｂに示されているように、区分線形近似を用いて実装された対数および逆対数回路が用いるゲートの数は、ルックアップテーブル法を用いて実装されたソリューションより著しく少ない。例えば、ルックアップテーブルソリューションは、１２ビット精度で８，８００個のゲートを用いるが、区分線形近似（ＰＬＡ）の対数および逆対数回路が用いるゲートは、１０ビット精度で各々３５０および４５０個、１２ビット精度で１，０４８および１，３４８個である。
【０１４６】
図１０Ｃは、活性化関数ハードウェア（１０ビット精度）の様々な実装のシリコン面積要件を比較したものである。具体的には、図１０Ｃは、ルックアップテーブル（ＬＵＴ）を用いて実装された様々な個々の活性化関数（例えば、シグモイド、双曲線正接（Ｔａｎｈ）およびＳｗｉｓｈ）の合成ゲートの数と、複数の活性化関数をサポートしかつ区分線形近似（ＰＬＡ）を用いて実装される統合型活性化関数回路（例えば、図２Ａおよび図２Ｂの活性化関数回路２００）の合成ゲートの数との比較を示す。図１０Ｃに示されているように、例えば、統合型回路は、ＬＵＴベースの回路のどれよりも使用するゲートの数が著しく少なく、しかも多くの活性化関数をサポートする。例えば、統合型回路の場合、その簡略化された方程式によって、指数、対数および逆対数ブロックを各々僅か４，３８７、１，０４８および１，３４８個の合成ゲートの使用で実装できることから、合計８，３２１個の合成ゲートを用いて実装されることが可能である。これに比べて、ＬＵＴベースの回路は各々、僅か１つの活性化関数に対して約１７，０００〜１８，０００個の合成ゲートを要する。
【０１４７】
図１０Ｄは、区分線形近似を用いて実装された対数および逆対数回路（例えば、図５Ａ〜図５Ｃおよび図６Ａ〜図６Ｃ）の近似誤差を示し、図１０Ｅは、区分線形近似を用いて実装された指数回路（例えば図７）の近似誤差を示す。具体的には、これらの回路は、個々のｌｏｇ２、およびａｎｔｉｌｏｇ２および指数計算に対して０．０４５％の絶対誤差（ＡＢＳ）で実装されることが可能であり、これは、ＩＥＥＥ−７５４単精度浮動小数点数では１２ビットの仮数精度になる（例えば、１符号ビット＋８指数ビット＋１２ビット仮数＝２１ビット精度）。
【０１４８】
対数、逆対数および指数回路を用いて実装される統合型活性化関数回路（例えば、図２Ａおよび図２ＢのＡＦ回路２００）の全体精度は、ＩＥＥＥ−７５４単精度浮動小数点数に対して１０仮数ビットである（例えば、１符号ビット＋８指数ビット＋１０ビット仮数＝１９ビット精度）。
【０１４９】
図１１Ａ〜図１１Ｃは、従来の活性化関数式（指数定数ｅの累乗を使用）を用いて実装される深層ニューラルネットワーク（ＤＮＮ）と、修正された活性化関数式（底２の累乗を使用）を用いて実装される深層ニューラルネットワーク（ＤＮＮ）とのパフォーマンスを比較したものである。例えば、先に論じたように、図２Ａおよび図２ＢのＡＦ回路２００および図４のＡＦ回路４００は、共に、区分線形近似を活用して活性化関数を実装する。しかしながら、ＡＦ回路２００は、従来の活性化関数を実装するのに対して、ＡＦ回路４００は、指数定数ｅの累乗ではなく、２の累乗を用いる修正された活性化関数を実装する。これらの個々の手法のパフォーマンスを、図１１Ａ〜図１１Ｃが示す例で比較する。
【０１５０】
図１１Ａは、２つの入力ニューロンを有する入力層と、３つのニューロンを有する単一の隠れ層と、１つの出力ニューロンを有する全結合層とを含むＤＮＮ１１００の一例を示す。説明を簡単にするために、ＤＮＮ１１００は、ＸＯＲゲートと同じ挙動を有する、表７に示す特徴マッピングを実装する。
［表７：ＤＮＮ特徴セットのマッピング］
【表７】
2020004398.tif 000052
【０１５１】
図示されている例は、これらの特徴セット、すなわちＡ＝１およびＢ＝１、のうちの、出力０を有することが期待される１つに焦点を当てている。図示されている例では、入力ニューロンＸ１が特徴Ａに対応し、入力ニューロンＸ２が特徴Ｂに対応する。
【０１５２】
図１１Ｂは、ＤＮＮ１１００が従来のシグモイド活性化関数
【数４４】
2020004398.tif 000053
を用いて実装される場合に実行される処理を示す。順方向伝播段階の間、重みが以下のように、すなわち、Ｗ１１＝０．８、Ｗ１２＝０．４、Ｗ１３＝０．３、Ｗ２１＝０．２、Ｗ２２＝０．９、ＷＷ２３＝０．５、Ｗｈ１＝０．３、Ｗｈ２＝０．５およびＷｈ３＝０．９、のようにランダムに選択される。次に、隠れ層ノード（Ｈ）の出力が、次のように計算される。
Ｈ１＝Ｘ１＊Ｗ１１＋Ｘ２＊Ｗ２１＝０．８＋０．２＝１、
Ｈ２＝Ｘ１＊Ｗ１２＋Ｘ２＊Ｗ２２＝０．４＋０．９＝１．３、
Ｈ３＝Ｘ１＊Ｗ１３＋Ｘ２＊Ｗ２３＝０．３＋０．５＝０．８。
【０１５３】
説明を簡単にするために、図示されている例では、バイアス０を採用している。シグモイド活性化関数を適用した後は、更新された隠れ層ニューロンが以下の値を持つ。
Ｈ１＝０．７３１０、
Ｈ２＝０．７８５８、
Ｈ３＝０．６８９９。
【０１５４】
次には、全結合（ＦＣ）層を、次式、ＦＣ＝Ｈ１＊Ｗｈ１＋Ｈ２＊Ｗｈ２＋Ｈ３＊Ｗｈ３＝０．７３１０＊０．３＋０．７８５８＊０．５＋０．６８９９＊０．９＝１．２３５、のように計算することができる。シグモイド活性化関数を全結合層に適用すると、ＦＣ＝０．７７４６になる。次に、誤差が以下のように計算される。
誤差＝期待値−計算値＝０−０．７７４６＝−０．７７４６。
【０１５５】
逆方向伝播および重み更新段階の間は、シグモイド活性化関数の導関数
【数４５】
2020004398.tif 000054
を用いて、以下の計算が実行される。
ΔＦＣ＝ｆ´（活性化関数なしのＦＣ値）＊誤差＝ｆ´（１．２３５）＊（−０．７７４６）＝−０．１３４３９、
ΔＦＣ＝隠れ層ニューロン＊隠れ層重み＝Ｈ１＊Ｗｈ１＋Ｈ２＊Ｗｈ２＋Ｈ３＊Ｗｈ３、
ΔＷｈ１＝ΔＦＣ／Ｈ１＝−０．１３４３９／０．７３１０＝−０．１８３８、
ΔＷｈ２＝ΔＦＣ／Ｈ２＝−０．１３４３９／０．７８５８＝−０．１７１０、
ΔＷｈ３＝ΔＦＣ／Ｈ３＝−０．１３４３９／０．６８９９＝−０．１９２０。
【０１５６】
次に、ΔＨ１、ΔＨ２およびΔＨ３に関して、次の計算が実行される。新しい隠れ層値＝ΔＦＣ＊ｆ´（活性化関数なしの隠れ層ニューロン値）／隠れ層重み：
ΔＨ１＝ΔＦＣ＊ｆ´（１）／Ｗｈ１＝−０．１３４３９＊０．１９６６／０．３＝−０．０８８、
ΔＨ２＝ΔＦＣ＊ｆ´（１．３）／Ｗｈ２＝−０．１３４３９＊０．１６８３＝−０．０４５２、
ΔＨ１＝ΔＦＣ＊ｆ´（０．８）／Ｗｈ３＝−０．１３４３９＊０．２１３９＝−０．０３１９。
【０１５７】
逆方向伝播の後、新しい隠れ層重みは、次の値を有する。
Ｗｈ１＝Ｗｈ１＋ΔＷｈ１＝０．３−０．１８３８＝０．１１６２、
Ｗｈ２＝Ｗｈ２＋ΔＷｈ２＝０．５−０．１７１０＝０．３９２、
Ｗｈ３＝Ｗｈ３＋ΔＷｈ３＝０．９−０．１９２０＝０．７０８。
【０１５８】
次に、入力層と隠れ層との間の重みの更新が次のように計算される。重みのデルタ＝隠れ層のデルタ／入力：
ΔＷ１１＝ΔＨ１／Ｘ１＝−０．０８８／１＝−０．０８８、
ΔＷ１２＝ΔＨ２／Ｘ１＝−０．０４５２／１＝−０．０４５２、
ΔＷ１３＝ΔＨ３／Ｘ１＝−０．０３１９／１＝−０．０３１９、
ΔＷ２１＝ΔＨ１／Ｘ２＝−０．０８８／１＝−０．０８８、
ΔＷ２２＝ΔＨ２／Ｘ２＝−０．０４５２／１＝−０．０４５２、
ΔＷ２３＝ΔＨ３／Ｘ２＝−０．０３１９／１＝−０．０３１９、
新しい重み：  Ｗ１１＝Ｗ１１＋ΔＷ１１＝０．８−０．０８８＝０．７１２、  Ｗ１２＝Ｗ１２＋ΔＷ１２＝０．４−０．０４５２＝０．３５４８、  Ｗ１３＝Ｗ１３＋ΔＷ１３＝０．３−０．０３１９＝０．２６８１、  Ｗ２１＝Ｗ２１＋ΔＷ２１＝０．２−０．０８８＝０．１１２、  Ｗ２２＝Ｗ２２＋ΔＷ２２＝０．９−０．０４５２＝０．８５４８、  Ｗ２３＝Ｗ２３＋ΔＷ２３＝０．５−０．０３１９＝０．４６８１。
【０１５９】
図１１Ｂは、上述の計算に基づいて重みが更新された後のＤＮＮ１１００の状態を示す。この反復後のＤＮＮの出力は、０．６９であり、最初の反復後の出力０．７７より改善されている。この方式による反復は、損失関数勾配が許容可能なレベルに達するまで続けられる。
【０１６０】
図１１Ｃは、ＤＮＮ１１００が、底がｅ、すなわち
【数４６】
2020004398.tif 000055
ではなく底が２の指数項を有する修正されたシグモイド活性化関数を用いて実装される場合に実行される処理を示す。
【０１６１】
順方向伝播段階の間、重みが以下のように、すなわち、Ｗ１１＝０．８、Ｗ１２＝０．４、Ｗ１３＝０．３、Ｗ２１＝０．２、Ｗ２２＝０．９、ＷＷ２３＝０．５、Ｗｈ１＝０．３、Ｗｈ２＝０．５およびＷｈ３＝０．９、のようにランダムに選択される。次に、隠れ層ノード（Ｈ）の出力が、次のように計算される。
Ｈ１＝Ｘ１＊Ｗ１１＋Ｘ２＊Ｗ２１＝０．８＋０．２＝１、
Ｈ２＝Ｘ１＊Ｗ１２＋Ｘ２＊Ｗ２２＝０．４＋０．９＝１．３、
Ｈ３＝Ｘ１＊Ｗ１３＋Ｘ２＊Ｗ２３＝０．３＋０．５＝０．８。
【０１６２】
説明を簡単にするために、図示されている例では、バイアス０を採用している。修正されたシグモイド活性化関数を適用した後は、更新された隠れ層ニューロンが以下の値を持つ。
Ｈ１＝０．６６６７、
Ｈ２＝０．７１１７、
Ｈ３＝０．６３５１。
【０１６３】
次には、全結合（ＦＣ）層を、次式、ＦＣ＝Ｈ１＊Ｗｈ１＋Ｈ２＊Ｗｈ２＋Ｈ３＊Ｗｈ３＝０．６６６７＊０．３＋０．７１１７＊０．５＋０．６３５１＊０．９＝１．１２７２、のように計算することができる。修正されたシグモイド活性化関数を全結合層に適用すると、ＦＣ＝０．６８５９になる。次に、誤差が以下のように計算される。
誤差＝期待値−計算値＝０−０．６８５９＝−０．６８５９。
【０１６４】
逆方向伝播および重み更新段階の間は、修正されたシグモイド活性化関数の導関数
【数４７】
2020004398.tif 000056
を用いて、以下の計算が実行される。
ΔＦＣ＝ｆ´（活性化関数なしのＦＣ値）＊誤差＝ｆ´（１．１２７２）＊（−０．６８５９）＝−０．１０２４、
ΔＦＣ＝隠れ層ニューロン＊隠れ層重み＝Ｈ１＊Ｗｈ１＋Ｈ２＊Ｗｈ２＋Ｈ３＊Ｗｈ３、
ΔＷｈ１＝ΔＦＣ／Ｈ１＝−０．１０２４／０．６６６７＝−０．１５３６４、
ΔＷｈ２＝ΔＦＣ／Ｈ２＝−０．１０２４／０．７１１７＝−０．１４４０２、
ΔＷｈ３＝ΔＦＣ／Ｈ３＝−０．１０２４／０．６３５１＝−０．１６１２５。
【０１６５】
次に、ΔＨ１、ΔＨ２およびΔＨ３に関して、次の計算が実行される。新しい隠れ層値＝ΔＦＣ＊ｆ｀（活性化関数なしの隠れ層ニューロン値）／隠れ層重み：
ΔＨ１＝ΔＦＣ＊ｆ´（１）／Ｗｈ１＝−０．１３４３９＊０．１９６６／０．３＝−０．０５２５９、
ΔＨ２＝ΔＦＣ＊ｆ´（１．３）／Ｗｈ２＝−０．１３４３９＊０．１６８３＝−０．０２９１７、
ΔＨ１＝ΔＦＣ＊ｆ´（０．８）／Ｗｈ３＝−０．１３４３９＊０．２１３９＝−０．０１８２８。
【０１６６】
逆方向伝播の後、新しい隠れ層重みは、次の値を有する。
Ｗｈ１＝Ｗｈ１＋ΔＷｈ１＝０．３−０．１５３６４＝０．１４６３、
Ｗｈ２＝Ｗｈ２＋ΔＷｈ２＝０．５−０．１４４０２＝０．３５５９、
Ｗｈ３＝Ｗｈ３＋ΔＷｈ３＝０．９−０．１６１２５＝０．７３８７。
【０１６７】
次に、入力層と隠れ層との間の重みの更新が次のように計算される。重みのデルタ＝隠れ層のデルタ／入力：
ΔＷ１１＝ΔＨ１／Ｘ１＝−０．０５２５９／１＝−０．０５２５９、
ΔＷ１２＝ΔＨ２／Ｘ１＝−０．０２９１７／１＝−０．０２９１７、
ΔＷ１３＝ΔＨ３／Ｘ１＝−０．０１８２８／１＝−０．０１８２８、
ΔＷ２１＝ΔＨ１／Ｘ２＝−０．０２９１７／１＝−０．０５２５９、
ΔＷ２２＝ΔＨ２／Ｘ２＝−０．０４５２／１＝−０．０２９１７、
ΔＷ２３＝ΔＨ３／Ｘ２＝−０．０１８２８／１＝−０．０１８２８、  新しい重み：  Ｗ１１＝Ｗ１１＋ΔＷ１１＝０．８−０．０５２５９＝０．７４７４、  Ｗ１２＝Ｗ１２＋ΔＷ１２＝０．４−０．０２９１７＝０．３７０８、  Ｗ１３＝Ｗ１３＋ΔＷ１３＝０．３−０．０１８２８＝０．２８１７、  Ｗ２１＝Ｗ２１＋ΔＷ２１＝０．２−０．０５２５９＝０．１４７４、  Ｗ２２＝Ｗ２２＋ΔＷ２２＝０．９−０．０２９１７＝０．８７０８、  Ｗ２３＝Ｗ２３＋ΔＷ２３＝０．５−０．０１８２８＝０．４８１７。
【０１６８】
図１１Ｃは、上述の計算に基づいて（例えば、修正されたシグモイド活性化関数を用いて）重みが更新された後のＤＮＮ１１００の状態を示す。この反復後の図１１ＣのＤＮＮの出力は、０．７０であり、図１１ＢのＤＮＮの出力０．６９に匹敵する。この方式による反復は、損失関数勾配が許容可能なレベルに達するまで続けられる。
【０１６９】
図１２Ａおよび図１２Ｂは、図１１Ｂおよび図１１Ｃの個々のＤＮＮについてのトレーニング収束を比較したものである。具体的には、図１２Ａは、図１１ＢのＤＮＮにより使用される元のシグモイド活性化関数の場合の収束速度を示し、図１２Ｂは、図１１ＣのＤＮＮにより使用される（例えば、ｅの代わりに底２の累乗を用いる）修正されたシグモイド活性化関数の場合の収束速度を示す。図１３は、これらの手法の誤り率または精度を示す。
【０１７０】
［コンピューティングアーキテクチャの例］
図１４Ａ〜図１８は、本明細書に開示する実施形態に従って使用されることが可能なコンピューティング環境およびアーキテクチャの実装例を示す。様々な実施形態において、例えば、これらのコンピュータアーキテクチャ例は、本開示全体に渡って記述されている深層ニューラルネットワーク（ＤＮＮ）の処理機能と共に使用されても、かつ／またはこれを実装するために使用されてもよい。
【０１７１】
また、ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナル・デジタル・アシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオ・ゲーム・デバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブル・メディア・プレーヤ、ハンドヘルドデバイスおよび他の様々な電子デバイスのための技術上知られる他のシステム設計および構成も適切である。概して、本明細書に開示しているようなプロセッサおよび／または他の実行ロジックを組み込むことができる非常に多様なシステムまたは電子デバイスは、大抵適切である。
【０１７２】
図１４Ａは、本発明の実施形態による、例示的なインオーダ・パイプライン、および例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの双方を示すブロック図である。図１４Ｂは、本発明の実施形態による、プロセッサに含まれるべき、インオーダ・アーキテクチャ・コアの例示的な実施形態、および例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの双方を示すブロック図である。図１４Ａおよび図１４Ｂにおける実線のボックスは、インオーダ・パイプラインおよびインオーダ・コアを示し、オプションで追加された破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであることを所与として、アウトオブオーダ態様について述べる。
【０１７３】
図１４Ａにおいて、プロセッサパイプライン１４００は、フェッチ段１４０２と、長さデコード段１４０４と、デコード段１４０６と、割当て段１４０８と、リネーミング段１４１０と、スケジューリング（発送または発行としても知られる）段１４１２と、レジスタ読取り／メモリ読取り段１４１４と、実行段１４１６と、書戻し／メモリ書込み段１４１８と、例外処理段１４２２と、コミット段１４２４とを含む。
【０１７４】
図１４Ｂは、実行エンジンユニット１４５０へ結合されるフロント・エンド・ユニット１４３０を含むプロセッサコア１４９０を示し、実行エンジンユニット１４５０およびフロント・エンド・ユニット１４３０は共に、メモリユニット１４７０へ結合される。コア１４９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コアであっても、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、ハイブリッドもしくは代替的コアタイプであってもよい。さらに別の選択肢として、コア１４９０は、例えばネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット（ＧＰＧＰＵ）コア、グラフィクスコアまたはこれらに類似するもの等の専用コアであってもよい。
【０１７５】
フロント・エンド・ユニット１４３０は、命令キャッシュユニット１４３４へ結合される分岐予測ユニット１４３２を含み、命令キャッシュユニット１４３４は、命令変換ルックアサイドバッファ（ＴＬＢ）１４３６へ結合され、命令変換ルックアサイドバッファ１４３６は、命令フェッチユニット１４３８へ結合され、命令フェッチユニット１４３８は、デコードユニット１４４０へ結合される。デコードユニット１４４０（またはデコーダ）は、命令を復号し、かつ出力として、１つまたは複数のマイクロオペレーション、マイクロコード・エントリ・ポイント、マイクロ命令、他の命令または他の制御信号を生成してもよく、これらは、元の命令から復号され、または別段で元の命令を反映し、または元の命令から導出される。デコードユニット１４４０は、様々な異なる機構を用いて実装されてもよい。適切な機構の例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード読取り専用メモリ（ＲＯＭ）、他が含まれるが、これらに限定されない。ある実施形態において、コア１４９０は、所定のマクロ命令のためのマイクロコードを記憶するマイクロコードＲＯＭまたは他の媒体を（例えば、デコードユニット１４４０内または他にフロント・エンド・ユニット１４３０内に）含む。デコードユニット１４４０は、実行エンジンユニット１４５０内のリネーム／アロケータユニット１４５２へ結合される。
【０１７６】
実行エンジンユニット１４５０は、リタイアメントユニット１４５４および１つまたは複数のスケジューラユニット・セット１４５６へ結合されるリネーム／アロケータユニット１４５２を含む。スケジューラユニット１４５６は、予約ステーション、中央命令ウィンドウ、他を含む、任意の数の異なるスケジューラを表す。スケジューラユニット１４５６は、物理レジスタ・ファイル・ユニット１４５８へ結合される。物理レジスタ・ファイル・ユニット１４５８は各々、１つまたは複数の物理レジスタファイルを表し、そのうちの異なるものが、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等の１つまたは複数の異なるデータタイプを記憶する。ある実施形態において、物理レジスタ・ファイル・ユニット１４５８は、ベクトル・レジスタ・ユニットと、ライト・マスク・レジスタ・ユニットと、スカラ・レジスタ・ユニットとを備える。これらのレジスタユニットは、アーキテクチャ・ベクトル・レジスタ、ベクトル・マスク・レジスタおよび汎用レジスタを提供してもよい。物理レジスタ・ファイル・ユニット１４５８は、レジスタリネーミングおよびアウトオブオーダ実行が（例えば、リオーダバッファとリタイアメント・レジスタ・ファイルとを用いること、将来ファイルと、履歴バッファとリタイアメント・レジスタ・ファイルとを用いること、レジスタマップとレジスタプールとを用いること、他によって）実装され得る様々な方法を例示するために、リタイアメントユニット１４５４によってオーバーラップされている。リタイアメントユニット１４５４および物理レジスタ・ファイル・ユニット１４５８は、実行クラスタ１４６０へ結合される。実行クラスタ１４６０は、１つまたは複数の実行ユニット１４６２のセットと、１つまたは複数のメモリ・アクセス・ユニット１４６４のセットとを含む。複数の実行ユニット１４６２は、様々な演算（例えば、シフト、加算、減算、乗算）を、様々なタイプのデータ（例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行してもよい。実施形態の中には、特定の関数または関数セット専用のいくつかの実行ユニットを含み得るものもあるが、他の実施形態は、唯一の実行ユニットまたは全てが全ての関数を実行する複数の実行ユニットを含み得る。スケジューラユニット１４５６、物理レジスタ・ファイル・ユニット１４５８、および実行クラスタ１４６０は、所定の実施形態が所定のタイプのデータ／演算に対して別々のパイプラインを生成する（例えば、スカラ整数パイプライン、スカラ浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプラインおよび／またはメモリ・アクセス・パイプライン、これらは各々が独自のスケジューラユニット、物理レジスタ・ファイル・ユニットおよび／または実行クラスタを有し、かつ別個のメモリ・アクセス・パイプラインの場合、このパイプラインの実行クラスタのみがメモリ・アクセス・ユニット１４６４を有する所定の実施形態が実装される）という理由で、おそらくは複数であるものとして示されている。別個のパイプラインが使用される場合、これらのパイプラインのうちの１つまたは複数がアウトオブオーダ発行／実行であり、残りがインオーダであり得ることも理解されるべきである。
【０１７７】
メモリ・アクセス・ユニット１４６４のセットは、メモリユニット１４７０へ結合され、メモリユニット１４７０は、データ・キャッシュ・ユニット１４７４へ結合されるデータＴＬＢユニット１４７２を含み、データ・キャッシュ・ユニット１４７４は、レベル２（Ｌ２）キャッシュユニット１４７６へ結合される。ある例示的な実施形態において、複数のメモリ・アクセス・ユニット１４６４は、ロードユニット、ストア・アドレス・ユニットおよびストア・データ・ユニットを含んでもよく、その各々が、メモリユニット１４７０内のデータＴＬＢユニット１４７２へ結合される。命令キャッシュユニット１４３４は、さらに、メモリユニット１４７０内のレベル２（Ｌ２）キャッシュユニット１４７６へ結合される。Ｌ２キャッシュユニット１４７６は、１つまたは複数の他のレベルのキャッシュへ、かつ最終的にメインメモリへ結合される。
【０１７８】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン１４００を次のように実装してもよい。１）命令フェッチユニット１４３８が、フェッチ段１４０２と、長さデコード段１４０４とを実行し、２）デコードユニット１４４０が、デコード段１４０６を実行し、３）リネーム／アロケータユニット１４５２が、割当て段１４０８と、リネーミング段１４１０とを実行し、４）スケジューラユニット１４５６が、スケジュール段１４１２を実行し、５）物理レジスタ・ファイル・ユニット１４５８およびメモリユニット１４７０が、レジスタ読取り／メモリ読取り段１４１４を実行し、実行クラスタ１４６０が実行段１４１６を実行し、６）メモリユニット１４７０および物理レジスタ・ファイル・ユニット１４５８が、書戻し／メモリ書込み段１４１８を実行し、７）様々なユニットが、例外処理段１４２２に関与してもよく、かつ８）リタイアメントユニット１４５４および物理レジスタ・ファイル・ユニット１４５８が、コミット段１４２４を実行する。
【０１７９】
コア１４９０は、本明細書に記述している命令を含む、１つまたは複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンでいくつかの拡張が追加されている）、カリフォルニア州サニーベール所在のＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベール所在のＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮ等の任意選択の拡張が追加されている））をサポートしてもよい。ある実施形態において、コア１４９０は、パックデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするためのロジックを含み、これにより、パックデータを用いて、多くのマルチメディアアプリケーションにより使用されるオペレーションを実行することが可能にされる。
【０１８０】
コアは、（２つ以上の並列のオペレーションまたはスレッドセットを実行する）マルチスレッディングをサポートしてもよく、またこれを、タイムスライスされたマルチスレッディング、同時マルチスレッディング（単一の物理コアが、その物理コアが同時にマルチスレッディングしているスレッドの各々について論理コアを提供する）またはこれらの組合せ（例えば、Ｉｎｔｅｌ（登録商標）ハイパースレッディング技術等における、タイムスライスされたフェッチおよびデコードと、その後の同時マルチスレッディング）を含む様々な方法で行ってもよいことは理解されるべきである。
【０１８１】
レジスタリネーミングについては、アウトオブオーダ実行のコンテキストで説明しているが、レジスタリネーミングがインオーダ・アーキテクチャで使用され得ることは、理解されるべきである。また、図示されているプロセッサの実施形態は、別々の命令キャッシュユニットおよびデータ・キャッシュ・ユニット１４３４／１４７４および共有のＬ２キャッシュユニット１４７６も含んでいるが、代替実施形態は、例えばレベル１（Ｌ１）内部キャッシュ、または複数レベルの内部キャッシュ等、命令およびデータの双方に関して単一の内部キャッシュを有してもよい。実施形態によっては、本システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組合せを含んでもよい。あるいは、キャッシュの全てが、コアおよび／またはプロセッサの外部にあってもよい。
【０１８２】
図１５は、本発明の実施形態による、２つ以上のコアを有し得、統合型メモリコントローラを有し得、かつ統合型グラフィクスを有し得るプロセッサ１５００のブロック図である。図１５における実線のボックスは、単一のコア１５０２Ａ、システムエージェント１５１０、１つまたは複数のバス・コントローラ・ユニット１５１６のセットを有するプロセッサ１５００を示し、一方で、任意選択で追加される破線のボックスは、複数のコア１５０２Ａ〜１５０２Ｎ、システム・エージェント・ユニット１５１０内の１つまたは複数の統合型メモリ・コントローラ・ユニット１５１４のセットおよび専用ロジック１５０８を有する代替プロセッサ１５００を示す。
【０１８３】
したがって、プロセッサ１５００の異なる実装には、１）統合型グラフィクスおよび／または（１つまたは複数のコアを含み得る）科学的（スループット）ロジックである専用ロジック１５０８と、１つまたは複数の汎用コア（例えば、汎用インオーダ・コア、汎用アウトオブオーダ・コア、これら双方の組合せ）であるコア１５０２Ａ〜１５０２Ｎとを有するＣＰＵ、２）主としてグラフィクスおよび／または科学的（スループット）用に意図される多数の専用コアであるコア１５０２Ａ〜１５０２Ｎを有するコプロセッサ、３）多数の汎用インオーダ・コアであるコア１５０２Ａ〜１５０２Ｎを有するコプロセッサ、が含まれ得る。したがって、プロセッサ１５００は、汎用プロセッサ、コプロセッサ、または例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクス処理ユニット）、高スループット多数集積コア（ＭＩＣ）コプロセッサ（３０以上のコアを含む）、埋込みプロセッサまたはこれらに類似するもの等の専用プロセッサ、であってもよい。プロセッサは、１つまたは複数のチップ上に実装されてもよい。プロセッサ１５００は、１つまたは複数の基板の一部であってもよく、かつ／または、１つまたは複数の基板上へ、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳ等のいくつかのプロセス技術のいずれかを用いて実装されてもよい。
【０１８４】
メモリ階層は、コア内の１つまたは複数のレベルのキャッシュと、１つまたは複数の共有キャッシュユニット１５０６または共有キャッシュユニット１５０６のセットと、統合型メモリ・コントローラ・ユニット１５１４のセットへ結合される外部メモリ（不図示）とを含む。共有キャッシュユニット１５０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）または他のレベルのキャッシュ等の１つまたは複数の中間レベルのキャッシュ、最終レベルのキャッシュ（ＬＬＣ）および／またはこれらの組合せを含んでもよい。ある実施形態では、リングベースの相互接続ユニット１５１２が、統合型グラフィクスロジック１５０８と、共有キャッシュユニット１５０６のセットと、システム・エージェント・ユニット１５１０／統合型メモリ・コントローラ・ユニット１５１４とを相互接続するが、代替実施形態は、このようなユニットを相互接続するために、任意の数の周知技術を用いることがある。ある実施形態では、１つまたは複数のキャッシュユニット１５０６とコア１５０２Ａ〜１５０２Ｎとの間にコヒーレンスが保持される。
【０１８５】
実施形態によっては、コア１５０２Ａ〜１５０２Ｎのうちの１つまたは複数は、マルチスレッディングを行うことができる。システムエージェント１５１０は、コア１５０２Ａ〜１５０２Ｎを連係動作させるコンポーネントを含む。システム・エージェント・ユニット１５１０は、例えば、電力制御ユニット（ＰＣＵ）と、表示ユニットとを含んでもよい。ＰＣＵは、コア１５０２Ａ〜１５０２Ｎおよび統合型グラフィクスロジック１５０８の電力状態を安定させるために必要なロジックおよびコンポーネントであっても、これらを含むものであってもよい。表示ユニットは、１つまたは複数の外部接続ディスプレイを駆動するためのものである。
【０１８６】
コア１５０２Ａ〜１５０２Ｎは、アーキテクチャ命令セットに関して同種であっても異種であってもよく、すなわち、コア１５０２Ａ〜１５０２Ｎのうちの２つ以上は、同じ命令セットを実行できてもよく、一方で、他のものは、その命令セットのうちの１つのサブセットのみ、または異なる命令セットを実行することができてもよい。
【０１８７】
次に、図１６を参照すると、本発明の一実施形態によるシステム１６００のブロック図が示されている。システム１６００は、１つまたは複数のプロセッサ１６１０、１６１５を含んでもよく、これらは、コントローラハブ１６２０へ結合される。ある実施形態において、コントローラハブ１６２０は、グラフィクス・メモリ・コントローラ・ハブ（ＧＭＣＨ）１６９０と、入力／出力ハブ（ＩＯＨ）１６５０（別々のチップ上にあってもよい）とを含み、ＧＭＣＨ１６９０は、メモリ１６４０およびコプロセッサ１６４５が結合されるメモリコントローラおよびグラフィクスコントローラを含み、ＩＯＨ１６５０は、入力／出力（Ｉ／Ｏ）デバイス１６６０をＧＭＣＨ１６９０へ結合する。あるいは、メモリコントローラおよびグラフィクスコントローラの一方または双方は、（本明細書に記述しているような）プロセッサ内に統合され、メモリ１６４０およびコプロセッサ１６４５は、プロセッサ１６１０へ直に結合され、かつコントローラハブ１６２０は、ＩＯＨ１６５０と共に単一のチップ上に存在する。
【０１８８】
図１６には、元来任意選択である追加のプロセッサ１６１５が破線で示されている。プロセッサ１６１０、１６１５は各々、本明細書に記述している処理コアのうちの１つまたは複数を含んでもよく、かつプロセッサ１５００の何らかのバージョンであってもよい。
【０１８９】
メモリ１６４０は、例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）またはこれらの組合せであってもよい。少なくとも１つの実施形態では、コントローラハブ１６２０は、プロセッサ１６１０、１６１５と、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、クイックパスインターコネクト（ＱＰＩ）等のポイントツーポイントインタフェースまたは類似の接続１６９５を介して通信する。
【０１９０】
ある実施形態において、コプロセッサ１６４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、埋込みプロセッサまたはこれらに類似するもの等の専用プロセッサである。ある実施形態において、コントローラハブ１６２０は、統合型グラフィクスアクセラレータを含んでもよい。
【０１９１】
物理リソース１６１０、１６１５間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性およびこれらに類似するものを含む利点の測定基準範囲に関して、様々な違いがある可能性がある。
【０１９２】
ある実施形態において、プロセッサ１６１０は、汎用タイプのデータ処理動作を制御する命令を実行する。命令には、コプロセッサ命令が埋め込まれていてもよい。プロセッサ１６１０は、これらのコプロセッサ命令を、接続されているコプロセッサ１６４５によって実行されるべきタイプのものであると認識する。したがって、プロセッサ１６１０は、これらのコプロセッサ命令（または、コプロセッサ命令を表す制御信号）をコプロセッサバスまたは他の相互接続上でコプロセッサ１６４５向けに発行する。コプロセッサ１６４５は、受信したコプロセッサ命令を受け入れて実行する。
【０１９３】
次に、図１７を参照すると、本発明の一実施形態による、より具体的な第１の例示的システム１７００のブロック図が示されている。図１７に示されているように、マルチプロセッサシステム１７００は、ポイントツーポイント相互接続システムであって、ポイントツーポイント相互接続１７５０を介して結合される第１のプロセッサ１７７０および第２のプロセッサ１７８０を含む。プロセッサ１７７０および１７８０は各々、プロセッサ１５００の何らかのバージョンであってもよい。本発明の一実施形態では、プロセッサ１７７０および１７８０は各々、プロセッサ１６１０および１６１５であり、コプロセッサ１７３８は、コプロセッサ１６４５である。別の実施形態では、プロセッサ１７７０および１７８０は各々、プロセッサ１６１０およびコプロセッサ１６４５である。
【０１９４】
プロセッサ１７７０および１７８０は、各々、統合型メモリコントローラ（ＩＭＣ）ユニット１７７２および１７８２を包含して示されている。プロセッサ１７７０は、そのバス・コントローラ・ユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インタフェース１７７６および１７７８も含み、同様に、第２のプロセッサ１７８０も、Ｐ−Ｐインタフェース１７８６および１７８８を含む。プロセッサ１７７０、１７８０は、Ｐ−Ｐインタフェース回路１７７８、１７８８を使用し、ポイントツーポイント（Ｐ−Ｐ）インタフェース１７５０を介して情報を交換してもよい。図１７に示されているように、ＩＭＣ１７７２および１７８２は、これらのプロセッサを個々のメモリ、すなわちメモリ１７３２およびメモリ１７３４へ結合し、メモリ１７３２およびメモリ１７３４は、個々のプロセッサへ局所的に接続される、メインメモリの一部であってもよい。
【０１９５】
プロセッサ１７７０、１７８０は各々、チップセット１７９０との間で、ポイントツーポイントインタフェース回路１７７６、１７９４、１７８６、１７９８を使用し、個々のＰ−Ｐインタフェース１７５２、１７５４を介して情報を交換してもよい。チップセット１７９０は、場合により、高性能インタフェース１７３９を介して、コプロセッサ１７３８と情報を交換してもよい。ある実施形態において、コプロセッサ１７３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、埋込みプロセッサまたはこれらに類似するもの等の専用プロセッサである。
【０１９６】
いずれかのプロセッサまたは双方のプロセッサの外部には、共有キャッシュ（不図示）が含まれてもよく、しかもＰ−Ｐ相互接続を介してこれらのプロセッサと接続され、よって、一方のプロセッサが低電力モードに置かれれば、いずれかまたは双方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得る。
【０１９７】
チップセット１７９０は、インタフェース１７９６を介して第１のバス１７１６へ結合されてもよい。ある実施形態において、第１のバス１７１６は、周辺機器相互接続（ＰＣＩ）バスであっても、ＰＣＩエクスプレスバスまたは別の第３世代Ｉ／Ｏ相互接続バス等のバスであってもよいが、本発明の範囲にこうした限定はない。
【０１９８】
図１７に示されているように、第１のバス１７１６へは、第１のバス１７１６と第２のバス１７２０とを結合するバスブリッジ１７１８と共に、様々なＩ／Ｏデバイス１７１４が結合されてもよい。ある実施形態では、第１のバス１７１６へ、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィクスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールド・プログラマブル・ゲート・アレイまたは他の任意のプロセッサ等の１つまたは複数の追加的なプロセッサ１７１５が結合される。ある実施形態において、第２のバス１７２０は、低ピンカウント（ＬＰＣ）バスであってもよい。第２のバス１７２０へは、例えば、キーボードおよび／またはマウス１７２２、通信デバイス１７２７、およびある実施形態では命令／コードおよびデータ１７３０を含み得るディスクドライブまたは他の大容量記憶デバイス等の記憶ユニット１７２８を含む、様々なデバイスが結合されてもよい。さらに、第２のバス１７２０には、オーディオＩ／Ｏ１７２４が結合されてもよい。しかしながら、他のアーキテクチャが可能であることも留意されたい。例えば、図１７のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の類似アーキテクチャを実装してもよい。
【０１９９】
次に、図１８を参照すると、本発明の一実施形態によるＳｏＣ１８００のブロック図が示されている。図１５との類似エレメントには、類似の参照番号が付されている。同じく、破線のボックスは、より高度なＳｏＣ上のオプション機能である。図１８において、相互接続ユニット１８０２は、１つまたは複数のコア１８０２Ａ〜１８０２Ｎのセットおよび共有キャッシュユニット１８０６を含むアプリケーションプロセッサ１８１０と、システム・エージェント・ユニット１８１０と、バス・コントローラ・ユニット１８１６と、統合型メモリ・コントローラ・ユニット１８１４と、統合型グラフィクスロジック、画像プロセッサ、オーディオプロセッサおよびビデオプロセッサを含み得る１つまたは複数のコプロセッサ１８２０のセットと、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）ユニット１８３０と、ダイレクト・メモリ・アクセス（ＤＭＡ）ユニット１８３２と、１つまたは複数の外部ディスプレイへ結合するための表示ユニット１８４０と、に結合されている。ある実施形態において、コプロセッサ１８２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋込みプロセッサまたはこれらに類似するもの等の専用プロセッサを含む。
【０２００】
本明細書に開示している機構の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこうした実装手法の組合せにおいて実装されてもよい。本発明の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性および不揮発性メモリおよび／または記憶エレメントを含む）、少なくとも１つの入力デバイスおよび少なくとも１つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【０２０１】
本明細書に記述している関数を実行して出力情報を生成するためには、図１７に示されているコード１７３０等のプログラムコードが入力命令に適用されてもよい。出力情報は、１つまたは複数の出力デバイスへ既知の方法で適用されてもよい。この適用を目的として、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【０２０２】
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向のプログラミング言語で実装されてもよい。また、プログラムコードは、必要であれば、アセンブリ言語または機械語でも実装されてもよい。実際に、本明細書に記述している機構の範囲は、如何なる特定のプログラミング言語にも限定されない。何れの場合も、言語は、コンパイル型言語であっても、インタプリタ型言語であってもよい。
【０２０３】
少なくとも１つの実施形態の１つまたは複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体に記憶される表示的命令によって実装されてもよく、上記命令が機械により読み取られると、機械は、本明細書に記述している技術を実行するためのロジックを作り上げる。「ＩＰコア」として知られるこうした表示は、有形の機械可読媒体に記憶され、かつ実際にロジックまたはプロセッサを作り上げる製造機械へロードすべく様々なカスタマまたは製造施設へ供給されてもよい。
【０２０４】
このような機械可読記憶媒体には、ハードディスク、その他フロッピーディスク、光ディスク、コンパクトディスク読取り専用メモリ（ＣＤ−ＲＯＭ）、コンパクト・ディスク・リライタブル（ＣＤ−ＲＷ）および光磁気ディスクを含む任意タイプのディスク等の記憶媒体と、読取り専用メモリ（ＲＯＭ）、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）等のランダム・アクセス・メモリ（ＲＡＭ）、消去可能なプログラム可能読取り専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的に消去可能なプログラム可能読取り専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気または光学カード等の半導体デバイスと、もしくはその他、電子命令の記憶に適する任意タイプの媒体とを含む、機械またはデバイスにより製造または形成される物品の非一時的な有形装置が含まれ得るが、この限りではない。
【０２０５】
したがって、本発明の実施形態は、本明細書に記述している構造、回路、装置、プロセッサおよび／またはシステム特徴を定義する命令を含む、または設計データを含む、ハードウェア記述言語（ＨＤＬ）等の非一時的な有形機械可読媒体も含む。このような実施形態は、プログラム・プロダクトと呼ばれることもある。
【０２０６】
諸図におけるフローチャートおよびブロック図は、本開示の様々な態様によるシステム、方法およびコンピュータ・プログラム・プロダクトの可能な実装形態のアーキテクチャ、機能および動作を示している。これに関連して、フローチャートまたはブロック図内の各ブロックは、特定の論理機能を実装するための１つまたは複数の実行可能命令を備えるモジュール、セグメントまたはコードの一部を表すことがある。また、代替実装によっては、ブロック内に記されている機能が、図に示されている順序から外れて行われ得ることにも留意されるべきである。例えば、包含される機能に依存して、連続して示される２つのブロックは、実際には略同時に実行されてもよく、あるいは、これらのブロックは、時として逆順で、または代替の順序で実行されてもよい。また、ブロック図および／またはフローチャート図の各ブロック、およびブロック図および／またはフローチャート図内のブロックの組合せは、特定の機能または活動を実行する専用ハードウェアベースのシステムによって、または専用ハードウェアとコンピュータ命令との組合せによって実装され得ることも、留意されるであろう。
【０２０７】
これまでに行った開示は、当業者が本開示の様々な態様をよりよく理解し得るように、いくつかの実施形態の特徴を概説している。当業者は、他のプロセスおよび構造を、本明細書で紹介されている実施形態と同じ目的を実行し、かつ／または同じ利点を達成するように設計または変更するための基礎として、本開示を容易に使用し得ることを認識すべきである。また、当業者は、こうした同等の構成が本開示の精神および範囲を逸脱しないこと、および当業者が、本開示の精神および範囲を逸脱することなく本明細書における記載に様々な変更、置換および改変をなし得ることも理解すべきである。
【０２０８】
本明細書に開示している任意のハードウェアエレメントの全て、または一部は、中央処理装置（ＣＰＵ）パッケージを含むシステムオンチップ（ＳｏＣ）に容易に提供され得る。ＳｏＣは、コンピュータまたは他の電子システムのコンポーネントを単一のチップに統合する集積回路（ＩＣ）を表す。ＳｏＣは、デジタル、アナログ、ミックスシグナルおよび無線周波数の各機能を含んでもよく、これらの全てが単一チップ基板上に設けられてもよい。他の実施形態は、マルチチップモジュール（ＭＣＭ）を含んでもよく、複数のチップが単一の電子パッケージ内に位置決めされ、かつこの電子パッケージを介して互いに密に相互作用するように構成される。他の様々な実施形態において、本明細書に開示しているコンピューティング機能は、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）および他の半導体チップにおける１つまたは複数のシリコンコアに実装されてもよい。
【０２０９】
本明細書で使用する「プロセッサ」または「マイクロプロセッサ」という用語は、従来のマイクロプロセッサ（Ｉｎｔｅｌ（登録商標）の業界トップのｘ８６およびｘ６４アーキテクチャ等）だけでなく、グラフィクスプロセッサ、マトリクスプロセッサ、および任意のＡＳＩＣ、ＦＰＧＡ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、プログラマブルロジックデバイス、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード、命令セット、エミュレートされた、または仮想マシンプロセッサ、または命令の実行を許可する類似の「チューリング完全な」デバイス、デバイスの組合せ、またはロジックエレメント（ハードウェアまたはソフトウェア）も包含するものとして理解されるべきである。
【０２１０】
また、特定の実施形態においては、コンポーネントにより省略されるものもあれば、統合されるものもあることにも留意されたい。一般的な意味において、図示されている配置は、論理上の区分として理解されるべきであるが、物理的アーキテクチャには、これらのエレメントの様々な入替え、組合せおよび／または混成が含まれ得る。本明細書に概説している動作目的を達成するためには、無数の可能な設計構成を使用できる点に留意することが不可欠である。したがって、関連するインフラストラクチャには、無数の代替配置、設計上の選択、デバイスの可能性、ハードウェア構成、ソフトウェア実装および機器のオプションがある。
【０２１１】
一般的な意味において、適切に構成されたプロセッサは何れも、データまたはマイクロコードに関連づけられる命令を実行して本明細書が詳述する動作を達成することができる。本明細書に開示しているプロセッサは何れも、あるエレメントまたは物品（例えば、データ）をある状態または物から別の状態または物に変換することもできる。別の例では、本明細書で概説したいくつかの活動が、固定ロジックまたはプログラマブルロジック（例えば、プロセッサにより実行されるソフトウェアおよび／またはコンピュータ命令）によって実装され得、かつ本明細書で同定しているエレメントは、何らかのタイプのプログラマブルプロセッサ、プログラマブルデジタルロジック（例えば、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、消去可能なプログラム可能読取り専用メモリ（ＥＰＲＯＭ）、電気的に消去可能なプログラム可能読取り専用メモリ（ＥＥＰＲＯＭ））、デジタルロジック、ソフトウェア、コード、電子命令、フラッシュメモリ、光ディスク、ＣＤ−ＲＯＭ、ＤＶＤ  ＲＯＭ、磁気または光学カード、電子命令の記憶に適する他のタイプの機械可読媒体を含むＡＳＩＣ、またはこれらの任意の適切な組合せ、であることも可能である。
【０２１２】
動作において、記憶装置は、情報を、任意の適切なタイプの有形で非一時的記憶媒体（例えば、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、消去可能なプログラム可能読取り専用メモリ（ＥＰＲＯＭ）、電気的に消去可能なプログラム可能読取り専用メモリ（ＥＥＰＲＯＭ）またはマイクロコード）、ソフトウェア、ハードウェア（例えば、プロセッサ命令またはマイクロコード）に、あるいは適切であれば、かつ特定のニーズに基づいて、他の任意の適切なコンポーネント、デバイス、エレメントまたはオブジェクトに、記憶してもよい。さらに、追跡され、送信され、受信され、またはプロセッサに記憶される情報は、特定のニーズおよび実装に基づいて、任意のデータベース、レジスタ、テーブル、キャッシュ、キュー、制御リスト、または記憶構造体に提供される可能性もあり、これらの情報は全て、任意の適切な時間フレームにおいて参照されることも可能である。本明細書に開示しているメモリまたは記憶エレメントは、何れも、適宜、広範な意味での「メモリ」および「記憶装置」に包含されるものと解釈されるべきである。本明細書における非一時的記憶媒体は、開示している動作を提供するように、またはプロセッサに開示している動作を実行させるように構成されるあらゆる非一時的な専用またはプログラム可能ハードウェアを包含することが明確に意図されている。また、非一時的記憶媒体は、明確に、ハードウェアコード化命令、および任意選択でハードウェア、ファームウェアまたはソフトウェアにおいて符号化されるマイクロコード命令またはシーケンスを記憶したプロセッサも含む。
【０２１３】
本明細書に記述している機能の全てまたは一部を実装するコンピュータプログラムロジックは、ハードウェア記述言語、ソースコード形式、コンピュータ実行可能形式、機械命令またはマイクロコード、プログラマブルハードウェア、および様々な中間形式（例えば、ＨＤＬプロセッサ、アセンブラ、コンパイラ、リンカまたはロケータにより生成される形式）を含む、但し決してこれらに限定されない、様々な形式で具現される。ある例において、ソースコードは、オブジェクトコード、アセンブリ言語、またはＯｐｅｎＣＬ、ＦＯＲＴＲＡＮ、Ｃ、Ｃ＋＋、ＪＡＶＡ（登録商標）またはＨＴＭＬ等の様々なオペレーティングシステムまたは動作環境で用いるための高レベル言語等の様々なプログラミング言語で実装される、あるいはＳｐｉｃｅ、ＶｅｒｉｌｏｇおよびＶＨＤＬ等のハードウェア記述言語で実装される、一連のコンピュータプログラム命令を含む。ソースコードは、様々なデータ構造および通信メッセージを定義しかつ使用し得る。ソースコードは、（例えば、インタプリタを介する）コンピュータ実行可能形式であってもよく、または、ソースコードは、（例えば、トランスレータ、アセンブラまたはコンパイラを介して）コンピュータ実行可能形式に変換されても、バイトコード等の中間形式に変換されてもよい。適切であれば、上述の何れもが、シーケンス、組合せ、ステートマシン、その他の何れであるかに関わらず適切なディスクリート回路または集積回路を構築または記述するために使用されてもよい。
【０２１４】
ある例では、諸図における任意数の電気回路が、関連する電子デバイスのボード上に実装されてもよい。ボードは、電子デバイスの内部電子システムの様々なコンポーネントを保持しかつさらに他の周辺機器用のコネクタを提供することができる、一般的な回路基板であることが可能である。より具体的には、ボードは、システムの他のコンポーネントによる電気的通信を可能にする電気接続を提供することができる。ボードへは、特定の構成ニーズ、処理要求およびコンピューティング設計に基づいて、あらゆる適切なプロセッサおよびメモリを適切に結合することができる。その他、ボードへは、外部記憶装置、追加のセンサ、オーディオ／ビデオディスプレイ用コントローラおよび周辺機器等のコンポーネントが、ケーブルを介してプラグインカードとして取り付けられてもよく、あるいは、ボード自体に統合されてもよい。別の例において、諸図の電気回路は、スタンドアロンモジュール（例えば、特定のアプリケーションまたは機能を実行するように構成される関連のコンポーネントおよび回路を有するデバイス）として実装されても、電子デバイスの特定用途向けハードウェアにプラグインモジュールとして実装されてもよい。
【０２１５】
本明細書に提供している多くの例では、相互作用が、２つ、３つ、４つ、またはそれ以上の電気コンポーネントに関連して記述され得ることに留意されたい。しかしながら、これは、単に明確さおよび例示を目的として行ったことである。システムが、あらゆる適切な方法で統合または再構成され得ることは、認識されるべきである。類似の代替設計に加えて、諸図の例示されているコンポーネント、モジュールおよびエレメントは何れも、様々な可能構成で組み合わされてもよく、その全てが、本明細書の広範な範囲に含まれる。ある場合には、所与のフローセットの機能のうちの１つまたは複数に関する記述を、単に限られた数の電気エレメントを参照するだけで行う方がより容易であることがある。図示された電気回路およびその教示内容は、拡大縮小が容易であって、多数のコンポーネントならびにより複雑／高度な配置および構成に対処できることは、認識されるべきである。したがって、提供している例は、無数の他のアーキテクチャに潜在的に適用される電気回路の範囲を限定する、もしくはその広範な教示を抑制するものではない。
【０２１６】
当業者には、他の多くの変更、置換、変形、修正および改変が確認され得、本開示は、こうした変更、置換、変形、修正および改変を添付の特許請求の範囲に記載された範囲内にあるものとして包含することが意図されている。
【０２１７】
［実装例］
以下の例は、本開示を通して記述されている実施形態に関する。
【０２１８】
１つまたは複数の実施形態は、対数回路を備える装置を含んでもよく、上記対数回路は、入力レジスタを介して、対数演算に関連づけられる入力を識別し、範囲選択回路を用いて入力が包含される第１の範囲を識別し、第１の方程式に関連づけられる複数のオペランドを取得し、加算器／減算器回路を用いて、複数のオペランドに基づき、第１の方程式の結果を計算し、かつ出力レジスタを介して、対数演算に関連づけられる出力を戻すための回路を備え、上記対数演算は、対数回路により、区分線形近似を用いて実行されるべきものであり、上記第１の範囲は、対数演算の複数の区分線形近似（ＰＬＡ）方程式に関連づけられる複数の範囲から識別され、かつ上記第１の範囲は、複数のＰＬＡ方程式のうちの第１の方程式に対応し、上記出力は、少なくとも部分的に第１の方程式の結果に基づいて生成される。
【０２１９】
装置の一実施形態例において、対数演算は、人工ニューラルネットワーク演算に関連づけられる。
【０２２０】
装置の一実施形態例において、入力は、浮動小数点数を含み、上記浮動小数点数は、指数部と、仮数部とを含み、出力は、固定小数点数を含み、固定小数点数は、整数部と小数部とを含む。
【０２２１】
装置の一実施形態例において、複数のオペランドは、仮数部オペランドと、１つまたは複数の小数部オペランドとを含み、１つまたは複数の小数部オペランドは、各々、２の累乗を含む分母を含む。
【０２２２】
装置の一実施形態例において、対数回路は、さらに、１つまたは複数の小数部オペランドを生成するための１つまたは複数のシフト回路を備える。
【０２２３】
装置の一実施形態例において、対数回路は、さらに、非バイアス指数を生成すべく浮動小数点数の指数からバイアスを減算するための減算器回路を備える。
【０２２４】
装置の一実施形態例において、出力レジスタを介して対数演算に関連づけられる出力を戻すための回路は、さらに、固定小数点数の整数部を非バイアス指数に基づいて生成し、かつ、固定小数点数の小数部を第１の方程式の結果に基づいて生成する。
【０２２５】
装置の一実施形態例において、対数回路は、さらに、第１の方程式に関連づけられる複数のオペランドを選択するための１つまたは複数のマルチプレクサを備える。
【０２２６】
装置の一実施形態例において、加算器／減算器回路は、複数のオペランドに対して１つまたは複数の加算演算または減算演算を実行する。
【０２２７】
装置の一実施形態例において、上記装置は、さらに、逆対数回路を含み、上記逆対数回路は、逆対数演算に関連づけられる第２の入力を識別し、第２の入力が包含される第２の範囲を識別し、第２の方程式の第２の結果を、第２の方程式に関連づけられる第２の複数のオペランドに基づいて計算し、かつ、逆対数演算に関連づけられる第２の出力を生成するための回路を備え、上記逆対数演算は、逆対数回路により、区分線形近似を用いて実行されるべきものであり、上記第２の範囲は、逆対数演算の第２の複数の区分線形近似（ＰＬＡ）方程式に関連づけられる第２の複数の範囲から識別され、かつ上記第２の範囲は、第２の複数のＰＬＡ方程式のうちの第２の方程式に対応し、上記第２の出力は、少なくとも部分的に第２の方程式の第２の結果に基づいて生成される。
【０２２８】
装置の一実施形態例において、装置は、さらに、活性化関数回路を備え、上記活性化関数回路は、対数回路と、逆対数回路とを備え、かつ上記活性化関数回路は、複数の利用可能な活性化関数から選択される１つの活性化関数を実行するための命令を受信し、１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行し、かつ活性化関数に関連づけられる活性化出力を生成するための回路をさらに備え、上記活性化関数は、１つまたは複数の乗算演算または除算演算を含み、上記１つまたは複数の対数演算は、対数回路を用いて実行され、かつ上記１つまたは複数の逆対数演算は、逆対数回路を用いて実行され、上記活性化出力は、少なくとも部分的に、１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成される。
【０２２９】
装置の一実施形態例において、活性化関数は、さらに、１つまたは複数の指数演算を含み、かつ活性化関数回路は、さらに、１つまたは複数の指数演算を、区分線形近似を用いて実行するための指数回路を備える。
【０２３０】
１つまたは複数の実施形態は、アプリケーションに関連づけられる情報を記憶するためのメモリと、上記アプリケーションに関連づけられる１つまたは複数の命令を実行するためのプロセッサと、複数の活性化関数を実行するための活性化関数回路とを備えるシステムを含んでもよく、上記活性化関数回路は、アプリケーションに関連づけられる活性化関数を実行するための命令を受信し、１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行し、かつ活性化関数に関連づけられる出力を生成するための回路を備え、上記活性化関数は、複数の活性化関数から選択され、かつ上記活性化関数は、１つまたは複数の乗算演算または除算演算を含み、上記１つまたは複数の対数演算は、対数回路により、区分線形近似を用いて実行され、かつ上記１つまたは複数の逆対数演算は、逆対数回路により、区分線形近似を用いて実行され、上記出力は、少なくとも部分的に１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成される。
【０２３１】
システムの一実施形態例において、アプリケーションは、人工ニューラルネットワークを含み、かつ活性化関数は、人工ニューラルネットワークの動作に関連づけられる。
【０２３２】
システムの一実施形態例において、１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行するための回路は、さらに、１つまたは複数の乗算演算または除算演算に関連づけられる１つまたは複数のオペランドに対して、１つまたは複数の底２の対数演算を実行し、１つまたは複数の底２の対数演算の１つまたは複数の結果に対して、１つまたは複数の加算演算または減算演算を実行し、かつ１つまたは複数の加算演算または減算演算の１つまたは複数の結果に対して、１つまたは複数の底２の逆対数演算を実行し、上記１つまたは複数の底２の対数演算は、区分線形近似を用いて実行され、上記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される。
【０２３３】
システムの一実施形態例において、活性化関数は、さらに、１つまたは複数の指数演算を含み、かつ活性化関数回路は、さらに、１つまたは複数の指数演算を、区分線形近似を用いて実行するための回路を備える。
【０２３４】
システムの一実施形態例において、１つまたは複数の指数演算は、各々、底２を含み、かつ１つまたは複数の指数演算を、区分線形近似を用いて実行するための回路は、さらに、１つまたは複数の指数演算を、１つまたは複数の底２の逆対数演算を用いて実行し、１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される。
【０２３５】
システムの一実施形態例において、複数の活性化関数には、シグモイド関数と、双曲線正接関数と、ｓｗｉｓｈ関数と、正規化線形ユニット関数とが含まれる。
【０２３６】
システムの一実施形態例において、シグモイド関数、双曲線正接関数またはｓｗｉｓｈ関数のうちの少なくとも１つは、専ら底２を含む１つまたは複数の指数演算を用いて定義され、かつ活性化関数回路は、さらに、１つまたは複数の指数演算を、１つまたは複数の底２の逆対数演算を用いて実行するための回路を含み、１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される。
【０２３７】
１つまたは複数の実施形態は、命令を記憶している少なくとも１つの機械アクセス可能記憶媒体を含んでもよく、命令は、機械上で実行されると、機械に、活性化関数回路により、複数の利用可能な活性化関数から選択される活性化関数を実行するための命令を受信させ、１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行させ、かつ活性化関数に関連づけられる出力を生成させ、上記活性化関数は、１つまたは複数の乗算演算または除算演算を含み、上記１つまたは複数の対数演算および上記１つまたは複数の逆対数演算は、区分線形近似を用いて実行され、上記出力は、少なくとも部分的に、１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成される。
【０２３８】
記憶媒体の一実施形態例において、機械に、１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行させるための命令は、さらに、機械に、１つまたは複数の乗算演算または除算演算に関連づけられる１つまたは複数のオペランドに対して、１つまたは複数の底２の対数演算を実行させ、１つまたは複数の底２の対数演算の１つまたは複数の結果に対して、１つまたは複数の加算演算または減算演算を実行させ、かつ１つまたは複数の加算演算または減算演算の１つまたは複数の結果に対して、１つまたは複数の底２の逆対数演算を実行させ、上記１つまたは複数の底２の対数演算は、区分線形近似を用いて実行され、上記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される。
【０２３９】
記憶媒体の一実施形態例において、活性化関数は、さらに、１つまたは複数の指数演算を含み、かつ命令は、さらに、機械に、１つまたは複数の指数演算を、区分線形近似を用いて実行させる。
【０２４０】
記憶媒体の一実施形態例において、複数の利用可能な活性化関数のうちの少なくとも１つの活性化関数は、専ら底２を含む１つまたは複数の指数演算を用いて定義され、かつ命令は、さらに、機械に、１つまたは複数の指数演算を、１つまたは複数の底２の逆対数演算を用いて実行させ、１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される。
【０２４１】
１つまたは複数の実施形態は、方法を含んでもよく、上記方法は、活性化関数回路により、複数の利用可能な活性化関数から選択される活性化関数を実行するための命令を受信することであって、上記活性化関数は、１つまたは複数の乗算演算または除算演算を含むことと、１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行することであって、上記１つまたは複数の対数演算および上記１つまたは複数の逆対数演算は、区分線形近似を用いて実行されることと、活性化関数に関連づけられる出力を生成することであって、上記出力は、少なくとも部分的に、１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成されることと、を含む。
【０２４２】
方法の一実施形態例において、上記方法は、さらに、１つまたは複数の乗算演算または除算演算に関連づけられる１つまたは複数のオペランドに対して、１つまたは複数の底２の対数演算を実行することであって、上記１つまたは複数の底２の対数演算は、区分線形近似を用いて実行されることと、１つまたは複数の底２の対数演算の１つまたは複数の結果に対して、１つまたは複数の加算演算または減算演算を実行することと、１つまたは複数の加算演算または減算演算の１つまたは複数の結果に対して、１つまたは複数の底２の逆対数演算を実行することと、を含み、上記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される。
［他の可能なクレーム］
（項目１）
対数回路を備える装置であって、上記対数回路は、
入力レジスタを介して、対数演算に関連づけられる入力を識別し、
範囲選択回路を用いて上記入力が包含される第１の範囲を識別し、
加算器／減算器回路を用いて、複数のオペランドに基づき、第１の方程式の結果を計算し、かつ、
出力レジスタを介して、上記対数演算に関連づけられる出力を戻すための回路を備え、
上記対数演算は、上記対数回路により、区分線形近似を用いて実行されるべきものであり、
上記第１の範囲は、上記対数演算の複数の区分線形近似（ＰＬＡ）方程式に関連づけられる複数の範囲から識別され、かつ上記第１の範囲は、上記複数のＰＬＡ方程式のうちの第１の方程式に対応し、
上記出力は、少なくとも部分的に上記第１の方程式の上記結果に基づいて生成される、装置。
（項目２）
上記対数演算は、人工ニューラルネットワーク演算に関連づけられる、項目１に記載の装置。
（項目３）
上記入力は、浮動小数点数を含み、上記浮動小数点数は、指数部と、仮数部とを含み、かつ、
上記出力は、固定小数点数を含み、上記固定小数点数は、整数部と小数部とを含む、項目１に記載の装置。
（項目４）
上記複数のオペランドは、上記仮数部オペランドと、１つまたは複数の小数部オペランドとを含み、上記１つまたは複数の小数部オペランドは、各々、２の累乗を含む分母を含む、項目３に記載の装置。
（項目５）
上記対数回路は、さらに、上記１つまたは複数の小数部オペランドを生成するための１つまたは複数のシフト回路を備える、項目４に記載の装置。
（項目６）
上記対数回路は、さらに、非バイアス指数を生成すべく上記浮動小数点数の上記指数部からバイアスを減算するための減算器回路を備える、項目３に記載の装置。
（項目７）
上記出力レジスタを介して上記対数演算に関連づけられる上記出力を戻すための上記回路は、さらに、
上記固定小数点数の整数部を上記非バイアス指数部に基づいて生成し、かつ、
上記固定小数点数の上記小数部を上記第１の方程式の上記結果に基づいて生成する、項目６に記載の装置。
（項目８）
上記対数回路は、さらに、上記第１の方程式に関連づけられる上記複数のオペランドを選択するための１つまたは複数のマルチプレクサを備える、項目１に記載の装置。
（項目９）
上記加算器／減算器回路は、上記複数のオペランドに対して１つまたは複数の加算演算または減算演算を実行する、項目１に記載の装置。
（項目１０）
逆対数回路をさらに備え、上記逆対数回路は、
逆対数演算に関連づけられる第２の入力を識別し、
上記第２の入力が包含される第２の範囲を識別し、
第２の方程式の第２の結果を、上記第２の方程式に関連づけられる第２の複数のオペランドに基づいて計算し、かつ、
上記逆対数演算に関連づけられる第２の出力を生成するための回路を備え、
上記逆対数演算は、上記逆対数回路により、区分線形近似を用いて実行されるべきものであり、
上記第２の範囲は、上記逆対数演算の第２の複数の区分線形近似（ＰＬＡ）方程式に関連づけられる第２の複数の範囲から識別され、かつ上記第２の範囲は、上記第２の複数のＰＬＡ方程式のうちの第２の方程式に対応し、
上記第２の出力は、少なくとも部分的に上記第２の方程式の上記第２の結果に基づいて生成される、項目１に記載の装置。
（項目１１）
活性化関数回路をさらに備え、上記活性化関数回路は、上記対数回路と、上記逆対数回路とを備え、かつ上記活性化関数回路は、
複数の利用可能な活性化関数から選択される１つの活性化関数を実行するための命令を受信し、
１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行し、かつ、
上記活性化関数に関連づけられる活性化出力を生成するための回路をさらに備え、
上記活性化関数は、上記１つまたは複数の乗算演算または除算演算を含み、
上記１つまたは複数の対数演算は、上記対数回路を用いて実行され、かつ上記１つまたは複数の逆対数演算は、上記逆対数回路を用いて実行され、
上記活性化出力は、少なくとも部分的に、上記１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成される、項目１０に記載の装置。
（項目１２）
上記活性化関数は、さらに、１つまたは複数の指数演算を含み、かつ、
上記活性化関数回路は、さらに、上記１つまたは複数の指数演算を、区分線形近似を用いて実行するための指数回路を備える、項目１１に記載の装置。
（項目１３）
システムであって、
アプリケーションに関連づけられる情報を記憶するためのメモリと、
上記アプリケーションに関連づけられる１つまたは複数の命令を実行するためのプロセッサと、
複数の活性化関数を実行するための活性化関数回路とを備え、上記活性化関数回路は、
上記アプリケーションに関連づけられる活性化関数を実行するための命令を受信し、
１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行し、かつ、
上記活性化関数に関連づけられる出力を生成するための回路を備え、
上記活性化関数は、上記複数の活性化関数から選択され、かつ上記活性化関数は、上記１つまたは複数の乗算演算または除算演算を含み、
上記１つまたは複数の対数演算は、対数回路により、区分線形近似を用いて実行され、かつ上記１つまたは複数の逆対数演算は、逆対数回路により、区分線形近似を用いて実行され、
上記出力は、少なくとも部分的に、上記１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成される、システム。
（項目１４）
上記アプリケーションは、人工ニューラルネットワークを含み、かつ上記活性化関数は、上記人工ニューラルネットワークの動作に関連づけられる、項目１３に記載のシステム。
（項目１５）
上記１つまたは複数の乗算演算または除算演算を、上記１つまたは複数の対数演算および上記１つまたは複数の逆対数演算を用いて実行するための上記回路は、さらに、
上記１つまたは複数の乗算演算または除算演算に関連づけられる１つまたは複数のオペランドに対して、１つまたは複数の底２の対数演算を実行し、
上記１つまたは複数の底２の対数演算の１つまたは複数の結果に対して、１つまたは複数の加算演算または減算演算を実行し、かつ、
上記１つまたは複数の加算演算または減算演算の１つまたは複数の結果に対して、１つまたは複数の底２の逆対数演算を実行し、
上記１つまたは複数の底２の対数演算は、区分線形近似を用いて実行され、
上記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、項目１３に記載のシステム。
（項目１６）
上記活性化関数は、さらに、１つまたは複数の指数演算を含み、かつ、
上記活性化関数回路は、さらに、上記１つまたは複数の指数演算を、区分線形近似を用いて実行するための回路を備える、項目１３に記載のシステム。
（項目１７）
上記１つまたは複数の指数演算は、各々、底２を含み、かつ、
上記１つまたは複数の指数演算を、区分線形近似を用いて実行するための回路は、さらに、上記１つまたは複数の指数演算を、１つまたは複数の底２の逆対数演算を用いて実行し、上記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、項目１６に記載のシステム。
（項目１８）
上記複数の活性化関数には、
シグモイド関数と、
双曲線正接関数と、
ｓｗｉｓｈ関数と、
正規化線形ユニット関数とが含まれる、項目１３に記載のシステム。
（項目１９）
上記シグモイド関数、上記双曲線正接関数または上記ｓｗｉｓｈ関数のうちの少なくとも１つは、専ら底２を含む１つまたは複数の指数演算を用いて定義され、かつ、
上記活性化関数回路は、さらに、上記１つまたは複数の指数演算を、１つまたは複数の底２の逆対数演算を用いて実行するための回路を備え、上記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、項目１８に記載のシステム。
（項目２０）
命令を記憶している少なくとも１つの機械アクセス可能記憶媒体であって、上記命令は、機械上で実行されると、上記機械に、
活性化関数回路により、複数の利用可能な活性化関数から選択される活性化関数を実行するための命令を受信させ、
１つまたは複数の乗算演算または除算演算を、１つまたは複数の対数演算および１つまたは複数の逆対数演算を用いて実行させ、かつ、
上記活性化関数に関連づけられる出力を生成させ、
上記活性化関数は、上記１つまたは複数の乗算演算または除算演算を含み、
上記１つまたは複数の対数演算および上記１つまたは複数の逆対数演算は、区分線形近似を用いて実行され、かつ、
上記出力は、少なくとも部分的に、上記１つまたは複数の乗算演算または除算演算の１つまたは複数の結果に基づいて生成される、少なくとも１つの機械アクセス可能記憶媒体。
（項目２１）
上記機械に、上記１つまたは複数の乗算演算または除算演算を、上記１つまたは複数の対数演算および上記１つまたは複数の逆対数演算を用いて実行させる上記命令は、さらに、上記機械に、
上記１つまたは複数の乗算演算または除算演算に関連づけられる１つまたは複数のオペランドに対して、１つまたは複数の底２の対数演算を実行させ、
上記１つまたは複数の底２の対数演算の１つまたは複数の結果に対して、１つまたは複数の加算演算または減算演算を実行させ、かつ、
上記１つまたは複数の加算演算または減算演算の１つまたは複数の結果に対して、１つまたは複数の底２の逆対数演算を実行させ、
上記１つまたは複数の底２の対数演算は、区分線形近似を用いて実行され、
上記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、項目２０に記載の記憶媒体。
（項目２２）
上記活性化関数は、さらに、１つまたは複数の指数演算を含み、かつ、
上記命令は、さらに、上記機械に、上記１つまたは複数の指数演算を、区分線形近似を用いて実行させる、項目２０に記載の記憶媒体。（項目２３）  上記複数の利用可能な活性化関数のうちの少なくとも１つの活性化関数は、専ら底２を含む１つまたは複数の指数演算を用いて定義され、かつ、
上記命令は、さらに、上記機械に、上記１つまたは複数の指数演算を、１つまたは複数の底２の逆対数演算を用いて実行させ、上記１つまたは複数の底２の逆対数演算は、区分線形近似を用いて実行される、項目２０に記載の記憶媒体。
【図１】
2020004398.tif 000057
【図２Ａ】
2020004398.tif 000058
【図２Ｂ】
2020004398.tif 000059
【図３Ａ】
2020004398.tif 000060
【図３Ｂ】
2020004398.tif 000061
【図３Ｃ】
2020004398.tif 000062
【図３Ｄ】
2020004398.tif 000063
【図３Ｅ】
2020004398.tif 000064
【図４】
2020004398.tif 000065
【図５Ａ】
2020004398.tif 000066
【図５Ｂ】
2020004398.tif 000067
【図５Ｃ】
2020004398.tif 000068
【図６Ａ】
2020004398.tif 000069
【図６Ｂ】
2020004398.tif 000070
【図６Ｃ】
2020004398.tif 000071
【図７】
2020004398.tif 000072
【図８】
2020004398.tif 000073
【図９Ａ】
2020004398.tif 000074
【図９Ｂ】
2020004398.tif 000075
【図１０Ａ】
2020004398.tif 000076
【図１０Ｂ】
2020004398.tif 000077
【図１０Ｃ】
2020004398.tif 000078
【図１０Ｄ】
2020004398.tif 000079
【図１０Ｅ】
2020004398.tif 000080
【図１１Ａ】
2020004398.tif 000081
【図１１Ｂ】
2020004398.tif 000082
【図１１Ｃ】
2020004398.tif 000083
【図１２Ａ】
2020004398.tif 000084
【図１２Ｂ】
2020004398.tif 000085
【図１３】
2020004398.tif 000086
【図１４Ａ】
2020004398.tif 000087
【図１４Ｂ】
2020004398.tif 000088
【図１５】
2020004398.tif 000089
【図１６】
2020004398.tif 000090
【図１７】
2020004398.tif 000091
【図１８】
2020004398.tif 000092
【外国語明細書】
2020004398000001.pdf