walkingmask’s development log

IT系の情報などを適当に書いていきます

MENU

MiniWobで遊ぶ: 強化学習xWeb

こちらの記事の続きです。

walkingmask.hatenablog.com walkingmask.hatenablog.com

ソースコード等はwalkingmask/wobで公開しています。

強化学習xWeb

強化学習といえば、Atariを攻略したDQNやAlphaGOが熱いですね。DQNは、ディープラーニングで画像から特徴を抽出してゲームを学習していました。凄いです。

一方で、ゲームではなくWebを画像ベースで学習できると色々できて面白そうですよね。

Webを強化学習の対象にした素晴らしいアプローチに、World of Bits(以下WoB)があります。

WoBは、人間の命令が埋め込められたWeb画像をエージェントに与え、その命令を達成するようにWeb操作を学習させる枠組みです。

https://blog.openai.com/content/images/2017/02/universe_img_3.png

また、MiniWoB、FormWoB、QAWoBといった、様々なWebタスクを定義して、A3Cという強化学習アルゴリズムを使ってベースラインを作っています。

今回は、その中のMiniWoBを対象にして、WoBの論文に沿って色々試した記録を残したいと思います。

MiniWoB

MiniWoBがどういうものかは、ここを見てもらうのが一番早いと思います。

ざっくり書くと、

  • 異なる100個の独自に作成されたタスク
  • 複数のWeb要素をマウス・キーボード入力で操作することで達成する
  • 210x160x3の画像サイズ
  • 黄色い部分は命令記述部

といった感じです。

openai/universeに、このうち80個のMiniWoBタスク環境があるので、これを利用させてもらいます。

それと、マシンリソースと時間の都合上、この中から5つのタスクだけを選びました。

  • ClickCollapsible-v0
  • ClickDialog-v0
  • GuessNumber-v0
  • HighlightText-v0
  • ResizeTextarea-v0

モデルの作成

まずは、学習するエージェントが必要です。といっても、A3Cは非同期処理で動くことが前提なので、一から実装するのは大変だと思い、Universeと同じOpenAIが実装したopenai/universe-starter-agentを使わさせてもらいます。

universe-starter-agentは、Universeを遊ぶためのスターターキットみたいなリポジトリで、A3Cが実装されており、Pongを画像ベースで学習できます。

ちなみに、これをがっつり学習させるためにはCPUコアをたくさん積んだマシンが必要となるので、(学生的には)あまり気軽には走らせられないです。

そのままだと、WoB論文と異なる設定等があるため、ちょいちょい変更しました。

デモデータの作成

WoB論文では、A3Cで学習する前にBehavioral Cloningという教師あり学習でモデルを事前学習させています。

そのBehavioral Cloningに必要なのがデモデータです。

デモデータは、人間がタスクを実行したデモンストレーション(フレームと行動の記録)を、フレーム-行動ペアにしたものです。

これを作るために、Universeexample/recorders/vnc_recorder.pyと、MiniWoB環境のコンテナにあったevent_readers.pyを使います。

ただ、この方法で作成するデモデータは、あまり質が良くないように思います。

といっても、他の方法(Quicktime PlayerとChrome+JSを使う)も試したのですが、なかなか厳しい感じでした。

もっとエレガントなデータを作るのがこれからの課題の1つです。

ちなみに、作ったデモはこんな感じ。

f:id:walkingmask:20180301134110g:plain

Behavioral Cloning

デモデータを作成したら、Behavioral Cloning(以下BC)を行います。

ちなみに、Behavioral Cloningというフレーズは、Udacityの自動運転コースで出てくるようです。

BCを行う理由は、タスクが長く報酬が稀だと学習が終わらなからなようです。

イメージしやすいように図にしました。力作です。

f:id:walkingmask:20180301143816p:plain

教師あり学習なので、learning curveとvalidation curveを見てどれくらい学習したらいいか考えていくと思うのですが、モデルのlossを見てみると

