OpenAI Gymでは環境ラッパーで前処理を追加できるようになっています。
前処理
前処理とは、環境とエージェントがやり取りする情報を、エージェントが学習しやすい形式に変換する処理のことで、「行動」「状態」は学習速度とサンプル効率、「報酬」「エピソード完了」は目標設定が主な目的になります。
処理対象 | 目的 |
---|---|
行動 | 型の低次元化による学習速度の向上 サンプル効率を考慮した、型の指定 決まりきった操作の実施(環境リセット後の最初の行動を「FIRE」とするなど) |
状態 | 型の低次元化による学習速度の向上 サンプル効率を考慮した、型の指定 |
報酬 | 目標設定を考慮した、報酬のタイミングと量の調整 サンプル効率を考慮した、報酬のタイミングと量の調整 |
エピソード完了 | 目標設定を考慮した、エピソード完了の条件の指定 エピソードを短くすることによる、学習回数の向上 |
環境ラッパー
前処理を提供する環境ラッパーは、用途や環境に合わせて様々な種類が提供されています。
種類 | 説明 | 提供元 |
---|---|---|
Monitorラッパー | 学習状況の監視 | OpenAI Gym/Stable Baselines |
Atariラッパー | Atari環境用の前処理 | OpenAI Baselines |
Retroラッパー | Gym Retro環境用の前処理 | OpenAI Baselines |
Commonラッパー | Gym環境用の前処理 | OpenAI Baselines |
VecEnvラッパー | ベクトル化環境専用の前処理 | Stable Baselines |
Atariラッパー
Atariの環境用の前処理を行う環境ラッパー。Atari環境を攻略したことで有名な学習アルゴリズム「DQN」の論文などで紹介されている各種手法が提供されている。
atari_wrapper.py入手場所
NoopResetEnvラッパー
環境リセット後は行動なしとすることで、ゲーム開始状態にばらつきを与え、特定の開始状態に特化した学習とならないようにします。
FireResetEnvラッパー
環境リセット後の最初の行動をFIREとすることで、強制的にゲームを開始させゲームの学習がすぐできるようにします。
MaxAndSkipEnvラッパー
Atari環境では60フレーム/秒でゲームが進むが、行動選択はそれほど頻繁には行わないため、4フレームに1度行動を切り替えるようにすることで、学習速度を向上させます。
ClipRewardEnvラッパー
報酬を「-1」「0」「1」にクリッピングすることで、環境ごとの報酬サイズの違いをなくし、複数の環境を同じモデルで攻略できるようにします。
WrapFrameラッパー
画面イメージを84×84のグレースケールに変換することで、データ量を少なくし学習速度を向上します。
FrameStackラッパー
直近4フレームから推論するようにすることで、連続した動きの特徴抽出を可能にします。
ScaledFloatFrameラッパー
環境の状態を正規化することで、学習効率が上がるようにします。
EpisodicLifeEnvラッパー
ライフ0でエピソード完了とすると完了までに時間がかかるため、ライフ減少でエピソード完了とすることで学習効率が上がるようにします。ただし、環境リセットはライフ0の時だけにします。
DeepMindスタイルのラッパー
DeepMindスタイルのラッパーを追加する便利メソッド。
DeepMind
Retroラッパー
Retro環境用の前処理を行う環境ラッパー。OpenAI Retro Contestで考え出された各種手法が提供されています。
retro_wrapper.py入手場所
StochasticFrameSkipラッパー
nフレームごとに行動を切り替えます。また、一定確率で行動を1フレーム余分にすること(スティッキーアクション)で行動シーケンスの学習から、問題解決の学習に目的をかえます。
StartDoingRandomActionsラッパー
環境リセット後0~30ステップの間、ランダム行動を実施します。ゲーム開始状態にばらつきを与え、特定の開始状態に特化して学習しないようにします。
Downsampleラッパー
画面画像サイズをサイズダウンします。
Rgb2grayラッパー
画面画像をグレースケールにします。
AppendTimeoutラッパー
タイムアウトを追加します。
MovieRecordラッパー
エピソード毎に動画(bk2)を保存します。(Integration UIとPythonで再生可能)
SonicDiscretizerラッパー
ソニックの行動空間を変換し行動パターン数を減らし、学習速度を向上します。
RewardScalerラッパー
報酬をスケーリングし正規化(0.0~1.0)することで学習効率を上げます。
DeepMindスタイルのラッパー
DeepMindスタイルのラッパーを追加する便利メソッド。
DeepMind
Commonラッパー
ClipActionsWrapperラッパー
行動空間のLowとhighで行動をクリッピングします。
TimeLimitラッパー
1エピソードの最大ステップ数を設定します。
VecEnvラッパー
ベクトル環境専用のラッパー。
VecNormalizeラッパー
状態と報酬を正規化するために、移動平均と標準偏差を計算します。
VecFrameStackラッパー
連続した複数の状態をスタックします。