まずは蝋の翼から。

学んだことを書きながら確認・整理するためのメモブログ。こういうことなのかな?といったことをふわっと書いたりしていますが、理解が浅いゆえに的はずれなことも多々あると思うのでツッコミ歓迎

CourseraのDeepLearningコース+αを使ってどうDeepLearningを勉強したか

この記事はデータラーニングギルド Advent Calendar 2021です。

この記事はなにか

データサイエンス系のMOOCとして、CourseraのMachine LearningDeep Learning How to Win a Data Science Competitionの3つがいいぞ、という話を目にすることが多い。

ただ、CourseraのMachine Learningコースを受けた人の記事はかなり観測できるが、DeepLearningコースを受けている人はあまり観測できなかった。英語だし結構心理的なハードルが高いと思うので興味がある人に向けて、実際受講してみて感じた知っておきたかったことなどをまとめることで興味を持った人のハードルを下げれたらと思います。

f:id:chito_ng:20211207080530p:plain

なお、このDeepLearningコースは5講座で構成されており、各講座は3,4テーマに分かれており各テーマ毎に1週(week)を想定されています。本記事では「コース」という言い回しは基本的に「DeepLearningコース」のことを指し、「講座」は「DeepLearningコースの各講座」のこと、「week」または「テーマ」は「DeepLearningコースの各講座内のあるweek(テーマ)」について指して書いています。

f:id:chito_ng:20211209110643p:plain
https://dodotechno.com/coursera-dl-impression/ から引用

何を書かないか

MOOC系の記事は学んだことを自分なりに整理してまとめる、みたいな内容が多いがこの記事では講義内容についてはまとめないので興味がある人は先人である以下の記事などを参照していただけると。
特に1つ目の記事は文末に各講座の学習メモがあります。

CourseraのAndrew Ng氏によるDeep Learning Specializationを受講して - くじら公園

Python覚えて3ヶ月の素人がCoursera Deep Learning Specializationを1週間で完走した話 - Qiita

Courseraのディープラーニング専門講座を受講しました。|ドドテクノ

お前誰

データサイエンティストとして働いているものの、機械学習を使う機会はほぼなく統計モデル方面がメインです。また、機械学習もせいぜいGBDT系を使う程度のためDeep Learning系は必要としてないのでそっち方面の勉強はまったくのノー知識です(ただし、過去にCourseraのMachin Learningは修了済)。

そんな感じだったのですが、最近atmaCupに参加したのもありコンペでちゃんと遊ぶにはDeep Learningも勉強しないといけないなと感じたのでとりあえず評判が良いCourseraの本コースを受講しました。

また、データサイエンスの話題はDeep Learning系が自分の観測範囲(twitter)では多く、Deep Learning系の話題は流れてきてもなんもわからなくてもったいないからついていけるようにならんとな、というのもあります。

Pythonは稀にある機械学習系案件やコンペで使ったりでまぁ最低限は書けるかな、ってレベルです。

英語は技術記事や英論文を軽く読むくらいならまぁできるけど、細かい部分含めて理解は微妙くらいなレベルです。なお、4,5年前に受けた最後のTOEICが650点強くらいです。

数学はどうなんでしょ。もう卒業は5,6年前くらいになりますが中堅公立理系大学院卒なのでまったくないわけではないですがサボり気味だったので得意ではない自己認識です。数学系の単位落としまくってたし。

本記事の要約

  • 動画なので動的に理論の理解ができるので、書籍で学ぶよりもわかりやすい
  • 1日3時間を週6で1ヶ月弱の50~60時間くらいかかった
  • Machine Learningコースよりプログラミング課題がやりやすかった(簡単という意味ではない)
  • 日本語字幕なしは4割だが、そのうちの半分くらいはあまり英語力を必要としないしDeepLでだいたいなんとかなる
  • 書籍や動画などで勉強の補完はした方がいいかも

受講してみてどうだったか

端的にいえば、細かい不満はあるもののとても良かったです。よく話題にあがる理論やその元となった理論を、図やイメージで説明しつつちゃんと数式の説明もおこなっているので結構さっくり理解が進みました。書籍による学習の場合でもそれらは載っていますが、動画ゆえに1ステップ1ステップずつ図の各場所の説明や数式への対応などを細かく丁寧におこなえるのでそこは明確に動画の強みだと感じました。