f:id:walkingmask:20180301141918p:plain

と振動していて、どうしたらいいかわからず「とりあえず100epoch回そっ」で行ったり...

後からvalidation lossを見てみると

f:id:walkingmask:20180301142204p:plain

という感じだったので、epoch数は減らした方がいいかもしれません。

グラフだけ見ると、あまり学習できてなさそうなのですが、学習済みパラメータを使ってタスクを解く様子を見ると、それらしい動きをしているのがわかります。

f:id:walkingmask:20180301143020g:plain

A3C

BCで学習したエージェントを、さらに、A3Cという強化学習手法を使って学習させます。

A3Cは、Asynchronous Advantage Actor-Criticの略で、非同期でアドバンテージを使ったActor-Criticという意味です(笑)。

詳細は将来の自分が詳しく説明してくれると信じて、ざっくり書くと

  • Actor-Criticという強化学習手法がベース(TD学習、方策と価値評価が別れている)
  • 深層NNで関数近似
  • 方策勾配を使って学習、その際にAdvantage関数を使う
  • 単一マシンのスレッドでAsyncronousに複数のエージェントが走る

って感じのようです。方策部が別れていることで連続行動空間も扱えたり、Advantageで学習が安定したり、Asyncronousで Experienceの相関が減ったりと嬉しいことが多いようです。

このA3Cを使って学習します。パラメータやステップ数はWoB論文にできるだけ沿います。

ClickCollapsibleを見ると、BC後とあまり変わってないように見えますが、とりあえずいい感じです!

f:id:walkingmask:20180301145857g:plain

評価

WoB論文の実験に対して、どれくらい再現できてるのかをグラフにして評価します。

評価にはSuccess Rate(SR, 正リワード/全リワード)という指標が使われていたので、これを使います。

論文の同タスクのSRのグラフはこんな感じ。

f:id:walkingmask:20180301150224p:plain

未学習(ランダム)、BC後、BC+A3C後のパラメータそれぞれで10万ステップタスクを実行してSRを計測します。

結果はこんな感じ。

f:id:walkingmask:20180301150525p:plain

最初のタスクは強化学習できてたっぽいのですが、それ以外のタスクでは全然学習できていませんでした。

ほんのり考察すると、最初のタスクClickCollapsibleは一番簡単なタスクだったから学習できたのではないかと考えています。

それぞれのタスクは以下のような特徴を持っています

  • ClickCollapsible: 順番に2回クリックする必要がある。命令は関係ないと言える
  • ClickDialog2: 1回ボタンをクリックするだけ。ただし、命令の通りする必要がある
  • GuessNumber: 複数回クリックを、それなりの順序を持ってする必要がある。命令は関係ないが、ヒントを読む必要がある
  • HighlightText: 単純なドラッグ操作後にクリックを1回する必要がある。命令は関係ない
  • ResizeTextarea: 単純なドラッグ操作とクリック1回だが、命令通りに行う必要がある

動作てきには、ClickCollapsibleよりClickDialog2の方が簡単です。それでもスコアがその通りにならなかったのは、文字列情報を利用することが難しかったからではないかなと。

WoB論文の方のグラフの、HighlightTextとResizeTextareaのスコアの比較からもそれは言えますし、より文字列が重要になるGuessNumberがこの中で一番低いことからも言えるように思います。

自然言語処理を挟んで、スコアがどう変化するかといった実験も課題の1つです。

あとは、論文著者に色々質問したい...

まとめ

とりあえず、ClickCollapsibleだけでも学習できてたっぽいのでめっちゃ嬉しい!

今後も、色々と実験を重ねていきたいと思います。

ただ、Universeは開発止まってしまっていて、MiniWoBの環境も色々不安な点があるので、代替手段を探すか、デバッグするか、1から作るかする必要性を感じています...

強化学習xWebがもっと流行って、機械学習xWebがもっと進んで、Jarvisみたいな人工知能が早く現れてくれることを願います!