〒186-0002
東京都国立市東2-21-3

TEL : 042-843-0268

製品進化とマネジメント風景 第104話 画像生成AIを急速な進化させた仕掛けとマネジメント

この所、新聞や雑誌を賑わせているトピックスの1つに生成AIがあります。人間のように会話ができるチャットGPTはもちろんとして、プログラム作成を支援するGitHubコックピット、さらにはテキストを入力するだけでそれを具現化した画像を生成するStable Diffusionなども出てきて話題になりました。 

この「テキストから画像を生成するAI」の機能は便利なのですが、自分が欲しい画像を得るにはそれなりに生成AIを使いこなす必要があります。使いこなしは入力する情報で決まりますが、ここに一定のノウハウがあります。その情報は画面上のプロンプロに入力するので、「プロンプトエンジニアリング」という言葉が創られました。さらにそのノウハウは知財だという主張まで出てきました。 

画像系の生成AIはものすごいスピードで進化してきましたが、なぜ、これほど迅速に進化できたのか少し不思議でした。そこで、その理由を解明すべく調査を行いました。その結果、「これが迅速な進化の鍵だったのだな」という一定の結論が得られたので、本コラムの中で述べていきます。 

画像系の生成AIが初めて出現したのは2014年でした。2つの系統の技術が出てきたのですが、2015年には3つ目の技術が現れました。現在使用している技術の殆どはこの2年間の間に発明されたといっても過言ではありません。そして2021年には原画像よりも解像度が高い超解像の画像を生成できるようになりました。さらに2022年にはテキストを入力するだけで、その内容を具体化した本物らしいクリエイティブ画像を生成できるまでになりました。 

生成AIばかりが話題になっていますが、その手前にある識別系AIは様々な実務において生産性向上に役立っています。また、生成AIの一部をも構成しています。識別系AIでも生成AIでも、プログラム言語に関してはpythonがお勧めです。その理由は使えるライブラリが豊富なため、行数を抑えて簡潔にプログラムを作成できるからです。複雑さにはミスが入り込む余地が多いですが、簡潔さにはその余地が殆どありません。ただし、簡潔さゆえの別の問題を内在していますが、それについては後述します。 

実際に識別系プログラムを作成すると実感できるのですが、昔ながらの言語であるBasicやFortranと比べてシンプルにプログラムを作成できます。個人的に作成した事例として、防犯実務に使える動体検知および静止画の画像認識AIがありますが、これらは2つともかなり簡単に作れました。とは言え、識別系AIの精度を高めていくためにはそれなりの工夫が必要です。そして、高品質の生成AIを得るには、その前提としての高品質の識別系AIが必須の存在なのです。 

そこで今回のコラムでは、まず、生成系AIの基礎となる識別系AIの実際について触れます。その後、生成AIの歴史を振り返りつつ、各生成AIにおける技術上の革新ポイントを整理します。最後に、なぜ、生成AIがこれほど迅速に進化できたのかについて結論を述べることにします。 

識別系AIの標準は畳み込みニューラルネットワーク(CNN)です。CNNは最先端の生成AIでも使われています。説明が抽象的になるのを避けるため、CIFAR10という画像分類問題を例に挙げながら、CNNの骨子を説明していきます。 

CIFAR10はトロント大学が2009年に設定・公表した画像分類の問題であり、そのための画像データベースです。分類する対象は、飛行機、自動車、トラック、船、鳥、犬、猫、馬、鹿、カエルの10個です。50000枚の画像を学習し、10000枚の画像でテストを行い、その正解率を競います。 

CNNは2010年にこの問題で約80%の正解率を実演し、一気に注目を浴びることになりました。急に正解率が上がったからです。それ以降、このCNNが識別系の主流になりました。人間の眼の構造を真似て多層の構造を取ります。世の中には100層を超える深層学習もあると聞きます。しかし、CIFAR10問題を実際にやってみれば分かりますが、全ての層を含めて10層前後で十分に高い精度を得ることができます。 

CNNによる学習とそれによって作成されたAIモデルには、流体や構造の数値計算と明らかに異なる特徴があります。流体や構造の数値計算では、計算が収束すれば、その解は殆ど同一と見なせます。だからこれらの数値計算モデルは再現性が高いのです。これに対して、CNNの学習によって作成したAIモデルはかなり大きなばらつきを持ちます。個人的な評価を言えば、再現性があるとは言い難いレベルです。なぜ、AIモデルがばらつくのか、その理由を簡単に説明しましょう。 

