各ニューロンの各入力の重みを確率的勾配降下法で学習させて、例えば、コーヒーマグとそれ以外を区別できるように最適化して行く。その手順は、(1)入力の重みWをランダムに初期化する。(2)学習データのサブセットX(ミニバッチと呼ぶ)を取り、(3)Xをネットワークに入力して出力を求め、(4)誤差(Loss)を計算する。そして、(5)各入力の誤差に対する影響(勾配)を計算し、(6)出力から入力方向に向かって誤差を伝播させて、(7)重みWを修正して行く。

そして、収束するまで、2から7を繰り返す。

多変数の関数の最適化では一般的な、確率的勾配降下法を使って、誤差を出力から入力にむかって伝播させて、誤差が小さくなるように重みWを修正して行く

この確率的勾配降下法の計算は、ネットワークのサイズにもよるが、非常に大きな行列の積の計算が必要であり、計算量が大きい。そして、ニューラルネットワークの層ごとに行列積計算が必要なので、層数を増やすと、それに比例して計算量が増える。また、ニューロンの数を増やすと積を計算する行列のサイズが大きくなって、計算量が増える。

加えて、学習データを増やすと、この計算の繰り返し回数が増えるので、計算時間が掛かることになる。

ネットワークの層数、ニューロンの数、学習するデータが増えると、必要な計算量も増える

確率的勾配降下法は、時刻tの状態にd1という入力が入り、時刻t+1の状態になり、そこにd2という入力が入り、時刻t+2の筐体になるという、原理的に逐次型のアルゴリズムであり、並列化は非常に難しい。

高速化の方法としては、この基本アルゴリズム以外の部分の、重みの更新を早くする、一度に更新する重みの数を増やすという方法が考えられる。

学習の基本アルゴリズムのSGDは並列化できないので、それ以前のWの更新までの計算を速くする

更新を早くする方法としては、CuBlasなどの高速の行列計算ルーチンを使う、Cuda-CNNを使って畳み込みの計算を高速化するなどの手がある。

行列積計算や畳み込み計算を、GPU最適化されるルーチンを使ってスピードアップする

入力バッチを細分化して、それぞれを複数のワーカーに送って、並列にフォワードとバックワードの計算を行なわせ、計算した勾配をマスタに集める。そしてマスタは、すべての勾配データを使って、Wの更新を行い、更新されたW'をすべてのワーカーに送信する。このようにすれば、勾配を集めてWを更新する部分以外は並列化することができる。

入力から出力を求めるフォワード計算と出力から入力へのバックワード計算は並列化できる。しかし、Wの更新には、勾配データをすべてのワーカーからマスタに集める必要がある

しかし、勾配データのサイズはモデルのサイズと同程度で、モデルは数100MBの規模である。そして、GPUでの計算時間は1秒程度であるので、各ワーカーは数100MBの勾配データを1秒程度の時間で送る必要がある。マスタは、これのワーカー数倍のデータを受信し、同じ程度のサイズの更新したW'を各ワーカーに送り返す。それを各ワーカーが受け取るということを、1秒で行う必要があるので、ネットワークには非常に高いバンド幅が要求される。

分散処理を行うためには、各ワーカーと大量(数百MB程度)のデータのやり取りが必要となる

ネットワークバンド幅の問題を軽減する1つの方法は、計算データの精度を下げることである。ディープラーニングは16bitの浮動小数点でも十分で、8bitでもうまく行くという報告もある。32bitのFP32の代わりに、半精度のFP16を使えばデータ量は半分、8bitなら1/4で済む。

また、疎行列表現を使ってモデルを圧縮するという手もある。必要な通信バンド幅の低減には、低精度計算と疎行列の使用が有効である。

通信バンド幅のネックを軽減するためには、低精度計算と疎行列表現を使うデータ圧縮が有効

処理を分散すると、行列の形が細長くなり、行列積の計算の効率が低下する。このため、より良い最適化アルゴリズムが必要と述べたが、ここでは具体的な方策は示されていない。

分散処理を行うと、行列が扁平になり行列積の計算に性能が下がってしまう。より良い最適化が必要となるという

すべてのワーカーは大量のデータを必要とし、小さな単位のランダムなアクセスを頻繁に行う。したがって、強力な並列ファイルシステムが必要になる。

各ワーカーは大量のデータをランダムにアクセスするので、強力な並列ファイルシステムが必要である

まとめとして、ディープラーニングがHPCに期待するのは、高速なインタコネクト、低精度浮動小数点計算のサポートを含めて、行列積計算の高速化、分散したデータアクセスを効率的に処理できる並列ファイルシステムである。

そして、HPCの何十年にもわたる困難な並列化と最適化のノウハウの適用で、ディープラーニングの計算を高速化することである。

マシンラーニングは、始まったばかりである。という。

ディープラーニングがHPCに期待するのは高速インタコネクト、行列乗算の高速化、並列ファイルシステムなど。また、HPC分野での並列化のノウハウを利用した、より高度は並列化などである