バックナンバーはこちら

today&tomorrow

What's New in DesignWare IP?

2019 vol.112

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

Subscribe to DesignWare Technical Bulletin

人工知能(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++モデルを使用してコンポーネントの面積と精度を検討しながらデザイン固有の要件を満たすことができます。

カテゴリートップ