NUSのコンピュータサイエンス修士の授業 その2:遂にDeep Learning!

さて、今回は題名の通り、NUSのコンピュータサイエンス修士の授業その2、CS5242 Deep Learningである。前回紹介したIS5152同様、Graduate Certificate in Machine Learning Applicationを社会人聴講生として受講した中で受けた授業であり、順序としてはIS5152を修了後の次のセメスターで受講した。自身的にこの授業は前半のハイライトだったなと感じている。

○CS5242 Deep Learning

内容としては題名の通りで、Deep Learningの基本的な内容を一通り抑えると言う感じである。回帰からニューラルネットの基本に始まり、CNN、RNN、GAN辺りまでを一通り学ぶと言うものである。

序盤戦:算数のおさらいと基本項目の確認

序盤戦では線形代数と微分のおさらい(主に行列の微分について)、回帰分析、シグモイド関数、ソフトマックス関数、クロスエントロピーロスなどの紹介やバックプロパゲーションの際に必要となるそれら微分の導出など、Deep Learningを学習する上で必要な道具立ての解説と練習問題が一通り為される。回帰分析やその微分を利用した最適化等は前のIS5152でも学んだしどの授業でも最初に出てきてしまい重複する内容ではあるが、この手の内容の授業を初めて受講する生徒にとってはここをスキップされると分かりづらくなる→どの授業でも前段として学ぶようになっている、と言う建て付けになっているようにも思われる。

行列の微分は文系の自分には当初戸惑うものであったが、基本的に機械学習の場合は「スカラー∂Lをベクトル∂W又は∂Xで微分する」と言うのが基本であり、これだと微分した後の形状は微分前の∂W又は∂Xと同じになるようになっている。この点を押さえておくと案外難しくないのである。こうした算数のポイントから逃げずにしかし分かり易く教えてくれて非常に助かった。

ニューラルネット、ディープラーニングの基本

後の内容は非常にオーソドックスな内容である。まずはシンプルなニューラルネットの解説から入り、Gradient Descent、日本語だと勾配降下法の解説、SGDやミニバッチSGDの解説からのMomentum、RMSProp、Adam等の解説、シンメトリープロブレムを避けるためのパラメータのinitialization(Gaussian, Xavier, He等)、オーバーフィットを避けるための正則化やアーリーストップ、データの正規化云々と言った定番の内容を学習した。

中盤戦:CNNとその応用

中盤戦に入るとCNNについて一通り学ぶ事になる。Convolution、Poolingレイヤーで何をしているか等の基本から始めて、Fukushima's Neocognitron、LeNet5、AlexNet、VGG、InceptionNet、ResNet辺りまでの概ね2016年位までのモデルの発展を学習し、その過程でドロップアウト、Batch normalization等の各種手法も学んで行く形である。Neural Architecture Search(NAS)や転移学習の話題にも軽く触れた。

佳境:RNNとその応用

中盤戦も佳境に入るとRNNである。最初にプレーンなRNNを学んだ後はBi-RNN、LSTM、GRUと言った改善バージョン応用編を学習。その後はone-to-many(イメージキャプション等)、many-to-one(センチメント分析辺り)、many-to-many(machine translation等)と言った形式ごとに学んでいき、アテンション/セルフアテンションモデル、トランスフォーマーモデル、エンコーダー/デコーダー等と進み、BERTにも軽く触れた。その過程でグリーディサーチ、ビームサーチ等の関連アルゴリズム、その他各種細かい話題も学んで行く事になる。

終盤戦:CNNの話題再び、GANの話題を軽く触れる程度に

終盤戦は再度CNNの話題に回帰して、R-CNN、Fast R-CNN、Faster R-CNN、YOLO等の内容を抑えて行く形になる。最後にGANを実装面の詳細には深入りせずに軽く触れる程度ではあるが抑えた。

全体としては、2016年まで位のディープラーニングの発展をがっつりと一通り概ね抑えた上でGANや最近のBERT等の話題に軽く触れる、と言った内容である。概ねディープラーニングのBody of knowledgeはこんな感じで固まって来たと言う事なんだろうなと感じた内容であった。

○その他課題

その他の課題としては、以下のような感じであった。

*概ね毎回の授業で科される3問程度の宿題(これは次の授業の後で解答解説があり採点対象ではない)。

*3回のミニテスト(3回で合計3割程度の配点で成績対象)。日本のE資格の試験問題位のレベル感の問題が毎回9−10問程度出題された。最後の関連書籍の所でも紹介するがE資格の問題集は練習問題として活用した。

*2回のコーディング課題(CNN/RNN/LSTMを中心とした素Python/numpyでの実装課題で15%*2=3割の配点)。

