16章訓練のプロセス
これまでに、コンピュータビジョン、自然言語処理、テーブル型データ解析、協調フィルタリングに対して、SOTAを達成できるアーキテクチャを構築し高速に訓練する方法を、すべて説明した。これで全部だろうか? 実は、まだ少し説明していないことが残っている。本章では、訓練のプロセスについてもう少し探求してみよう。
「4章 舞台裏:数字のクラス分類器」で確率的勾配降下法の基本を説明した。モデルにミニバッチを与え、ロス関数を用いてターゲットと比較し、それぞれの重みに対するロス関数の勾配を計算し、次の式にしたがって重みを更新する。
new_weight = weight - lr * weight.grad
訓練ループ中でこれを行うコードを1から実装した。また、PyTorchの提供するnn.SGD
クラスがこの計算をすべてのパラメータに対して実行してくれることを説明した。本章では、高速な最適化器をフレキシブルに実装した基盤の上に実装していく。われわれは訓練過程全体を変更したいわけではない。訓練ループを改良するには、基本となるSGDに何らかのコードを追加する方法が必要になる。fastaiライブラリにはコールバックシステムがあり、コードの追加が容易にできる。本章ではこのコールバックについても説明する。
まずはベースラインとして普通のSGDを実装してから、広く使われている最適化手法を導入していこう。
16.1 ベースラインの作成
まず、通常のSGDを作り、fastaiのデフォルトの最適化器と比較してみよう。その前に、「14章 ResNet」で用いたget_data
関数を使ってImagenetteデータをダウンロードしよう。
dls = get_data(URLs.IMAGENETTE_160, ...
Get PyTorchとfastaiではじめるディープラーニング ―エンジニアのためのAIアプリケーション開発 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.