今まで手付かずでしたがすごく興味があったGANを学びたいと思い、1ヵ月間Couseraの『Generative Adversarial Networks(GANs)』講座を受けましたので、その内容と感想を紹介したいと思います。
一通り受講し終えて、やっぱりDeepLearning.AIの講座は質が高くて、すごく勉強になりました。
Udemyの講座もすごく良いものが多いのでオススメですが、DeepLearning.AIの講座はNo.1と思えます。
ただ、説明が英語で(日本語の字幕はありません)、論文を解説・引用したり、穴埋めではありますがPyTorchで実装する課題をこなす必要がある、ということで簡単か?と言われるかとそうではないと思います。
そういう意味では、人によってはUdemyの方がやりやすい部分も多いですね。
ということで、今回はDeepLearning.AIの「Generative Adversarial Networks(GANs)」講座をレビューしたいと思います。
講座はこちらです。
では、さっそく内容について少し深く紹介したいと思います。
目次
学ぶ内容
Generative Adversarial Networks(GANs))』講座は以下の3つのコースから構成されます。
ざっくり、1の『Build Basic Generative Adversarial Networks (GANs)』でGeneratorやDiscriminator、損失関数といった基本的な仕組み、そして、DCGAN(Deep Convolutional GAN)やWGAN(Wasserstein GAN)といったGANの基本になるモデルを学びます。
2の『Build Better Generative Adversarial Networks (GANs)』で、バイアスの問題、IS(Inception Score)やFID(Frechet Inception Distance)といったGANの評価指標を学びます。モデルはStyleGANを学びます。
最後の3の『Apply Generative Adversarial Networks (GANs)』では、GANの応用としてData Augmentationやある画像から別の画像を正史江するPix2Pix、CycleGANを学びます。
各1から3のコースはWeek 1、Week 2、…という形で1週間ごとに区切られており、それぞれ1~4週間あります。
そして、各週でがプログラミング課題がありますので、毎週提出しないといけません。
プログラミング課題といっても1からプログラムを作成するわけではなく、穴埋めのような形になっており、一部のコードを作成するだけです。
ですので、1から作成するよりは簡単で、既にある程度作られてあるプログラムを見ながら進めることで、深く理解することが可能です。
ただ、簡単か?と言われるとそんなに簡単ではなく、詰まって苦労することも多いですので、結構頑張らないといけません。
その分身に付きますので、一通り終了すると満足感は高いと思います。
続いて、各コースの詳細を見ていきましょう。
Build Basic Generative Adversarial Networks (GANs)
まず、1つ目の『Build Basic Generative Adversarial Networks (GANs)』で。以下の通りGANの基礎を学びます。
Generator、Discriminator、損失関数といったGANを構成するパーツを学びます。
そして、これらのパーツを使って、GANがどう学習するかを学びます。
その他にも、Leaky ReLUやBatch Normalization、CNN(Convolutional Neural Network)といった基本的な仕組みの解説もありますので、Deep Learningの基本をあまり知らない人でも大丈夫なようになっています(ただ、個人的には事前知識はあった方が良いと思います)。
そして、GANの課題である“mode collapse”という問題や、その解決策としてのWasserstein Lossを使ったWGANを学びます。
クラスを指定して画像を生成する方法、髪の毛の色や、目の色、ひげがあるか?などの特徴量をコントロールする方法なども学びます。
Build Better Generative Adversarial Networks (GANs)
2つ目の『Build Better Generative Adversarial Networks (GANs)』コースで、GANのPros&Consや、より新しいGANをを学びます。
GANは最尤推定をしないので、精度を評価する指標がありません。
したがって、どちらのモデルが良いか?というのが非常に難しいです。
そこで提案された画像の精度や多様性を評価する指標であるIS(Inception Score)やFID(Frechet Inception Distance)について学びます。
翻訳タスクのためのBLEUスコアのように、指標を理解することは非常に重要ですね。
そして、バイアスといった実際に実務などに応用する際に重要な問題を学びます。
これは、人種に対する偏見など、機械学習全般にかかわる問題です。
ここで、小テストが入るのですが、正直、私にとってはこのバイアスに関するテストが一番難しく感じました。
そして、VAE、VQ-VAEといった他の画像生成モデルとGANを比較し、特に最近ではよい結果を出しているStyleGANについて学びます。
StyleGANを構成する各パーツを1つ1つ丁寧に説明されています。
ただ、そんなに簡単ではないので、聴講、課題を解く、論文で確認、課題を解く、というサイクルでしっかりと理解することができます。
Apply Generative Adversarial Networks (GANs)
最後の『Apply Generative Adversarial Networks (GANs)』コースでは、GANを使った応用について学びます。
GANの応用例はたくさんあるのですべてを網羅することはできません。
ここでは、GANを使って画像の学習データを増やす方法(Data Augmentation)、Pix2Pixと呼ばれる画像から画像を生成する応用について、最後にCycleGANを学びます。
まず、GANを使ったData Augmentationです。
例えば、画像認識であれば、学習済みGANを使うことにより質の高い画像サンプルを生成することが可能です。
学習済みモデルがあれば、明らかに手で集めてくるより簡単ですね。
続いてPix2Pixですが、これは非常に面白い応用例です。
Pix2Pixといっても色々な応用がありますが、例えばGoogle Mapで通常の地図画像と航空画像を入れ替えるといった例があります。
また、その仕組みとしてPatchGANやU-NetといったGenerator、Discriminatorの仕組みを学びます。
最後にCycleGANを使ったPix2Pixです。
CycleGANは画像のスタイルを変換するもので、例えば牧場にいるシマウマの画像を、背景は変えずにウマに変換するようなものです。
この際に、シマウマ→ウマ、ウマ→シマウマというサイクルにすることで、うまく学習することが可能です。
私が費やした時間
内容については以上ですので、私自身が費やした時間についてざっくりご紹介したいと思います。
全体の期間としては、1ヵ月となりました。
もっと長く受講することも可能でしたし、もっと早く終わることも可能でしたが、新たな請求が来ない1か月間で終了させました。
週や日によってがいますが、ざっくり以下のようなイメージで勉強していました。
月曜日:7:30から8:30まで講義を聴講。8:30から9:00まで課題の確認。
火曜日:7:30から8:30まで講義を聴講。1週間分の講義を聞き終わる。ということで8:30からは別の勉強。
水曜日:7:30から9:00まで課題を解いて提出。
木曜日:7:30から9:00まで参考にしている論文を軽く読む。
金曜日:7:30から8:30まで論文を読みながら提出済みの課題を再度確認。それ以降は他の論文を読んだり。
土曜日・日曜日:午前中2時間程度、講義を聴講したり、課題を解いたり、他の論文を読んだり。2週目の講義を聞くのは完了。
ただし、出掛けたりしていた週もあったので毎週していたわけではありません。
恐らくこれぐらいのペースであれば、1週間で1.5週間分の進捗になると思います。
講義については、私は結構メモをしながら聞いていますので、何度も繰り返して聞いていました。
ですので、講義の時間以上に時間がかかっています。
もちろん、たくさん参考文献があるので、それらを読むことでより理解が深まることは間違いありません。
私もまだこれから参考文献に載っている論文を読んでいこうと思いますので、GANの勉強自体はまだまだ続きます。
あくまで時間は参考程度と考えていただければと思います。
困ったこと
Jupyter notebookで課題をやっていると、途中でカーネルが死んでしまうという現象が起こりました。
他にもそういった現象が発生している受講生がいて、ディスカッション・フォーラムに投稿されていますが、現時点では解決されていないようです。
課題自体は提出でき、理解することには問題ありませんが、実際にモデルを学習させようと思うと、そのままではできません。
そういう意味ではスクールのように、直接講師の人とかに聞いたり伝えることができれば、解決してくれるだろうなぁと思います。
そこが、MOOCの欠点と言えば欠点ですね。
そういうところに時間を費やしたくないという人は、より手厚いスクールを選ぶのも一つかと思います。
そういえばもう一点ですが、課題を提出して自動採点の結果合格しているのに、完了にならないという問題もありました。
これも他の受講生にも見られる現象のようですが、もう一度提出すると完了しました(毎回、2度提出しないといけませんでした)。
受講料
受講料は1ヵ月単位で、私は1ヵ月間だったので、5372円でした(値段をまったく見ていなかったので後から知りましたが)。
もう一か月受講するとさらに5372円かかってきます。
Udemyは割引セール期間だと1000円台からあるので、それと比べれば高くなりますね。
ただ、しっかり勉強すれば十分元を取ることは可能です。
というか、この内容を5000円強で学べるというのは本当にありがたいです。
どんな人に向いているか?
私の感覚では、Udemyの日本語講座と比較すると難易度が高いと思いました。
内容もより専門的なところに踏み込んでいますし、英語で結構早口に思えました。
ただし、質という意味ではやはり非常に高いと思いますので、ある程度、画像認識や自然言語処理などで機械学習の論文を使って勉強をしてきた人や数学などを勉強してきた人の方がいいのかな?と思っています。
まったくの初心者の方だと大変だという印象です。
ということで、以下のどれかに当てはまる人が良いと思います。すべてではありません。
どれにも当てはまらない方には、まずこちらの『Deep Learning』講座で基礎を学ぶことをオススメします。
こちらもDeepLearning.AIの講座でめちゃくちゃわかりやすいです。
レビュー記事もありますので、参考にしていただければと思います。
まとめ
今回は、DeepLearning.AIの『Generative Adversarial Networks(GANs)』というCouseraの講座を紹介しました。
非常に勉強になり、一気にGANを理解できたので、やはりDeepLearning.AIの講座はオススメできます。
一方で、難しいと思う部分もありましたので、GANを理解したいけどまだ講義についていけない、という人にはDeepLearning.AIの『Deep Learning』講座やUdemy、スクールなど自分に合った勉強法でまず基礎を学ぶのが良いと思いました。
特に、課題を解いているとカーネルが死んでしまう問題はちょっと困ったものですね。
スクールについては以下の記事で紹介しています。
今後も勉強した内容を紹介していきたいと思います。
では!