また、動画の要所要所で「○○だからXXする」みたいにちゃんとやっていることの意味も補足的にちょろっと言うみたいなことを入れやすいのも動画ならではです。

ちなみに、1テーマが終わると自分でその内容をコードで書かせるのでインプットでわかった気になるのを防ぐ効果もあります。書籍学習だとインプットしっぱなしでわかった気になった状態でその発展の次にいって、前の内容が曖昧ゆえに理解ができないみたいなことが起きがちですがそういうこともないのでインプット自体の質の向上にも繋がります。

勉強の進め方

基本的に、1week分(=1テーマ)を学んだ後に微妙によくわからない部分(自分の場合ほぼ講座4,5)があれば書籍やサイトで調べて、疑問が解決したらその週の選択形式テスト(quize)および演習をする流れで進めました。

動画の欠点でもあるのですが、書籍と違って「少し前に説明してたこれってどうだっけ?」みたいなことはしづらかったり、その前の内容を表示したまま今の内容を解釈みたいなことはしづらいのでいわゆる「立ち止まってちゃんと理解する」のは向いてないです。また、特に英語字幕のみの回はそういうことはよく起きるので何かしらの書籍は必須となります。

私が使った書籍は以下。後述しますが、この中では「ゼロから作るDeep Learning1,2」が特に理解の役に立ちました。

どれくらいの時間を使ったか

日本語字幕がある場合は1.5倍速、ない場合は1.0倍速で観ました。プログラミング課題は公式では3時間くらいかかるとありますが講座1,2,3は1時間弱くらい、講座4,5あたりは3時間くらいかかりました。

勉強時間は平日は3時間弱、土曜日は4,5時間くらい勉強をしました。
日曜日はやらなかったり、旅行で4日ほど全くやってなかったりはありましたが総計50~60時間くらいの1ヶ月弱の期間で終わらせました。公式の見積もりは週8時間で5ヶ月程度、つまり総計160時間くらいのコース設計なようですが他の方の記事を読んでいると概ね私と同じくらいなので公式の見積もりかかりすぎでは???。また、あまりよくないですがその週についてユーザーがディスカッションする場を読んだり、DeepLearningの有名人へのインタビュー動画(1時間くらい)がいくつかあったりですがそれをスキップしていたのも時間短縮の理由かも。

1week分に対して講座1,2,3あたりは3日くらいで終わらせていました(1日強で動画見る→1,2日でquizeおよびプログラミング課題を解く)。また、前述のように講座4,5では理解が曖昧な部分がちょくちょく出てきていたので講座4,5そこから+1,2日書籍などでの理解が追加されます。また、口座5はプログラミング課題が結構難しかったのでプログラミング課題は3日くらいかかっていた気がします。

英語字幕の視聴方法

右で動画を流しつつ左にDeepLで翻訳した日本語を表示して、動画に合わせてちょっとずつ手動でスクロールしています。日本語字幕ありのときは1.5倍速で観ていましたが、英語の場合は1.0倍で視聴。

f:id:chito_ng:20211208144501p:plain

ちなみに、以下の記事の方法を真似れば日本語化も可能らしい。この記事はMachine Learningコースなので、自分で字幕DL→翻訳でデータを作らないといけないので面倒ですが。自分は面倒だったのでやってないです。

【更新】Courseraのディープラーニング講座を日本語で受講する - Qiita

プログラミング課題について

キャプチャと文字だと限界があるので、動画撮りました*1(もともとはこの記事全部口頭で解説してたのですが、45分で長すぎたのでここだけ切り抜きしました)。

www.youtube.com

このコースは全5講座×3週分前後の計14週分になっており、各週でテーマが異なります。そして各週毎にそのテーマの復習となるプログラムを提出する必要があります。

多くの人が受けているMachine Learningコースの場合は、その週で学んだ理論の実装となる問題がpdfで与えられ、Octoveという言語を用いて提出をします。

一方で、Deep Learningコースでは、その週で学んだ理論の実装となる問題がGoogle Colabolatoryのようにweb上で動作するCoursera作成*2NotebookでPythonを用いて提出をします。

