Generative Adversarial Network（GAN）とは

こんにちは。スキルアップAI編集部です。

今回は、「[【E資格対策】ディープラーニング最新論文対策講座](https://bit.ly/2Kp4nWv)」でも取り上げた、E資格で出題が予想される論文としてGenerative Adversarial Networkをご紹介いたします。
Generative Adversarial Network（GAN）[1] は、Goodfellowらが2014年に発表したモデルです。このモデルでは「用意されたデータから特徴を学習し、擬似的なデータを生成する」ことができます。

# 目次
[1.はじめに](#1-はじめに)
[2.生成モデルとは](#2-生成モデルとは)
[3.ganの構造と学習](#3-ganの構造と学習)
[4.もっと詳しく学びたい方へ](#4-もっと詳しく学びたい方へ)
[5.参考文献](#5-参考文献)

# 1. はじめに
図1は、実際にGANが生成した画像を示しています。黄色の枠で囲われたのが事前に用意された訓練データであり、そのほかがGANの生成した“偽物“の画像たちです。こういった擬似的なデータを作り出すことを「生成」と言い、それを達成するモデルのことを「生成モデル」と呼びます。
本記事では、「生成モデルとは何か？」そして「GANはどのように学習されるのか？」を中心に解説していきます。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/8a102cf9-ec12-0f32-54dc-83e3c37e35a9.png">
図 1. GANの生成する画像
（引用元: http://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf)

# 2. 生成モデルとは
確率の考え方を用いた機械学習のモデルは、大きくは「識別モデル」と「生成モデル」の2つに分類されます。
例えば、画像分類のタスクをニューラルネットで行う場合、入力画像とクラスの対応関係を学習させます。このときに、入力画像は確率変数としては扱わず、ニューラルネットは与えられた入力に対して「どのくらいの確率でクラスAに当てはまるか？」という値のセットを返すことになります。このように、識別の部分のみに確率の考え方が導入されたモデルのことを「識別モデル」と呼びます。

これに対して「生成モデル」では、入力を確率変数として扱います。すなわち、「ある確率分布から生成された入力に対して、それがどのくらいの確率でクラスAに当てはまるか？」ということを考えます。このときに、入力が従う確率分布をうまく求めることができれば、その確率分布を用いて擬似的に入力データを生成することができるというわけです。GANでは、生成と識別の両方にニューラルネットを採用しています。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/c20fa051-f139-c741-cb48-5add88b2916c.png">
図 2. 生成モデルと識別モデル

# 3. ganの構造と学習
それでは、GANの具体的な構造について見ていきましょう（図3）。
GANはGeneratorとDiscriminatorという二つのブロックで構成されています。いずれのブロックもニューラルネットの構造が用いられているため、誤差逆伝播法による学習が可能です。

**A. Generator**
Generator部分は「乱数などをデータに近くなるように加工する」ような役割を果たします。図2でいうところの「確率分布」と「生成」が、乱数などの入力とGeneratorの部分に対応します。

生成タスクの場合には、入力として一様乱数などの生成が容易な確率分布に従う乱数を用意することが多いです。「ある画像を別の画像に加工する」ようなタスクの場合には、その元画像を用意することもあります。モデルの具体的な設計を考えるのは機械学習の面白さの醍醐味の1つでもあります。

**B. Discriminator**
Discriminator部分は「入力がGeneratorの生成した“偽物”か、あるいは訓練データとして用意された“本物”か」を判別する役割を果たします。図2でいうところの「識別」が、このDiscriminatorに対応します。図3のクラスとは「“本物”か、“偽物”か」といった分類のことです。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/94b5c17f-fb87-6b98-7439-3574e40a489f.png">
図 3. GANの模式図

**C. GANの学習**
GANの学習では、Generatorは「Discriminatorを騙せるような精巧な“偽物”を作ることができる」ように、Discriminatorは「用意された“本物”とGeneratorが作り出した“偽物”を区別できる」ように、敵対的に学習していきます。これがGenerative Adversarial Network 「生成的・敵対的なニューラルネットワーク」という名がつけられた所以です。
GeneratorとDiscriminatorはそれぞれの目的に従って交互に最適化され、最終的にはどちらも非常に良い性能に到達します。このときにGeneratorが生成する“偽物”が、“本物”と区別できないような特徴を捉えていれば、GANの学習は成功です。

# 4. もっと詳しく学びたい方へ
本記事では、GANの概要を導入程度に解説しました。SkillupAIの[ディープラーニング講座](https://bit.ly/3hdW7F2)では、具体的なGANの定式化やTensorFlowを用いた学習などを学ぶことができます。
また、2021年1月に[GAN（敵対的生成ネットワーク）講座](https://bit.ly/3h5prNP)を開講します。この講座では、様々なGANを学ぶことができます。是非ご検討ください。

# 5. 参考文献
[1] [I. Goodfellow et al., “Generative adversarial nets,” in Proc. Int. Conf. Neural Inf. Process. Syst., 2014, pp. 2672–2680.](https://papers.nips.cc/paper/2014/hash/5ca3e9b122f61f8f06494c97b1afccf3-Abstract.html)

# 25卒向け！AIエンジニアになるための長期インターンプログラム参加者募集中！
25卒学生向けに、AIの基礎を学びながら就活も一括サポートする無料カリキュラムを提供しています。
修了するとE資格の受験資格も獲得できるプログラムとなっています！

<img width="700" alt="長期インターン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/bfce4c26-1ebe-c54d-bacb-e804048a7a08.png">

**特長①AIエンジニアやデータサイエンティストの基礎が身に付く**
AIジェネラリスト基礎講座や機械学習のためのPython入門講座など、市場価値向上のための基礎を習得。

**特長②AI・データ分析領域の優良求人を紹介**
非公開求人や選考直結型インターンをご紹介し、早期内定の獲得をサポート。

**特長③長期インターンプログラム専用の学生コミュニティ参加可**
学生同士で就活情報をシェアしたり、学習を進めるうえでアドバイスをしあったりできるコミュニティに参加可能。

＞＞[長期インターン詳細](https://bit.ly/3pXW5JM)

☆☆☆
スキルアップAIのメールマガジンでは会社のお知らせや講座に関するお得な情報を配信しています。
配信を希望される方は[こちら](https://share.hsforms.com/1_XlReV-4Te-zcxCl9lhffA2mtef)

また、SNSでも様々なコンテンツをお届けしています。興味を持った方は是非チェックしてください♪
Twitterは[こちら](https://twitter.com/SkillupAi)
Facebookは[こちら](https://www.facebook.com/skillupai)
LinkedInは[こちら](https://www.linkedin.com/company/skillup-ai)