こんばんは ! 情報工学系 B3 の @abap34 です。Kaggle 班の班長をしています。最近は、財布を落として教務課の人に怒られました。
さて、梅雨ですね。。。梅雨といえば機械学習です ! Kaggle班では、新入生教育・部内イベントの一環として、
- 機械学習講習会
- 部内データ分析コンペ (traP competition #00)
を開催しました。
本ブログはその開催記録です。昨今のKaggle班の情勢、そして講習会、コンペ運営について書いていきます。
Kaggle班とは?
この記事は、Kaggle班が今年度に出す最初のブログなので、まず簡単に Kaggle班の紹介をしたいと思います。
Kaggle班は、きちんと書くと「Kaggleをはじめとしたデータ分析コンペなどの参加を見据えつつ、機械学習について部員同士で学び、知識を深める」ということを目的とした組織です。
...簡単にいえば、数学やプログラムを書くことが好きな人が集まって機械学習を勉強している集団です。このブログが投稿されるサイトである https://trap.jp/ を見ればわかるとおり、東京工業大学デジタル創作同好会 traP に所属しています。そのため、Webやアルゴリズムなどに関する知識・ 興味がある人が多いのも特徴です。
Kaggleに限らず、機械学習について面白い話ができる組織であって欲しいなというのがなんとなくの目標です。
さて、この Kaggle班は 2024年度に新設されたもので、いわば全員が新入部員状態です。それでなくとも、大学に入りたての学部一年生で機械学習の知識を持っている部員はほとんどいません。
そこで、Kaggle班では「機械学習講習会」というイベントを企画し、新入生がスムーズに活動を始められるようにしました。ここからは、その「機械学習講習会」について紹介したいと思います。
機械学習講習会
... の目標と内容
機械学習をはじめて学びたい ! というたくさんの学部一年生を目の前にしてどうするのか─ 最も簡単なのは適切な入門書などを紹介して、読んで ! と言ってしまうことかと思います。
ですが、ことこのサークルに限ると、やや特殊な事情もあります。
機械学習講習会のメインのターゲット層は、サークルに入りたての学部一年生です。ここで、東工大の学部一年生が抱えている特別な事情として以下のようなものがあります。
- 1Q で線形代数第一という講義を履修しているため、行列積などはわかる
- 2Q で微分積分第一をまさに履修中なので、偏微分などはできない
これはなかなか特殊な状況です。また、大学に入ってからプログラミングを始めた人もいて、まだプログラムを書くのに慣れていない人も多いという事実もあります。
また、目標もすこし特殊です。運営の願いとしては、データ分析コンペという競技を楽しんでくれるメンバーが増えて欲しいので、なるべく早く「1 Sub」(最初の投稿) まで到達してほしいと思っています。
ですが、ふつうに (?) 勉強していたら少なくとも半年くらいはかかりそうです。拘束力があるわけではない大学のサークルですから、それでは全員蒸発してしまい、解散待ったなしです。
そのため、現状と目標の特殊性を鑑みて、独自に資料やコンテンツを整備すること、そして短期で一気にやることを決めました。
まず 450ページほどのスライドを作り、講義の準備を整えます。
中身を見てみると、
6/24 | 学習 |
6/25 | 勾配降下法 |
6/28 | 自動微分とPyTorch |
7/01 | ニューラルネットワークの構造 |
7/03 | ニューラルネットワークの学習と評価 |
7/10 | ニューラルネットワークの実装 |
7/17 | 機械学習の応用、データ分析コンペ |
という感じの日程と構成です。
線形回帰から始めて、ニューラルネットワークまでひとっ飛びで行くなかなかのスピード感のある展開です。
後半を見てみると、ニューラルネットワークにかなり偏重しているのがよくわかると思います。この講習会が何を目標としているのか、というのは資料の「まえがき」(https://abap34.github.io/ml-lecture/supplement/preface.html) にいくらか書いたのですが、
この講習会は機械学習の洞窟を全て探検することを目指しているのではなく、一旦ガイド付きで洞窟の最深部まで一気に駆け抜けることで二回目以降の探検をしやすくすることを目指しています。(まえがきより)
というコンセプトで資料が作成されています。
短期間で機械学習を網羅的にやろうとしても、おそらく全てがよく分からないまま終わってしまいます。今回は、一旦狭いものをきちんとめにやることで機械学習の基本的なアイデアを理解してもらい、またコンペに一応参加できるところまで行くところを目指す、という方針を採用しました。
なお、全ての資料は
で公開中です ! ぜひ読んでみてください。
資料ではなるべく平易に解説しつつ、多くの人には意味不明な可能性が高いけど面白い、という話を少しだけ入れています。「なるほど、よくわからないけどなんか面白い世界が続いてるんだな」と思って欲しいからです。
各回について、説明の仕方や議論の進め方、こだわりがたくさんあります。ですがここに全て書くと、この記事の予想読了時間が大変なことになってしまうので、やめておきます。
…のコンペティション
さて、このような講義でありがちなのが「最後にこのタスクを実際に解いてみましょう」という締め方です。知識の確認になりますし、楽しいので自分はこの手のやつが大好きです。そこで、今回の講習会でもすることにしました。さらに、 我々はKaggle班と名乗ってるわけですから、これを traP Competition #00 と名前をつけて、コンペ形式で開催することにしました。
個人的には、メンバーのみんなに仲良くなって欲しいのでチーム戦ということにします。1チーム3人です。
ついでに上位チームには商品もつけてしまいます。1位チームには焼肉食べ放題券を贈呈することにしましょう。今思い返すとこれを発表した時が講習会を通じて1番盛りあがった時がしますが、、、、ともかく講習会の最後にコンペをします !
さらに、せっかくなのでプラットフォームも独自に開発したものを使いました。結果や振り返りの前に、まずはこのプラットフォームを含む、この講習会を支えたソフトウェアたちを紹介します !
... を支えたソフトウェアたち
講義に必要なものといえばパッと思い浮かぶのはスライドです。今回の講習会のスライド作りは全て marp を使いましたが、git 管理できるのがとても便利で重宝しました。
さらに、この講習会ではスライドに加えていくつかの文章(例: Google Colaboratory の使い方) などを公開していたのですが、これらは独自に開発した Markdownパーサ・静的サイトジェネレータである almo を使いました。
このソフトウェアの特徴は、WebAssembly を使って実行環境を含む単一ページを生成できることです。これを使うことで、たとえば実際に動くサンプルコードを含む Pandas の解説ページ (https://abap34.github.io/ml-lecture/supplement/pandas.html) などが作れました。
さらに、昨年度の講習会で得たフィードバッグとして、「手を動かす機会がもう少し欲しかった」というものがありました。
各回で一応演習問題のようなものを用意していたのですが、単に自分で実装して「合ってそうだな…」で終わりでは確かにあまり手を動かした気持ちにならなさそうです。
そこで今年はオンラインジャッジを開発して、各回の内容やより発展的な内容についての演習問題を解けるサービスを提供しました。このサービスは順位表などもあるので問題を解くきっかけになります。
ほかにも、例えば講義へのコメントアプリなどもあります。これは、Openされているチャット欄にコメントすると、発表者のPCにニコニコ動画風に匿名のコメントが流れるというものです。新入生はまだ発言に慣れていないことが多いので、気軽に質問をできるようになってほしいという考えから作ったものです。画面が賑やかになるので喋りやすいというメリットもあります。
そして、今回おそらく最もアクセスされたサービスが、部内データ分析コンペ用のプラットフォーム、 DacQ です。
DacQ は Streamlit 製のデータ分析コンペプラットフォームです。
基本的なデータ分析コンペプラットフォームの機能 (データ配布、submit、Public / Private切り替え) に加えて、
- チーム戦可能
- Jupyter Notebookをアップロードすることでディスカッションを作成できる
などのあったら嬉しい機能もついています。
昨年度まで、部内のコンペは Kaggle の Community Competition を使って開催していました。ですが、
- ドタバタ間違い無しの部内コンペなので、もっと小回りが効くようにしたい
- 本当にしょうもないコンペをたくさん開催したい
と思っていたのもあって、これからお手軽にコンペができるよう開発しました。部内コンペということもあり、大量のデータを捌くこともないので、適宜パフォーマンスの改善をサボり、さらに Streamlit を使うことで基本的な機能は非常に素早く出来上がりました。
このプラットフォームは今後後輩に引き継いでいくことになるわけですが、Streamlit を使うことで Webの知識がなくても (pandas 芸人であれば) 読めるようになっているので、引き継ぎしやすくなっているのも嬉しいポイントです。今回のコンペもこのプラットフォームで開催しました。
そんなこんなで、
- Markdownパーサ
- オンラインジャッジ
- コメントアプリ
- コンペプラットフォーム
をウオーっと作り、万全の状態で始まった講習会だったのですが、まさかこの後こんなことになるとは………
…の開催振り返り
ここからは実際の振り返りパートです。
講義はとくに破滅的な出来事もなく(細かいミスはたくさんありましたが...) 、いよいよコンペの開催までやってきました。
コンペのお題としては、ネットワークの攻撃判定を選びました。KDD '99 などが有名なやつですね。流石にそのまま使うわけにもいかなかったので、KDD '99 の改良である NSL-KDD (https://www.unb.ca/cic/datasets/nsl.html) をベースに、テストデータを参照できないよういろいろと加工を加えて出題しました。期間は一週間です。
さて、コンペは、競技性が若干犠牲になっても楽しさとかを優先したかったため、サブミット数に制限をつけませんでした。
その結果、
1600件サブミットが飛んできました。
結果として、
- 38 チームが 1Sub 以上
- 合計で 1692 Sub
となりました。1チーム 3人ですから、1大学から114人がコンペに参加していることになります。(しかもほとんど学部生) はっきり言って、ギャグとかのレベルです。
...よく思い返してみると、
部内コンペということもあり、大量のデータを捌くこともないので、適宜パフォーマンスの改善をサボり
まずいです。
実際、最終盤では大量のサブミットログから順位表を表示するまで若干の遅れが発生するようになっていたらしいです。事前に手元で300件ほどの投稿データを入れて、気がつくほどの遅延がないことを確認していましたが、最終盤は明らかに 1秒近くかかっていました。衝撃です。
とはいえ心配していた最終盤での致命的な鯖落ちはなく、 (重くはあったらしいです... すいません) 無事にコンペは終了しました。
コンペの上位チームを見てみると
- B2 x B1 x B1 のチームが 1位
- B1 x B1 x B1 のチームが 2位
- M1 x M1 x M1 のチームが 3位
という結果でした ! どう考えても焼肉狙いのチームが乱入していますが、下級生を多く含むチームが上位に入賞しています ! すごい ! !
表彰式も行いました。多少の Shake があったこともあって順位発表は大盛り上がりでした。
優勝チームには記念ボードも贈呈しました ! Public / Private ともに上位をずっと保っていて素晴らしかったです。
@cp20 くん、 @ayana_it_08 さん、 @kaantookuu くん、おめでとうございます !
今後について
Kaggle班では、今後もコンペをたくさん開催し、またいろいろなコンペにメンバー同士で参加していく予定です。
さらに、データ分析コンペに限らず、機械学習・データ分析のアルゴリズム的な話・数学的な話・ソフトウェア的な(?) 話に興味がある人 (自分がまさにそうです !) に興味がある人にとっても楽しめる組織にしていこうと思っています。
また、来年度以降も機械学習講習会のような初学者の人向けのイベントを実施していく予定です。
もしこの記事を読んでいる高校生の方がいれば、ぜひ東工大 (入学する頃には科学大ですが) で一緒に計算機に勉強教えましょう !
おしらせ①
traP には、年間いつでも入部可能です。Kaggle班での活動に興味がある東工大・医科歯科大の学生の方はお気軽に traP公式Twitterなどにお問い合わせください !
おしらせ②
Kaggle班では、9~10月ごろにもう一度部内データ分析コンペを開催予定です。
そのための活動資金 (サーバ代, 書籍代, 賞品 など) を賄うため、コンペをスポンサードしてくれる企業様を探しています。もしご興味があれば、 @abap34 の DM までお気軽にご連絡ください。
以上です。