使用する言語の違いはまぁ置いとくとして、Deep LearningコースはNotebook形式なのでプログラミング課題がMachine Learningコースと違ってかなり解きやすいです。というのも、Machine Learningではpdfの文章に小問が書かれていて、各小問に対応するpdf部分を読んで小問に対応するファイル(loopなどやデータロードなどの基本的な部分のみ実装されて学んだ箇所を書く部分は空欄)に実装コードを書いていくのですが、Deep LearningコースではNotebook内ですべてが完結しています。
つまり、Notebook内で上から順に「今回やりたいこと→小問1(実装1)でやる理論の説明→ヒント→小問1の実装コード(loopなどやデータロードなどの基本的な部分のみ実装されて学んだ箇所を書く部分は空欄)→実装が合ってるか確認する単体テスト(はじめから書かれている)→小問2でやる理論の説明→ヒント→...」という流れとなっており、実装する内容に対する理論や指示の対応関係がわかりやすくなっています。

また、notebook形式なのでデバッグがやりやすいという点や、Machine Learningコースよりもヒントが充実しているという点、さらには空欄部分がMachine Learningでは「この部分に書け!(空行)」くらいだったのでほぼ0から実装だったのが、「この部分に書け!使用する変数は最低限書いておいたから=の右側を埋めろ!」くらいになっていたのでだいぶイージーになってます。なんなら「こういう順にこういうこと書いてけ」を1行毎に指示をくれる場合もあります。

Machine Learningの場合 (コードを書く場所は 「YOUR CODE HERE」部分) f:id:chito_ng:20211208140936p:plain

Deep Learningの場合 (コードを書く場所は 「START CODE HERE 〜 END CODE HERE」部分) f:id:chito_ng:20211208141341p:plain
f:id:chito_ng:20211208141431p:plain

日本語に関して

2021/12/7時点では以下のように大体6割が翻訳されています*3

f:id:chito_ng:20211208075309p:plain

日本語がないパターンは「日本語だけなし」「英語以外ほぼなし」の2つに分けています。それぞれ、「日本語だけなし」は英語、中国語、ドイツ語、、、など多くの言語では翻訳字幕があるけど日本語だけない場合を指し、「英語以外ほぼなし」はせいぜい英語+1,2言語くらいしか翻訳されていない場合を指します。
ここをあえて分けている理由としては、やはり重要なもの複雑なものほど優先的に翻訳がされているのか「英語以外ほぼなし」の場合は翻訳優先度が低そう、つまり動画のイメージ図が豊富だったり、内容があまり複雑じゃないなどの理由で、最低限の英語レベルがあれば理解できる動画となっています。一方で「日本語だけなし」は、他の言語の多くでは翻訳されているのにも関わらず日本語だけがないので最低限の英語だと厳しい内容が多いです。

そのため、実質的にやばいのは全体を占める1割の「日本語だけなし」の動画のため、思ったより日本語の問題はない気がします。ちなみに自分の英語力は前述のように4,5年前に受けた最後のTOEICが650点強くらいです。

なお、週の最後にある選択形式のテストとプログラミング課題の小問説明はほぼDeepLに打ち込んで日本語化して読んでます。

各週の感想および日本語に関する詳細

内容に踏み込まない各週の一言感想を書きます。

また、動画ではそこそこ詳しく説明をしてくれますが、ちょっとイメージがわかりづらい部分や、理解が浅い部分があったのでそのときは別途Coursera以外のサイトや書籍を参考にしたのでその紹介もします。

それと、おまけとして前述の「日本語化」についての詳細も書きます。

Neural Networks and Deep Learning

f:id:chito_ng:20211208080944p:plain ニューラルネットの基本的な事項について。

内容はMachine Learningコースのニューラルネットと同じ。時間がある分Machine Learningコースの方が丁寧かも。

Machine Learningコースでニューラルネットをちゃんと理解できていたのかサクっと終了できた。

Machine Learningコースを受講してない場合は、そもそもニューラルネットはなにをしてるかについてはアイシアちゃんの動画リスト「ディープラーニングの世界」のはじめの方(このリストはこのコースに限らず、他のコース部分もわかりやすく解説しています)、ニューラルネットのキモとなる誤差逆伝播法はヨビノリたくみさんの動画はわかりやすい。

「推定したいパラメータ数を少なくするために、パラメータ数の少ない線形結合をもとに非線形変換をしている」という説明は結構目から鱗でした。

