📘

Synthetic Data(合成データ)についてのSEとしての理解

2024/09/24に公開

今回は年表のSynthetic Data(合成データ)について解説します。

日ごろシステム開発を行っている人、特にエンタープライズ系のシステムエンジニアには若干距離のある話ですが、概念は知っておいて損はない内容だと思います。

GANとは?

GAN(Generative Adversarial Network)はSynthetic Dataにおいて重要な概念になります。Synthetic Dataは年表では2014年にプロットしているのですが、GANが初めて提案された年ということで、ここにしています。GANの概念は、イアン・グッドフェロー(Ian Goodfellow)を中心としたメンバーによって発表された論文「Generative Adversarial Nets」によって広く知られるようになりました。この論文は、機械学習と深層学習(ディープラーニング)のコミュニティに大きな影響を与え、以降、GANは急速に研究と応用が進展しました。GANは画像生成、データ拡張、スタイル変換、画像修復など多くの分野で利用されるようになり、現在も活発に研究が続けられています。

発表後の主なGAN

2014年にOriginal GANが発表され、その後さまざまなものが登場します。論文発表された一例を紹介します。

GAN 概要
2014 CGAN (Conditional GAN) 条件(ラベルや他の情報)を与えることで、特定の条件に基づいたデータを生成する
2015 DCGAN (Deep Convolutional GAN) 畳み込みニューラルネットワーク(CNN)を用いたGAN
2017 WGAN (Wasserstein GAN) Wasserstein距離を使用。勾配消失問題の緩和を狙う
2017 WGAN-GP (Wasserstein GAN with Gradient Penalty) WGANの改良版。勾配ペナルティを導入することで、さらに訓練の安定性を向上
2017 CycleGAN 画像のスタイル変換に特化
2017 TextGAN 自然言語テキストを生成するためのGAN
2017 SeqGAN シーケンスデータ(例えば、テキストや時系列データ)を生成するためのGAN
2018 BigGAN 高解像度かつ高品質な画像生成に特化
2018 StyleGAN 生成画像のスタイルを制御するための新しいアーキテクチャ。高品質な顔画像生成で有名
2018 SAGAN (Self-Attention GAN) 長距離依存関係を捉えることで、より高品質な画像生成を実現
2018 WaveGAN 音声波形を直接生成するためのGAN
2018 SMOTE-GAN 不均衡データセットのバランスを取るために、少数クラスのデータを生成するためのGAN
2018 DP-GAN 差分プライバシーを考慮したGAN。個人情報を含むデータを生成する際に、プライバシーを保護しながらデータを生成
2019 TimeGAN 時系列データを生成するためのGAN。金融データやセンサーデータなど、時系列データの生成や予測に使用
2019 GANomaly 異常検知に特化したGAN
2020 GAN-TTS テキストから音声を生成するためのGAN。音声合成の品質を向上させるために設計
2021 StyleGAN3 生成画像の品質をさらに向上させるための新しい手法が導入(飛んでますが2もあります)
2021 TransGAN トランスフォーマーアーキテクチャを用いたGAN。従来のCNNベースのGANとは異なり、高品質な画像生成を実現
2021 Projected GAN 生成器の出力を識別器に入力する前に、特徴空間に投影することで、識別器の性能を向上させる
2022 StyleGAN-T トランスフォーマーを用いたStyleGANの改良版で、生成画像の品質をさらに向上

GPT-4oを使いながら収集してみたのですが、こうしてみると多くが画像の生成技術をベースにしていますね。生成AIのブームの前の火付け役の1つに、2012年のGoogleの猫の認識の話がありますが、やはり画像中心に技術が育ってきたのだと思います。

GANの仕組みとは?

GANが進化してきたのはおわかりいただけたと思いますが、そもそもGANってどういうものなの?という疑問があると思います。GANはGenerative Adversarial Networkの略ですが、ポイントはAdversarialです。意味は「敵対的な」です。何が敵対的なのかというと、GANにはGenerator(生成器)とDiscriminator(識別器)の2つのニューラルネットワークが存在し、それらが敵対するような動作をします。ちなみに、ニューラルネットワークの説明まで戻ると終わらなくなるので、雑な説明ですが人間の神経細胞の構造を模したAIモデルだと思ってください。

  • Generator(生成器) : 訓練データと区別がつかないようなデータを生成することを目的とした役割。ランダムなノイズを入力として受け取り、それをリアルなデータに変換するネットワーク
  • Discriminator(識別器) : 本物のデータとGeneratorが生成したデータを入力として受け取り、それが本物か偽物かを判別するネットワーク

