Posts Issued in April, 2025

PUAの再検討

posted by sakurai on April 23, 2025 #970

記事ではChatGPTにグラフを3本書いて貰いました。区間差分をどのように取るかの違いの3種類のグラフです。

  • 修理対象=区間内の累積分布=区間不稼働度の差分: $Q_\text{exact}(t)$においては$Q(i\tau)-Q((i-1)\tau)$
  • 修理対象=区間内の累積分布=区間不信頼度が一定: $Q_\text{approx1}(t)$においては$-F(\tau)$
  • 修理対象=区間内の累積分布=区間不信頼度の差分: $Q_\text{approx2}(t)$においては$F(i\tau)-F((i-1)\tau)$

再考したところ、区間内での不信頼度の増分に対して修理するのはいかにも不自然に思えてきました。SMは区間内で不信頼度の増加を認識せず、区間内での全ての故障に対してK倍で修理を行うためです。 そこで、区間内修理対象(K倍したら修理度になる数値)を以下のように定義します。

  • 修理対象=区間不稼働度そのもの: $Q_\text{exact2}(t)$においては$Q(i\tau)$

そしてこのようなPUAのグラフを描いたところ、他のグラフとは様相が異なりました。図の赤がexact2です。

図%%.1
図970.1 4つのグラフ($\lambda=0.1$)

これではバラバラで分かりにくいので、故障率$\lambda$を0.005に下げてみました。

図%%.2
図970.2 4つのグラフ($\lambda=0.005$)

このように、故障率が低い場合は他の3つは収束するのに比べて今回のPUAはかなり低い値を取ります。


なお、本稿はRAMS 2025に投稿予定のため一部を秘匿しています。


左矢前のブログ 次のブログ右矢

Pongと強化学習 (95)

posted by sakurai on April 2, 2025 #969

インベーダゲームの報酬設計はどのようにしたら良いですか?


インベーダーゲームで移動に対しても微小なペナルティを適用することは、エージェントが無駄な動きを避け、より効率的な戦略を学習するために有用です。このペナルティを適切に設定することで、エージェントは必要な時にのみ移動し、より多くのインベーダーを撃破することに集中するようになります。以下に、移動に対する微小なペナルティを含む報酬設計のアプローチを説明します。

移動ペナルティの追加

  1. ペナルティの設定:

    • 移動に対するペナルティは小さく設定することが一般的です。例えば、移動するたびに -0.01 などの値を適用することが考えられます。これは、移動が基本的には許容されるが、できるだけ少ない移動で高い効率を達成することが望ましいためです。
  2. 報酬関数の更新:

    • 移動したことを検知し、それに応じて報酬から微小な値を引くように報酬関数を更新します。このとき、他の報酬要素(インベーダー撃破の得点や自機破壊のペナルティ)とのバランスを考える必要があります。

コード例

以下の関数get_rewardは、インベーダーの撃破、自機の破壊、そして移動に対する報酬を計算し、それを正規化する例を示しています。

    def normalize_reward(score, max_score=30, min_score=-1):
        # 最大得点で正規化
        return max(min(score / max_score, 1), -1)
    
    def get_reward(invader_type, player_hit, moved):
        base_scores = {1: 10, 2: 20, 3: 30}
        reward = 0
    
        # インベーダー撃破の得点を追加
        if not player_hit:
            reward += base_scores.get(invader_type, 0)
        
        # 自機が破壊された場合のペナルティ
        if player_hit:
            reward -= 100
        
        # 移動した場合の微小なペナルティ
        if moved:
            reward -= 0.01  # 移動するたびに少しのペナルティを適用
    
        # 報酬の正規化
        normalized_reward = normalize_reward(reward)
        return normalized_reward

ペナルティの影響の監視

この報酬設計を実装した後、エージェントの行動パターンを注意深く監視し、移動ペナルティが望ましい効果をもたらしているかどうかを評価することが重要です。ペナルティが高すぎると、エージェントが必要なときに移動を避けるようになり、パフォーマンスが低下する可能性があります。一方で、ペナルティが低すぎると、エージェントが無駄に多く移動し続ける可能性があります。そのため、適切なペナルティの設定とその効果の評価が、成功への鍵となります。


左矢前のブログ 次のブログ右矢

Pongと強化学習 (94)

posted by sakurai on April 1, 2025 #968

エピソードとは何でしょうか?自機3台が1エピソードと考えてよいですか?


強化学習における「エピソード」とは、エージェントが環境との相互作用を開始してから終了するまでの一連のステップまたは遷移のことを指します。エピソードの終了は通常、特定の終了条件が満たされたときに発生します。これには、目標の達成、最大ステップ数の到達、またはゲーム内での「失敗」状態(例えば、全てのライフを失うなど)が含まれます。

エピソードの定義

エピソードの具体的な定義は、対象となるタスクやゲームによって異なります。エピソードは以下の要素を含みます:

  • 開始:エージェントが環境の初期状態から開始します。
  • ステップ:エージェントがアクションを選択し、環境がそのアクションに基づいて状態を更新し、報酬を提供します。
  • 終了:ゲームオーバー、目標達成、または最大ステップ数に到達したときにエピソードが終了します。

自機3台が1エピソードか

具体的なゲーム(例えば、アーケードゲームの「スペースインベーダー」など)において自機が3台ある場合、1エピソードをどのように定義するかは、学習の目的によります。自機1台が失われるごとにエピソードをリセットすると、エージェントは一台失うごとのリカバリー戦略を学ぶことができますが、全機失うまでを一つのエピソードと定義すると、より長期的な戦略を学習することになります。

自機3台が全滅するまでを1エピソードと考える場合: - 利点:エージェントはより長い期間にわたる戦略を学習することができ、自機をいかに効果的に保つか、どのようにして最大限のスコアを出すかといった戦略を考えることができます。 - 欠点:自機が一度に失われた場合、特に序盤で失敗すると、そのエピソードでの学習効果が少なくなる可能性があります。

エピソードを自機1台ごとに区切る場合: - 利点:短いエピソードによって、特定の状況に対する反応を素早く学習することができます。また、失敗からの回復やその場での戦術的な判断を重視する戦略を学ぶことが可能です。 - 欠点:全体的なゲームの進行や、自機を長持ちさせる戦略など、より長期的な目標を達成するための戦略がおろそかになるかもしれません。

結論

エピソードの定義は、学習させたい行動や戦略に依存します。エージェントがゲーム全体の進行を理解し、長期戦

略を学習することが目標であれば、自機3台全滅をもって1エピソードとすることが適切です。これにより、より総合的なゲームプレイ戦略を開発するためのデータが提供されます。


左矢前のブログ 次のブログ右矢