CIFAR10では50000枚の画像を学習しますが、通常、これをいくつかのバッチに分けて行います。例えば、1000枚、100枚、50枚、20枚などです。たくさんの枚数を一度に学習させた場合、マクロな特徴を捉えやすくなりますが、個別性の高い差異を捉えるのは苦手です。動物の顔について言えば、異種であってもその差は小さく、マクロな特徴だけを追うと識別精度は落ちます。これに対して、少ない枚数毎に学習すると、個別性の高いミクロな差異を識別しやすくなります。一方、マクロな特徴を見誤る傾向があります。例えば、木の枝に乗った鳥を鹿と勘違いします。これは木の枝を鹿の角と勘違いしたと推定されます。ミクロとマクロはトレードオフ関係にあるので、問題によって適切な枚数を選ばなければなりません。 

CIFAR10に関して試行錯誤した所、50枚前後が良い選択という結論となりました。これは50000枚の画像を50枚ずつに分けて1000回学習するのが1セットだということです。50000枚から50枚を選ぶのはランダムに行われます。毎回、異なる画像の組み合わせで学習しながらニューロンを鍛えていくということです。 

そして、これを繰り返すのですが、学習を続けると過学習が起こり始めるため、テスト計算の残差が最小になった付近で学習を止める必要があります。そのまま学習を続けると、学習用データの正解率は100%に近づいていきますが、テスト計算の残差は増え始め、テスト正解率は悪化していくのです。(あまり変わらない場合もあります) 

従来科学技術の数値計算ならば、残差を最小にすれば再現性が担保されます。しかし、CNNでは残差を最小化しても、最後に出てくるAIモデルは、前述したようにかなりばらつきます。 

なぜ、ばらつくのでしょうか? このばらつきは、大量のデータを学習するCNNプロセスの宿命と言えるでしょう。上記で50枚を1つのバッチ(あるいはロット)として画像を学習させると、画像の特徴を適度に習得するという話をしましたが、その毎回の50枚は50000枚からランダムに選択された組み合わせです。そのため、画像認識の行う数百のニューロンの記憶も毎回変化します。 そのため、AIモデルを作成するたびに、ニューロンの特性が変化し、異なるAIモデルが作られてしまうのです。 

どれくらい異なるのか、定量的にみていきましょう。例えば、テストの正解率だけについて言えば、その差はせいぜい2%程度であり大きくはありません。しかし、あえて識別が難しそうな画像をネット上から集め、これらについて別テストを行うと、100点満点で40点から100点までばらつくのです。物理化学の数値解析ならば、これほど大きなばらつきは生じないでしょう。この「ばらつきが生じやすい」という事こそ、CNNによるAIモデルにおける大きな特徴と言えましょう。 

もちろん、系統的にパラメータや層の数などを工夫すればある程度までばらつきを抑えることが出来ます。CIFAR10についていえば、90点から100点の範囲にばらつきを抑えることが出来ました。しかし、より複雑な問題であれば、ばらつきを抑制するのはかなり難しいでしょう。当然ですが、識別系モデルのばらつきは生成系にも影響を与えます。 

同じ学習データ、同じプロセスで学習したとしても、得られた識別系AIには相応のばらつきが残るので、完成品AIを使う時には、自身の扱う問題をどの程度の精度で扱えるのか、事前に検証してから使い始めないと危ないということです。さて、識別系の概要はここまでとして、次は生成系の話に移ります。 

生成系における重要な基礎はオートエンコーダの概念です。これは、画像を圧縮して次元を減らすプロセスです。28×28ピクセルの画像は784次元を持ちますが、画像の特徴を抽出し、これを100次元とか200次元に減らすのです。専門用語ではこれを潜在空間と呼びます。この圧縮方法が優れたものならば、次元が減ったとしてもデコードして元の次元に戻した時に同じ画像が得られるわけです。 

このオートエンコーダを改良したのが変分オートエンコーダです。オートエンコーダでは、前述の潜在空間は数字の集まりですが、オートエンコーダでは単なる数字でなく、平均値と標準偏差を持つ正規分布の集まりです。よって、デコードする時、前と同一の画像にすることも可能ですが、少し変更を加えることも出来るようになります。 

