Github: https://github.com/facebookresearch/CommAI-env
CommAI-env
CommAI-env(コミュニケーションベースのAIのための環境)は、AI( Machine Intelligence)のロードマップに記述されているAIシステムのトレーニングと評価のための実験的なプラットフォームです。
前書き
CommAI-envは、コミュニケーションベースのセットアップでAIシステム、つまりLearner (システム開発者の選択した任意の言語でコード化された)をトレーニングおよびテストするためのプラットフォームで、ビットレベルのインターフェイスを介して環境とやりとりします。 環境は、学習者に多数のコミュニケーションベースのタスクを解決するように依頼し、正常に完了したタスクインスタンスごとに報酬を割り当てます。
学習者は、すべてのタスクの複数のインスタンスでランダムな順序で提示され、報酬を最大にするためにはできるだけ多くを解決する必要があります。 現在実装されているタスクの例としては、カウント問題、学習者が項目のリストを覚えて質問に答える必要があるタスク、テキストベースのナビゲーションスキームによるナビゲーション指示(タスクの詳細な説明についてはこのドキュメントを参照)などがあります。 タスクのセットは公開されています。私たちは常にそれを拡張しており、他の人たちが貢献できるように招待しています。
CommAI-envの究極の目標は、学習者が語学を通して真に人間と触れることができるように、徹底的に訓練できる環境を提供することです。 タスクはほとんど問題にならないかもしれませんが(英語の知識が役に立たないスクランブルモードで解決しようとしていますが)、私たちは現在の学習ベースのアルゴリズムの理解を超えていると考えています。それらをすべて解決できる学習者は、すでに相互作用するために必要なコミュニケーション・インテリジェンスのレベルに向けて大きな進歩を遂げており、人間の先生からさらに学ぶだろうと考えています。 注意:CommAI-envのタスクは、インテリジェントなコミュニケーションエージェントが所有すべきすべてのスキルをカバーしていると主張していません。 CommAI-envを解決するためには、知的エージェントは、人間や他の手段とのやりとりを通じて、それが必要とするさらなるタスクをすべて取得できるように、非常に一般的な学習機能を備えていなければなりません。
CommAI-envの基本的な特徴は、AIシステム( OpenAI Gym 、 Allen AI Science Challenge 、 MazeBase、またはbAbIなど )をトレーニングおよびテストするために現在提案されている他の環境およびデータセットと区別され、高速、一般的、コミュニケーションベースの学習者の育成。
-
CommAI-envの焦点は、すべてのコミュニケーションが学習者と環境の間の共通のビットレベルのインターフェイスを通じて行われるコミュニケーションベースのタスクに完全に焦点を当てています。
-
1つのCommAI-envセッションでは、学習者はさまざまなタスクに晒されるため、異なるタスクを認識し、必要に応じて異なるスキルを適用することを学ぶ必要があります。
-
多くのタスクは、学習者がデータとアルゴリズムの長期記憶を持つ限り、1つまたは複数の問題を解決することで、他のタスクをより簡単に解決する必要があるという意味で、段階的です(例:学習者が基本的なカウント作業を解決し、オブジェクトとプロパティを関連付ける方法を学習した後)。
-
トレーニング段階とテスト段階の間には分裂はありません。
-
一方では、学習者は固定された一連のタスクに対して解を覚えるだけでなく、直面する新たな問題を一般化する方法を学ぶべきである。
-
他方では、人間と同じように、少数の曝露の後に学習者は簡単な問題を解決できるはずです。したがって、評価の際に学習のスピードを考慮する必要があります。
-
-
プラットフォームが十分に成熟している場合、CommAI-envに基づいて競技を行う予定です。 私たちが言ったことを考えると、評価版のセットアップには、開発版に含まれているものとは異なる一連のタスクがあります。 評価タスクが異なる可能性のある例としては、異なる(自然または人工の)言語でキャストされたり、学習者を取り巻く新しい物や場所について学習する必要がある場合、開発中に取得されたスキルの新しい組み合わせが必要な場合、等
CommAI-envは現在、ベータテストの段階にあり、お客様からのフィードバックと貢献をお待ちしております。
ランニング
環境は次のように実行できます。
cd src
# Creating a configuration file (for instance, by copying the full task set)
cp tasks_config.sample.json tasks_config.json
# Running the environment, in the simplest case, just providing the configuration file as an argument
python run.py tasks_config.json
環境は、json形式とpython形式の両方の設定ファイルを受け入れることに注意してください(srcディレクトリの例を参照)。 デフォルトでは、環境はヒューマンモードで実行されます ( 下記参照 )。 所定の学習アルゴリズムを使用して環境を実行する場合は、以下の対応するセクションを参照してください。
構成
まず、どのタスクがどの順番で学習者に供給されるのかを示す構成ファイルを作成する必要があります。
まず、完全なトレーニングセットに対応する構成ファイルを次のようにコピーします。
cp tasks_config.sample.json tasks_config.json
ヒューマンモード
学習者を擬人化できるシンプルなコンソールインターフェイス(ヒューマンモード)でシステムを実行するには、次のように環境を実行します。
python run.py tasks_config.json
これにより、次のように動作する環境と対話するためのコンソールベースのユーザーインターフェイスが提供されます。 環境が静かで、学習者が答えることを期待するたびに、コントロールは環境に戻されるストリングを入力できるユーザーに転送されます。
2つの間の通信、現在の時間と累積報酬が画面に表示されます。
学習アルゴリズムが直面している種類の問題をよりよく理解するためには、– --scrambled
フラグを使用して環境を実行します。 --scrambled
フラグは、観察された語の各単語をランダムな疑似単語で置き換えます。
警告:ヒューマンモードでは、教師からの入力について2つの前提があります。 最初の文字エンコーディングが含まれます。 入力はビット単位で実際に到着するが、人間のユーザがビットストリームを読むのは非常に不快なので、画面に表示する前に文字ストリームに変換する。 2つ目は、環境が2つの連続した空間を作り出した後に人間に制御を渡す、ターンウィング・コンベンションです。 これらの慣習は、その後のタスクの反復で変更することができるため、学習アルゴリズムによって安全に引き継ぐことはできません。
学習アルゴリズムの指定
与えられた学習アルゴリズムで環境を実行するには、 -l
または--learner
フラグの後に学習者クラスの完全修飾名を指定します。 たとえば、任意のサンプル学習者を使用できます。
-
learners.sample_learners.SampleRepeatingLearner
-
learners.sample_learners.SampleMemorizingLearner
学習アルゴリズムを定義するには、 next
関数とreward
2つの関数を定義する必要があります。 next
環境からビットを受け取り、学習者が次に話すビットを返す必要があります。 reward
は与えられた報酬を学習者に通知する。 Pythonでは、次のコードスニペットから学習者を作成することができます。
from learners.base import BaseLearner
class MySmartLearner(BaseLearner):
def reward(self, reward):
# record receiving a reward
def next(self, input_bit):
# figure out what should be
# the next bit to be spoken
return next_bit
学習者をプログラミング言語Xで定義する
他のプログラミング言語で学習アルゴリズムを定義することも可能です。 この目的のために、任意の学習者バイナリと環境との間にzeromq
ソケットを設定するスーパークラスの学習learners.base.RemoteLearner
zeromq
ます。 環境はサーバーとして機能します。 便宜上、ユーザは、同じプロセス内の環境と共に起動されるように、学習者を起動するコマンドを指定することができる。
セッションが作成されると、環境と学習者が初期化されます。
- 学習者は環境に「こんにちは」の握手を送ることから始まります。
- ループ:報酬を受け入れる、環境ビットを受け入れる、返信ビットを送る。
例:
#include <string.h>
#include "zmq.h"
int main()
{
// This is an example of a silly learner that always replies with '.'
char reply[1];
int n = 0;
const char* response = "00101110"; // '.' utf-8 code
// connect
void *context = zmq_ctx_new();
void *to_env = zmq_socket(context, ZMQ_PAIR);
int rc = zmq_connect(to_env, "tcp://localhost:5556");
// handshake
zmq_send(to_env, "hello", 5, 0);
// talk
while (true)
{
// receive reward
zmq_recv(to_env, reply, 1, 0);
// receive teacher/env bit
zmq_recv(to_env, reply, 1, 0);
// reply
reply[0] = response[n % strlen(response)];
zmq_send(to_env, reply, 1, 0);
n += 1;
}
zmq_close(to_env);
zmq_ctx_destroy(context);
return 0;
}
学習者バイナリでセッションを実行するには:
python run.py tasks_config.json -l learners.base.RemoteLearner \
--learner-cmd "/my/learner/binary"
コンソールビュー
ヒューマンモードの場合、デフォルトビューにはコンソールインターフェイスが表示され、自動学習アルゴリズムを実行するときには、アルゴリズムの実行速度を上げるためにデフォルトのビューがデフォルトになります。 ただし、引き続き引数-v ConsoleView
を渡すか、または同等の方法で--view ConsoleView
を渡すことで、コンソールビューを元に戻すことは可能--view ConsoleView
。 例えば:
python run.py -l learners.sample_learners.SampleRepeatingLearner -v ConsoleView tasks_config.json
要件
- Python 2.6以降
- zeromq(遠隔学習者用)
完全なドキュメント
完全なドキュメントは、Python Sphinxを使用して作成することができます。 これには、独自のタスクを作成する方法や環境内部の説明を記述する技術的なドキュメントが含まれています。 src/docs
行き、 make html
を実行しmake html
。
commAI-envコミュニティに参加する
あなた自身の研究と実験のためにリポジトリをフォークすることをお勧めします。
プロジェクトに関する一般的な話題については、Facebookページに参加してください: https : //www.facebook.com/groups/1329249007088140
私たちは積極的にあなたのバグ修正やそのような問題のプルリクエストを歓迎します。 詳細については、CONTRIBUTINGファイルを参照してください。
ライセンス
CommAI-envはBSDライセンスです。 我々はまた、追加の特許付与を提供する。