OpenAI GYM CarRacing DQN: 自動運転車を訓練するためのディープ Q ラーニング
導入
強化学習の分野では、自動運転が可能な CarRacing 2D エージェントをトレーニングすることは興味深い課題です。このブログでは、CarRacing の仮想レース トラックをナビゲートできるモデルをトレーニングするために、TensorFlow と Keras を使用して実装された Deep Q Learning (DQN) のコードについて詳しく説明します。
DQN アルゴリズムの原理
Q値とベルマン方程式
Q 値 (状態と行動のペアの期待される累積報酬) は、ベルマン方程式によって定義されます:
[ Q(s,a) = r(s,a) + \gamma \max Q(s', A) ]
- (s) は現在の状態です
- (a) は実行されたアクションです
- (r(s,a)) は、状態 (s) でアクション (a) を実行した後の報酬です。
- (s') は次の状態です
- (A) はアクションスペースです
- (\gamma) は、将来の報酬の重要性を測定するために使用される割引率です。
DQN構造
DQN は、Q ラーニングとディープ ラーニングを組み合わせ、Q テーブルをニューラル ネットワークに置き換えます。モデルの構造は次のとおりです。
model = Sequential()
model.add(Conv2D(filters=6, kernel_size=(7, 7), strides=3, activation='relu', input_shape=(96, 96, self.frame_stack_num)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(filters=12, kernel_size=(4, 4), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(216, activation='relu'))
model.add(Dense(len(self.action_space), activation=None))
model.compile(loss='mean_squared_error', optimizer=Adam(lr=self.learning_rate, epsilon=1e-7))
- 入力は、それぞれ 96x96 ピクセルの 3 つの連続した上面画像です。
- 畳み込み層と最大プーリング層を使用して画像の特徴をキャプチャします
- 全結合層は各アクションの Q 値を出力します
トレーニングプロセスの設計
体験リプレイ
データ間の一時的な相関関係を打ち破るために、エクスペリエンス リプレイを使用して以前のエクスペリエンスをエクスペリエンス プールに保存し、トレーニングのためにそれらからランダムにサンプリングします。
def memorize(self, state, action, reward, next_state, done):
self.memory.append((state, self.action_space.index(action), reward, next_state, done))
ターゲットネットワーク
ターゲット ネットワークを導入すると、ターゲットの変化が遅くなり、トレーニングの安定性が向上します。
def update_target_model(self):
self.target_model.set_weights(self.model.get_weights())
トレーニングループ
def replay(self, batch_size):
minibatch = random.sample(self.memory, batch_size)
train_state = []
train_target = []
for state, action_index, reward, next_state, done in minibatch:
target = self.model.predict(np.expand_dims(state, axis=0))[0]
if done:
target[action_index] = reward
else:
t = self.target_model.predict(np.expand_dims(next_state, axis=0))[0]
target[action_index] = reward + self.gamma * np.amax(t)
train_state.append(state)
train_target.append(target)
self.model.fit(np.array(train_state), np.array(train_target), epochs=1, verbose=0)
各トレーニング サイクルでは、データのバッチがエクスペリエンス プールからランダムに選択され、ターゲット Q 値が計算され、モデルの重みが更新されます。
トレーニング結果とモデルの進化
トレーニングを通じて、モデルがトラックをナビゲートすることを徐々に学習していることがわかります。
400ラウンドのトレーニング後
モデルは学習中に急旋回が困難になり、コースから逸脱することがありました。
500ラウンドのトレーニング後
モデルはより熟練し、エラーが減り、運転がよりスムーズになります。
600ラウンドのトレーニング後
このモデルは報酬を求めるあまり無謀になり、急旋回中にコースアウトを引き起こしました。
要約する
このブログでは、DQN アルゴリズムを使用して自動運転エージェントをトレーニングするプロセスの詳細な分析を提供します。エクスペリエンスの再生とターゲット ネットワークの適用を通じて、モデルは Q 値を最適化し、より良いナビゲーション戦略を達成する方法を徐々に学習します。ディープ Q ラーニングは、複雑な環境における意思決定の問題を解決するための強力かつ柔軟な方法を提供し、自動運転分野の研究と応用に新しいアイデアを提供します。