こんにちは。情報工学系B2のabap34です。最近は贔屓にしている球団が弱すぎるのが悩みです。
今はアルゴリズム班のKaggle部というところの部長をしていて、その活動として6月半ばから7月初めまでの約二週間、「機械学習講習会」を開催しました。この講習会は全7回に渡り、10時間近くの講義と400ページ以上にわたる資料に加えサンプルコードと実装の課題の提供など、なかなか大型の企画になりました。そこで、今後同じような企画を考えている人向けに、またKaggle部の宣伝も兼ねて記事を残してみることにしました。結構頑張ったので、ぜひ最後まで見てもらえると嬉しいです。
〜開催
さて、traPのアルゴリズム班では、昨年からKaggle部が設立されました。Kaggleって何?と言う方はまずこちらの記事を読んでみてください。
そんなKaggle部ですが、昨年度途中からの設立ということもあり部員は20人弱ほどで、活動の中心はある程度機械学習の経験がある人たちでした。
ところが、2023年度になり、例年のように多くの新入生がtraPに入部してくると同時に状況は一変します。
なんと、既存部員の数を遥かに上回る30人以上の新入部員がKaggle部への入部を希望しているという事実が発覚しました。さらにはChatGPTや画像生成AIなどの流行もあって、既存部員の間でもかなり機械学習への関心が高まっているようで、「今年から所属しようかな」という声が結構聞こえてくるようになりました。
一応部長をしている身としてはめちゃくちゃ嬉しい事態ですが、同時に「初心者がほとんどな状況でどうやって活動を進めていくか」というかなり深刻な問題に当たりました。例えば競技プログラミングなどであれば、初心者の方でも簡単な問題から解き始められますし、比較的短い時間で最初の「AC」を得ることができます。ところが、機械学習・データ分析コンペはプログラミングの勉強から始めて、基本的なライブラリの操作やモデルの理解などが必要で、実際に動くものを作り始めて最初の予測が投稿できるようになるまでの「最初の一歩」が大きいです。また、一年生はまだ線形代数や微分積分を習い始めた段階なので、挫折せずに機械学習の勉強を始めてもらい部に定着してもらうのはなかなか大変そうです。
そこで思い至ったのが、traPの「講習会」制度です。traPでは、すでにある程度知識のある部員が、初学者の部員に対して、「講習会」を開いて教えあうという文化(とその制度)があります。つまり思いついたアイデアというのは、「機械学習をゼロからある程度使えるところまで全部俺が教えることで解決しよう」というなかなかチャレンジングなものでした。
...と書くとまるで自分が画期的なアイデアを思いついたかのような感じがしますが、実はtraPにはすでに同じような講習会が存在していて、こちらは部内のシステムの維持開発を行っている班であるSysAd班が初学者の部員向けに行っています。(Webエンジニアになろう講習会、通称「なろう講習会」)
そしてこのなろう講習会は例年多くの部員が参加して、部内ではそれなりに盛り上がるイベントのようになっていて、SysAd班で活動を始めたい多くの一年生が参加しています。したがって目標は、「なろう講習会のような講習会を作ってKaggle部の活動に一年生にどんどん参加してもらおう!」ということになりました。
開催!
さて、講習会の開催を決めたらやらなくてはいけないことは当然資料作成です。まず最初に全体の構想を決めました。最終的に採用されたのは全7回で、線形回帰からスタートし最終的にニューラルネットワークの実装までいくという以下のような計画です。
- 「学習」
- 「勾配降下法」
- 「PyTorchと自動微分」
- 「ニューラルネットワークの構造」
- 「ニューラルネットワークの学習と評価」
- 「ニューラルネットワークの実装」
- 「ニューラルネットワークの発展」
資料作成は、最初から全体の筋道を想定していたこともあり割とすんなりと進みました。(ずっと推敲を繰り返したせいで作業時間は異常にかさみましたが...)
さて、資料作成はすんなり進んでいたので、次は講習会の開催形態について考え始めました。実際に開催の形態を詰めていくと、「参加してくれた人、特にまだ慣れていない新入生とどう相互にやり取りしながら進めていくか」ということを考える必要が出てきました。まず、この講習会は講義室を準備し、サークルの他の活動と干渉しないようするなどの調整が煩雑そうだったので、基本的にYoutube配信で行うことにしました。とはいえ一方的にYouTubeで話すのでは盛り上がりに欠けるので、配信に対して部員が部内SNSであるtraQ上でコメントして、それをどんどん拾いながらワイワイやっていく─という想定です。
しかし、この講習会はKaggle部の新規部員を主なターゲットにしていたので、当然多くの参加者は(traPの)新入部員です。となると、結構な人がtraQを使い慣れていなかったり、まだワイワイコメントをするのに少し躊躇いがあるのではないかと予想されます。また、traQ上でのコメントを拾う形だと、用事があって講習会に参加できず、後からYouTubeのアーカイブを見た人がどんなコメントがあったのか分かりにくかったり、また単純に画面上での盛り上がりが欠けそうです。
そこで、その解決策として、匿名でコメントができ、そのコメントはリアルタイムで画面にニコニコ動画のように流れ、またそのコメントはtraQにも投稿されて参加していない部員の目にも入る!というWebアプリを突貫工事で開発しました。参加者はこのアプリに匿名でコメントして、僕が画面に流れたコメントを読んで行くスタイルです。
結果から言うとこのコメントアプリを使ったのは大正解でした。喋っている側としては多くのコメントでリアクションをもらえて話題に困らない上、視覚的にも盛り上がったのでかなり話しやすかったですし、匿名であるおかげでかなり気軽に質問を投げてもらえる効果もあったと思います。また、コメントをtraQにも投稿されるようにしたのは、講習会に参加していない人がコメントを見ることで興味を持ってくれるかもしれないと思ったからなのですが、実際「なんか面白いことやってるな」みたいな雰囲気をサークル内で作るのに役立ったと思います。(コメントを流すだけであれば既存のOSSもあったのですが、わざわざ自分で開発したのはこのtraQ連携機能が欲しかったからです)
というわけでコミュニケーション問題は解説しました!あとは資料を面白くすればOKです。今回の講習会資料では、とにかく離脱されないように進めていくことを心がけました。端的に表れているのが、例えば第一回の「学習」です。
第一回は導入の回なのですが、機械学習の導入というと「教師あり学習と教師なし学習というのがあり...近年ディープラーニングが...」となりがちな気がします。もちろんそれが悪い説明だ!と主張したいわけではないのですが、さぁAIを作るぜ!と言う気持ちできている新入生(それもピカピカの大学一年生)は、出鼻を挫かれてしまう感があります。そこで今回はいきなり「アイスの売り上げ予測」と言うタスクをいかにして解くか?と言うところから話を始め、常に具体的な問題解決を意識しながら進めていきました。
さらに、「どうしてその手法を導入したのか」というのは必ず触れるようにし、とにかくモチベーションを明らかにしながら進めていくようにしました。実際に人に教える前に友人に個別に聞いてもらったりもしてもらったのですが、やはり最初に触れる際の天下り的な説明は疑問を大量に産みやすく、脱落してしまう要因になりそうだなと感じたからです。
また、全体としてめちゃくちゃ平易に説明しつつも、面白いトピックは意欲的に採用する!というコンセプトをひっそりと掲げ、意欲がある人向けに各回で「発展的話題」と題してやや発展的なものの、面白い内容を色々と取り上げることにしました。例えば第三回「自動微分」では数値微分から記号微分、さらにforward/backwardモードの自動微分の具体的なアルゴリズムまで解説したり、第四回「ニューラルネットワークの構造」では普遍性定理の直感的な証明を行なったりしました。
さらに、第6回「ニューラルネットワークの実装」の回では、PyTorchを使って簡単なMLPを実装しましたが、「なんか言われた通りに実装したらなんか動いてなんか正解率なんとか%とか出たなぁ」で終わらず、部員同士で精度を競えるようにmini Kaggleを作りました。(DacQという名前をつけました)
dacq.trap.show (認証がついているため、部員以外はアクセスできません)
あまり大した機能はないのですが、atmaCupリスペクトでベストスコアを更新した時に緑の画面で盛り上がるアニメーションだけは最優先で実装しました。
競プロをやっている人は「WJ...」が「AC」に変わる瞬間、Kaggleをやっている人は順位表で一気に順位が上がったときの快感を思い浮かべてもらえれば想像がつくと思いますが、この画面はやはり効果があったようで、講習会が終わった後も講義室に残って試行錯誤して、この緑のハイスコア更新画面を見てガッツポーズしている部員の姿が見られました。さらにその日の深夜日付が変わっても常に誰かしらの提出があり、最終的に200回以上の提出が見られるなど、かなり盛り上がっていました!
これらの施策のおかげもあってか、初回と事実上の最終回に位置付けた第6回でほとんど人数に変化はなく、(なんならなぜか増えているのではないかという勢い)で、個人的にはこれにものすごく達成感を感じました!
今後について
この講習会は今後もKaggle部の新規部員向けの講習会として毎年ブラッシュアップしながら続けていこうと思っています。
本当に多くのコメントのおかげで資料ももっともっと洗練できそうで、今から楽しみです。
それなりに改善したい点も見つかったので資料を今すぐ公開することは考えていませんが、手直しを加えていずれ世に出すつもりです。
個人的には最初に立てたいろいろな目標はだいたい達成できた気がしているので、とても満足しています。
もしこの記事を読んでいる高校生以下の人がいれば、ぜひもっと洗練された機械学習講習会をtraPで受けてみてください!!
以上です。