www.youtube.com

www.youtube.com

Improving Deep Neural Networks

f:id:chito_ng:20211208080924p:plain

ディープラーニングの基本的な事項について。

ただただ深いニューラルネットを構築するだけだとこういう理由で勾配消失や学習時間がかかるーといった問題を丁寧に説明した上で、そのためのテクニックとしてAdamとかDropoutとかがどういう理屈で問題に効くか話している。

Momentum、RMSprop、Adamあたりは英語字幕だったのもあり微妙に腹落ちしきらなかったので「ゼロから作るDeep Lerning1」や各種webサイトなどをみて理解を深める。
「ゼロから作るDeep Lerning」シリーズは、コードをゼロからスクラッチで作るために理論の説明がものすごく丁寧だし翻訳本ではなく日本人が書いているのでCourseraで理解したことの復習としてめちゃくちゃわかりやすい。

ここからはTensorFlowを使用するので、TensorFlow(Keras?)を使うので基本的な使い方はこのコースを通して理解できます。また、途中で計算グラフの意味の説明もあって動画ゆえに計算の流れを丁寧に図を使って追えるのでとてもよかった。

ちなみに、この講座2から英語字幕がかなり増えつつ、次の講座3「Structuring Machine Learning Projects」もほぼ英語字幕のみなので「あ、もう日本語で理解できる部分終わったんだ。つら」って絶望しますが講座4,5は7割くらい日本語なので安心してください

Structuring Machine Learning Projects

f:id:chito_ng:20211208080853p:plain 機械学習プロジェクトをどう進めていくか。

例えば、testデータの精度が悪いときに考えられることとして「モデルを改善する」「データを増やす」が考えられるがどっちをやった方がいいか調査するやり方や、追加のデータが得られたときにどう考えたらいいか、など時間の制約がある中で改善効率が良い箇所をどう特定していくか。といった話。内容自体はMachine Learningコースと親しいのでサクっと理解できた。

注意点として、ここは日本語字幕はほぼなし。1つだけあるのは一番はじめのイントロ動画(数分)のみ。

ここの話は理論系ではないので、「図で理解を促す」みたいな動画の利点があまり活かせれてない(一部、表形式での説明除く)。
そのため、正直文章でも問題なさそうだったのでDeepLで全文日本語翻訳をして、文章だけでわかりづらい部分のみ該当箇所に飛んで動画をみた。つまり、ほぼ動画自体は観ないで文字で理解した。

演習課題は、実際の分析プロジェクトをもとに意思決定していくケーススタディとなっていて面白かった。

また、他の方も書いていますがこのような内容は「Deep Learning系の書籍」では学べない内容なのでとても良かったです。

Convolutional Neural Networks

f:id:chito_ng:20211208080831p:plain

CNNについて。なんで畳み込みが必要なのか、とかプーリングの意味など各レイヤーでおこなうことの意味がわかったのでDeep Learningのお気持ちが少しわかった気がする。ただ、なんでその数に畳み込むのかーみたいなのは特に説明がないがい、精度と計算時間とのトレードオフでなんとなく決めてるのかな?わからん。

ちなみに畳み込みをする理由に関して、「なんか情報を圧縮している」くらいの理解だったのですがよく考えたらよくわからんなと思ったので「畳込みがなにをやっているのか」について色々調べました。
コースの3,4週目あたりで各畳み込みが抽出している特徴を表示したりしていますが、じゃあなんでそれが畳み込みをすればわかるのか?がわかるようなわからんような、って感じでした。

このサイトの「畳み込み層」についての説明で、「特定の特徴に発火するように・・・」みたいな説明でなんとなくイメージが一段回すすみ、そのあとに実際の動きベースで「何が起きるのか」を説明している以下の動画で完全腹落ちした感じです。

www.youtube.com

なお、コース内でも同様のことは言っているので意識的に何回も考えて調べることでちゃんと理解できただけなのでそこは人によるかも。要は「なにかしらの特徴を抽出するカーネル(フィルター)を作り、それにどこが反応しているか」という観点で情報を変換し、その「なにかしらの特徴を抽出するカーネル」をいろんなバージョン作っているという意味。

