【初心者】特徴量エンジニアリング（合成データ）について調べてみた

# 背景・目的
私は、現在データエンジニアリングを生業としています。普段は、データ基盤の構築や、パフォーマンスチューニングなどビックデータに関する業務に従事しています。
ビックデータの収集や、蓄積、分析などの環境構築の経験はそこそこありますが、機械学習による予測や分類などのスキルは持ち合わせていませんでした。
今まで機械学習を避け続けてきましたが、一念発起し学ぼうと思います。

学び方としては、AWS Certified Machine Learning – Specialty（以降、ML試験という。）の勉強を通して、理解を深めていきます。ML試験のガイドの第２分野に、探索的データ解析が登場しましたのでそこから学びたいと思います。

今回は、以下のうち**合成的特徴→合成データ**について学びたいと思います。

> 特徴エンジニアリングの概念を分析/評価する (データのビニング、トークナイゼーション、外れ値、合成的特徴、One-Hot エンコーディング、次元低減)

なお、過去の機械学習の調べてみたシリースは下記にまとめています。
- 2.探索的データ分析
- 2.1.モデリング用のデータをサニタイズおよび準備する
    - [【初心者】探索的データ解析とは何かを調べてみた](https://qiita.com/zumax/items/52c97307bf18f407bb6e)
    - [【初心者】データのスケーリングを調べてみた](https://qiita.com/zumax/items/ca7184dcf4e7fd242128)
    - [【初心者】データの拡張を調べてみた](https://qiita.com/zumax/items/0727e329f3322897d3e7)
    - [【初心者】データアノテーションを調べてみた](https://qiita.com/zumax/items/d0da86b68b05b99cb23e)
- 2.2.特徴エンジニアリングを実行する
    - [【初心者】特徴量エンジニアリングについて調べてみた](https://qiita.com/zumax/items/3b6e771ef1fcaf3edd91)
    - [【初心者】特徴量エンジニアリング（データのビニング）について調べてみた](https://qiita.com/zumax/items/dc0c86736dd5362cf118)
    - [【初心者】特徴量エンジニアリング（トークナイゼーション）について調べてみた。](https://qiita.com/zumax/items/5286c51ecc0a81b66b87)
    - [【初心者】特徴量エンジニアリング（外れ値）について調べてみた](https://qiita.com/zumax/items/2a07f6d3502fc9a16a44)

- 機械学習プロセス
    - [【初心者】AWS Machine Learning Lensを整理する](https://qiita.com/zumax/items/93f9635b3be51fe483e1)
# まとめ
- 合成データを使うことにより、これまでデータ準備に時間を要していたり、プライバシーデータが利用できない、または匿名化などにより精度が落ちる等の課題が改善される。
- 合成データを支える技術としてGANがあり、またGANの技術を応用して様々な加工や安定させるための研究が進んでいます。
- GANを表す特徴としては、以下のものがあります。
    - データを生成するGeneratorと、生成されたデータと、本物のデータを判別するDiscriminatorの２つのネットワークがある。これらがそれぞれロス（コスト）を大きく、または小さくさせようと競い合わせることで、段々と精度が上がります。
    - Generatorに、ノイズを与えることでランダムなデータが生まれやすくなります。
# 概要
## はじめに
合成的特徴で検索しましたが、見つからず近いキーワードとして合成データが引っかかりましたので、こちらについて調査します。

こちらの、[シンセティックデータ（合成データ）とは](https://allai.jp/what-is-synthetic-data/)の記事を参考に整理します。ありがとうございます！

## 合成データとは
> 現実の事例から収集された「本物」のデータとは異なり、AI（GANなど）により人工的に生成された「偽」のデータのことを指します。
> 偽のデータとはいえ、シンセティックデータは実際のデータに基づいて生成されるため、統計的には同じであり、実際のデータを使って学習させた場合と同じクオリティの結論を得ることができると言われています。


- データを生成すること。
- データのクオリティは実データと同様。
- GANなどの手法がある。

## 合成データのメリット
合成データを利用する際のメリットを、下記に記載します。

### 1.プライバシー侵害の回避
> 現実のデータを収集・活用するためには、暗号化や匿名化を行い、プライバシーを保護する必要があります。しかし、暗号化や匿名化には、これらよってデータが歪み、機械学習に悪影響を及ぼすリスクがあります。

>そこで、シンセティックデータを活用すれば、データの構造や特性を維持したままプライバシーを保護することができます。ゆえに、プライバシー性が高いために使用不可能であったり、使用するにしても膨大な申請が必要となるデータについても、シンセティックデータに置き換えることで、活用の途が広がります。

- 実データを使った場合、プライバシーデータをそのまま利用することができないため、暗号化や匿名化などすることで精度が悪くなるが、合成データではプライバシーを保ちながらも、迅速にデータを用意できる。

### 2.取得コストの削減
> 既存のデータでは得られない特定の条件を満たすデータを作り出すことができる点もメリットの一つとして挙げられます。例えば、自動運転車の場合、事故などの特殊な条件のデータを実際に入手するには大きなコストがかかりますが、シンセティックデータを活用すれば、そのコストを抑えることができます。

- 実世界でレアケースのデータを準備することは、時間等のコストが大きくかかる。合成データであればコストを抑えられる。

### 3.開発時間の短縮
> シンセティックデータを使用することにより、機械学習/深層学習モデルの開発を高速化することができます。通常であれば、AIに学習させるための十分な量のデータを準備するのに数週間以上かかってしまうことも珍しくはありません。しかし、シンセティックデータを活用すれば、その時間を大幅に短縮することが可能となります。

- モデルのトレーニングには、十分なデータが必要。そのための準備に時間を要していた。合成データを使うことで時間短縮が可能になる。

## GAN
上記の合成データで登場したGANという技術について、以下に整理していきます。

こちらの、[GAN：敵対的生成ネットワークとは何か　～「教師なし学習」による画像生成](https://www.imagazine.co.jp/gan%EF%BC%9A%E6%95%B5%E5%AF%BE%E7%9A%84%E7%94%9F%E6%88%90%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B%E3%80%80%EF%BD%9E%E3%80%8C%E6%95%99%E5%B8%AB/)を元に整理します。ありがとうございます！

> 　ディープラーニングの技術は日進月歩で進化しており、新たな研究が発表されると、すぐに実装コードが公開されたり、応用研究が進められたり、ビジネスに適用されたりする。
>　なかでも最近注目されている技術の1つに、「敵対的生成ネットワーク」（Genera tive Adversarial Networks。以下、GAN）がある。GANは生成モデルの一種であり、データから特徴を学習することで、実在しないデータを生成したり、存在するデータの特徴に沿って変換できる。

> 　GANは、正解データを与えることなく特徴を学習する「教師なし学習」の一手法として注目されている。そのアーキテクチャの柔軟性から、アイデア次第で広範な領域に摘用できる。応用研究や理論的研究も急速に進んでおり、今後の発展が大いに期待されている。


- GANとは、Genera tive Adversarial Networksの略。
- データから特徴を学習し、実在しないデータを生成する。また、存在するデータの特徴に沿って変換できる。
- 教師なし学習の一つの手法

### GAN学習の仕組み
> 　GANは、2つのニューラルネットワークで構成される。
>　アーキテクチャを図表4に示す。1つはGeneratorであり、その名のとおりデータを生成する。Generatorは、生成データの特徴の種に相当するランダムノイズ（図表4ではz）を入力することで、このノイズを所望のデータに近づけるようにマッピングする。もう1つはDiscriminatorであり、Generatorが生成した偽物のデータと本物のデータが与えられ、その真偽を判定する。

>　この2つのネットワークを交互に競合させ、学習を進めることで、Generatorは本物のデータに近い偽物データを生成できるようになる。この関係性は、しばしば紙幣の偽造に例えられる。偽造者（Generator）は本物に近い偽札を作ろうとし、警官（Discriminator）はそれが偽物であると見抜く。するとGeneratorは、より精巧な偽札を作り出すように技術を発展させる。こうした「いたちごっこ」が繰り返され、最終的には本物に近い偽札が生成されるようになる。

- 2つのNWがあり、これらを競い合わせていくとGeneratorが本物のデータに近い偽物データを生成できるようになる。
    - Generator
        - ノイズを与えてデータを生成する。
    - Discriminator
        - Generatorが作成した偽データと、本物データを判定する。
- いたちごっこにより、よりホンモノに近いデータが生成できるようになる。


> 　また補足だが、2つのネットワークの競合関係は、ロス（コスト）関数を共有させることで表現される。すなわち片方のロスが小さくなれば、もう一方にとってはそのロスが大きくなる。Generatorはロス関数の値を小さくすることを目的に、Discriminatorはロス関数の値を大きくすることを目的に学習させる。
> 　ここが、CNNや再帰型ネットワーク（RNN）などロスの最小化を目指す他のアーキテクチャと異なる点であり、GANがぼやけにくい画像を生成するポイントである。ただし後述するように、これが学習を難しくさせている点でもある。
> 　また学習させたGANから類似データを生成する場合、Generatorにはランダムノイズを入力するが、ここにランダム性をもたせることで、生成されるデータにもランダム性が生まれる。すなわち、サンプルするたびに異なる類似データが生成されることになる。

- お互いにロス（コスト）を小さくすることと、大きくすることで相反する目的で競い合わせることで学習させるようです。
- ロス関数とランダムノイズが、GANの特徴のようです。

### GANの考慮点
> 　GANを扱う場合に、留意すべき点が2つある。
>　1点目は学習の不安定さ、つまり生成されるデータに偏りが生じることである。これはmode colla pseと呼ばれる現象であり、GANが備える構成の複雑さから生じる。発生の予見は難しく、回避するにはひたすら試行錯誤を重ね、パラメータやネットワーク構成の見直しが必要となる。
>　2点目は、生成モデル全般に共通する点であるが、生成データの評価が難しいことである。分類問題や将来値の予測が対象であれば、定量的にその学習結果を評価することは可能である。しかし生成モデルの場合は、生成された類似データを定量的なメトリックを用いて評価すること（何をもって「よい類似」とみなすか）は難しいので、学習データに精通した者が、実際に生成された画像を見て学習結果を評価することが望ましい。

- GANでは、以下の留意点がある。
    - 学習の不安定さ
        - GANの複雑さが原因。
        - 回避するために、試行錯誤を繰り返す
        - パラメータやネットワーク構成の見直しが必要
    - 生成データの評価が困難
        - 定量的に評価することが難しく
        - 学習データに精通したものが、実際に画像を見て評価する必要がある。

### GANの応用研究
#### Conditional GAN
> 　通常のGANのデータ生成は、ランダムにサンプルされるので、生成されるデータの種類を制御できない。Conditional GANは学習時にラベルを与えることで、推論時にもラベルを入力してデータを生成できる。図表6はその例で、数字の種類を指定してデータを生成している（*6）。

- GANでラベルを生成する。

#### SRGAN
> 　低解像度の画像を高解像度に復元する、超解像を目的としたGANである（図表7）。Bicubic法のような従来の超解像手法による復元では、ぼやけた画像になりやすい。SRGANでは、GANの特性を利用することで、ぼやけの少ない画像の復元が可能である（*7）。

- 画像を高画質（高解像度）に復元する。

#### pix2pix
> 　pix2pixは言語翻訳のように、画像間の特徴を変換する。図表8では、セグメンテーションされた景色に対して、たとえば「航空写真を地図化する」「日中の写真を夜間のシーンに変換する」などを行っており、入力時に変換前の画像をラベルとして与えるconditional な設定と考えられる。「ある特徴をもつ画像から、別の特徴へ変換する」と捉えると、応用アイデアが広がる（*8）。

- 画像感の特徴を変換する。例えば以下のようなものが考えられる。
    - 日中と夜間
    - 白黒をカラー
    - 衛星写真を地図

#### Cycle GAN
> 　pix2pixと同じく、画像の特徴間の変換を実行する。すでに紹介したように画風に応じて変換した図表3や、ウマとシマウマを変換した図表9がこの手法を使用している。ここでは学習データの変換元と変換先の対応付けが必要なく、共通した特徴（ドメインと呼ぶ）をもつ画像を集めて、GeneratorとDiscriminatorのそれぞれに学習させることで、各特徴間を相互に変換する（*9）。

- 馬とシマウマのように特徴が似通っている画像を集めて、インプットすると共通の特徴を見つけて変換する。

#### その他
> 　本稿では生成モデルしての画像合成を中心に紹介したが、物体検出やセグメンテーション、異常検知などへの改善手法としてGANを利用する例、さらにテキストや音声、音楽、動画、3次元データ、医療データを対象にした拡張研究も見受けられる。

- GANは画像以外にも、テキスト、音声、動画、3次元等の研究も進行している。

# 考察
合成データより、機械学習のデータ準備にかかるコストの削減、実現性が高まる事がわかりました。
合成データを支える技術としてGANがあり、現在も研究が進んでおり、これから発展が期待できることが分かりました。


# 参考
https://allai.jp/what-is-synthetic-data/

[GAN：敵対的生成ネットワークとは何か　～「教師なし学習」による画像生成](https://www.imagazine.co.jp/gan%EF%BC%9A%E6%95%B5%E5%AF%BE%E7%9A%84%E7%94%9F%E6%88%90%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B%E3%80%80%EF%BD%9E%E3%80%8C%E6%95%99%E5%B8%AB/)