俵言

しがない社会人が書く、勉強とかのこと。最近は機械学習や kaggle 関連がメイン。

感想文:今更ながら Kaggle Tokyo Meetup #6 を振り返る

お前3連休の残り何しとってん?って話ですが、今更ながら Kaggle Tokyo Meetup 参加した一口感想を資料を振り返りながら書こうと思います。あと LT させて頂いた感想とか。

connpass.com

本当は meetup の次の日くらいに公開するはずだったんですが、どうしてこうなった...

参加直後の電車の中 → 帰宅後。

そして時が経ち...
.
.
.

流石にまずいと思ったので書き始めた、はずだったが...
.
.
.

はい。結局木曜(7/18)深夜までずれこみました。


各発表の詳細についてはえじさんの以下の記事がめちゃくちゃまとまってるので是非ご覧ください! (この感想文も 発表資料 + えじさんの記事 を見返しながら書いています。)
発表終わる度に kaggler-ja slack に上げてくれてたので「神かよ..」って思ってました。

amalog.hateblo.jp

また、抽選から溢れてしまった有志によって密かに同時開催された kaggle tokyo 裏 meetup #1 については mocobt さんがまとめ記事を書かれています。こちらも面白いので是非!

mocobt.hatenablog.com

というわけでここからが感想文となりますが、全体への感想と各発表に対する感想をだらだらと書いてます。暇つぶしにどうぞ。
参加してた方は「そういえばこんなイベントだったな..」と懐かしめるかも。

全体に対する感想

一つ目に印象に残ってることとして「kaggler は全部やる」と言われるように、やはり上位陣はやることやってるということ(それはそう)。圧倒的試行不足を実感させられます。

そしてもう一つ今回の発表(特に phalanx さんの発表)を聞いて印象に残ったのは、何がうまく行っていて何がうまく行っていないのかコンペ期間中に都度都度きちんと検証しているということ。
これって当たり前のことではあるのですが、ついつい CV とか Public の score だけで判断してしまいがちで、深堀りしてないなと改めて自覚しました。何かしながら別のことが出来るほど器用では無いので、明示的にモデルの性能を色んな面で検証する(予測結果と照らし合わせてEDAするみたいな)日を作るのも良いのかなと思ったり。

