人工知能に向けたハードウェア数学ライブラリ

人工知能(AI)は、私たちとさまざまな機器とのやりとり、そして私たちの生活のあり方そのものを根底から変革する可能性を秘めています。AIタスクでは、エッジ機器とデータセンターの間でペタバイト級のデータを効率よく転送して処理および演算が行われます。現実世界のデータを処理し、このデータの数学的表現を作成できるかどうかが重要な要素となっており、場合によってはこれが製品の大きな差別化要因となります。最適化された高精度なファンクションをハードウェアで実装すると、プロセッシング・ユニットの負荷を軽減できます。AIベース・システムで使用される数学アルゴリズムが安定してくれば、これらをハードウェアで実装して演算リソースを解放したいという要求が高まっています。これは、多くのAIアプリケーションでメリットがあります。

 

AIの最も重要な概念の1つに、ニューラル・ネットワークがあります。ニューラル・ネットワークとは、人間の脳および神経回路を模したコンピュータ・システムと定義されます。ハードウェアの観点からは、これは与えられた入力に対する出力を「学習」する関数であると言えます。この学習はトレーニングとも呼びます。たとえばネットワークで何かの画像を認識したい場合、ネットワークに多くの画像を見せて学習させます。この学習は、数学を用いて実装します。

 

トレーニングが完了したニューラル・ネットワークを実行してデータを分析/分類したり、不足しているデータを計算したり、未来のデータを予測したりすることを推論と呼びます。推論を実装するには、入力データに重み付き行列を掛け、その結果に活性化関数を適用し、ニューロンが受信している情報が特定の情報に関連しているのか、それとも無視すべきであるのかを判断します。活性化関数は単純な二値を出力するステップ関数から複雑な関数までいろいろな種類がありますが、特に多く使われているのはS(x) = 1/(1+e-x)として表されるシグモイド関数です。シグモイド関数は図1に示したようなS字曲線をしており、入力xが-∞に近付くと出力はS(x) = 0に近付き、xが+∞に近付くとS(x) = 1に近付き、x = 0のときはS(x) = 0.5となります。0.5より大きい値に「Yes」、0.5より小さい値に「No」のラベルを付けることも、入力xに対する出力値を「Yes/No」の確率として表すこともできます。ただし、シグモイド関数は入力値が>3または<-3のときに曲線がほとんど平坦になるため、学習を継続するには非常に高い精度が必要になるという課題があります。

図1:人工ニューロンの活性化関数として広く利用されるシグモイド関数

精度を高くするとデザインが複雑になるため、浮動小数点(FP)の精度が必要かどうかはしばしば議論の的となります。現在のニューラル・ネットワークを利用した予測では、32ビット浮動小数点が要求されることはほとんどなく、16ビット浮動小数点さえも不要なことがあります。多くのアプリケーションでは、ニューラル・ネットワークの計算に8ビット整数を使用しても十分な予測精度を維持できます。AIアプリケーションに必要な精度は、個々の設計要件に応じて決定する必要があります。たとえば、ニューラル・ネットワークで単に「青」を識別できればよいのか、さまざまな種類の「青」を区別する必要があるのかによって必要な精度は異なります。

デザインの精度をIPで制御

DesignWare® Foundation Coresは多数の数学IPコアをライブラリにしたもので、これらの演算機能を使用するとAIアプリケーションの数学的構造を極めて柔軟に実装できます。DesignWare Foundation Coresはハードウェアに効率的に実装できるように最適化されており、設計者はデザイン固有の要件を満たしながらデザインの精度を制御し、消費電力、性能、面積のトレードオフを行うことができます。例として、簡単な積和演算器(ベースライン)と複数の精度をサポートしたビルド済み融合積和演算器(FMA)の精度と面積を比較したものを図2に示します。

図2:ベースラインと複数精度に対応したFMA