また、このあたりの課題からプログラミング課題が難しくなってきたのでこのコースが用意してあるユーザーが質問をする掲示板を見るようになった。主に、詰まった関数名や小問ナンバーで検索すると、だいたい似たような質問がされているので役に立った。特に、後述する「関数の単体テストが成功していても実は関数実装が間違っているので、のちにその関数を使用した別の関数でのテストが失敗する」みたいな事象が起こりうることはここで初めて知った。

Sequence Models

f:id:chito_ng:20211208080814p:plain

RNNとその発展系について。一番最後は昨今よく聞くtransformerについてもあります。このコースは2017年くらいの授業ですが、ここまでちゃんと理解すると2021年現在よく使われている技術で何をやってるかの基本的な事項はちゃんとわかるようになっているのかな。

また、やっていること自体が文章翻訳を中心とした話でイメージがしやすいのでやっていて面白かったです。

ただし内容はそこそこ複雑になってくるので復習の必要は感じた。例えば、(日本語字幕がないということもあり)attention系(LSTM, GRU, transformer)がちょっとモヤモヤが残る理解だった。内容としてかなり重要だと思うが、基本的に字幕は「英語だけ」なのは何故なんだろう?

というわけで、ここはかなりコース外での勉強をしました。

LSTMとGRU

以下が厳密性と丁寧さのレベルがとてもバランスよくめちゃくちゃ助かった。
めっちゃ簡単に書いてるサイトも結構あるのですが、そういうのは簡略化されすぎて雰囲気しかわからん一方で、めっちゃキッチリ書いてるやつはなるほどわからんってなるからこれくらいのレベル感のサイトは本当に貴重だと思います。下記リンクは特に役に立ったLSTMとGRUのみですが、他の諸々も「用語集」から飛べます。

LSTM(Long Short-Term Memory) | CVMLエキスパートガイド

GRU(Gated Recurrent Unit) | CVMLエキスパートガイド

上記サイトで理解した後に、上記サイトと同様のレベルかつ俯瞰視点での説明をしている以下のサイトを読んで別視点から更に理解をし直した。

LSTM | 長短期記憶ニューラルネットワーク

GRU | gated recurrent unit / RNN

また、「ゼロから作るディープラーニング2」も理論についてめちゃくちゃ丁寧だったのでこちらで理解でもよい。

また、数学部分の意味(お気持ち)はアイシアちゃんの動画がとてもよかったです。数学専攻の方だからか、「数式の意味」についてイメージをしやすいような翻訳がとても上手。

www.youtube.com

www.youtube.com

Transformer

特に、Transformerはコースの動画だけだと「何故Query, Key, Valueそれぞれがそういう役割をになったことができるか(Queryで「各単語に対してなにかしらの特徴を問い合わせる」とか)」が腹落ちしてなかったのですが、以下の動画の34分目あたりから(+後述の記事などを通した数式群の計算の流れの理解)でとても腹落ちした。

f:id:chito_ng:20211209094850p:plain

www.youtube.com

計算の流れ(=「何故Query, Key, Valueそれぞれがそういう役割をになったことができるか」)は以下の記事がとてもわかりやすかった。

medium.com

deeplearning.hatenablog.com

Week3のプログラミング課題がかなり難しめな上に2課題あったのでちょっとつらかったですね。。。
また、Week4ではClassを作成するのですがClass作成をなれてないとコンストラクタ(__init__)やコールバック(__call__)を使用する箇所が難しそう。

ちょっと微妙だった点

全体的にとても良かったのですが、以下の点で不満を感じました。

プログラミング課題の単体テスト

プログラミング課題は、大問としてなにかの理論の実装があり、それを細かいステップの関数実装が小問としてあり最後に各関数をまとめるという流れなことが多い。その関数実装は逐一Coursera側が用意した単体テストがあるので実装が正しいかその場でわかる。・・・が、単体テストが通ってても関数群をまとめて使用する部分での結合テストで間違える場合がある。その場合は、まとめるコードが間違っているのか、関数が間違っているのかがわからないので結構時間を食うのでもうちょっとなんとかならんかなと思う。

ちなみに詰まった場合は、前述のようにCourseraが用意したユーザーの質問用掲示板があるのでそこで質問するか過去事例を探すことになる。

Jupyter LabではなくてNotebookベース