*コーディング課題の参考になるような、授業に関連したコードのGoogle Colabノートブックの確認や復習の他、グループワーク用のKerasの簡単な使い方講座など(実際には参加者の殆どがPyTorchを使用していたけれども)。

*4名までのチームを組んだkaggleでの授業受講者内コンテストの参加で主にCNN関連を用いる医療画像診断課題でのコンペとその簡単なレポート(kaggle順位で配点3割、レポート品質で配点1割=合計4割の配点)。チーム貢献がない、協力的ではない場合には先生への「通報制度」があり、通報内容が吟味されて実際に不真面目で明らかにチーム貢献がないと認定された場合はその人物だけ0点にすると言った制度もあり、真面目な参加と応分のチーム貢献が求められる。

...有り体に言ってかなりワークロードとしては重たかった。

○全体的な感想

上の授業内容紹介の通りで盛り沢山の内容であり、その他の課題も重かった。加えて自身の場合はグループワークで他の修士学生に「おじいちゃん使えないよ認定」されないためにGithubやLaTeXの習得も大急ぎで行う必要があった事もあった。Information SystemのISではなくComputer Science学科CSの授業であった事もあってか授業受講者やグループワークの参加者も「よりガチな理系層、リサーチャー/研究者予備生」的な傾向が見られた事もあり、「自身の能力的にぎりぎり一杯」と言う感じであった。

しかしながら先のIS5152を既に履修済みであった事などもあり、数学の解説等は何とか付いて行けるものであった。また先生の解説は非常に分かり易く具体的で実践的でもあった事もあり、自身にも何とか付いていく事が可能であった。内容的には、Andrew Ng先生のDeep LearningのCourseraの授業を意識しつつも、算数/数学面をふわっと避けずに取り組み、宿題や課題を通じて修士レベルに生徒を引き上げる、と言った印象であり、自身の能力を一段引き上げてくれた感があった。

グループワークのメンバー運も良かった。欧州人、ベトナム人、シンガポール人、日本人の自身、と言うインターナショナルな構成であり皆非常に優秀であり、彼らから学べるものは大きかった。所謂「ガチ理系層」のレベルに触れ、彼らに何とかキャッチアップしようと頑張る過程で自然と成長出来た面がかなりあった。チームメンバーにも大いに感謝している。

こうした内容でも、上記のクラスは「理論面は控えめにして、機械学習の実務家としての一歩を踏み出すための基本レベル」程度であり、「機械学習のリサーチャー等を本職として生計を立てる場合はこの程度では足りない、よりAdvancedな内容を学ぶ必要がある」と言った内容である旨先生からは解説があった。自身としては何とかB+の成績で仕上げられたのはかなり上出来であったと感じている。

○その他参考書など

以下に、今回の授業を修了する際に活用した参考書やオンライン授業を列挙しておく。

最初に紹介するのはAndrew Ng先生のこちら、Deep Learning。概ね今回のCS5242の内容はこのコーセラのSpecializationを意識した範囲になっており、授業を受ける前に修了しておいて良かったと感じている。

しかしながら、先のIS5152の際にも紹介した通りで、Ng先生の授業は誰にでも分かり易く解説すると言う面では卓越したものがあるものの、算数/数学面を巧妙に避けながらふわっと分かった気分にさせる、と言う面もある。コーセラの上記授業だけで修士レベルの授業に付いていけるかと言うと明確にNoである。授業の前のウォームアップ予習教材、位の位置付けが適切であると感じている。

画像1

世界標準MIT教科書 ストラング:線形代数イントロダクション
https://www.amazon.co.jp/dp/4764904055/ref=cm_sw_em_r_mt_dp_-HR5FbPCHJD86

線形代数についてはきちんと学ぶ必要性を感じたので、上記のストラング先生の講義を聞く事で補う事とした。内容は素晴らしく、線形代数の面白さに気づかせてくれる内容だと思う。「ガチ理系」の人の中には「解説がまだるっこしすぎる、同じ事繰り返しすぎる、冗長でスマートさを感じない」などの批判もあるかも知れないが、文系層にはこの位の詳細さと分かりやすさが必要であると感じている。書籍は非常に分厚いので中々最後まで読めないだろうが、授業であれば最後まで聞けると思うので是非お勧めしたい。

はじめてのディープラーニング Pythonで学ぶニューラルネットワークとバックプロパゲーション
https://www.amazon.co.jp/dp/B07GWHP9YM/ref=cm_sw_em_r_mt_dp_pNR5FbHKHKR07

画像2