浮動小数点演算と整数演算のいずれの場合も、演算と演算の間の内部丸めは設計者が制御できます。浮動小数点演算の場合は、内部丸めの制御とFFP(Flexible Floating Point)フォーマットを使用すると、共通の演算を共有することによってより効率的なハードウェア実装が可能です。設計者はFFPフォーマットを使用して独自の特殊なFPコンポーネントを実装し、ビット精度のC++モデルを使用してコンポーネントの面積と精度を検討しながらデザイン固有の要件を満たすことができます。

 

浮動小数点アルゴリズムは、不可分操作を組み合わせて作成します。浮動小数点デザインをサポートするIPは、浮動小数点アルゴリズムを構成するサブファンクションに基づいている必要があります。例として、サブファンクションを組み合わせたシンプルな浮動小数点加算器のブロック図を図3に示します。

図3:サブファンクションに基づくIPベースの浮動小数点デザイン

浮動小数点加算器には大きく指数部計算と仮数部計算の2つのパスがあります。これらのパスが情報を交換して最終的な計算結果を生成します。仮数部をシフトすると、指数部もそれに応じて調整されます。主なサブファンクションには、小数点の位置合わせ、固定小数点加算、正規化、丸めがあり、これらが仮数部計算を構成します。浮動小数点加算器のロジックの中で最も大きな割合を占めるのが正規化で、これを省略すればハードウェア最適化の余裕度が大きくなりますが、そうすると演算と演算の間で仮数部のビットが一部失われることがあります。仮数の内部値は固定小数点で表現され、これらは指数部計算チャネルの指数値と密接に結合されます。サブファンクションを実装するには、標準の浮動小数点システムよりも制約や特殊ケースの少ない方法で指数部と固定小数点の仮数部を表現する必要があります。

 

浮動小数点数の加算を繰り返す場合、正規化と丸めのステップがクリティカル・パスの大部分を占めます。複合演算を作成する場合、通常は一連の演算の最後に正規化と丸めを実行することが推奨されます。これは、正規化や丸めなしに浮動小数点演算の内部固定小数点値に直接アクセスした方が複雑さ、面積、およびクリティカル・パスを軽減でき、内部精度を設計者が自由に制御できるためです。図4は、簡単な2ステージ加算器の例を示したものです。正規化と丸めをなくすと、数値の挙動が変化します。第一に、最初のFP加算器で指数部の計算がやや簡略化されます。第二に、加算器の浮動小数点出力の表現がIEEE 754規格に準拠しなくなります。第三に、2番目の浮動小数点加算器はこの新しい表現を理解し、1番目の加算器でどのような処理が行われたのかについての情報を取得して判定を実行する必要があります。

図4:簡略化したサブブロックで構成した複合ファンクション

シノプシスDesignWare Foundation Coresは、IPを活用したプロジェクトを作成する場合に使用するコンポーネントをライブラリとしてまとめたものです。各コンポーネントを設定すると、そのRTLとCモデルがプロジェクト・ディレクトリにインストールされます。これには、これらコンポーネントの検証とインプリメンテーションに関連するすべてのファイルが含まれます。デザインが完成したら、これらのファイルは全体的なSoCデザインに統合され、設計者は次世代製品の開発に向けてRTLの改良を続けることができます。

まとめ

AIの爆発的成長により、現実世界で人間と機器がより直接的な方法でやりとりできる新しいデザインが次々と登場しています。現実世界のデータを処理し、このデータの数学的表現を作成できるかどうかが重要な要素となっており、設計者はさまざまなアプローチでAIを製品に適用しようと試みています。最適化された高精度なファンクションをハードウェアで実装すると、プロセッシング・ユニットの負荷を軽減できます。AIシステムでは、数学アルゴリズムをハードウェアで実装することで大きな優位性が得られます。

 

DesignWare Foundation Coresは、構成や実装をさまざまに変えてデザインのトレードオフを検討しながら精度、消費電力、性能、面積を最適化しつつ、デザイン固有の要件を容易に満たすことのできる強力なツールとなります。モデルを生成したら、ビット精度のC++モデルを使用してすぐにシミュレーションを実行して、AIデザインがプロジェクトの要件を満たしているかどうかを確認できます。

 

詳細情報

ウェブサイト:DesignWare Foundation Cores