はじめに
こちらは「ゼロつくDeepLearning_cp7」の記事の続きです。
「ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装」についてのまとめを数回に分けて行いたいと思います。
YOUTUBEでのおすすめチャンネルは以下の通り
何をまとめるのか
さて、このまとめではpythonのコードを動かしたり、何か実装するということは行いません。
ちなみに、書籍のソースコードはこちらにまとめられています。
なので1章はとばし、2章からのスタートになります。
そして6章も学習実装時のテクニックなので飛ばします。
今回は8章をまとめます。
引き続き個人的に重要だと思うポイントを記載したいと思います。
ついに最終章です!
8章 ディープラーニング
ディープラーニングは、層を深くしたディープなニューラルネットワークです。これまで勉強してきたニューラルネットワークに層を深くしていきます。
メリットもある反面で、デメリットも見えてきています。
ネットワークをより深く
ニューラルネットワークの層をより深くすることで、ある程度の精度は担保されていると証明されてしまいました。その代表例がGPT3をはじめとするGPTモデル、Whisper、Stable Diffusionなどです。
これらは何十、何百億というパラメータを調整し、自然なテキストや画像、音声を出力することに成功しています。
そして精度の良いモデルを支えているのが、GPUです。
ディープラーニングの高速化
GPU
GPUは元々、グラフィックのための専用ボードとして利用されてきました。
しかし最近では、グラフィック処理だけでなく、並列的な数値計算にも使われています。
ディープラーニングでは、大きな行列の積を行う必要があるので、GPUはうってつけな訳です。
ですが近年はLLMの広がりとともに、GPUの枯渇が叫ばれています。
私の会社もGPUを調達しようとして厳しそうだったり、時間がすごくかかったりしています。
先日さくらインターネットがH100 8基を月額300万で貸し出すニュースがありましたね。
ついに国産クラウドが動き始めました。
またAIを受け入れられる土壌が日本にはあると言われています。すんなりとAIと共存していく道を選んでいるんですね。海外ではAIが敵だと表現されたり、まだ否定的であったりする風潮があるようです。
OpenAIが日本に支社を持つのも楽しみですね!
話がそれました、本題に戻りますね。
演算精度のビット削減
ディープラーニングの高速化においては、計算量に加えてメモリ容量やバス帯域などがボトルネックになります。メモリ容量の点で言うと、大量の重みパラメータや中間データをメモリに収めることを考慮する必要があります。また、バス帯域の点では、GPUやCPUのバスを流れるデータが増加してある制限を超えるとそこがボトルネックになります。
そこで、ネットワークを流れるデータのビット数はできるだけ小さくすることが望ましいです。
コンピューターでは実数を表現するために、主に64ビットや32ビットの浮動小数点が用いられます。
計算する際の誤差は少なくなるものの、そにぶん計算量やメモリ使用量が増大し、バス帯域に負荷をかけてしまいます。
最近では膨大なパラメータを処理するため、量子化という手法でモデルを軽くしています。
量子化とは、重みなどのパラメータをより小さいビットで表現することで、モデルの軽量化を図る仕組みです。

PyTorchやTensorFlowなどのフレームワークは、32ビット浮動小数点を用いています。
8bitの量子化であれば、1%程度の性能低下であることが報告されています。