feature image

2024年7月27日 | 活動紹介

Kaggle班で機械学習講習会と部内データ分析コンペを開催しました!

こんばんは ! 情報工学系 B3 の @abap34 です。Kaggle 班の班長をしています。最近は、財布を落として教務課の人に怒られました。

さて、梅雨ですね。。。梅雨といえば機械学習です ! Kaggle班では、新入生教育・部内イベントの一環として、 

を開催しました。

本ブログはその開催記録です。昨今のKaggle班の情勢、そして講習会、コンペ運営について書いていきます。

Kaggle班とは?

この記事は、Kaggle班が今年度に出す最初のブログなので、まず簡単に Kaggle班の紹介をしたいと思います。

Kaggle班は、きちんと書くと「Kaggleをはじめとしたデータ分析コンペなどの参加を見据えつつ、機械学習について部員同士で学び、知識を深める」ということを目的とした組織です。

...簡単にいえば、数学やプログラムを書くことが好きな人が集まって機械学習を勉強している集団です。このブログが投稿されるサイトである https://trap.jp/ を見ればわかるとおり、東京工業大学デジタル創作同好会 traP に所属しています。そのため、Webやアルゴリズムなどに関する知識・ 興味がある人が多いのも特徴です。

Kaggleに限らず、機械学習について面白い話ができる組織であって欲しいなというのがなんとなくの目標です。

さて、この Kaggle班は 2024年度に新設されたもので、いわば全員が新入部員状態です。それでなくとも、大学に入りたての学部一年生で機械学習の知識を持っている部員はほとんどいません。

そこで、Kaggle班では「機械学習講習会」というイベントを企画し、新入生がスムーズに活動を始められるようにしました。ここからは、その「機械学習講習会」について紹介したいと思います。

現在、Kaggle班は150人以上が所属するかなりの大所帯です。

機械学習講習会

... の目標と内容

機械学習をはじめて学びたい ! というたくさんの学部一年生を目の前にしてどうするのか─ 最も簡単なのは適切な入門書などを紹介して、読んで ! と言ってしまうことかと思います。

ですが、ことこのサークルに限ると、やや特殊な事情もあります。

機械学習講習会のメインのターゲット層は、サークルに入りたての学部一年生です。ここで、東工大の学部一年生が抱えている特別な事情として以下のようなものがあります。

これはなかなか特殊な状況です。また、大学に入ってからプログラミングを始めた人もいて、まだプログラムを書くのに慣れていない人も多いという事実もあります。

また、目標もすこし特殊です。運営の願いとしては、データ分析コンペという競技を楽しんでくれるメンバーが増えて欲しいので、なるべく早く「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) にいくらか書いたのですが、

この講習会は機械学習の洞窟を全て探検することを目指しているのではなく、一旦ガイド付きで洞窟の最深部まで一気に駆け抜けることで二回目以降の探検をしやすくすることを目指しています。(まえがきより)

というコンセプトで資料が作成されています。

短期間で機械学習を網羅的にやろうとしても、おそらく全てがよく分からないまま終わってしまいます。今回は、一旦狭いものをきちんとめにやることで機械学習の基本的なアイデアを理解してもらい、またコンペに一応参加できるところまで行くところを目指す、という方針を採用しました。

なお、全ての資料は

GitHub - abap34/ml-lecture: 東京工業大学 traP Kaggle班「機械学習講習会」の資料です。
東京工業大学 traP Kaggle班「機械学習講習会」の資料です。. Contribute to abap34/ml-lecture development by creating an account on GitHub.
モチベーションになるので、もしいい資料だと思った場合は Star をつけていただけると嬉しいです!

で公開中です ! ぜひ読んでみてください。

資料ではなるべく平易に解説しつつ、多くの人には意味不明な可能性が高いけど面白い、という話を少しだけ入れています。「なるほど、よくわからないけどなんか面白い世界が続いてるんだな」と思って欲しいからです。

各回について、説明の仕方や議論の進め方、こだわりがたくさんあります。ですがここに全て書くと、この記事の予想読了時間が大変なことになってしまうので、やめておきます。

…のコンペティション

さて、このような講義でありがちなのが「最後にこのタスクを実際に解いてみましょう」という締め方です。知識の確認になりますし、楽しいので自分はこの手のやつが大好きです。そこで、今回の講習会でもすることにしました。さらに、 我々はKaggle班と名乗ってるわけですからこれを traP Competition #00 と名前をつけて、コンペ形式で開催することにしました。

