感想文:今更ながら Kaggle Tokyo Meetup #6 を振り返る
お前3連休の残り何しとってん?って話ですが、今更ながら Kaggle Tokyo Meetup 参加した一口感想を資料を振り返りながら書こうと思います。あと LT させて頂いた感想とか。
本当は meetup の次の日くらいに公開するはずだったんですが、どうしてこうなった...
参加直後の電車の中 → 帰宅後。
今日中むりな気がしてきた。眠い...
— 俵 (@tawatawara) July 13, 2019
そして時が経ち...
.
.
.
感想文ポエムを書くといってから気づけば3日が経過している
— 俵 (@tawatawara) July 16, 2019
流石にまずいと思ったので書き始めた、はずだったが...
.
.
.
昨日は途中で prime day に流されてしまったが、今日こそ終わらそう
— 俵 (@tawatawara) July 17, 2019
これ今日の夜になりそうだな...。あまり無理は出来ないし寝よう
— 俵 (@tawatawara) July 17, 2019
はい。結局木曜(7/18)深夜までずれこみました。
各発表の詳細についてはえじさんの以下の記事がめちゃくちゃまとまってるので是非ご覧ください! (この感想文も 発表資料 + えじさんの記事 を見返しながら書いています。)
発表終わる度に kaggler-ja slack に上げてくれてたので「神かよ..」って思ってました。
また、抽選から溢れてしまった有志によって密かに同時開催された kaggle tokyo 裏 meetup #1 については mocobt さんがまとめ記事を書かれています。こちらも面白いので是非!
というわけでここからが感想文となりますが、全体への感想と各発表に対する感想をだらだらと書いてます。暇つぶしにどうぞ。
参加してた方は「そういえばこんなイベントだったな..」と懐かしめるかも。
全体に対する感想
一つ目に印象に残ってることとして「kaggler は全部やる」と言われるように、やはり上位陣はやることやってるということ(それはそう)。圧倒的試行不足を実感させられます。
そしてもう一つ今回の発表(特に phalanx さんの発表)を聞いて印象に残ったのは、何がうまく行っていて何がうまく行っていないのかコンペ期間中に都度都度きちんと検証しているということ。
これって当たり前のことではあるのですが、ついつい CV とか Public の score だけで判断してしまいがちで、深堀りしてないなと改めて自覚しました。何かしながら別のことが出来るほど器用では無いので、明示的にモデルの性能を色んな面で検証する(予測結果と照らし合わせてEDAするみたいな)日を作るのも良いのかなと思ったり。
前回(#5)より前提知識なども付いたことでよりためになる会となったのですが、同時に足りない部分もまだまだあるとわかった会でした。こういう刺激を受けて強くなっていきたいです。
本発表
Opening Talk (threecourse さん)
資料:Speaker Deck
もう忘却の彼方に消えつつあるネタですが、会場が会場なので「元気な挨拶」からスタート。
元気な挨拶から始まった!w#kaggle_tokyo
— ML_Bear (@MLBear2) July 13, 2019
「恐れずにアウトプットしていきましょう」という言葉が本当にありがたかったです...。おかげで大分 LT する前に大分気が楽になりました。
LT枠を一つ埋めてまでする発表だったかと問われるとつらいですが...
Petfinder 2nd Place Solution (Wodori の皆さん※副業で一名欠席)
資料:Speaker Deck
泥臭い前処理の部分であるとか、多様なモデルを作る部分であるとか、チームとしてうまく分担することで綺麗に回っていたという印象を受けました。
Wodoriは、本当にチームメンバーの得意分野とか分担が良い感じだったと思ってる #kaggle_tokyo
— u++ (@upura0) July 13, 2019
中国に旅立っている間にモデルが強奪されるとかいうイベントもあったらしいですが、人のモデル奪って改造して性能上げれるのもすごいし返って来たやつをちゃんと stacking で仕上げれるのもすごい。各個人のpart で全員が熱く語れるくらいそれぞれが色んな試行を行っていて、チームとしてだけでなく個人としての能力の高さも感じさせます。
また (過去コンペ含めて) 様々なカーネルの知見をうまく利用していて、いかにも kaggler という感じがしました。
Pet Finder は、kernel も結構利用していたみたいですね。調査をしっかりすることで、良い成績をとることができる可能性を感じます。#kaggle_tokyo
— HoxoMaxwell! (@Maxwell_110) July 13, 2019
個人的に興味深かったのは stacking の際に fold 毎の差を吸収するために rank 変換したところと、kaerururu さんが捨てて kernel で公開した特徴が gege さんのモデルで役に立っていたところ。情けは人の為ならず。
情けは人の為ならずを地で行っている (効かないけど公開した kernel の情報を後から合流した teammate が使って効いた) #kaggle_tokyo
— 俵 (@tawatawara) July 13, 2019
最後の入賞後の展開についても、今まで「ビデオ通話するらしい」ぐらいしか知識が無かったのでで興味深かったです。 †ultimate model† のネーミングはちょっと笑う。
余談:副業で居ないはずの方が TL に浮上
wodoriです(構って) #kaggle_tokyo
— takuoko (@takuoko1) July 13, 2019
takuokoさんは副業で今日はサボりとのこと。#kaggle_tokyo
— HoxoMaxwell! (@Maxwell_110) July 13, 2019
takuokoさんは今日副業でいないからなぁ〜#kaggle_tokyo
— Yiemon773 (@yiemon773) July 13, 2019
takuoko さんは副業でサボりというツイートを favo る @takuoko1 さん。#kaggle_tokyo
— HoxoMaxwell! (@Maxwell_110) July 13, 2019
前処理は、embedding でなるべく多くの単語をvector化することと、 bow系でもなるべく意味グループをまとめられるよう工夫しました!#kaggle_tokyo
— takuoko (@takuoko1) July 13, 2019
なんかモデル奪ったことになってるけど、ynktkさんが中国楽しんでる間、改善勧めてあげてただけですよ!🙃 #kaggle_tokyo
— takuoko (@takuoko1) July 13, 2019
居ないはずの takuoko さんが Tweet にめっちゃいいねする上に発表の補足 Tweet までしてくれるので本当に副業に行ってるのか疑惑が立つくらいでした。
今、みんなが問題解いてるので、、、 #kaggle_tokyo
— takuoko (@takuoko1) July 13, 2019
だったらしいです。
泣きながらやってた副業done
— takuoko (@takuoko1) July 13, 2019
meetup行きたい #kaggle_tokyo
お疲れ様です。
iMet 7th Place Solution & 画像コンペのアプローチ (phalanx さん)
資料: Speaker Deck
このコンペは僕も二ヶ月間頑張っていたのですが結果的にドボンしたため、発表聴いてて色々思い出深かったです。 model や stacking の仕方といった解法のメインの部分は先に Tweet されていたので、loss とか Grad-CAM による可視化、蒸留をずっと試していた(けどダメだった)という部分が目新しい情報でした。
ラベルが noisy ではあったものの、おっしゃっていたようにコンペとしてはシンプルで取り組みやすい部類でしたし二か月間楽しかったです。そう、終了三日前ぐらいまでは平和だった...。
X5(現象) #kaggle_tokyo
— 俵 (@tawatawara) July 13, 2019
private sharing はダメ、ゼッタイ。ホント kaggle の価値が下がるだけなんだよなあ。
これ関連で kerneler コンペの discussion にコメントしたがために参加する羽目になったりしました(宝くじ当たるとは思いもしませんでしたが...)。
X5の話は置いとくとして、衝撃的だったのは後半の画像コンペへの取り組み方の部分。何と言っても以下のパイプラインが会場をざわつかせます。
autophalanxが求められています. #kaggle_tokyo
— gege (@gegegegegege) July 13, 2019
AutoML だ・・・
— かえるるる | krrr (@kaeru_nantoka) July 13, 2019
#kaggle_tokyo
autophalanx やべえ#kaggle_tokyo
— u++ (@upura0) July 13, 2019
autoML作ってるような感じだった・・・ #kaggle_tokyo
— こうきょ (@hiding_koukyo) July 13, 2019
yml 書き換えるだけで出来るような体制すげえ #kaggle_tokyo
— 俵 (@tawatawara) July 13, 2019
json で実験管理ぐらいならやるのですが、ここまで自動化・最適化してるのはビックリ。
このパイプラインを真似するかはともかくとして、そのあとの取り組み方のところはすごく参考になります。すばやく baseline を作りつつ、予測結果の検証を繰り返しつつ、論文のサーベイも行いつつ改善を行っていく。とってもストイック。丁度転職活動期間だったとはいえ一体一日何時間 kaggle やってたんだろうか...
この姿勢、本当に見習いたいです。この発表を聞けたのは個人的に非常に有益でした。
余談:氏からのありがたいお言葉
「学習回してる間暇だとか言って Twitter をしないこと。」
学習回して暇だと言ってTwitterをやらない #kaggle_tokyo
— うら たつ (@d1348k) July 13, 2019
画像コンペの学習中はtwitterをするのではなくEDAや論文surveyをしましょう。#kaggle_tokyo
— Miyatti (@y4tk38) July 13, 2019
勝ちたければ「学習中にツイッターをするな」 笑笑 #kaggle_tokyo
— pocket (@actu3) July 13, 2019
「Twitter せずに論文を読め」 まさにこれ #kaggle_tokyo
— 俵 (@tawatawara) July 13, 2019
"まさにこれ" とかしたり顔で言ってますけど結構 Twitter してます、すみません。
twitterはモチベーションなので許して #kaggle_tokyo
— あきやま (@ak_iyama) July 13, 2019
Twitter は精神安定剤なところあるので許して欲しい。毒にもなりますが...
Quora Insincere Questions 10th Place Solution & 昔話 (tks さん)
資料: SlideShare
Openinig Talk で言われていた「謎に満ちた Kaggler の実態に迫る」が最も実現されていた発表。まず獲得しているメダルの数(金: 6, 銀: 25, 銅: 10)にビビる。
純粋に趣味で solo gold 6枚やばすぎる。#kaggle_tokyo
— ゆ。 (@Mars__yuki) July 13, 2019
純粋な趣味 kaggler でありながらキャッチアップ能力の高さ、シンプルなモデルで勝つ強さ、Trust CV for three years など歴戦の戦士という感じで、見習う部分が沢山あります。
gold を取るのに LeaderBoard は見なくて良い #kaggle_tokyo
— 俵 (@tawatawara) July 13, 2019
public LBなど不要 #kaggle_tokyo
— キャッシュ (@Seed57_cash) July 13, 2019
tksさん全くLB見ないらしい。だいたいのコンペは一桁Submit。#kaggle_tokyo
— ML_Bear (@MLBear2) July 13, 2019
精神力というかもうなんというかすごい(語彙力皆無)。
個人的に特に参考になったのは Local CV のやり方で、いっつもこんなにキッチリやってないので勉強になりました(大体 5 Fold で切ってそのまま最後まで行く)。丁寧な CV をするからこその Trust CV の体現者だなあと感じます。
後半の kaggle 今昔話もとても面白かったです。流石に 1 dollar for 1 submit はキツいのでやめて頂きたいですが笑
PLAsTiCC 3rd Place Solution (nyanp さん from MajorTom)
資料: Speaker Deck
超新星などの天体の検出・分類という背景を聞くだけでワクワクするコンペ。スライドの表紙かっこいい。
このコンペの後半あたりから Twitter 上で kaggler をフォローし始めていたのですが参加者が楽しそうにしていた印象があり、楽しかったと懐かしむコメントが発表中にも見られました。
PLAsTiCCほんと楽しかったなあ #kaggle_tokyo
— ishikei (@ishikei4) July 13, 2019
plasticc楽しかったなぁ(定期) #kaggle_tokyo
— あきやま (@ak_iyama) July 13, 2019
plasticcやっぱ楽しかったよなぁ #kaggle_tokyo
— うら たつ (@d1348k) July 13, 2019
train : test = 8,000 : 350,000 でしかも test data にしか存在しない class が存在するという中々特殊なデータセットだったそうですが、ちゃんとコンペの背景から設計された問題設定として納得感があり、そういう意味でも良いコンペだったんだろうなあと感じます。
チームマージのときの話は本当に面白くて、常人だったらめっちゃ混乱するだろうなと思いました。そのチームできっちり貢献していけるの流石としか。
「特徴量を80000個作ったKaggle Contributor」と「特徴量を1つも作らずに高スコア叩き出すKaggle Contributor」のチーム#kaggle_tokyo
— Miyatti (@y4tk38) July 13, 2019
チーム内の役割分担が上手く分散していて良かった。
— Miyatti (@y4tk38) July 13, 2019
「モデリング重視」
「80000特徴量」
「ドメイン知識」
なのでアンサンブルの利得が高かった。#kaggle_tokyo
やっぱり 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 してみたいネタがいくつかあるんだけど、参加権得るためにやるみたいになると良くない気がしていて正直迷う。expert 以上になっていれば... #kaggle_tokyohttps://t.co/XCWIpVXvAP
— 俵 (@tawatawara) June 15, 2019
発表が埋まっていくうちに「え、これ場違いでは...?」と焦りが募っていきました。
LTもっと小ネタ枠が増えると思ったのにこれで全体スケジュール Fix マジ? この錚々たる並びの中で話さないといけないのやばい。
— 俵 (@tawatawara) June 30, 2019
なぜ勢いでLTを申し込んでしまったのか...https://t.co/CEi21cF3M8
前回もっとLT気楽な感じじゃなかったっけって見に行ったら初手がL(ightGBMのHeavyな)T(alk) だった。そういえばそうだった😇
— 俵 (@tawatawara) June 30, 2019
発表内容について
LT 申込時に実は案が3つあったのですが、
相談の結果 3 になりました。NN 強い人たちってさも当然のように学習をうまくやるけど初心者としてはいっつも結構苦労するので、ここらへんの話を強い人に聞けるというよねと言うのが元々のモチベーションです。
結局ほとんど学習率の話しかできなかったせいでタイトル詐欺みたいになってしまいました。申し訳ない。
すみません、もちろんモデルやロスなどの設計そのものがタスクに合ってなかったりすると...😵
— 俵 (@tawatawara) July 13, 2019
合ってる場合でも学習率とかちゃんと調整してあげないとうまくいかんよねというお気持ちです
そんな発表でも意見を頂けて嬉しかったです。質問して頂いた方も発表後にコメントして頂いた方もありがとうございました!
僕の次の発表者の 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 されてたんですが、
validation scoreをモニタリングして、lr=0.1で限界に達したらlr=0.01に下げる、みたいなことやったら面白い気がする。誰かcallback使って実装して欲しい https://t.co/iaG6rNo1t5
— まます (@mamas16k) July 17, 2019
次の日に検証記事が上がりました。すごい!
ツイートした次の日に検証されてて笑った。凄い・・・
— まます (@mamas16k) July 18, 2019
今回はお試しとして 10 ラウンドごとに学習率を下限の 0.01 まで半減させ続けるという単純な戦略を記述してみた。 もちろん、これがベストというわけではなくて、あくまでサンプルとして書いてみたに過ぎない。
お試しではありますが、誤差が一番下がった時を比較すると (lr : 0.01, round : 196) < (lr : dynamic, round : 74) < (lr : 0.1, round: 18) と直感に合った結果になったみたいです。
kagglerのためのAllenNLPチュートリアル (tamakiさん)
資料: Speaker Deck
ハイコンテキスト過ぎる例から始まる LT 笑
ボーダーコリーは賢い! #kaggle_tokyo
— copasta (@copasta_) July 13, 2019
「ボーダーコリーは賢い」は有害文章?#kaggle_tokyo
— Miyatti (@y4tk38) July 13, 2019
巷で良い噂の AllenNLP に関する 話。Guide とか Tutorial が TL に流れてくるので名前だけ知ってました。
高度な抽象化ときれいな分割によってめちゃくちゃ簡単にベースラインが作れるようになっていて、json 書くだけで出来るのは本当に便利です。
未だ画像コンペばっかり出てますが、次に(つまり初めての)NLPコンペに出るときは是非コードを参考にさせて頂きたいと思ってます。つまり pytorch も使えるようになるな... 高速に Baseline 構築できるのは kaggler に必須な能力なので習得したいですね。
ただ、テキストに特化して抽象化しまくってるために不都合もあるらしい?ひとまず試してみてから考えようと思います。
最近allennlp触ってたけどとても勉強になった!テキストだけが入力のときは強いんですけど、kaggleみたいにそれ以外の特徴を入れてfowardするときがちょっと格好悪くなるのが難しいんですよね。 / kagglerのためのAllenNLPチュートリアル - Speaker Deck https://t.co/w7XN0ZfEhl
— しゅんけー (@shunk031) July 14, 2019
Freesound Audio Tagging 2019 4th Place Solution (OUMed のお二人)
資料: Slide Share
結果をチラ見せしたと思いきや順位確定が伸びに伸びた FreeSound の 4th Solution。
参加はしていなかったのですが OUMed チームは早い段階から上位に居たと思います。定期的にDIO様画像 Tweet が流れて来たのでとても印象に残っている笑
Freesound pic.twitter.com/t4tTeY30jG
— OsciiArt◆SPNEXTcRxQ (@osciiart) May 21, 2019
Freesound pic.twitter.com/psXTgmPPbI
— OsciiArt◆SPNEXTcRxQ (@osciiart) May 25, 2019
Freesound pic.twitter.com/98dEzrXFx9
— OsciiArt◆SPNEXTcRxQ (@osciiart) May 28, 2019
Freesound pic.twitter.com/Kay8KhdbdK
— OsciiArt◆SPNEXTcRxQ (@osciiart) June 8, 2019
「音である」という観点から、特徴量作成(log-melspectrogram) や augmentation の適用の仕方に工夫が行われていました。もちろん kaggler なので"ぜんぶやる"。
kaggler なので全部(音特徴も波形も)やる #kaggle_tokyo
— 俵 (@tawatawara) July 13, 2019
noisy data の扱い方として Multi-Task Learning や Soft Pseudo-Label を行うのは参考になります。 何かのコンペで使いたい。
ハンドラベリングはダメだろって思うのですが、公式が認めちゃったのかあ...。
「Pseudo Labeling の定義がわからなくなってきた」みたいな話題が TL でもありましたが、そこに触れてくれていたのもありがたかったです。
pseudo labelingのちゃんとした手法集だれかに出してほしい #kaggle_tokyo
— threecourse (@threecourse) July 13, 2019
飛び入り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 で丸一日かかったらしいですが)。
#kaggle_tokyo smlyさんのLTで質問したらArcFaceは当然知ってる前提の回答が来て、気を抜いたら殺られる感じだった(yu4uさんの解説記事は読んでたので耐えた
— OsciiArt◆SPNEXTcRxQ (@osciiart) July 14, 2019
"画像検索で大切な二つのこと" は覚えておいてどこかで使いたい。
Santander Customer Transaction Prediction 2nd place solution (onoderaさん)
資料: 多分未公開
※何故かマネージャーストップが入り、発表するためにパーカーを着用。
何が始まるんだろうと思ったらこれでした。
Tシャツの販促が始まる? #kaggle_tokyo
— 俵 (@tawatawara) July 13, 2019
サンタンデールの発表やんけ! #kaggle_tokyo
— 俵 (@tawatawara) July 13, 2019
改めて聞くと本当にわけがわからないコンペだったなと思います。 チームマージが劇的な効果を生み出す場合もあるよという発表でした。
実際はコメントとかしてるとは思うんですが、発表だけ聴くと途中からゼルダずっとやってて気づいたらチームメイトが金圏に持って行っていたという風にしか聞こえない笑
コメントの感情値が0なのも本当に笑ってしまう。
あ、僕もゼルダの新作買う予定です。
おわりに
本当はさらっと書くはずだったのですが、毎度のごとく今回もめっちゃ長くなってしまいました。なんでいっつもこうなんだろう...
皆さんの発表資料を読み返すと本当に知見の塊です!詳細を徐々に忘れていっちゃうとは思うんですが、何かあったときに引き出せるぐらいには覚えておきたい。
こんな知見を無料で浴びれる機会は中々無いので次回もぜひ参加したいです。もちろん金メダル獲得確定枠を狙って頑張ります!
めっちゃ長い感想文でしたが、読んで頂きありがとうございました。