見出し画像

読書感想文「Kaggle に挑む深層学習プログラミングの極意」

2023 年の 1 月末に出版されました
「Kaggle に挑む深層学習プログラミングの極意」
を著者の一人である 小嵜氏 及び 講談社サイエンティフィク様 から献本いただきました.


本書のお話を最初に聞いた時,あることを思い出しました.

それは,4 年程前の「Kaggle で勝つデータ分析の技術」の執筆当時,
「深層学習系の Kaggle 本をだすのはとても大変で,テーブルデータ主体の本の方がまだ執筆しやすい」
と,感じたことです.

なぜなら,深層学習の分野は日進月歩だからです.
時間が経っても陳腐化せずに,多くの深層学習系のコンペで普遍的に通用するような知識を体系立てて解説するのは簡単なことではありません.
そして,そのような高いハードルに挑戦した本書はとても画期的であると思います.

普遍的には通用しないだろうという判断で,本書に掲載されることなく闇に消えていった手法・知識がたくさんあったのではないかと思いますが,Kaggle 経験豊富な著者陣(Kaggle GrandMaster と Master)によって取捨選択された本書内の手法は,深層学習系のコンペに参加する際の必須知識と言えるのではないでしょうか.


さて,今回は章別に印象に残った点をつらつらと述べていきたいと思います.
最後までお付き合いいただければ幸いです.



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

まず最初に,Kaggle だけでなく KDD Cup や Netflix コンペといった,過去に開催された歴史的マイルストーンともいえるコンペの変遷を紹介しています.
近年の国内コンペの例として,知人が主催の atmaCup も紹介されていました(510さん 良かったね!)

一番良いなと思ったのは,コンペを細かすぎず粗すぎない粒度で分類し,タイプ別に過去に開催された代表的なコンペを列挙していた点でした.
自分が取り組んだことがないコンペに挑戦する際は,こういったコンペの解法を勉強してしまうのが効率的だと思いますし,私もそうしてきました.
自力で考えるのも大事だとは思いますが,限られた時間でより良い順位を目指すのがコンペですので,ショートカットできるところはしてしまった方が良いんですよね.

ちなみにですが,私は Paper with Code というサイトもよく利用します.
このサイトは各タスクやデータセットに対して,SOTA(State Of The Art)とされる手法をベンチマークしてくれているものです.論文やコードのリンク先はもちろんのこと,SOTA の変遷をタイムライン形式のグラフでみることもできたりします.

個人的に一点だけ注意しておきたいのは,
SOTA とされる手法の多くは特定のベンチマークデータセットに過学習しているきらいがある点です.
実際にコンペの課題に SOTA とされる手法を適用してみると,極端な場合,オーソドックスな ResNet-50 などのモデルにあっさり敗北することもあり得ます.
「どうして・・・」以外の気持ちがわいてこない状況も多々ありますが,心を強くもち,駄目だった原因の追求やより良いアーキテキクチャの探索などを行いましょう.


ResNet-50 に負ける SOTA 猫

逆に言えば,論文などで提案された多くの手法のうち,Kaggle 内で頻繁に使用され生き残っているものは,汎化性のある優れた実践的な手法であるといえるとも思います.



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

とてもオーソドックスな章です.
章の題名の通りで
EDA → モデルの作成 → 検証 → 性能向上のための TIPS
といった形で解説をしています.
この本の主題上,解説に使用するモデルはNN がメインとなっており,pytorch で実装されています.

機械学習を生業にしている方でしたらすらすらと読むことができる章でしょう.本書の主役は第3・4・5章ですので,ぱっと眺めて「あ.知ってるかも・・・」と思った読者は第3章から読んでも問題ないかもしれません.



第3章 画像分類入門

画像系のタスク(分類・検出・セグメンテーション)の基礎となる要素を包括的に解説してくれている章で,CNN モデル(ResNet-50 等)を使った実装方法を pytorch で解説しています.

章の後半では,精度向上のための tips が紹介されています.紹介されている tips のいずれもが Kaggle で頻繁に目にするもので,これらは「定石中の定石といっても過言ではない」かもしれません.
とはいえ,個人的な経験にもとづいた感覚論で申し訳ないのですが,定石であるこれらのことを正確かつ丁寧に検証しモデリングするだけでも,Kaggle で銀メダルまでをとることは可能だと思います.

本章の中にもし知らない tips があったら,それらを実装できるように自身のライブラリを普段から開発し用意しておくと良いと思います.
その際は,ライブラリ開発のスタート地点として本章のサンプルコードが有項活用できると思います.



第4章 画像検索入門

この章の執筆を @smly こと小嵜氏が担当されたのも納得でした.というのも,smly 氏は Kaggle で以前開催された Google Landmark Retrieval Challenge 2019/2020 のいずれでも上位にランクしており,特に 2019 では優勝されています.