個人的には、メンバーのみんなに仲良くなって欲しいのでチーム戦ということにします。1チーム3人です。

ついでに上位チームには商品もつけてしまいます。1位チームには焼肉食べ放題券を贈呈することにしましょう。今思い返すとこれを発表した時が講習会を通じて1番盛りあがった時がしますが、、、、ともかく講習会の最後にコンペをします !

さらに、せっかくなのでプラットフォームも独自に開発したものを使いました。結果や振り返りの前に、まずはこのプラットフォームを含む、この講習会を支えたソフトウェアたちを紹介します !

... を支えたソフトウェアたち

講義に必要なものといえばパッと思い浮かぶのはスライドです。今回の講習会のスライド作りは全て marp を使いましたが、git 管理できるのがとても便利で重宝しました。

育てている marp のテーマで作りました。数式とプログラムを大量に含むスライドを超高速で作る必要があったので、marp 以外でこのスライドを作るのは考えられないレベルです。

さらに、この講習会ではスライドに加えていくつかの文章(例: Google Colaboratory の使い方) などを公開していたのですが、これらは独自に開発した Markdownパーサ・静的サイトジェネレータである almo を使いました。

GitHub - abap34/almo: [⚠️ WIP] ALMOはC++製の拡張Markdownパーサ・静的サイトジェネレータです。ALMOは、WebAssemblyを使ってブラウザ上で完結する実行環境を提供し、サーバ無しでのサンプルコードの実行やジャッジシステムの構築を可能にします。
[⚠️ WIP] ALMOはC++製の拡張Markdownパーサ・静的サイトジェネレータです。ALMOは、WebAssemblyを使ってブラウザ上で完結する実行環境を提供し、サーバ無しでのサンプルコードの実行やジャッジシステムの構築を可能にします。 - abap34/almo
まだ WIP ですが、とても便利で個人的には自分の作ったものでもかなりお気に入りです!モチベーションになるのでぜひ st....

