nikkie-ftnextの日記

イベントレポートや読書メモを発信

読書ログ | 『Kaggleに挑む深層学習プログラミングの極意』石原さんによる1章・2章は極意と例が目白押し!(2月の #stapy 予習)

はじめに

未来ずら〜、nikkieです。

今週木曜日2/16は19時からオンラインでみんなのPython勉強会 (a.k.a stapy)「新刊本から知る機械学習の今」
先日予習リストエントリも公開しました。

今回は『Kaggleに挑む深層学習プログラミングの極意』について現時点の感想をアウトプットしちゃいます!

目次

『Kaggleに挑む深層学習プログラミングの極意』

すさまじい人気で発売直後は品薄に!
この本の特徴は「まえがき」のこちらかなと思います。

本書では、近年出題の頻度が高まっている画像やテキストを題材にした機械学習コンテストを対象に、著者らの経験に基づく知見をまとめました。 (p.iii)

画像やテキストを題材にした機械学習コンテストが対象というのは目次を見ても伝わってきます(上記の講談社サイエンティフィクさんのページから見られます)

今回読んだのは、まえがき・1章・2章です。

第1章 機械学習コンテストの基礎知識
第2章 探索的データ分析とモデルの作成・検証・性能向上

これらを書かれた石原さんにstapyに登壇いただくので、トークの予習としてまず読みました。
精読したわけではなく、インデックスを作るのを目的にした読みです。

私は過去の Kaggle 関連書籍や「Weekly Kaggle News」の経験を活かし、まえがきから第 2 章まで担当しました。

感想:タイトルに偽りなし!極意でした(特に2章)

nikkieは機械学習コンテストにはあまり参加経験はありません。
ただ実務では機械学習に携わっており、ここ最近は「機械学習の論文読めるぞ!」1と面白さを感じてきた段階です。

その段階でインデックスづくりを目的にこの"Kaggle極意本"(2章まで)を読んだところ、すごいインデックスの存在を認識しました。
特に2章がインデックスとしてヤバすぎます。
モデルの検証(2.3)やモデルの精度向上(2.4)について様々な極意が載っていて、「こんなに手法があるのか!」とワクワクしっぱなしでした。
知っている事項をこの本を通して結びつけていただいた知的興奮も多々あります。

この本はReference(参考文献)も非常に充実しているんですよね。
1章・2章では、Kaggleのコンペの例が豊富に紹介されます。
これもこの本がたいそう価値のあるインデックスとなっている一要素と思います。
そしてReferenceがWebで見られます:https://github.com/smly/kaggle-book-gokui/blob/main/references.md

第1章 機械学習コンテストの基礎知識

石原さんによる書籍メモエントリより

第1章「機械学習コンテストの基礎知識」では、特に近年の動向に焦点を当て、機械学習コンテストの概要を紐解いていきます。

nikkieは機械学習コンテストの参加経験はほとんどないですが、どんなものかは理解しています2
1章はざっと読んだところ、2022年4月のML Studyでの石原さんの発表3が思い出されました。

1章を読んでいて「ML Studyの発表でも聞いた話もあるかも」と思いましたし、読んでからスライドを再確認すると「これ、極意本で出たとこじゃん!」となりました😆

第2章 探索的データ分析とモデルの作成・検証・性能向上

石原さんによる書籍メモエントリより

機械学習コンテストの参加者が取り組む過程として、大まかに「探索的データ分析」「モデルの作成」「モデルの検証」「性能の向上」という4つが存在します。
第2章「探索的データ分析とモデルの作成・検証・性能向上」ではそれぞれの観点に焦点を当て、基本的な考え方や技法を紹介しました。

第2章で取り上げられているトピックのうち、「検証」と「性能向上」を取り上げます。

検証(2.3)

モデルの検証について基礎から解説されます。

機械学習コンテストでは2種類のデータが与えられます:

  • 訓練セット:ラベルが分かっている
  • テストセット:参加者にはラベルが隠されている

コンテスト参加者は訓練セットからモデルを作り、テストセットを予測します。
検証とは、作ったモデルの性能(訓練に使っていないデータについての性能。汎化性能)を確認することです。

ラベルが分かっているデータ(訓練セット)の一部を取り分けて検証に使うホールドアウトや、
ホールドアウトの考え方を繰り返し適用して訓練セット全部を検証に使う交差検証が紹介されました。
これらにとどまらず、層化(stratified)やさらに他の検証も取り上げられています!

scikit-learnの手書き数字を例に、PyTorchでMLPを実装して検証までやるサンプルコードが公開されています

機械学習コンテストの経験が少ないために分からなかったのは、訓練セットは3つに分けなくていいの?という点です。
実務では「訓練セット」「テストセット」という分け方はなく、ラベル付きのデータがあるだけだと思います。
私の意見としては、ラベル付きデータを3つに分けます4

  • train:モデルの訓練に使う
  • val
    • trainを使いハイパーパラメタを変えて訓練したモデルの中から1つを選択するのに使う
    • trainとvalはホールドアウトにすることも交差検証にすることもあります
  • test
    • trainとvalから選択されたモデルの汎化性能を確認するのに使う

これにならって「訓練セット」を上記のtrain, val, testに分けると、test(訓練に一切使っていないラベル付きデータセット)に対する汎化性能が分かります。
一方サンプルコードは、ラベル付きのデータを(おそらくコンテストを再現するために)「訓練セット」と「テストセット」に分ける実装と理解しました。
なので、書籍の記述では「訓練セット」はtrainとvalの用途だけで、「テストセット」がtestのように思われます。
コンテストでは「テストセット」はモデルの汎化性能を見るものということなのかもしれません。

このあたりは上位者の解法をいくつか眺めてみるとはっきりするかなと思いました。

性能向上(2.4)

ここはヤバかったです、ワクワクしすぎてどうにかなりそうでした。
深層学習モデルの性能を向上するための数々のアプローチが、コンペの例と一緒に紹介されます!
「このアプローチはこのコンペのCodeを見ればいいのね!」と、言ってみれば極意の宝石箱でした。
気になる箇所を今後深掘りしていこうと思います5

面白いなあと思った一例は「データ拡張」。
テキストデータの拡張として「言い換え文生成」が紹介されています。
あれ、ちょっと待ってください、今話題のChatGPTを使えば言い換え文生成って無限にできるのでは!?
これ試してみたいな〜!!

終わりに

みんなのPython勉強会に向けて『Kaggleに挑む深層学習プログラミングの極意』のまえがき・1章・2章(石原さん執筆箇所)を予習しました。
いろいろな極意がKaggleでの例とともに紹介されていてヤバいです!
勉強会での発表も楽しみになりました。

思うに、1章・2章は石原さんじゃなければ書けなかった内容ではないかと思われます。
「なんでこんなにポンポンKaggleの例が出てくるんだろう」と思ったのですが、石原さんは毎週のWeekly Kaggle Newsで知見を整理して蓄積されていらっしゃるからできるんじゃないかな〜と思い至りました。
今後の配信も楽しみですね(私ももっと読み込もう!)

P.S. みんなのPython勉強会の構成すごいのでは(スタッフ自画自賛

極意本には次のようにあります:

目的関数・評価指標の詳細や種類については、本書の対象外です。(p.18)

2月のstapyのラインナップには『評価指標入門』(架け橋本)がありますよ!
発表同士が補完しあっている!

そして、『Python機械学習プログラミング PyTorch&scikit-learn編』では、極意本で前提としているPyTorchの使い方が押さえられるでしょう(※未読なので期待です)。
このシリーズは機械学習についても本格的に押さえられます。

つまり、2月のstapyは取り上げる書籍に補完関係があって、まさに機械学習の今を体験できそうですね!
ご参加お待ちしています〜