Googleが遺伝的アルゴリズムを簡単に扱えるEvoJAXを発表。
2022.02.15
Updated by Ryo Shimizu on February 15, 2022, 11:01 am JST
2022.02.15
Updated by Ryo Shimizu on February 15, 2022, 11:01 am JST
Googleからまた新しい技術が発表された。
EvoJAXは、ハードウェアアクセラレーションを可能とした遺伝的ニューラルネットワーク技術(neuroevolution)である。
本来、AIにおけるニューラルネットワークとは、より厳密には「人工ニューラルネットワーク(ANN;Artificial Neural Network)」と呼ばれている。
これはもちろん、人間や生物が持つ脳細胞などの神経細胞網(NN;Neural Network)を人工的に模倣したものだからそう呼ばれている。
初期の(人工)ニューラルネットワークは、神経細胞の働きを数理モデル化し、コンピュータで扱えるようにエミュレーションしたものに過ぎなかった。問題は、神経細胞の細かな働きが解明されていないのにもかかわらず、その時点でわかっている情報だけから、構造を模倣して人工ニューラルネットワークを作ったことにある。
つまり、理論的な裏付けがあって考案されたのではなく、直感的なひらめきがあって構造が模倣されていることから、ニューラルネットワークの研究を嫌う人工知能研究者も少なくない。特にニューラルネットワーク以外の人工知能技術が発達していた我が国には、そうした認識が根強い。
このニューラルネットワークをうまく学習させる方法がわからず、数十年の歳月を経て、ようやく発見され、有効性が確認され、周知たのが、つい2012年のことである。
これがいわゆる「ディープラーニング」の始まりで、ディープラーニングとは突然現れたわけではなく、数十年の歳月を経て、誤解を恐れずに言えば、ほとんど偶然発見された学習手法である。
科学の世界では、この「失敗や見込み違い、手違いから偶然に大発見される」ということが頻繁に起きる。というよりも、ほとんどの科学的飛躍はそのようにして生まれるとさえ言われている。
この、「偶然発見される」という性質を考えると、たとえばディープラーニングブームの初期にもてはやされた畳込みニューラルネットワーク(CNN;Convolutional Neural Network)でさえも、本当にそれが最適な方法なのか疑わしくなってくる。実際、2012年以降のディープラーニングの研究とは、さまざまなアイデアの組み合わせを闇雲に試して、偶然良い結果が出たものを(時には良い結果が出なくても)論文発表する、ということの繰り返しで発達した。
この性質を考えると、そもそもすでに知られたテクニックの組み合わせを試して良い結果を得るだけなら、我々人類を含む生命体は、非常に効率的な手法を生まれつき備えている。つまり、遺伝である。
そこで、近年急速に「遺伝的ニューラルネットワーク(neuroevolution)」が注目されてきた。
これは、ニューラルネットワークを含む、さまざまな事物の構造を、遺伝子を介して共進化させることによって短期間に人間では思いもよらないような解決策につなげる、という技術である。
公正のために付け加えるが、筆者の所属するギリア株式会社では、一昨年から遺伝的ニューラルネットワーク技術を応用したニューラルネットの自動設計システム「Ghelia Spectre(ギリア・スペクター)」を開発し、実際に顧客への供給を開始している。この技術は、特にエッジAI分野など、資源の限られた場所で有効で、全く同じかそれ以上の性能を発揮するAIを、人間の設計したAIよりも1/30程度の計算量で実現できる。
遺伝的ニューラルネットワークは、人間の設計と比較してハードウェアや与えられた制約条件に向けて最適な構造を短期間に見つけ出す。そのためには大規模な計算資源が必要で、ギリア・スペクターでは独自に開発した分散コンピューティング環境で膨大な進化計算を行うことでこれを実現している。
今回、Googleが発表したEvoJAXは、こうした流れにGoogleが参画してくるということでもある。
これまで、ニューラルネットは人間が設計するのが当然とされていたが、こうしたフレームワークが整備されることで、ニューラルネットの設計を人間がする時代がいよいよ終わりを告げる可能性がある。
ただし、現状公開されているEvoJAXのサンプルコードだけからは、残念ながらそこまでの威力を感じることは難しい。
筆者もEvoJAXが公開されて実際に大喜びで試してみた。というのも、本来、遺伝的ニューラルネットワークは、最低でも100GPUくらいの巨大な計算資源がなければ試すことすら難しいとされているからだ。EvoJAXでは、それを単一のGPUでもサポートするということで、非常に期待が大きかった。
実際にEvoJAXのサンプルコードとして用意されているのが、機械学習ではお馴染みの手書き数字の認識というタスクで、これがEvoJAXならわずかな時間(公式には5分)で正解率98%以上を達成するという。
実際にGoogle Colabで試してみると、このサンプルの場合、ニューラルネットワークの構造は固定されていて(つまりニューラルネットそのものは設計しない)、ニューラルネットワークに渡すパラメータ(ハイパーパラメータ)だけが変化するようだ。従って、このサンプルではニューラルネットのサイズが小さくなったりはしない。あくまでも「遺伝的アルゴリズム」をニューラルネットと組み合わせることのサンプルに過ぎないということだ。
構造が変化すればファイルサイズは変化するので、52KB固定なのは構造が固定されているからである。
本来はニューラルネットの構造を遺伝的に進化させるプログラムが必要だが、そこを書くのはかなり大変なのでサンプルでは省略されていると思われる。
実際、13分かけても96%の正解率にしかならなかった。
しかし、EvoJAXを使わずにJAXで普通に学習すると、2分で97%の正解率を超えた。
このサンプルを最初に持ってくるのは少々もったいない。
EvoJAXの真価は、たとえば自動翻訳などに使われるSeq2Seq(シーケンスtoシーケンス)のようなこれまでの遺伝的ニューラルネットワーク(neuroevolution)が扱うのが難しいとされていた問題や、強化学習のような問題、そして図の作画のようなクリエイティブな問題も解決できるという汎用性だ。
たとえば、筆者が手元のトンカツの写真を50個の三角形で「それっぽく描け」と命令すると、EvoJAXは10000世代にわたる試行錯誤の結果、それっぽい絵を描き出す。
この話題に詳しい読者からすると、「これは微分可能レンダラーでもできるのでは?」と考えるかもしれない。
実際、微分可能レンダラーを使えば、似たようなことはできなくもない。
重要なのは、「この方法でできるのでは」ということではなく、「EvoJAXという単一の手法でこんなバラエティ豊かなものへ応用できる」ということである。
JAXは、Python上に幅広く、微分可能なプログラミング環境を提供するフレームワークで、同じくGoogleによる微分可能物理エンジンのBRAXもJAXを用いて実装されている。
そしてEvoJAXは、JAXが使えるかなり広い範囲において、微分可能な問題を遺伝的アルゴリズムで解くという手段を提供しているということになる。
これまで、遺伝的アルゴリズムは非常にハードルが高く、なかなかアルゴリズム開発手法として一般的には定着してこなかった。
しかし実は、産業の現場では、信号処理やさまざまな場面で遺伝的アルゴリズムが強力な武器になることは昔から知られており、「ここぞ」という時に使う最終手段だった。
遺伝的アルゴリズムで実際にうまくいく成果を出すには、遺伝的アルゴリズムの運営ノウハウと、巨大な計算資源が必要になるからである。
ところが、EvoJAXの登場で、基本的に「微分可能なものならば遺伝的に処理可能」ということになった。
筆者としては、EvoJAXの出現がAIやアルゴリズムの開発だけでなく、プログラミングのパラダイム全体にポジティブな影響を与えることを期待したい。
おすすめ記事と編集部のお知らせをお送りします。(毎週月曜日配信)
登録はこちら新潟県長岡市生まれ。1990年代よりプログラマーとしてゲーム業界、モバイル業界などで数社の立ち上げに関わる。現在も現役のプログラマーとして日夜AI開発に情熱を捧げている。