前述のように、プログラミング課題の小問毎に実装のヒントや理論の説明が書かれてからコードを書くセルがある。その説明文を参考しつつコードを書くので、コードと説明文を上下しながら読むことが多い。ただ、そのときに説明もコードセルもそこそこ長いので上下が地味に面倒。

Jupyter Labだと画面分割をしたり、段落にジャンプする機能があるがプログラミング課題は少し古めのJupyter notebookベースなのでそういうことはできない。

APIドキュメントの理解

Tensorflowのメソッドを使う際に、細かい使い方は公式APIドキュメントを見てね、という流れで挙動わかんねーなー、とかどの引数使えばいいかわかんねーなーみたいなことがちょくちょく起きた。ただ、これはメリットでもあり公式APIドキュメントを読んで使い方を知るための勉強にもなるので、つらみはあるものの避けては通れないので良い機会になった。

レイヤーの組み方の話があまりない

Poolingはロバスト性上げるとか、Convは特徴量抽出するとか、各レイヤーの単独の意味の説明はしてくれますが細かなレイヤーの話はあまりされないです。例えば、Convレイヤーを3回入れているときに2回や4回じゃなくて3回になった意味とか、何故その大きさのConvにしたのか、みたいな。

そのため良くも悪くも、プログラミング課題ではある程度指示されたステップやヒントのみでいけるので、上記のようなことは言われるがまま実装する感があったので自分で作るときに困りそうだと思いました。

実装力は自分でつける必要がある

講座5の最後あたりの課題のようにただレイヤーを足していくのではなく、loopやコールバック実装のようなことをやるのも「言われたとおりやっているだけ」なのでそこの力はつかなそう。

さいごに

不満点もちょくちょくありつつも全体的にはやってよかったなと思いました。前述のようにこのコース外での勉強もしていましたが、「動画だけでは不足している」というより私の理解力の問題な気がするのでその点は人によりけりな気がします。実際、他で学びなおしたあとに再度本コースの動画を見直すとめっちゃわかりやすかったです。ただ、「コースの動画で細かい点も含めて大まかに理解しつつ、動画だけだと理解(腹落ち)しきれなかった部分をメタ認知」→「理解しきれなかった部分を書籍などを読んだり、いろいろなサイトなどで違う角度からの説明を読んで理解をすすめる」というのは結構効率が良い勉強の流れじゃないかなと思います。

別観点の話として、「書籍のみ」の場合でも理解は進むと思いますがアウトプットによる理解のメタ認知がしづらかったり、ペースの配分は難しい気がします。また、アイシアちゃんの動画でもコース内でやっているものはほぼあるのですがこれだけだとさすがに「ざっくりポイントだけ理解」くらいになってしまいます。そのため、前述のように「Courseraコースの動画を中心として、書籍や他サイトで補完」が最適だと思いました!

おまけ

コース修了から本記事を執筆するまでの2週間強でおこなったことを書きます。

復習

記事中でも軽く載せてましたアイシアちゃんの動画はコース終了後にDeep Learning系の動画(以下リンクのプレイリスト)を全部視聴して復習やイメージの補完をした。これら動画群ではCourseraでやっていないが理解の促進や歴史的に意味があるモデルの説明や、このコース以降に出てきた有名モデル(BERTとか)の説明もしているので一通り今後もチェックしつつ観ておくとよさげ。
前述のように、数式の解釈説明がとてもわかりやすいので腹落ちしている数式に関してもとても勉強になりました。

Deep Learning の世界 - YouTube

また、改めて「ゼロからつくるディープラーニング」の1,2をさらっと読み返すました。本コースを通してだいたい理解はし終わっているのでなんとなくどうだっけ?と見返したいときなどはこの書籍があるとぱっと調べられて便利ですね。解説がめちゃくちゃ丁寧でまじで良い。今まで読んだ本の中でもトップクラス。

また、「ゼロからつくるディープラーニング3 フレームワーク編」も読みました。

ディープラーニング自体の話は1,2で終えているので、3では軽くしか書いてないです。ただ、「フレームワーク編」とあるようにKeras(tensorflow)やPyTorchのようなフレームワークをゼロからつくっていくことによって、Keras, PyTorchを使うにあたって内部的にどうなっているかがとてもわかりやすかったのでそれらを使ったコード理解がかなり進みました。