はじめてのディープラーニング2 Pythonで実装する再帰型ニューラルネットワーク,VAE,GAN
https://www.amazon.co.jp/dp/B085C7MTNK/ref=cm_sw_em_r_mt_dp_9MR5FbNS2072S

画像3

上記の「はじめてのディープラーニング」のシリーズは、全部通読した訳ではないものの、コーディング課題で困った際に参照して役に立った。分かり易く数学面から逃げずに解説し、コードによる実装も記載があるので参考になった。

Kaggleで勝つデータ分析の技術
https://www.amazon.co.jp/dp/B07YTDBC3Z/ref=cm_sw_em_r_mt_dp_gWR5Fb0EHRDMF

画像5

Kaggleのコンペ参加が必要になったので取り急ぎこの書籍でキャッチアップする事にした。非常に実践的で参考になった。お勧めの書籍である。

Kaggleのコンペでは実質的にPyTorchが必須の感があった(特にグループメンバーで議論もなくPyTorchが使用される事になり、皆使用経験があった)。そのため、コーセラの上記でPyTorchで回帰分析、みたいな話から基本的な使い方を取り急ぎ学習した。無味乾燥な内容ではあるがPyTorchの基本的な使い方を覚えるには良い講座であった。

つくりながら学ぶ!PyTorchによる発展ディープラーニング
https://www.amazon.co.jp/dp/B07VPDVNKW/ref=cm_sw_em_r_mt_dp_x4R5FbQTM2JRW

画像7

上記は題名の通りで発展的なトピックを取り扱っており、自身にはやや上級な内容であると感じた面はある。とはいえグループワークではImageNetからの転移学習でもって画像認識をPyTorchで実装、と言うのが必須の基本動作であるため、最初の章だけ参照させて頂き、参考になった。

徹底攻略ディープラーニングE資格エンジニア問題集 徹底攻略シリーズ
https://www.amazon.co.jp/dp/B08H79Y7X7/ref=cm_sw_em_r_mt_dp_ycS5FbMGV6JQS

画像8

3回あるミニテストのうち1回目は、先生から与えられた過去問の対策だけして事に当たったのが結果が散々であり危機感を覚えた。そこでこちらのE資格の問題集を購入した所、問題のレベル感的に丁度ミニテストの内容と類似していたので、こちらで練習を重ねた。お陰で2−3回目のミニテストは上位2−3割位の点数を得られてホッとした記憶がある。誤字、問題文や解説の(時にクリティカルな)誤りも散見されるのはたまにキズであるが、良い問題集であると感じた。

LaTeX超入門 ゼロからはじめる理系の文書作成術 (ブルーバックス)
https://www.amazon.co.jp/dp/4065204968/ref=cm_sw_em_r_mt_dp_-PR5FbQPXDKVZ

画像4

こちらはグループワークでLaTeXによるレポート作成が必須であったため購入して勉強した。ふた周り近く年下のグループワークのチームメンバーより「おじいちゃんこの位出来て当たり前だからね(意訳)」と言った釘さしを受け、「おじいちゃん理系のワードも使えないよこれだから年寄りはぶつぶつ...」等と言われてしまわないために取り急ぎキャッチアップすると言う用途に最適であった。LaTeXはもっと分厚くて本格的な書籍もあるが、当座レポートをちゃんと作成できるようになると言う用途であればこの1冊で十分であるように思われる。後はレポートを作成しながら不明点をウェブサイト等で軽く調べるようにすれば良いように思う。

実際にLaTeXを使ってみると、共著で理系のレポート/論文を作成する際には大変に便利であり、確かに必須のリテラシーであるように思われた。こうした「理系の必須リテラシー」を身に付けると言うのも自身としては今回の修士課程の重要な目的の一つであるので、非常に良い経験が出来たと感じている。

わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉
https://www.amazon.co.jp/dp/4863542178/ref=cm_sw_em_r_mt_dp_x0R5FbN7ZAYBF

画像6

最後にこちら、わかばちゃんと学ぶGit使い方入門。こちらも「おじいちゃんGithubも使えないの?」と言われないためにグループワークで必須であったため取り急ぎこちらを購入、学習した。LaTeX同様にもっと分厚くて本格的な書籍もあるのであるが、クローン?フォーク???みたいなレベルの文系人間に必要なのはそうした本格的な書籍よりもわかばちゃんであり、自身には福音の書となった。今回のCS5242学習時の参考書の中では隠れたMVP的な著作であると感じている。

...以上でCS5242の授業レポートは終了である。引き続きなんなんと学習を続けて行ければと感じている。多少なりとも参考になれば、これ幸いであります。


この記事が気に入ったらサポートをしてみませんか?