技術評論社より『深層ニューラルネットワークの高速化(ML Systems)』を上梓しました。
(※ ML Systems というのは本書が一作目となる技術評論社の新しいシリーズで、今後も機械学習 × エンジニアリングの本が刊行予定のようです。乞うご期待!)
深層ニューラルネットワークは画像、言語、音声などさまざまな領域で活躍を見せていますが、標準的なモデルサイズは年々増加の一途をたどっており、使用するのが難しくなっています。本書は深層ニューラルネットワークを高速化することでこの問題に対処する方法を紹介します。高速化により、同じハードウェアでもより大きなモデルを利用できるようになる(= 精度が高くなる)ほか、同じモデルで比較するとより安価なハードウェアに配備できるようになり、コストを削減できます。10 パーセントコストを削減できる(利益を増やせる)だけでもビジネスでは大きなメリットです。高速化の技術は応答時間が短くなって快適になるというユーザー側の利点と、コストが小さくなるというビジネス側の利点の両方を実現できます。
本稿では本書でこだわったポイントをご紹介します。端的にいえば、具体的な実装例など技術面での要請と、動作原理などの研究面での要請の両面に答えて、技術書と専門書の良いとこ取りをすることを目指しました。
目次
理由と使いどころを詳しく解説
本書では「こうすればこうなります」ということだけでなく、「なぜそうするのか」「なぜそうなるのか」「どういうときにこれをすればよいのか」を詳しく解説しています。
量子化、枝刈り、蒸留といった単語は聞いたことがあったり、基本的な仕組みを知っている方は多いと思いますが、なぜ量子化しても品質が下がらないのか(それだったら最初から浮動小数点数なんて使う必要はないのではないか)、なぜ蒸留がうまくいくのか(最初から小さいモデルを訓練しておけば良かったのではないか)、といった疑問に答えられる人はあまり多くないと思います。こうした理由に答えられるようになって、根拠に基づいて技術選定できるようになることを目指しています。
豊富なコードと実行例(無料配布中!)
本書中にはコードと実行例をたくさん掲載しています。細かい話はいいからとにかく高速化する方法を教えてくれというニーズも意識して、すぐに活用できるような構成を心がけました。
本書で用いたコードは GitHub 上で無料で公開しています。ノートブックを実行するだけですぐに高速化が体験できます。
MIT ライセンスなので商用利用も可能です。本書を購入していなくてももちろん使っていただいて OK です。
また、コードには具体的な実行時間も掲載しています。例えば、上の例では ResNet50 をバッチサイズ 32 で Intel Xeon Platinum 8488C 上で普通に(FP32 で)実行すると 0.793 秒、BF16 を用いると 0.432 秒(約 1.8 倍の高速化)、intel_extension_for_pytorch というライブラリで最適化すると 0.137 秒(約 5.8 倍の高速化)となっています。精度に寄与する手法では精度も報告しています。これにより、こういう技術を導入すると、どのくらい早くなって、どのくらい精度に影響するかという肌感覚を養うことができます。実務で使う場合には、UX 上 3 倍高速にすることが必要なら、このあたりの技術を使えば良さそうであったり、2% くらい精度が悪くなってよければどのくらい高速化・コスト削減できそうかのあたりをつけたりするのに役立ちます。
高速化という題材を通して深層学習の原理を学べる
本書はなぜ深層学習がうまくいくのか、についても詳しく解説することになりました。高速化の適用先である深層学習自体を理解しないと、とりあえず技術を適用してみたらこうなった、で終わってしまうことになるからです。しかし、深層学習は分かっていない事柄も多く、原理を学ぶのも一筋縄ではいきません。本書ではその中でも判明している理論的結果に基づいて可能な限り原理に基づいた説明・導入ができるよう心がけました。深層ニューラルネットワークにこういう操作を施せばこういうことが起こるというメンタルモデルを築いたうえで、じゃあこういう操作をすれば、高速かつ高品質になりそうだというように、理解に基づいて手法を構築・理解していきます。
本書で軸となる考え方は、ランダム初期化された深層ニューラルネットワークは大きな記憶容量を消費するが、学習後には圧縮が可能になるということです。ランダム初期化されたモデルには法則性がないため、効率よくモデルを表現できません。しかし、学習後、特に汎化するような推論法則を見つけたモデルには規則性が存在したり、ランダムな摂動に対する余裕のようなものが生じます。この規則性を活用したり、必要以上にある余裕を削ることで、モデルの見かけの容量である(パラメータ数 × 4 バイト)よりも小さく表現することが可能であり、そのような圧縮表現を用いることで、高速化が可能になります。本書では、余裕とは具体的にどういうものか、なぜ学習により余裕が現れるのか、などについても詳しく解説しています。
本書では量子化、枝刈り、蒸留など、さまざまな高速化技法を紹介しますが、その多くは根本的にはこの考え方に基づいています。量子化であれば(パラメータ数 × 2 バイト)や(パラメータ数 × 1 バイト)というようにパラメータあたりの容量を削り、枝刈りであれば実質的なパラメータ数を下げて容量を削ります。手法を各論として紹介しつつ、それらを結ぶ縦糸としてこれらの理論的な背景を解説することで体系的な理解を深められるような構成にしました。
この話題は、高速化を行ううえで、原理に基づいて必要なパラメータ数や期待できる高速化の程度にあたりをつけられるようになるというように実用上役立つのはもちろん、なぜ深くするのか、なぜパラメータ数を増やすのかなど、深層学習の基本的な理解につながる話なので、深層学習の勉強や研究の土台作りにも役立ちます。高速化自体に興味がない人も、深層学習自体を理解するために本書を読むと多く得られるものがあるはずです。
おわりに
これまで『最適輸送の理論とアルゴリズム』や『グラフニューラルネットワーク』など、数理の専門書を書いてきましたが、今作はガッツリとコードの掲載がある技術書の側面も備わっています。技術書と専門書の良いとこ取りというのはチャレンジングな課題でしたが、実用性が高く、かつ読み物としても面白い、そんな本にできたと思います。深層学習に携わる皆さんに読んでいただければ幸いです。
『深層ニューラルネットワークの高速化』が本日発売となりました!Kindle と PDF も同時配信です。
— 佐藤 竜馬 / Ryoma Sato (@joisino_) 2024年8月26日
タイトルの通り高速化の技法が学べるだけでなく、高速化という題材を通して深層学習の奥深いところが学べる構成になっています。皆さんに読んでいただけると嬉しいです。https://t.co/owTfX4scFP
Amazon(物理本):https://www.amazon.co.jp/dp/4297143097
Amazon (Kindle):https://www.amazon.co.jp/dp/B0DB6QXWKF
Gihyo Digital Publishing (PDF):https://gihyo.jp/dp/ebook/2024/978-4-297-14310-7
連絡先: @joisino_ / https://joisino.net