Hugging FaceでのDecision Transformersの紹介 🤗
Hugging FaceでのDecision Transformers紹介 🤗
🤗 Hugging Faceでは、ディープ強化学習の研究者や愛好家向けのエコシステムに貢献しています。最近では、Stable-Baselines3などのディープRLフレームワークを統合しました。
そして、今日は喜んでお知らせします。オフライン強化学習手法であるDecision Transformerを🤗 transformersライブラリとHugging Face Hubに統合しました。ディープRLの分野でアクセシビリティを向上させるための興味深い計画があり、これからの数週間や数ヶ月でそれを共有できることを楽しみにしています。
- オフライン強化学習とは何ですか?
- Decision Transformerの紹介
- 🤗 TransformersでDecision Transformerを使用する
- まとめ
- 次は何ですか?
- 参考文献
オフライン強化学習とは何ですか?
ディープ強化学習(RL)は、意思決定エージェントを構築するためのフレームワークです。これらのエージェントは、試行錯誤を通じて環境との相互作用を通じて最適な行動(ポリシー)を学び、報酬を受け取ることでユニークなフィードバックを得ることを目指します。
エージェントの目標は、累積報酬であるリターンを最大化することです。なぜなら、RLは報酬の仮説に基づいているからです:すべての目標は、期待累積報酬を最大化することとして記述できるからです。
ディープ強化学習エージェントは、バッチの経験を使用して学習します。問題は、どのようにしてそれを収集するかです:
オンラインとオフラインの設定での強化学習の比較、この投稿からの図
オンライン強化学習では、エージェントは直接データを収集します:環境との相互作用によってバッチの経験を収集します。その後、この経験を即座に(または一部のリプレイバッファを介して)使用して学習します(ポリシーを更新します)。
しかし、これはエージェントを実際の世界で直接トレーニングするか、シミュレータを持っている必要があることを意味します。もしそれがなければ、環境の複雑な現実をどのように反映させるか(環境での複雑な現実を反映させる方法は?)という非常に複雑な問題、高価な問題、そして安全性の問題があります。なぜなら、シミュレータに欠陥があれば、競争上の優位性を提供する場合はエージェントがそれを悪用する可能性があるからです。
一方、オフライン強化学習では、エージェントは他のエージェントや人間のデモから収集されたデータのみを使用します。エージェントは環境とは相互作用しません。
プロセスは次のようになります:
- 1つ以上のポリシーと/または人間の相互作用を使用してデータセットを作成します。
- このデータセットでオフラインRLを実行してポリシーを学習します。
この手法には欠点があります:反事実的なクエリの問題。データを持っていない場合にエージェントが何かをすることを決定した場合、どうすればよいですか?例えば、交差点で右折するがその軌跡を持っていない場合など。
このトピックにはすでにいくつかの解決策が存在していますが、オフライン強化学習についてさらに詳しく知りたい場合は、このビデオをご覧ください。
Decision Transformersの紹介
Decision Transformerモデルは、Chen L.らによって「Decision Transformer: Reinforcement Learning via Sequence Modeling」で紹介されました。これは条件付きシーケンスモデリングの問題として強化学習を抽象化します。
メインのアイデアは、RLの方法(値関数の適合など)を使用してポリシーをトレーニングする代わりに、シーケンスモデリングアルゴリズム(Transformer)を使用して、望ましいリターン、過去の状態、および行動が与えられた場合に、この望ましいリターンを達成するための将来の行動を生成することです。望ましいリターン、過去の状態、および行動が与えられた場合に、この望ましいリターンを達成するための将来の行動を生成するための自己回帰モデルです。
これは、従来のRLアルゴリズムを置き換えるため、強化学習のパラダイムを完全に変えるものです。つまり、Decision Transformersでは、リターンを最大化するのではなく、望ましいリターンを達成するための将来の一連の行動を生成します。
プロセスは次のようになります:
- 過去のKタイムステップをDecision Transformerに3つの入力(リターンまでの距離、状態、行動)としてフィードします。
- 状態がベクトルの場合は線形層で、フレームの場合はCNNエンコーダでトークンを埋め込みます。
- 入力は、GPT-2モデルによって処理され、自己回帰モデリングによって将来の行動を予測します。
デシジョントランスフォーマーアーキテクチャ。状態、アクション、およびリターンはモダリティ固有の線形埋め込みに供給され、位置エピソードのタイムステップエンコーディングが追加されます。トークンはGPTアーキテクチャに供給され、因果的なセルフアテンションマスクを使用してアクションを自己回帰的に予測します。図は[1]から。
🤗 Transformersでのデシジョントランスフォーマーの使用
デシジョントランスフォーマーモデルは現在、🤗 transformersライブラリの一部として利用可能です。さらに、Gym環境での連続制御タスク用に9つの事前学習済みモデルチェックポイントを共有しています。
ジムのWalker2d環境でオフラインRLを使用して学習された「エキスパート」デシジョントランスフォーマーモデル。
パッケージのインストール
pip install git+https://github.com/huggingface/transformers
モデルの読み込み
デシジョントランスフォーマーを使用することは比較的簡単ですが、自己回帰モデルであるため、各タイムステップでモデルの入力を準備する際には注意が必要です。このモデルの使用方法を示すPythonスクリプトとColabノートブックを用意しました。
🤗 transformersライブラリで事前学習済みのデシジョントランスフォーマーをロードするには次のようにします:
from transformers import DecisionTransformerModel
model_name = "edbeeching/decision-transformer-gym-hopper-expert"
model = DecisionTransformerModel.from_pretrained(model_name)
環境の作成
Gym Hopper、Walker2D、Halfcheetahの事前学習済みチェックポイントを提供しています。Atari環境のチェックポイントも近日中に利用可能になります。
import gym
env = gym.make("Hopper-v3")
state_dim = env.observation_space.shape[0] # 状態のサイズ
act_dim = env.action_space.shape[0] # アクションのサイズ
自己回帰予測関数
モデルは自己回帰予測を実行します。つまり、現在のタイムステップtで行われる予測は、前のタイムステップからの出力に順次依存します。この関数はかなり複雑なので、コメントで説明します。
# モデルからアクションを取得する関数。過去の20タイムステップのウィンドウを使用した自己回帰予測を行います。
def get_action(model, states, actions, rewards, returns_to_go, timesteps):
# この実装では過去の報酬に依存しません
states = states.reshape(1, -1, model.config.state_dim)
actions = actions.reshape(1, -1, model.config.act_dim)
returns_to_go = returns_to_go.reshape(1, -1, 1)
timesteps = timesteps.reshape(1, -1)
# 予測は最大20個の前のタイムステップに依存します
states = states[:, -model.config.max_length :]
actions = actions[:, -model.config.max_length :]
returns_to_go = returns_to_go[:, -model.config.max_length :]
timesteps = timesteps[:, -model.config.max_length :]
# シーケンスの長さにすべてのトークンをパディングする。これはバッチ処理を行う場合に必要です。
padding = model.config.max_length - states.shape[1]
attention_mask = torch.cat([torch.zeros(padding), torch.ones(states.shape[1])])
attention_mask = attention_mask.to(dtype=torch.long).reshape(1, -1)
states = torch.cat([torch.zeros((1, padding, state_dim)), states], dim=1).float()
actions = torch.cat([torch.zeros((1, padding, act_dim)), actions], dim=1).float()
returns_to_go = torch.cat([torch.zeros((1, padding, 1)), returns_to_go], dim=1).float()
timesteps = torch.cat([torch.zeros((1, padding), dtype=torch.long), timesteps], dim=1)
# 予測を実行する
state_preds, action_preds, return_preds = model(
states=states,
actions=actions,
rewards=rewards,
returns_to_go=returns_to_go,
timesteps=timesteps,
attention_mask=attention_mask,
return_dict=False,)
return action_preds[0, -1]
モデルの評価
モデルを評価するためには、いくつかの追加情報が必要です。トレーニング中に使用された状態の平均値と標準偏差です。幸い、これらはHugging Face Hubの各チェックポイントのモデルカードで利用可能です!
また、モデルの目標リターンも必要です。これがオフライン強化学習におけるリターン条件付きのパワーです:目標リターンを使用してポリシーのパフォーマンスを制御できます。これは、マルチプレイヤーの設定で特に強力です。ここでは、プレーヤーに適した難易度に相手のボットのパフォーマンスを調整したい場合に使用できます。著者は、その論文で素晴らしいプロットを示しています!
指定された目標(希望)リターンに基づいて条件付きの意思決定変形器によって蓄積されたサンプリング(評価)リターン。 上:Atari。 下:D4RL VoAGI-replay データセット。図は[1]から。
TARGET_RETURN = 3.6 # これはトレーニング中に正規化されました
MAX_EPISODE_LENGTH = 1000
state_mean = np.array(
[1.3490015, -0.11208222, -0.5506444, -0.13188992, -0.00378754, 2.6071432,
0.02322114, -0.01626922, -0.06840388, -0.05183131, 0.04272673,])
state_std = np.array(
[0.15980862, 0.0446214, 0.14307782, 0.17629202, 0.5912333, 0.5899924,
1.5405099, 0.8152689, 2.0173461, 2.4107876, 5.8440027,])
state_mean = torch.from_numpy(state_mean)
state_std = torch.from_numpy(state_std)
state = env.reset()
target_return = torch.tensor(TARGET_RETURN).float().reshape(1, 1)
states = torch.from_numpy(state).reshape(1, state_dim).float()
actions = torch.zeros((0, act_dim)).float()
rewards = torch.zeros(0).float()
timesteps = torch.tensor(0).reshape(1, 1).long()
# 環境でステップを実行する
for t in range(max_ep_len):
# 現在の時間ステップのアクションとしてのゼロを追加
actions = torch.cat([actions, torch.zeros((1, act_dim))], dim=0)
rewards = torch.cat([rewards, torch.zeros(1)])
# 実行するアクションを予測する
action = get_action(model,
(states - state_mean) / state_std,
actions,
rewards,
target_return,
timesteps)
actions[-1] = action
action = action.detach().numpy()
# このアクションに基づいて環境と対話する
state, reward, done, _ = env.step(action)
cur_state = torch.from_numpy(state).reshape(1, state_dim)
states = torch.cat([states, cur_state], dim=0)
rewards[-1] = reward
pred_return = target_return[0, -1] - (reward / scale)
target_return = torch.cat([target_return, pred_return.reshape(1, 1)], dim=1)
timesteps = torch.cat([timesteps, torch.ones((1, 1)).long() * (t + 1)], dim=1)
if done:
break
エージェントのビデオの作成を含む、より詳細な例は、私たちのColabノートブックに見つけることができます。
結論
Decision Transformersに加えて、Deep Reinforcement Learningコミュニティからさらに多くのユースケースやツールをサポートしたいと考えています。したがって、Decision Transformerモデルに関するフィードバックや、RLに役立つと思われる他のものを共同で構築できるフィードバックをお待ちしています。お気軽にお問い合わせください。
次は何ですか?
今後数週間から数か月の間に、私たちはエコシステムの他のツールをサポートする予定です:
- RL-baselines3-zooの統合
- RL-trained-agentsモデルのHubへのアップロード:stable-baselines3を使用した事前学習済みのReinforcement Learningエージェントの大規模なコレクション
- 他のDeep Reinforcement Learningライブラリの統合
- Atariのための畳み込みDecision Transformersの実装
- その他、今後も🥳
お問い合わせをいただき、コミュニティとの交流をするためには、私たちのdiscordサーバーに参加するのが最善です。
参考文献
[1] Chen, Lili、他。「Decision transformer: Reinforcement learning via sequence modeling.」 Advances in neural information processing systems 34(2021)。
[2] Agarwal, Rishabh、Dale Schuurmans、Mohammad Norouzi。「An optimistic perspective on offline reinforcement learning.」 International Conference on Machine Learning。 PMLR、2020。
謝辞
論文の第一著者であるKevin LuさんとLili Chenさんには、有意義な議論に感謝いたします。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles