第9章. 野生のPyTorch
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
最終章では、PyTorchが他の人や企業でどのように使われているかを見ていく。また、写真のサイズ変更、テキスト生成、ニューラルネットワークを欺く画像の作成など、新しいテクニックも学んでいく。これまでの章とは少し趣向を変えて、PyTorchをゼロから始めるのではなく、既存のライブラリを使って立ち上げ、実行する方法に集中する。これがさらなる探求への足がかりになることを期待している。
まずは、データを最大限に活用するための最新のアプローチをいくつか検証してみよう。
データ補強:ミックスとスムージング
第4章では、学習データセットに対するモデルのオーバーフィットを減らすために、データを補強する様々な方法について見てきた。より少ないデータでより多くのことを行う能力は、当然ながらDeep Learningの研究において活発に行われている分野であり、このセクションでは、データから最後の一滴まで信号を絞り出すための、ますますポピュラーになりつつある2つの方法を見ていく。どちらのアプローチも、損失関数の計算方法を変更することになるので、先ほど作成したより柔軟な学習ループの良いテストになるだろう。
ミックスアップ
mixupは、私たちがモデルに何をさせたいかを斜めに見ることから生まれる、興味深い拡張テクニックである。私たちのモデルに対する通常の理解は、図9-1のような画像をモデルに送り、その画像がキツネであるという結果を返してほしいというものだ。
図9-1. キツネ
しかしご存知のように、モデルから得られるのはそれだけではない。我々はすべての可能なクラスのテンソルを得ることができ、願わくば、そのテンソルの中で最も高い値を持つ要素がキツネクラスであってほしい。実際、理想的なシナリオでは、キツネのクラスに1が入る以外はすべて0のテンソルが得られるだろう。
ただし、これはニューラルネットワークにとって難しいことだ!常に不確実性が存在し、softmax のような活性化関数はテンソルが1か0になることを難しくする。mixupはこれを利用し、「図9-2のクラスは何か?
図9-2. ネコとキツネの混血
私たちの目には、これは少し混乱しているように見えるかもしれないが、60%が猫で40%が狐なのだ。もしモデルに決定的な推測をさせる代わりに、2つのクラスをターゲットにさせたらどうだろう?そうすれば、出力テンソルは訓練で1に近づくことはあっても到達することはなく、それぞれの混合画像を異なる割合で変化させることができ、モデルの一般化能力を向上させることができる。
しかし、この混合画像の損失関数はどのように計算するのだろうか?さて、pを混合画像に占める最初の画像の割合とすると、次のような単純な線形結合が成り立つ:
p * loss(image1) + (1-p) * loss(image2)
これらの画像を予測する必要があるよね?そして、最終的な混合画像にどれだけそれらの画像が含まれているかに応じてスケーリングする必要があるので、この新しい損失関数は合理的だと思われる。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access