前回(#5)より前提知識なども付いたことでよりためになる会となったのですが、同時に足りない部分もまだまだあるとわかった会でした。こういう刺激を受けて強くなっていきたいです。

本発表

Opening Talk (threecourse さん)

資料:Speaker Deck

もう忘却の彼方に消えつつあるネタですが、会場が会場なので「元気な挨拶」からスタート。

「恐れずにアウトプットしていきましょう」という言葉が本当にありがたかったです...。おかげで大分 LT する前に大分気が楽になりました。

LT枠を一つ埋めてまでする発表だったかと問われるとつらいですが...

Petfinder 2nd Place Solution (Wodori の皆さん※副業で一名欠席)

資料:Speaker Deck

泥臭い前処理の部分であるとか、多様なモデルを作る部分であるとか、チームとしてうまく分担することで綺麗に回っていたという印象を受けました。

中国に旅立っている間にモデルが強奪されるとかいうイベントもあったらしいですが、人のモデル奪って改造して性能上げれるのもすごいし返って来たやつをちゃんと stacking で仕上げれるのもすごい。各個人のpart で全員が熱く語れるくらいそれぞれが色んな試行を行っていて、チームとしてだけでなく個人としての能力の高さも感じさせます。

また (過去コンペ含めて) 様々なカーネルの知見をうまく利用していて、いかにも kaggler という感じがしました。

個人的に興味深かったのは stacking の際に fold 毎の差を吸収するために rank 変換したところと、kaerururu さんが捨てて kernel で公開した特徴が gege さんのモデルで役に立っていたところ。情けは人の為ならず。

最後の入賞後の展開についても、今まで「ビデオ通話するらしい」ぐらいしか知識が無かったのでで興味深かったです。 †ultimate model† のネーミングはちょっと笑う。

余談:副業で居ないはずの方が TL に浮上

居ないはずの takuoko さんが Tweet にめっちゃいいねする上に発表の補足 Tweet までしてくれるので本当に副業に行ってるのか疑惑が立つくらいでした。

だったらしいです。

お疲れ様です。

iMet 7th Place Solution & 画像コンペのアプローチ (phalanx さん)

資料: Speaker Deck

このコンペは僕も二ヶ月間頑張っていたのですが結果的にドボンしたため、発表聴いてて色々思い出深かったです。 model や stacking の仕方といった解法のメインの部分は先に Tweet されていたので、loss とか Grad-CAM による可視化、蒸留をずっと試していた(けどダメだった)という部分が目新しい情報でした。

ラベルが noisy ではあったものの、おっしゃっていたようにコンペとしてはシンプルで取り組みやすい部類でしたし二か月間楽しかったです。そう、終了三日前ぐらいまでは平和だった...。

private sharing はダメ、ゼッタイ。ホント kaggle の価値が下がるだけなんだよなあ。
これ関連で kerneler コンペの discussion にコメントしたがために参加する羽目になったりしました(宝くじ当たるとは思いもしませんでしたが...)。

X5の話は置いとくとして、衝撃的だったのは後半の画像コンペへの取り組み方の部分。何と言っても以下のパイプラインが会場をざわつかせます。

json で実験管理ぐらいならやるのですが、ここまで自動化・最適化してるのはビックリ。

このパイプラインを真似するかはともかくとして、そのあとの取り組み方のところはすごく参考になります。すばやく baseline を作りつつ、予測結果の検証を繰り返しつつ、論文のサーベイも行いつつ改善を行っていく。とってもストイック。丁度転職活動期間だったとはいえ一体一日何時間 kaggle やってたんだろうか...

この姿勢、本当に見習いたいです。この発表を聞けたのは個人的に非常に有益でした。

余談:氏からのありがたいお言葉

「学習回してる間暇だとか言って Twitter をしないこと。」

"まさにこれ" とかしたり顔で言ってますけど結構 Twitter してます、すみません。

Twitter精神安定剤なところあるので許して欲しい。毒にもなりますが...

Quora Insincere Questions 10th Place Solution & 昔話 (tks さん)

資料: SlideShare

Openinig Talk で言われていた「謎に満ちた Kaggler の実態に迫る」が最も実現されていた発表。まず獲得しているメダルの数(金: 6, 銀: 25, 銅: 10)にビビる。

純粋な趣味 kaggler でありながらキャッチアップ能力の高さ、シンプルなモデルで勝つ強さ、Trust CV for three years など歴戦の戦士という感じで、見習う部分が沢山あります。

精神力というかもうなんというかすごい(語彙力皆無)。

個人的に特に参考になったのは Local CV のやり方で、いっつもこんなにキッチリやってないので勉強になりました(大体 5 Fold で切ってそのまま最後まで行く)。丁寧な CV をするからこその Trust CV の体現者だなあと感じます。

後半の kaggle 今昔話もとても面白かったです。流石に 1 dollar for 1 submit はキツいのでやめて頂きたいですが笑

PLAsTiCC 3rd Place Solution (nyanp さん from MajorTom)

資料: Speaker Deck

超新星などの天体の検出・分類という背景を聞くだけでワクワクするコンペ。スライドの表紙かっこいい。
このコンペの後半あたりから Twitter 上で kaggler をフォローし始めていたのですが参加者が楽しそうにしていた印象があり、楽しかったと懐かしむコメントが発表中にも見られました。

train : test = 8,000 : 350,000 でしかも test data にしか存在しない class が存在するという中々特殊なデータセットだったそうですが、ちゃんとコンペの背景から設計された問題設定として納得感があり、そういう意味でも良いコンペだったんだろうなあと感じます。

チームマージのときの話は本当に面白くて、常人だったらめっちゃ混乱するだろうなと思いました。そのチームできっちり貢献していけるの流石としか。

やっぱり 80,000 特徴量が言葉としてつよい。"インスタンス牧場の経営(最終的に60頭)"をすることで"ぜんぶやる"というところも印象深すぎる部分。

Adversarial Pseudo Labeling とかも参考になったのですが、少量 training data での Ordered Boosting の有効性や、GBDT に関するまます先生の考察(以下) はかなり重要知見だと思います。

LT

スポンサーセッション(Seed57_cash さん)

資料: SlideShare

Kaggler 枠を作ってるとこが Kaggle Meetup のスポンサーするの良いなあと思いました。 Master 以上が少なくとも 15人居るってはっきり言って異常だと思います。(誉め言葉)

前も別のイベントでお話聞いたんですが、分析基盤、プロジェクトへのメンバーのアサイン・役割分担の仕方、結果の握り方など、かなりいい職場なんじゃないかなあと思います。 残念ながら Kaggler 枠はたくさんいるからか中途採用には消極的みたいですが、新卒採用はやってるそうです。

データ分析コンペのエンタメ化や "denaggle" など、今後が気になる keyword が出ていました。

Neural Network 素人なんだけど何とかご機嫌取りがしたい (Tawara)

資料: SlideShare

はい、僕がやったやつです。(よってこの part はやたら長いです。)

勢いで申し込む

meetup にどうしても参加したかった(後に奇跡が起きて滑り込みで参加確定するがこの時は知りもしない)かつちょうどネタがあったことから本発表が決まる前に勢いで申し込んだのですが、

発表が埋まっていくうちに「え、これ場違いでは...?」と焦りが募っていきました。

発表内容について

LT 申込時に実は案が3つあったのですが、

f:id:Tawara:20190718222815p:plain

相談の結果 3 になりました。NN 強い人たちってさも当然のように学習をうまくやるけど初心者としてはいっつも結構苦労するので、ここらへんの話を強い人に聞けるというよねと言うのが元々のモチベーションです。

結局ほとんど学習率の話しかできなかったせいでタイトル詐欺みたいになってしまいました。申し訳ない。

そんな発表でも意見を頂けて嬉しかったです。質問して頂いた方も発表後にコメントして頂いた方もありがとうございました!

僕の次の発表者の tamaki さんとも話していたのですが、NN の学習って結構個人個人が自分の成功体験に引っ張られてやり方を決めている部分があると思っていて、色んな人のやり方が共有されることでベストプラクティスに至れるといいなあと考えています。 今回の発表は強い人にとっては知ってる知識だった可能性が非常に高いのですが、「あ、そういうのもあるのね」と誰かに思ってもらえたのなら今回の LT をやった意味はあるのかなと。

で、結局 Optimizer と 学習率の scheduling ってどうするのが良いの?

Optimzer も Scheduling も好きなやつを一個決めて使うのがいいのかなと思っています。ただし scheduling は必須。資料の方の説明文に追記したのですが、takuoko さんや phalanx さんが Adam 固定って言ってるのはあくまで optimizer の話で、scheduling はしているようです (「Adam はそこまで優秀じゃない」とコメントを頂きました)。

参考情報として何人かの例を上げますと、

  • takuoko さん (PetFinder の資料より) : Adam + CLR (おそらく Cosine Learning Rate ? または Cyclical Learning Rate)
  • OsciiArt さん (LT のトリ): Adam + Cyclic Cosine Annealing LR ( + Snapshot Ensemble)
  • Smly さん : Adam + Cosine Annealing LR (聞いた感じではおそらく 1 cycle のみ)

といった感じ。僕も Cosine Annealing 派なのでちょっと嬉しい。

最適化に関してよく発信してらっしゃるニューヨーカーGOTO さんが感想で「Adam一強が衝撃だった」とおっしゃっていますが、Adam の方が収束が速くて実験を多く回せるから使う人が多いのかなというのが個人的感想。

何となくゆっくり長く回すと SGD の方が(ちょっと)良い性能が出そうですが、そこを極めるよりも validation の切り方とかモデル・Loss の設計とかやることが沢山あるよねってことなんじゃないかなと思います。GBDTのハイパラ調整は最後にやるけど、それよりも特徴量エンジニアリングの方がはるかに効くという話にお気持ち的には近い気がする。

次のコンペは LR-Range Test => Adam + Cosine Annealing で効率的に実験・検証を回すのを試そうかなと考え中。何だかんだ発表した僕が一番得をしたと思います。

余談: GBDT 系で学習率を scheduling するのはどうだろうか?

最近 まますさんが Tweet されてたんですが、

次の日に検証記事が上がりました。すごい!

blog.amedama.jp

今回はお試しとして 10 ラウンドごとに学習率を下限の 0.01 まで半減させ続けるという単純な戦略を記述してみた。 もちろん、これがベストというわけではなくて、あくまでサンプルとして書いてみたに過ぎない。

お試しではありますが、誤差が一番下がった時を比較すると (lr : 0.01, round : 196) < (lr : dynamic, round : 74) < (lr : 0.1, round: 18) と直感に合った結果になったみたいです。

kagglerのためのAllenNLPチュートリアル (tamakiさん)

資料: Speaker Deck

ハイコンテキスト過ぎる例から始まる LT 笑

巷で良い噂の AllenNLP に関する 話。Guide とか Tutorial が TL に流れてくるので名前だけ知ってました。

towardsdatascience.com

allennlp.org

高度な抽象化ときれいな分割によってめちゃくちゃ簡単にベースラインが作れるようになっていて、json 書くだけで出来るのは本当に便利です。

未だ画像コンペばっかり出てますが、次に(つまり初めての)NLPコンペに出るときは是非コードを参考にさせて頂きたいと思ってます。つまり pytorch も使えるようになるな... 高速に Baseline 構築できるのは kaggler に必須な能力なので習得したいですね。

ただ、テキストに特化して抽象化しまくってるために不都合もあるらしい?ひとまず試してみてから考えようと思います。

Freesound Audio Tagging 2019 4th Place Solution (OUMed のお二人)

資料: Slide Share

結果をチラ見せしたと思いきや順位確定が伸びに伸びた FreeSound の 4th Solution。
参加はしていなかったのですが OUMed チームは早い段階から上位に居たと思います。定期的にDIO様画像 Tweet が流れて来たのでとても印象に残っている笑

「音である」という観点から、特徴量作成(log-melspectrogram) や augmentation の適用の仕方に工夫が行われていました。もちろん kaggler なので"ぜんぶやる"。

noisy data の扱い方として Multi-Task Learning や Soft Pseudo-Label を行うのは参考になります。 何かのコンペで使いたい。

ハンドラベリングはダメだろって思うのですが、公式が認めちゃったのかあ...。

「Pseudo Labeling の定義がわからなくなってきた」みたいな話題が TL でもありましたが、そこに触れてくれていたのもありがたかったです。

飛び入りLT

Large-scale Landmark Retrieval / Recognition under a Noisy and Diverse Dataset (smlyさん)

当日の資料: 未公開?
関連資料(CVPR2019WSでの発表スライド): Retrieval, Recognition

single model で bestfitting 氏に勝ったというだけでもうつよい。

smly さん:「アンサンブルしないと勝てないというのは甘え」

特にデータセットを去年(2018)のデータを使って綺麗にするのがめちゃくちゃ重要だったそう。美術館という"Landmark" がラベルなのに館内の美術品の写真だったりするのは中々ひどい。
僕は yu4u さんの記事で ArcFace を知った口ですが、学習が短期間で済むというところでもかなり有効な模様(それでもデータが大きすぎるせいで V100 で丸一日かかったらしいですが)。

qiita.com

"画像検索で大切な二つのこと" は覚えておいてどこかで使いたい。

Santander Customer Transaction Prediction 2nd place solution (onoderaさん)

資料: 多分未公開

何故かマネージャーストップが入り、発表するためにパーカーを着用。

何が始まるんだろうと思ったらこれでした。

改めて聞くと本当にわけがわからないコンペだったなと思います。 チームマージが劇的な効果を生み出す場合もあるよという発表でした。

実際はコメントとかしてるとは思うんですが、発表だけ聴くと途中からゼルダずっとやってて気づいたらチームメイトが金圏に持って行っていたという風にしか聞こえない笑

dena.ai

コメントの感情値が0なのも本当に笑ってしまう。

あ、僕もゼルダの新作買う予定です。

おわりに

本当はさらっと書くはずだったのですが、毎度のごとく今回もめっちゃ長くなってしまいました。なんでいっつもこうなんだろう...

皆さんの発表資料を読み返すと本当に知見の塊です!詳細を徐々に忘れていっちゃうとは思うんですが、何かあったときに引き出せるぐらいには覚えておきたい。

こんな知見を無料で浴びれる機会は中々無いので次回もぜひ参加したいです。もちろん金メダル獲得確定枠を狙って頑張ります!

めっちゃ長い感想文でしたが、読んで頂きありがとうございました。