画像検索のコンペは Kaggle 上での開催数もそれほど多くなく,分類・検出・セグメンテーションといったコンペと比べるとニッチな部類に入ると思います.
よく開催されるテーマは web 上などに参考資料が豊富に転がっていると思いますが,画像検索はそれほど多くはないように思います.
画像検索コンペに参加する際には,なかなか参考になる資料が少ないと思いますので,本章の内容を最初におさらいしておくと良いかもしれません.

内容ですが,基本的には CNN モデルを使った距離学習(metric learning)を主軸に,その実装方法や関連知識を解説しています.
そして,章の後半では局所特徴量を使った画像マッチングを併用することによる精度向上や,faiss を用いたクエリ拡張などを紹介しています.
SIFTRANSAC など,古くからの手法がでてきますので,少し意外に思われる方もいるかもしれません.
しかし,Kaggle では end to end な手法しか許されていないわけではありませんので,こういった手法が役に立つ機会は結構あるような気がします.
もっとも,本書内でも言及されているように,最近の Kaggle は推論にハードウェアと時間の制限を設けていることが少なくありませんので,採用が難しい場合もあるかもしれません.


少し脱線しますが,私は GeM pooling は自前実装していたんですが,とても便利なライブラリがあったんですね.
cirtorch パッケージというものがあるみたいです.勉強になります(無知ですみません・・・).
次からはこちらを使おうと思います.



第5章 テキスト分類入門


本書の三分の一を占める最も大きなボリュームの章です.
Quora Question Pairs という,過去に Kaggle で開催された NLP コンペを主題にテキスト分類に必要な知識を解説しています.


まず,とても分かり易く,これでもかというぐらい丁寧な解説が印象的です.私は行間を読むのがとても苦手なんですが,そんな私でも問題なくついていくことができました.

そして,コンペを疑似体験しつつ,古くからある手法から最近の手法までを一貫して追うことができるという点でも素晴らしい章でした.
Kaggle の場合,使える手法はなんでも使い,最後はアンサンブルで精度を向上させるというのが王道だと思います.
ですので,古い手法でも決して馬鹿にはできないんですよね.推論時間などが許すのであれば,古い手法でも重要なパーツであることに変わりはないわけです.
著者の 林氏 は Kaggle の NLP コンペにはかなり以前から参加されており,氏だからこそ今昔交えた形でバリエーションに富んだ手法を解説できたのだと思います.

具体的な内容としては・・・
前処理に始まり,Bag-of-WordsTF-IDF といった古典的な特徴量エンジニアリングを利用した LightGBM へと,順々に解説していっています.
そして,RNN や Gensim ライブラリによる GloVe(単語ベクトル)を解説し,さらには Kaggle 特有の所謂 magic feature(実ビジネスで利用するにはちょっとアレだけどコンペでは有用な特徴量)にまで言及しているのには恐れいりました.

とても良かったのが,Quora のコンペ当時ではまだ世の中にでていなかった BERT に関してもモデリングの仕方を解説していた点です.
加えて,最後は「古典的な手法も同じくらい大切である」という著者の言葉を体現するかの如く,stacking を使い private LB の一位に相当するモデルを実現させています(LightGBM + RNN + BERT + RoBERTa + DeBERTa の stacking).
古い手法(本書の場合,特徴量エンジニアリング + LightGBM)でもモデルの多様性を確保する点で有用であることを実際に示してくれているわけですね.

本書内でも言及されていますが,現在の NLP コンペですと言語モデルによる表現を利用するのが大前提だと思いますので,必ずしも古い手法が必須かどうかは課題によるのかもしれません.が・・・しかし,言語モデル以前の手法をしっておくことは決して無駄にはならないと思います.引き出しの多さは最終的なスコアに響いてくることが多々あります.


この感想文を書いている現在,世の中は OpenAI の ChatGPT を MicroSoft が自身のサービスに搭載するという話題で沸き返っています.
そして,そんな ChatGPT の技術,もとい NLP の進歩を目の当たりにしてびっくりしている非テック系の企業は多いと思います.
そういった企業による Kaggle での NLP コンテストの開催が,今後増えていくかもしれないですね.
そうなった場合は,まずこの章を復習してから臨むのが良いかもしれません(私はそうしますw).


さいごに・・・

とても素晴らしい本で何も言うことはないのですが,敢えてコメントするとすれば・・・,Kaggle で良い成績を収めるために必要な全ての内容を網羅した本を執筆することは難しく,それは本書も例外ではないという点です.
本書の前書きでも述べられていますが,他の関連書籍も大いに参考にすると良いでしょう.

もし,「Kaggle で勝つデータ分析の技術」をご覧になったことがない方がいらっしゃいましたら,是非そちらも読んでいただければと思います.

私個人の意見ではありますが,本書と「Kaggle で勝つ・・・」本を合わせて読むことでよりよい知識のシナジーが生まれ,コンペに対する理解や発想など,色々な面で大きな向上が見込めるのではないかと思います.

(卑しい宣伝 ↓)


それでは,最後までご覧いただきありがとうございました.
また別の感想文でお会いできることを楽しみにしております.
ではでは!

この記事が参加している募集

読書感想文

この記事が気に入ったらサポートをしてみませんか?