BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース MITがJuliaベースのAI用言語のGenを発表

MITがJuliaベースのAI用言語のGenを発表

原文(投稿日:2019/07/04)へのリンク

先日の論文で、MITの研究者たちが、汎用確率的言語(general-purpose probabilistic language)のGenを発表した。Juliaをベースとするこのプログラム言語の目的は、高レベルのプログラミング構造によるモデル表現と推論アルゴリズムの作成を可能にすることだ。

この目的のため、Genには、確率モデルをカプセル化する生成関数インターフェイス(generative function interface)、既存の生成関数から新たな生成関数を作成するコンビネータ(combonator)、提供する高レベル推論アルゴリズムをユーザが選択可能な推論ライブラリなど、斬新な言語構成要素が数多く含まれている。

Genは最初の確率的プログラミング言語ではないが、既存の言語にはモデリングレベルでの汎用性や、ジェネリックモデリングをサポートするアルゴリズムの効率性が欠けている、とMITの研究者たちは主張する。Genは、モデリングレベルでの表現力とアルゴリズムレベルでの効率の両立を目指しているが、これには2つの異なる目標がある。 アルゴリズム効率、すなわちアルゴリズムが結果を生成するために必要なイテレーションの回数と、実装効率、すなわち1回のイテレーションに必要な時間だ。

これら2つの目標を達成する上でGenが採用したアプローチは、モデルをプログラムとして表現することに固執する従来のアプローチとは一線を画している。それらとは異なるGenのモデルとは、生成関数(GF)と呼ばれるブラックボックスであり、推論に必要な機能をインターフェース(GFI)経由で提供するものだ。このインターフェースを使って、推論アルゴリズムを記述する。Genモデルはさまざまな方法で表現可能で、それぞれが異なる柔軟性/効率のトレードオフを持つものになる。Genは、モデリング言語を組み込みで提供することによって、Juliaの関数定義の構文を拡張する。

@gen function foo(prob::Float64)
    z1 = @trace(bernoulli(prob), :a)
    z2 = @trace(bernoulli(prob), :b)
    return z1 || z2
end

このモデリング言語の一種が"Static Modeling Language"と呼ばれるもので、Juliaの中間表現(IR)言語のサブセットのみを使用し、サブセット外の構成要素の使用をエラーとしてフラグ付けすることにより、実行時間とパフォーマンスの両面を向上することを目標とする。

生成関数によるアプローチは、Genを広範な問題に適用できるものにするための鍵であり、TensorFlowで作成されたモデルを、プログラミング言語で記述されたアルゴリズムとして、あるいはシミュレーションの結果として使用可能にする。モデルは、コンビネータを使うことで、ある程度の組み合わせや再利用が可能である。コンビネータは、個別にサンプリングされたデータポイントにようなデータセットなどの、繰り返し発生するモデリングパターンをキャプチャするものだ。コンビネータはGFを操作するが、それ自体GRではないという意味では、"高次の生成機能(higher-order generative function)"に近いといえる。コンビネータを使用することで、既存ライブラリをベースとした推論アルゴリズムの開発が可能になる。

MITでは、ベイズ統計(Bayesian statistics)からマシンラーニング、コンピュータビジョンに至るまで、さまざまな問題をGenの対象にしている。事実、その柔軟性は、一般的に特定のアプローチ(ディープニューラルネットワークなど)により焦点が絞られている他のアプローチに比較して、大きな改善点のひとつに挙げられている。MITによると、空間中のオブジェクト追跡、深度画像からの3D体のポーズの推定、時系列構造の推定といった数々の問題において、Genはすでに、既存の確率的プログラミングシステムよりも優れたパフォーマンスを示している。

GenはMITが開発した数値解析専用言語であるJulia上に構築されており、Juliaのパッケージとして提供されている。MITの"Introduction to Gen"には、確率的プログラミングに関する簡単な紹介がある。

この記事に星をつける

おすすめ度
スタイル

BT