目次
■人工知能(AI)と機械学習
2022.08.15 2024.03.12 約6分
国内最大級 ITエンジニア向け勉強会プラットフォーム connpass においてグループ人数 No.1 の Forkwell Community。 機械学習の「つぎの一歩が見つかる、気づきと学びの場」ML Study シリーズから2022.04.04開催「ML Study #3 機械学習コンペ」のQ&Aセッションをレポート!国際的な機械学習コンペ「Kaggle」の優勝経験者を招いて視聴者からの質問に回答します。
【質問全文】最近、コンペの難易度がどんどん上がってると思うんですけど、その中で Kaggle 初心者ができることは何がありますか?
小野寺: いやぁ私も初心者みたいなものなので、あまりアドバイスはできませんが、誰でもできることで言うとデータをよく見ることでしょうか……他に何かありますか?(笑)
石原: 難しいですよね(笑)私は初心者のときからコンペサイトに公開されている情報は全て目を通すように意識していました。とはいえ難易度が高いと思うので、基礎的な部分を実直に身に付けていく他ないと思います。小野寺さんはコンペ参加初期の頃は、どのように取り組んでいましたか?
小野寺: 最初はランダムフォレストを回して終わりでしたね。
石原: 私もノートブックを少しいじって終わりのような感じでした。近くに強い人がいたら一緒にチームを組んで徐々に身につけていきましたね。
小野寺: 過去のコンペの解法を読んで「何が違うと結果がどう違ってくるのか?」を身につけていくと分かってくるかもしれません。
gepuro: コンペの探し方についてポイントはありますか?
石原: 個人的には分析していて面白いコンペをやろうと思っています。ただモデルを作って調整するだけで戦うコンペよりは、コンペならではの工夫のしがいがありそうなコンペを選ぶようにしています。いくつかコンペティションサイトがあるので、その中から面白そうなコンペに参加することを心がけています。
小野寺: そうですね。興味ないコンペに参加しても嫌になるだけだと思うので、熱中しやすく興味があり、楽しめるコンペしか参加しません。初心者でも興味があって面白そうなことから始めるのが1番早いと思います。
石原: 「実装の距離」について腑に落ちていませんが、実装するモノは当然違うと思います。Kaggle でやっているのは、機械学習を業務で扱ううえで、さまざまなコードを書く中の一部を取り出しているものだとは思います。一部を深く掘り下げているのが Kaggleコンペです。
業務の中では、推論部分を作るにしても API があり、API に対するテストコードも自分で書く必要があります。 モデルを作る部分についてもKaggleコンペほど掘り下げないという意味では、深さの違いがあると思います。
gepuro: コンペを見たり聞いたりするのと実際の業務では、どのような違いがありますか?
ばんくし: 私の中ではあまり違いはありません。チームによると思います。うまく分業ができているチーム(コンペを解く人、実装する人、プロダクトマネージなど)に入ればコンペと同じ形で業務することも可能だと思います。逆に距離があるチームもあると思います。先ほどの API実装の話にもありましたが、せめて Dockernize する、ノートブックではなくスクリプトにするなどを求められるところは多いと思います。そのあたりは距離になると思います。
小野寺: 私の場合は Kaggle などの機械学習に取り組むことも業務であるため、全く距離を感じません。一般的なイメージでは、コンペは終盤にアンサンブルし過ぎてしまい、プロダクションにのせられないなどでしょうか。
gepuro: 質問者はコンペと業務を全く別物と捉えていましたが、3人の意見を聞いてコンペと業務は似ているものだと感じました。
小野寺: DGX Station という V100 が4枚ついたマシンを使っています。
gepuro: 一般ピーポーは真似できるんですか?(笑)
小野寺: NGC などあるので真似できると思います(笑)
gepuro: ご予算は…?
小野寺: 会社から支給されているもののため、予算はないです(笑)
gepuro: 石原さんはいかがでしょう。会社から高価なマシンが提供されますか?それともクラウドや個人で可能な範囲で使っていますか?
石原: 個人で使っているパターンが多いと思います。コンペも会社の業務として出るものでなければ、自分のお金で出ることが多いです。
最近だと Google Colab の課金版で Google Colab Pro や Google Colab Pro+ があるので、それらを使ったり GCP や AWS でインスタンスを立て、自分の端末で SSH でつなぐなどが多いと思います。
M1 Mac に変えてからローカルで Python のライブラリがうまく動かないような問題もあるので、ここ数年で基本的には SSH でつなぐ仕組みに変えました。
ばんくし: CADDi はマシンが自由に選択できるので、手元のパソコンには GPU が刺さっていますし、AI lab としては Google Colab Pro の契約をできるようにしていて、そのうえで業務のモデリングや Kaggle のような自己研鑽のモデリングを推奨しています。
小野寺: この前、Kaggle Days Championship で偶然優勝できましたが、強い人とマージするしかないと思います(笑)石原さんも優勝されてますよね?
石原: 2019年のコンペで優勝しています。優勝できるかは参加者に強い人がいるか否かに依存するので、上位入賞を考えた方がいいです。優勝するには基本的なことをしつつ、プラスアルファでコンペならではの部分を思いつくことが肝心です。
gepuro: もっと秘訣を知りたい方は石原さん共著の『PythonではじめるKaggleスタートブック』を買うといいのでしょうか?
石原: いやぁどうでしょう(笑)本は皆がやっている部分をカバーする方法を伝えたくて、それを踏まえたうえで新しい取り組みなどをすると差分が出てくると思います。
gepuro: 優勝するための情報収集はどうされていますか?
小野寺: えっと……特にないです(笑)昔のコンペを参考にしても既に皆が取り組んでいるので、上位を目指すために必要とはいえ、優勝とはまた違うと思います。結局、自分でデータを見て「こういう傾向があるな」とモデルに理解させるようなことをしないと優勝できないのでは?と思います。
小野寺: もう Master じゃないんですか?(笑)
ばんくし: まだ Master ではないですね。実は CEO からも「いつなるの?」と圧をかけられています(笑)宣言するか…!2022年中に何とかします!頑張ります。
gepuro: 小野寺さん、応援のメッセージをお願いします。
小野寺: チームマージなどをすれば誰でもなれるので簡単だと思います(笑)
小野寺: 以前計算したことがあって、結局 GPU はオンプレを用意したほうが得だった気がします。計算してからかなり月日が経っていますが、今も変わらないでしょう。
石原: 会社でみるとコスト面については同じ考えです。一方で、機械学習コンペを始める人にいきなり「オンプレ買おう」というメッセージは全員に当てはまるものではないので、サクッと一時的にリソースを確保したいならば、クラウドを選ぶのはいいことだと思います。場所の問題などもあるので、広い観点で考え、意思決定することが重要です。
gepuro: 単発の場合は Google Colab などを使ったほうがいいのですか?
石原: そうですね。ツール面でいえば コンペのデータセットのサイズや必要な RAM にもよるとは思いますが、Google Colab で済む場合もあります。一方で、例えば業務で一時的に必要になる場合にクラウドに課金する、長い目でみてオンプレを買うなど、選択肢はいろいろあります。
小野寺: 理論は大事ですが、あまり差分にならないと感じているので、そこまで重視していません。私は統計2級を理解しているレベルだと思いますが、役に立ったと感じることは特にありません。2級だからかもしれませんが。
石原: コンペに臨むという観点で決定木がどういう仕組みであるかという部分は、ある程度押さえておいても全く損ではないと思います。
小野寺: 最新の論文はそこまで重視せず、例えば ResNet はどう動いてるか、決定木はどう動いてるかなどは理解する必要があります。これらが理解できてないと機械学習モデルの気持ちも分からないと思います。
gepuro: ばんくしさんは業務において、どのくらい理論や統計の知識を必要としていますか?
ばんくし: 業務においても、あまり変わらないと思います。どちらかといえば、議論やディスカッションするほうが多いかもしれません。
業務だと手法やデータの性質に対してマッチしてるかなどを議論する場がたくさんあると思いますが、最低限の理論や統計知識が備わっていないと話が進まずに終わってしまうこともあります。そのため、最低限の知識は必要です。今後発売される石原さんの本(3冊)を一通り読めば、そのレベルまで到達できると思います。
ばんくし: 最終的な精度目標設定は重要視していません。何回サブミットしてもらえるか?を重視しています。精度の高さ=全てのモデルで良い という訳ではないので、プロダクトマネージャーと共にブラッシュアップを繰り返す方が大事だと考えます。できるだけ高い目標設定を立てているので達成しなくても問題ない認識です。それよりもユーザー満足度や売上についての主軸を持つべきだと考えています。
【質問全文】(画像や自然言語など)DNAが強いデータでは有名なモデル(画像における ResNet、自然言語における BERT等)や学習時の設定(エポック数、学習率、スケジューラー等)は片っ端から試しますか?あるいは過去の経験からデータを見てどれを試すべきか予め当たりをつけますか?
小野寺: 結構いい質問です。ResNet や亜種などありますが、それぞれの特性を理解していれば手当たり次第に試さずに済むと思います。
石原: 業務で自然言語処理に触れることが多く、コンペでも題材にすることがあります。
コンペの場合、DeBERTaV3 のベースから始めたりすると、ある程度スコアが出るんだなとか。過去のコンペである程度性能がいいものや現在進行形で出ているノートブックなどでも、そのようなものを使っていることが多かったりするので、そういったとこから始めたりします。あとはTransformer という NLP の有名なライブラリがありますが、例えば学習率の初期値がどのくらいかは分かってるので「この辺から始めればいいのか」という部分を知識として持っていて、いろいろ試す形だと思います。
ばんくし: 2人の意見とほとんど同じです。知識を一定以上持っている人のほうが試さなくて済みますし、それのために知識を持っていると思います。
石原: 楽しかったコンペ=良い成績が出たコンペ説があるので、僕の場合は PetFinder の1回目のコンペで優勝できたときが1番楽しかったです。
年代の近い人とチームを組みましたが、皆が成長途上のなかで高め合えたことが、とても楽しかったです。いろいろなコンペに出ていくうえで、あのコンペのコードが役立っていると感じる場面もあるので、強く思い出に残っています。
ばんくし: クジラの尻尾の個体を識別するコンペがよかったです。そのコンペ内でおこなった距離学習のモデルを実際の業務で使う機会があり、何かつながっていると感じた点が良かったです。
小野寺: 自分の場合は、Santander というコンペの最新の回です。終了1週間前に社内で3000位くらいの人たち3人を集めて、1週間で2位になったコンペだからです。そこまで順位を上げられた理由は、3人はそれぞれ別の情報を持っていて、その情報をモデルに同時に入れると2位になれるという情報だったからです。逆に1つだと9000チーム中3000位くらいのため、大したことのない順位になってしまいますが、その知見のアンサンブルをすることで2位になれたことが非常に印象に残ってます。
石原 祥太郎
株式会社日本経済新聞社
2017年より現職で自然言語処理や機械学習を用いたデータ分析・サービス開発に従事。 国際的な機械学習コンペ「Kaggle」では2019年にチームで参加した「PetFinder.my Adoption Prediction」で優勝し、共著で『PythonではじめるKaggleスタートブック』、翻訳で「Kaggle Grandmasterに学ぶ 機械学習 実践アプローチ」を出版した。2019年の「Kaggle Days Tokyo」にはコンペ開催側で関わった。 個人活動としてニュースレター「Weekly Kaggle News」を2年以上にわたり週次で発行している。 2020年に国際ニュースメディア協会「30 Under 30 Awards」でアジア太平洋部門の最優秀賞を受賞した。
gepuro(早川 敦士)(株式会社DATAFLUCT)
2010年よりデータサイエンスに取り組み、2015年に新卒でリクルートコミュニケーションズに入社。その後、株式会社FORCAS(現 ユーザベース)にて、アルゴリズムやデータ基盤の開発を担当するリーダーを務める。US事業ではテックリードとして携わった。2022年1月にDATAFLUCTに入社し今に至る。PdM兼テックリードとして勤務。技術評論社よりデータサイエンティスト養成読本, オライリーより機械学習のための特徴量エンジニアリング ――その原理とPythonによる実践などを執筆。