その結果、この変分オートエンコーダを生成AIとして使う試みが行われました。ただ、生成された画像がぼやけたものになりやすかったため、もっとクリアな画像を生成する方法が追求され、そこで出てきたのが敵対的生成ネットワーク(GAN)でした。 

GANの特徴は生成器と識別器の両方を持つことです。生成器は、情報を生成するのですが、識別器を騙すことを目的とした教師なし学習を行います。生成器を泥棒、識別器を警察に見立てると分かり易いかもしれません。泥棒と警察が競争を続けると、警察でも見分けが付かなくなります。警察である識別系が見分けられないものは、大抵、人間でも見分けられません。この状態は、ゲーム理論で言う所のナッシュ均衡に相当します。 

現在のGANはまだまだ欠点があります。例えば0から9の数字を作り出す生成器を考えた時、識別器を騙しやすい数字ばかりを生成し、騙しにくい数字を生成しなくなることがあります。これはモード崩壊と呼ばれる現象です。他にも収束が遅いなどの欠点もあります。しかし、GANは1つの警告を人間社会に発しました。「ピクセルで表現できる画像であれば、もはや人間にも見分けられないディープフェークを作れる」のだと。GANはあらゆる分野への応用が可能なので、今後、デジタル情報はどんなに本物に見えても、それを鵜呑みに出来ない時代になりそうです。「アナログの逆襲」という映画がありましたが、嘘を付くデジタルよりも嘘を付けないアナログを信用する時代が復活するかもしれませんね。 

今をときめくDiffusionモデルは、前述のGANを凌駕することを目標として生まれました。その原点は、バイオメディカル用に作られたU-netにあります。それまでの識別系AIは、画像に移っているものが何かを識別して分類することは出来ましたが、複数の対象が映った画像(例えば、車、建物、空、道路、電柱などを含む画像)において、個々の対象物の境界を明示して分類することは出来ませんでした。 

U-netはCNNプロセスを少し改良するだけでこれを出来るようにしました。さらに画期的なことは、境界周辺のピクセル数を細分化し、境界の解像度を上げることを可能にしました。当然ですが、境界だけでなく対象物そのものの内部にも適用できるので、画像全体をより解像度の高い画像に変換できるようにしたのです。大きな欠点は処理量が大きいため、計算に長い時間が掛かることでした。 

この問題は、Diffusionプロセスに前述のオートエンコーダの概念を持ち込むことにより解決しました。画像の次元を削減した特徴量空間(あるいは潜在空間)を考え、次元数の少ないこの空間内において、特徴量とノイズの差を学習させるようにしたのです。次元が減るので一気に学習量は低減し、GPUを使うことを前提にすれば、実用性のある時間範囲内で計算を実行できるようになりました。 

さらにChatGPTと組み合わせることにより、テキストを入力するだけで解像度の高い画像が得られるようになったわけです。なお、GANやDiffusionプロセスの中身はとても興味深いものですが、今回はそこまで立ち入ることはしません。別の機会に議論できればと考えています。 

ここまで述べてきたように、画像系AIは非常に短期間の間にディープフェークと言える高解像度の画像を作れるまでに進化しました。10年前に、このような状況が10年後に実現することを予測できた人はいなかったのではないでしょうか? 

なぜ、これほど速く進化できたのか? その秘密をひと言で述べるならば、陳腐な結論と思われるかもしれませんが、「完成度が高く、異なる機能を持つ技術(あるいはコンセプト)を上手に組み合わせたから」という結論です。関連の論文を読みましたが、これ以上の秘密は見つかりませんでした。 

「技術あるいはコンセプトを組み合わせただけ」と言うと簡単そうに思うかもしれませんが、そんなことはありません。技術やコンセプトを組み合わせた効果を見通すには、個々の要素を理解した上で、全体像をイメージしなければならないからです。 

多くの技術者は個別要素の完成度を高めるだけで満足してしまう場合が多いですが、そこで立ち止まると、驚きを生み出す革新的なコンセプトまで辿りつけません。革新を生むには、やはり要素を最大限に活かす組み合わせを見つけることなのです。 

貴社にも優れた要素技術はあるでしょう。自社の別の要素技術や他社の技術と組み合わせることにより、どのような新しいコンセプトが生まれるか、是非、検討することをお勧めします。