2018年度2019年度と東京理科大学で半期の講義を担当したのだが、講義をどのようにやったらいいのか(またはどのようにやるのはよくないのか)という知見をあまり見た覚えがないのでまとめておく。
前提
- 講義名: 応用計量分析2
- 冬学期に1回90分の講義を15回
- 指定された内容: 機械学習とプログラミング(一から講義内容を組み立てる必要あり)
- 教師あり学習を取り扱う授業は他にあるということだったので、教師なし学習のアルゴリズムを扱う(EMアルゴリズムや変分ベイズ法)。
- Python での実装を教える。特にオブジェクト指向っぽい書き方をやる。
- 対象: 東京理科大学経営学部3年生
- 受講者: 2018年度は150人くらい、2019年度は100人くらい
- 講義資料は Jupyter notebook + RISE で作成
- プログラミングを教えるので Powerpoint よりも Jupyter notebook ベースの方がやりやすい
スケジュール
- 2017年12月くらいに2018年度冬学期の講義の打診を受ける→承諾
- 2018年5月くらいから講義資料を作り始める
- 2018年9月から12月に毎週講義(講義資料作りは終わってなかったので、作りながら講義)
- 2019年1月20日レポート締め切り2月の初めの方に成績報告
- 2019年9月から12月に毎週講義(去年のをちょいちょい直しながら講義)
- 2019年1月17日レポート締め切り2月の初めの方に成績報告
学び
シラバス通りに授業は進まない
1年目にシラバスに書いていた講義の内容は、線形代数、確率統計、オブジェクト指向プログラミングの復習をしたのち、混合ガウスモデルに対するEMアルゴリズム、Latent Dirichlet allocation (LDA) に対する変分ベイズ法、 Variational Autoencoder に対する変分ベイズ法を導出しオブジェクト指向で実装するという内容だった。100%講義をする前提だとちょうど終わりそうだったのだが、後述のように演習も交えたりその場で補足も行ったりしたので、結局 LDA に対する変分ベイズ法の導出までで終わってしまった。2年目はそれを受けて、 LDA までのシラバスにした結果、ギリギリ LDA の導出まで終わらせた(最後とても駆け足だったが)。
演習を交えて学生の理解度を知るのはとても大事
90分話し続けるのは体力的にも大変だし学生も退屈だと思ったので、講義をしつつ演習を適宜入れるという形式で行った。この方針自体はとてもよかったと思う。初め考えていなかった利点としては、学生の理解度を直接確かめられるという点が大きい。演習時間中に学生に話を聞くと、そもそも私が前提としていた知識がなかったりすることがわかるので、その説明を追加で行ったりできる。
この形式をやる上での注意点としては講義資料のアップデートがしんどいという点である。講義やったあとは解放感に浸っているので講義資料のアップデートをする気になれないし、そのまま数日経つと次の講義の準備をしないといけないので結局講義資料はそのままになりがちになる(あとどれだけ準備に時間をかけても給与は増えないのだ!)。
プログラミングの授業はライブコーディングの方が学生も一緒にやってくれる
プログラミングは見るだけだと何もわからない(と私は思っている)ので、学生にも手元で実行して動作を自分で確認させたい。 何も考えずに授業をやるとプログラムの紹介で終わって学生も手を動かさず何の価値もない90分となるが、ライブコーディングをした方が学生は手を動かしてくれる気がする。
レポート課題は明示的に章立てを指定した方がいい
1年目は文章のみでレポート課題を書き、3回くらい授業の初めにその内容を説明したが、そもそも正しく設問を理解できていない学生がいた。 具体的には数学に関する内容とプログラミングに関して、
- 理解できなかったこと
- 理解できなかった原因
- 理解できるような講義資料(上記の原因を解決したもの)
- 講義資料の工夫点(どのように解決したかを述べる) をやってもらうという課題だったが、片方しかやっていない学生がかなりの数いたのと、上記のような課題・原因・解決策といった論理展開を読み取れるようなレポートは少なかった。
レポート課題を正しく読み取って欲しいという気持ちはあるが、レポート課題の出し方にも改善できる点はあるだろう、ということで、 2年目は明示的に章立てを決めて書いて欲しいことを局在化させるようにしてみたところ、正しくレポートを解いてくれない人はほとんどいなくなった。 ただしフォーマットに従わない人や、いまだに片方しかやらない学生も未だに存在するのはどういうことなのかがまだわからない。
レポート課題の事前チェックの時間を設けた方がいい
上記のように1年目はレポートのフォーマットに従っていない人が散見されたので、2年目はレポート課題の事前チェック or 相談会を実施した。 慣例的に第15回目の授業はテスト+解説か休講なので、その時間に任意参加の形で実施した。 実際に学生と話してみるとどの程度の理解度なのかがよくわかるし、誤りを訂正したり適宜アドバイスできるので(教える側としては)とてもよかった。
レポートに参考文献をN件以上明示的に書かせる
1年目は正しく引用していなかったりコピペをするなど剽窃行為が多くみられた。剽窃をする学生の中には単純にサボりたいだけという人もいるが、どのようにレポートを書いていいかわからないため剽窃してしまう人もいるかもしれない。 なので2年目は、参考文献を3件以上調べてそれらを理解した上で理解したことを自分でまとめる、という指示を加えた。 サボりたい人は適当に参考文献を並べてコピペをするし、そうではない人はその内容をちゃんとまとめてくるようになった。またちゃんとやってくる人のレポートのクオリティも上がった気がした。
今後の課題
どのようにプログラミングを習得させるか
プログラミングは手を動かさないと理解できないと思うのだが、授業中の演習でも手を動かしてくれない人がいるように見える。 手を動かすようにインセンティブを与えないといけないけどどうやったらいいのか…。 プログラムの自動採点ツールとか導入したらちょっとは改善される気がするけど、いかんせんセットアップやら管理がめんどくさい。
達成度チェックの方法を考える
現状のレポート課題だと最後まで理解しなくてもレポートを書けるので、達成度チェックの方法としてはあまりよくないように思う。 その一方で下手に変えると大量の不可を出してしまいかねないので、なるべく不可は出さないようにチェック方法を変えていきたい。
採点負担を軽くしたい
自由記述式のレポートなので採点にやたら時間がかかる(丸3日くらい使った気がする)。採点時間が伸びても給与は変わらないので、短い時間で採点が終わる形式にしたい。