このソフトウェアの特徴は、WebAssembly を使って実行環境を含む単一ページを生成できることです。これを使うことで、たとえば実際に動くサンプルコードを含む Pandas の解説ページ (https://abap34.github.io/ml-lecture/supplement/pandas.html) などが作れました。

コードを編集・実行できるページが作れます。

さらに、昨年度の講習会で得たフィードバッグとして、「手を動かす機会がもう少し欲しかった」というものがありました。

各回で一応演習問題のようなものを用意していたのですが、単に自分で実装して「合ってそうだな…」で終わりでは確かにあまり手を動かした気持ちにならなさそうです。

そこで今年はオンラインジャッジを開発して、各回の内容やより発展的な内容についての演習問題を解けるサービスを提供しました。このサービスは順位表などもあるので問題を解くきっかけになります。

問題がたくさんあり、得点があります。スペシャルジャッジにも対応しています 💪
コードを書いて実行できます。PyTorch など基本的なライブラリの実行環境が用意されています。
AC!
問題を解くモチベーションになるよう、チーム順位表が用意されています。

ほかにも、例えば講義へのコメントアプリなどもあります。これは、Openされているチャット欄にコメントすると、発表者のPCにニコニコ動画風に匿名のコメントが流れるというものです。新入生はまだ発言に慣れていないことが多いので、気軽に質問をできるようになってほしいという考えから作ったものです。画面が賑やかになるので喋りやすいというメリットもあります。

コメントの様子

そして、今回おそらく最もアクセスされたサービスが、部内データ分析コンペ用のプラットフォーム、 DacQ です。

DacQ は Streamlit 製のデータ分析コンペプラットフォームです。

基本的なデータ分析コンペプラットフォームの機能 (データ配布、submit、Public / Private切り替え) に加えて、

などのあったら嬉しい機能もついています。

順位表
ディスカッション機能! Jupyter Notebook を投稿するとこのようなページができます。

昨年度まで、部内のコンペは Kaggle の Community Competition を使って開催していました。ですが、

  1. ドタバタ間違い無しの部内コンペなので、もっと小回りが効くようにしたい
  2. 本当にしょうもないコンペをたくさん開催したい

と思っていたのもあって、これからお手軽にコンペができるよう開発しました。部内コンペということもあり、大量のデータを捌くこともないので、適宜パフォーマンスの改善をサボり、さらに Streamlit を使うことで基本的な機能は非常に素早く出来上がりました。

このプラットフォームは今後後輩に引き継いでいくことになるわけですが、Streamlit を使うことで Webの知識がなくても (pandas 芸人であれば) 読めるようになっているので、引き継ぎしやすくなっているのも嬉しいポイントです。今回のコンペもこのプラットフォームで開催しました。

そんなこんなで、

  1. Markdownパーサ
  2. オンラインジャッジ
  3. コメントアプリ
  4. コンペプラットフォーム

をウオーっと作り、万全の状態で始まった講習会だったのですが、まさかこの後こんなことになるとは………

…の開催振り返り

ここからは実際の振り返りパートです。

講義はとくに破滅的な出来事もなく(細かいミスはたくさんありましたが...) 、いよいよコンペの開催までやってきました。

さる回の様子です。この写真に写っている人は全員Numpy の乱数シードを固定するコードを書いている最中です。冷静に考えると恐怖空間。

コンペのお題としては、ネットワークの攻撃判定を選びました。KDD '99 などが有名なやつですね。流石にそのまま使うわけにもいかなかったので、KDD '99 の改良である NSL-KDD (https://www.unb.ca/cic/datasets/nsl.html) をベースに、テストデータを参照できないよういろいろと加工を加えて出題しました。期間は一週間です。

さて、コンペは、競技性が若干犠牲になっても楽しさとかを優先したかったため、サブミット数に制限をつけませんでした。

その結果、

1600件サブミットが飛んできました。

結果として、

となりました。1チーム 3人ですから、1大学から114人がコンペに参加していることになります。(しかもほとんど学部生) はっきり言って、ギャグとかのレベルです。

...よく思い返してみると、

部内コンペということもあり、大量のデータを捌くこともないので、適宜パフォーマンスの改善をサボり

まずいです。

実際、最終盤では大量のサブミットログから順位表を表示するまで若干の遅れが発生するようになっていたらしいです。事前に手元で300件ほどの投稿データを入れて、気がつくほどの遅延がないことを確認していましたが、最終盤は明らかに 1秒近くかかっていました。衝撃です。

とはいえ心配していた最終盤での致命的な鯖落ちはなく、 (重くはあったらしいです... すいません) 無事にコンペは終了しました。

コンペの上位チームを見てみると

という結果でした ! どう考えても焼肉狙いのチームが乱入していますが、下級生を多く含むチームが上位に入賞しています ! すごい ! !

表彰式も行いました。多少の Shake があったこともあって順位発表は大盛り上がりでした。

わざわざ 1チームずつ発表できるツールを作って発表しました。大盛り上がり? 

優勝チームには記念ボードも贈呈しました ! Public / Private ともに上位をずっと保っていて素晴らしかったです。

@cp20 くん、 @ayana_it_08 さん、 @kaantookuu くん、おめでとうございます !

渾身の手書きボードです。生協で 730円で買いました。現在は行方不明です。

今後について

Kaggle班では、今後もコンペをたくさん開催し、またいろいろなコンペにメンバー同士で参加していく予定です。

さらに、データ分析コンペに限らず、機械学習・データ分析のアルゴリズム的な話・数学的な話・ソフトウェア的な(?) 話に興味がある人 (自分がまさにそうです !) に興味がある人にとっても楽しめる組織にしていこうと思っています。

また、来年度以降も機械学習講習会のような初学者の人向けのイベントを実施していく予定です。

もしこの記事を読んでいる高校生の方がいれば、ぜひ東工大 (入学する頃には科学大ですが) で一緒に計算機に勉強教えましょう !

おしらせ①

traP には、年間いつでも入部可能です。Kaggle班での活動に興味がある東工大・医科歯科大の学生の方はお気軽に traP公式Twitterなどにお問い合わせください !

おしらせ②

Kaggle班では、9~10月ごろにもう一度部内データ分析コンペを開催予定です。

そのための活動資金 (サーバ代, 書籍代, 賞品 など) を賄うため、コンペをスポンサードしてくれる企業様を探しています。もしご興味があれば、 @abap34 の DM までお気軽にご連絡ください。

以上です。

abap34 icon
この記事を書いた人
abap34

Rec ブースで all night long

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2017年11月14日
IBIS2017参加報告
Keijan icon Keijan
2022年4月7日
traPグラフィック班の活動紹介
annin icon annin
2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2021年5月19日
CPCTF2021を実現させたスコアサーバー
xxpoxx icon xxpoxx
2021年3月19日
traPグラフィック班の活動紹介
NABE icon NABE
2023年9月26日
traP コンペ 2023 夏 sponsored by ピクシブ株式会社 運営後記
abap34 icon abap34
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記