また、完全余談ですが私は自作Classを使ったコードを書く機会があまりなくたまにClassが定義されているコードを読むと理解が足りてなかったり、Classで書くと便利なんだろうなーと思うことが多々ありました。この書籍はフレームワークをつくるにあたり、Classをばりばり使っていきます。また、コードの解説がめちゃくちゃ丁寧です。そのため、この書籍をやることでClassに対して苦手意識がだいぶなくなった気がします。Python書籍としてかなり有益では。

最新論文とか有名理論とか

Courseraのこのコースは2017年末に開講されています。そのため、2021年現在でよく使われているBERTなどの説明はないです。また、この分野は発展が早く「少し前に発表されたXXXを改良したやつ作ったよー」みたいなのも多いのである程度有名どころは把握しておく必要があると思いました。

がっつりやる場合は論文とそのRefarenceを辿っていくのが良いのでしょうが、前述のアイシアちゃんの「ディープラーニングの世界」でちょくちょく新しい手法の紹介をしているので一通り視聴しました。
そのおかげでTwitterで流れてくるディープラーニングの話題や最近の手法を使った分析コードを読むときに手法XXXと書かれていても「XXXってアイシアちゃんの動画で観た!」ってなることが多かったです。

コード実装

Keras(Tensorflow)かPyTorchか、というのはDeepLearningをあまり知らない自分でもよく聞く話題なのでどちらをやるか迷いました。Kaggleなどのコンペを見ているとKeras(Tensorflow)とPyTorchは4:6くらいの比率で書かれている気がします。
色々と調べていると、どっちでもいいけどカスタマイズした細かいことやりたい場合はPyTorch、シンプルに使う分にはKerasみたいですね。

Kerasは本コースでなんとなく使い方がわかっているので、ある程度書き方が統一的フレームワークなこともありKaggleなどでコードを読んでもなんとなくわかるようになりました。一方で、PyTorchは本コースで触れないので全然わからない。6割くらいのコードが読めないのはなーということでPyTorchの本も読みました。

その中でも以下の書籍は「PyTorchの書き方を学ぶ」という観点ではかなり細かく丁寧に書かれていたのでとてもよかったですし、おかげでPyTorchのコードはなんとなく読めるようになりました。

karaage.hatenadiary.jp

以下の本も有名ですね。こちらは先程の書籍と比べてPyTorch自体の使い方の解説は結構さらっとしています。一方で、タイトルに「つくりながら学ぶ」とあるようにあるテーマ(物体認識とか異常検知とか)に関してどういうふうにコードを書いていくかという観点ではとてもよかったので辞書的に持っておいてもよさそう。また、前述のようにPyTorch自体の使い方はさらっとしていますが、コード全体としてはコメントが丁寧です。PyTorchはKerasと違って自分でコードを書く部分が多いのでそういう意味でも有益でした。

また、昨今自然言語処理で使われまくっているBERTくらいは軽く知っとくか・・・と思い以下の本も読みました。

レビューに書いている人もいますが、理論の説明やコード説明が結構はしょられて書いているので「なんとなくわかったけど部分的によくわからんところがある」みたいに私はなりました。そのため、疑問点を他でも学ぶ必要があるように感じました。ただ、BERTに関して書いている日本語書籍はまだ少ないのと、(自然言語処理の)辞書的な使い方としてはよさそう。

ちなみに、Keras(tensorflow)に対して書籍での理解とコンペの実コード理解のギャップを埋めるためには以下の講座が評判よいみたいです(やってないですが、必要となったらやろうと思います)。ほぼ日本語字幕があるとのこと。

www.deeplearning.ai

おまけ2

また英語オンリーですが、スタンフォード大学NLP+深層学習の講義がYoutubeに公開されてます。以下のは2021年度版ですが、おそらく毎年公開されるとともに毎年その段階での最新版にアップデートされていくんじゃないかなーと思います。

また、ニューヨーク大学でも同様のものがあります。

NYU Deep Learning SP20 - YouTube

これも英語ですが、講義スライドやNotebook、講義ノート(これは日本語も!)がまとまったサイトもあります。

*1:はじめて動画撮ったけど話し方に反省点多いのでそのうち撮り直したい

*2:正確にはDeeplearning.AI

*3:optional動画は除く