pixcelo / win-torch

0 stars 0 forks source link

rewardが増加しない(エージェントが学習できていない) #1

Open pixcelo opened 1 year ago

pixcelo commented 1 year ago

改善できるポイント

経験再生 はランダムにサンプリングするのではなく、経験の重要度に基づいてサンプリングを行う

pixcelo commented 1 year ago

Prioritized Experience Replayの導入

Prioritized Experience Replay (PER)は、経験の重要度に基づいてサンプリングを行う手法です。この重要度は、各経験のTD誤差(実際の報酬と予測される報酬の差)として計算されます。大きなTD誤差を持つ経験は、学習にとって価値が高いとみなされ、それに応じて高い確率でサンプリングされるようになります。

手順

# BEFORE
def remember(self, state, action, reward, next_state, done):
    self.memory.append((state, action, reward, next_state, done))

# AFTER
def remember(self, state, action, reward, next_state, done, td_error):
    self.memory.append((state, action, reward, next_state, done, td_error))
# BEFORE
def replay(self, batch_size):
    minibatch = random.sample(self.memory, batch_size)
    # 以下、学習の処理

# AFTER
def replay(self, batch_size):
    td_errors = [experience[-1] for experience in self.memory]  # Extract TD errors
    probabilities = np.abs(td_errors) / sum(np.abs(td_errors))  # Convert TD errors to probabilities
    sampled_indices = np.random.choice(len(self.memory), batch_size, p=probabilities)
    minibatch = [self.memory[i] for i in sampled_indices]
    # 以下、学習の処理

Prioritized Experience Replay (PER)には多くのメリットがありますが、いくつかのデメリットや課題点も存在します:

計算コストの増加:

経験をサンプルする際の計算量が増加します。これは、TD誤差の計算や確率の更新、そして確率に基づいたサンプリングが必要となるためです。 特に、経験の追加やTD誤差の更新のたびに優先度を再計算することは、効率的なデータ構造(例: セグメント木)を使用しない限り、時間的コストが増大します。 バイアスの導入:

TD誤差が大きい経験は、学習において重要であるとみなされるので、それらが過度にサンプルされる傾向があります。これにより、一部の経験のみを頻繁に学習することとなり、アルゴリズムがバイアスされる可能性があります。 このバイアスを補正するために、重要度サンプリング(IS)の補正を導入することが推奨されていますが、その導入もまた実装の複雑性を増加させます。 ハイパーパラメータの調整:

PERの導入により、新たなハイパーパラメータ(例: ε(確率の床)、α(優先度の強さ)、β(重要度サンプリング補正の強さ)など)が追加され、それらの調整が必要となります。 適切なハイパーパラメータを見つけるのは困難であり、問題や環境によって最適な値は異なる可能性があります。 初心者にとっての複雑性:

基本的な経験再生と比較して、PERの実装は複雑です。そのため、初めて強化学習を学んでいる人にとっては、学習のハードルが高くなる可能性があります。 これらのデメリットや課題にもかかわらず、多くのアプリケーションやタスクにおいて、PERは性能の向上をもたらすことが実証されています。しかし、特定の問題や環境において最も適したアプローチを選択する際には、これらのトレードオフを考慮する必要があります。

pixcelo commented 1 year ago

シャープレシオを状態として追加する

シャープレシオは、金融の世界でよく使われるリスク調整収益率の指標の1つです。ウィリアム・F・シャープによって提案され、彼の名を冠しています。

  1. シャープレシオの定義: シャープレシオは次の式で計算されます: シャープレシオ

    ポートフォリオの超過収益 ポートフォリオの収益の標準偏差 シャープレシオ= ポートフォリオの収益の標準偏差 ポートフォリオの超過収益 ​

ここで、

ポートフォリオの超過収益 = ポートフォリオの収益率 - リスクフリーレート(無リスク資産の収益率)

  1. その意味: シャープレシオは、投資のリターン(収益)をリスクで調整したものを示しています。具体的には、1単位のリスクに対してどれだけの超過収益が得られるかを示す数値です。シャープレシオが高いほど、リスクを取ることに対してより高い報酬を得ることができると解釈されます。

  2. 重要性:

リスクとリターンのバランス: 投資の世界ではリターンだけでなく、それを得るためにどれだけのリスクを取ったのかが非常に重要です。シャープレシオはそのバランスを示す指標として利用されます。 比較ツール: 異なる投資戦略やアセットクラスを比較する際の基準として用いられることが多いです。

  1. 注意点:

時期の選択: シャープレシオは計算する期間によって変わることがあります。短期間と長期間での計算結果が異なることもあるため、比較する際は同じ期間での計算を行うことが重要です。 異なる市場環境: 異なる市場環境や経済環境でのシャープレシオは直接比較すべきではありません。 極端な値: 例外的な大きなリターンや損失がある場合、シャープレシオが大きく変動することがあります。そのため、極端な値が影響する場合は、他のリスク調整指標も参考にすると良いでしょう。 最後に、シャープレシオは非常に有用な指標ですが、投資判断の唯一の基準として使うべきではありません。他の指標や情報も組み合わせて、総合的な投資分析を行うことが大切です。