【Kaggle】 FB3を振り返る
Feedback Prize - English Language Learning
公立はこだて未来大学 Advent Calendar 2022,12月6日の記事です.
FB3こと,Feedback Prize - English Language Learningに参加したので振り返りとしてやらかしを記録していきます.
コンペ概要
FB3は英作文から点数を推論する回帰問題を解くコンペです.
訓練データが3,000ほどと非常に小さいのが特徴だと思います.
環境
ノートパソコンしか持っておらず,KaggleNoteBookのP100を使っていました.
やらかし1 出場時期
締め切り一ヶ月前に出場しました.これが非常に良くなかったです.KaggleNoteBookは週30時間しか使えないので,一ヶ月間で計150時間しかGPUを使えませんでした.一回あたりの実験で最低3時間,最高11時間は使うので試行回数を増やせません,ColabやAmazonSageMakerLabを使って試行回数を増やそうと思いましたが,小型モデル(Deberta-small)を使っても1エポック20分はかかるため戦力外でした.
やらかし2 フレームワークの選定
今回は高校から使っていたTensorFlowを選択しました.しかし,HuggingFaceのライブラリを使う上でこの選択は非常に良くなかったです.HuggingFaceではJax,PyTorch向けにGradient_checkpointingを提供していますが,TensorFlowではサポートされていません.Gradient_checkpointingを使うことで大型モデルでもGPUのメモリを節約し,OOMエラーを吐かずに学習できるのですが,TensorFlowを選んでしまったので中型のモデル(deberta-base)を扱った学習しかできませんでした.(Jaxが対応してるならTFも対応しろや)
やらかし3 Foldごとの分布を確かめなかった
MultilabelStratifiedKFoldをすべての正解データに対象にして,5Fold分割をしました.
正解データは連続値です.
しかし,MultilabelStratifiedKFoldはバイナリに対してはFoldごとの分布を均一に保ちますが実数データはその限りではありません.よって私を含めて多くの参加者が偏った分布をもつFoldを利用し,CVスコアを算出していました😇
PrivateLBと均一にしたあとのCVは,均一でなかったCVより大幅に近かったので,最大のやらかしです.
これがわかったのは,締切3日前のディスカッションへの投稿がきっかけです...CVとLBの乖離からもっと早くに気づくべきでした.MostVotesのCodeに対しても疑い分布を確認することが重要です.
やらかし4 PublicLBに過信する
LBはかなり序盤から好成績をとれていました.結果としてLBで好成績をとれたモデルの改良にこだわりすぎて,多様なモデルを作ることができませんでした.
CVは非常に悪かったのですが,LBに対しては好成績を収めていたため,このまま,好成績だったモデルのCVを改善する方針に決定し,モデルの改良を行いました.実際CVとPublicLBとの相関は取れていたのですが,PrivateLBを見ると全然でした.PrivateLBでは順位は1,000位近く落下し目も当てられません.
対して,PublicLB,CVの悪いモデルも含めて様々なモデルをアンサンブルした提出はPrivateLBで好成績を収めていました.
もっと多くのモデルを作成しアンサンブルするべきでした.
やらかし5 最終週にGPUを使い切る
最終週にGPUを使い切りました.私はGPUを使い切ったことがなかったのでわからなかったのですが,GPU利用時間が0になるとノートブックのGPUをオンにして提出することができません.これは知らなかったので驚きました.結果としてチームメンバーに提出をお願いせざる負えなくなり,最終日にチームメンバーが提出を忘れて実行が間に合わず本来なら60位を取れたはずが1000位になってしまいました.
これに関しては本当に絶望しました.
まとめ
これ以上は脳が破壊されそうなのでやめておきます.
しかし,今回のコンペは多くの学びがあったと思います(やらかしを含めて).レイヤごとに最適化関数を適応する方法や,Gradient_checkpointingについて,SAM,ASAM,Radam,LookingAHeadなどの多様な最適化関数,Mish,Swish,Geluなどの多様な活性化関数,知識の蒸留や,疑似ラベル,MeanPoolingやAttentionPoolingによるBertを使った回帰問題への推論.カーネル制限を利用したWeightedMean.勾配累積,LayerNormalization,etc...
これらはこれからのコンペに役立つと思います.
特にLayerNormalizationや勾配累積,Gradient_checkpointingは計算資源のない私にとってはありがたいテクニックです.
以上がFB3の振り返りです.
次回のコンペでは勝てるよう精進を続けます.
明日は三人も記事を投稿してくれるようです.楽しみですね.
Discussion