動作としては、以下の2,3のプロセスをループします。

  1. Generatorがデータを生成
  2. Discriminatorが生成されたデータ(偽物)と、本物のデータ(正解)を利用して、訓練し学習
  3. GeneratorがさらにDiscriminator騙すデータを生成するように訓練し学習

要するに騙すニューラルネットワーク(Generator)と、偽物だと判別するネットワークGeneratorに切磋琢磨して学習させる、ということです。

金融業界における応用

金融業界におけるGANの活用はいろいろと考えられます。以下に、いくつかの具体的な応用例を紹介します。

異常検知

金融取引データにおける不正行為や異常なパターンを検出するために、GANを使用することができます。通常の取引データを生成する生成器と、異常な取引を識別する識別器を訓練することで、異常検知の精度を向上させることができます。

リスク管理

金融のリスク管理には、流動性リスク、市場リスクなどの様々なリスクに対応する必要があります。その評価のために、市場のシナリオをシミュレーションすることが求められます。GANを用いて、異なる市場条件下での価格変動やリスク要因をシミュレーションすることで、リスク評価の精度を向上させることができます。

ポートフォリオ最適化

ポートフォリオの最適化において、将来の価格動向を予測するためのデータが必要です。GANを用いて、将来の価格動向をシミュレーションすることで、より効果的なポートフォリオ最適化が可能になります。

テキスト生成と自然言語処理

金融レポートやニュース記事の生成、要約、分析にGANを活用することができます。例えば、GANを用いてニュース記事を生成し、それを基に市場の動向を予測するモデルを訓練することができます。

顧客行動のモニタリング

顧客の取引履歴や行動パターンを基に、将来の行動を予測するためのモデルを訓練する際に、GANを使用して合成データを生成することができます。これにより、マーケティング戦略や顧客サービスの向上に役立てることができます。

ストレステスト

金融機関は、異なる経済シナリオに対するストレステストを実施する必要があります。GANを用いて、極端な市場条件や経済シナリオを生成し、それに対する金融機関の耐性を評価することができます。

プライバシー保護

金融データは非常にセンシティブであり、プライバシー保護が重要です。GANを用いて、個人を特定できない合成データを生成することで、プライバシーを保護しながらデータ分析を行うことができます。

このように、データを合成することで実際のデータでは不足するケースや、検証のための精度向上に役立てることが可能です。

システムエンジニア的な考慮点

合成データは本物のデータからデータを増幅させることでこれまで機械学習に役立てられてきました。ただ、その局面が最近では少し変わってきたと思います。元々はモデル生成のためにデータを増幅させる必要がありましたが、2023年以降の生成AIブームで汎用のモデル(GPTなどのLLM)がかなり優秀になったことで、モデル生成からモデルの有効活用に移行しつつあるからです。そのためにプロンプトエンジニアリングという言葉も生まれました。

現状ではGANを利用するのはデータサイエンティストなどの一部のエンジニアに限定されている印象があります。データサイエンティストが機械学習を用いる場合や、LLMをファインチューニングする場合に使用すると思います。つまり、汎用的なシステムで求められるというよりも、限られた用途やシーンで使われると考えてよいと思います。実際にMUITのシステム開発プロジェクトのほとんどでは利用されません。

システムエンジニアとしては、まずそういう状況を理解しておくことが重要です。加えて、仮にGANを使うような場合、どのように実装すべきかも考えておいたほうがいいと思います。ユースケースの内容や規模にもよりますが、GANを利用するほとんどのユースケースは、高性能なPC(ゲーミングPCや動画編集用PC)で行うのが合理的だと思います。イメージとしては、NVIDIAのCUDA対応GPUを利用し、大容量SSDを搭載しつつ、大容量メモリを搭載する感じです。かなり本格的に実装するのであればHPC(High Performance Computing)の構成でデータを生成することもできるとは思いますが、HPCの環境をうまく動かすのはかなり大変なのでできれば避けたほうがよいと思います。HPC環境はデータ生成よりもモデルを動かす側の環境だと思っておいて間違いはないと思います。

このように、多くのシステム開発では合成データが登場することはないと思いますが、もしデータサイエンスに近い仕事をされる場合は出てくるテーマなので、概要は掴んでおいてシステム開発の提案に繋げられると良いのではないかと思います。

Discussion