web-dev-qa-db-ja.com

QラーニングとSARSAの違いは何ですか?

[〜#〜] sarsa [〜#〜] はポリシーに準拠しているが Q-learning はポリシーに準拠していないことは知っているが、それらの式を見ると難しい(これらの2つのアルゴリズムの違いを確認します。

本によると 強化学習:はじめに (サットンとバルトによる)。 SARSAアルゴリズムでは、ポリシーが与えられると、対応するアクション値関数Q(タイムステップtでの状態sおよびアクションa)、つまりQ(st、at)、次のように更新できます

Q(st、at)= Q(st、at)+α*(rt +γ* Q(st + 1、at + 1)-Q(st、at))

一方、Q学習アルゴリズムの更新手順は次のとおりです。

Q(st、at)= Q(st、at)+α*(rt +γ* maxa Q(st + 1、a)-Q(st、at))

これは次のように書くこともできます

Q(st、at)=(1-α)* Q(st、at)+α*(rt +γ* maxa Q(st + 1、a))

ここで、γ(ガンマ)は割引係数であり、rt タイムステップtで環境から受け取った報酬です。

これら2つのアルゴリズムの違いは、Q学習が次のmaximumポリシー値を検索するのに対して、SARSAは次のポリシー値のみを検索するという事実ですか?

TLDR(そして私自身の答え)

私が最初に質問してから、この質問に答えたすべての人に感謝します。私は github repo をQ-Learningで遊んで、経験的に違いが何であるかを理解しました。それはすべて、次の最良のアクションをどのように選択するかに相当します。これは、アルゴリズムの観点から、 meanmaxまたはbestアクションの実装方法の選択に応じて。

その他の主な違いは、whenこの選択が行われているときです(たとえば、onlineoffline)そして、それがどのように/なぜ学習に影響するか。 2019年にこれを読んでいて、より実践的な人なら、RLおもちゃの問題で遊ぶことがおそらく違いを理解するための最良の方法です。

最後の重要な注意は、Suton&BartoとWikipediaの両方が混合され、混乱しているまたは間違った次の状態の最高/最大のアクションと報酬に関する公式表現

r(t+1)

実際に

r(t)

これがこれで行き詰まる人を助けることを願っています。

59
Ælex

はい、これが唯一の違いです。オンポリシーのSARSAは、それが従うポリシーに関連してアクション値を学習しますが、オフポリシーのQラーニングは、貪欲なポリシーに関連してそれを実行します。いくつかの一般的な条件下では、どちらも実際の価値関数に収束しますが、レートは異なります。 Qラーニングは少し遅く収束する傾向がありますが、ポリシーを変更しながら学習を続けることができます。また、Qラーニングは、線形近似と組み合わせると収束することが保証されません。

実際には、ε貪欲なポリシーの下で、Q-LearningはQ(s、a)と最大アクション値の差を計算し、SARSAはQ(s、a)と平均アクションの加重和の差を計算します値と最大値:

Qラーニング:Q(st + 1、at + 1)=最大aQ(st + 1、a)

SARSA:Q(st + 1、at + 1)=ε・平均aQ(st + 1、a)+(1-ε)・maxaQ(st + 1、a)

43
Don Reba

この部分を学んでいたとき、それも非常に混乱しているので、違いをより明確にするために、R.SuttonとA.G.Bartoの2つの疑似コードをまとめました。

enter image description here

青いボックスは、2つのアルゴリズムが実際に異なる部分を示しています。数字は、後で説明するより詳細な違いを強調しています。

TL; NR

|             | SARSA | Q-learning |
|:-----------:|:-----:|:----------:|
| Choosing A' |   π   |      π     |
| Updating Q  |   π   |      μ     |

ここで、πは貪欲なポリシー(たとえば、探索でε> 0)であり、μは貪欲なポリシー(たとえば、ε== 0、探索なし)です。

  1. Qラーニングが次のアクションA 'の選択とQの更新に異なるポリシーを使用していることを考えると、言い換えると、別のポリシーμに従ってπを評価しようとしているため、ポリシー外のアルゴリズムです。

  2. 対照的に、SARSAは常にπを使用するため、ポリシー上のアルゴリズムです。

詳細な説明

  1. 2つの間の最も重要な違いは、各アクションの後にQが更新される方法です。 SARSAは、A 'が引き出されるため、正確にε貪欲なポリシーに従ってQ'を使用します。対照的に、Qラーニングでは、次のステップで可能なすべてのアクションに対して最大Q 'が使用されます。これにより、ε= 0の貪欲なポリシーに従っているように見えます。つまり、この部分では探索はありません。

  2. ただし、実際にアクションを実行する場合、Qラーニングは依然としてε貪欲ポリシーから実行されたアクションを使用します。これが、「Choose A ...」が繰り返しループ内にある理由です。

  3. Q学習のループロジックに従って、A 'は依然としてε貪欲型ポリシーからのものです。

38
zyxue

数学的に違いは何ですか?

他のほとんどの回答ですでに説明されているように、2つの更新の数学的な違いは、[〜#〜] q [〜#〜]-state-actionペアの値(St、At

  • Sarsaは動作ポリシー(つまり、エージェントが環境で経験を生成するために使用するポリシー、つまり通常epsilon-greedy)を使用して、追加を選択しますアクションAt + 1、次にQ(St + 1、At + 1)(gammaで割引)更新ターゲットの計算で予想される将来のリターンとして。
  • [〜#〜] q [〜#〜]-学習では、動作ポリシーを使用して追加のアクションを選択しませんAt + 1。代わりに、更新ルールで予想される将来のリターンをmaxとして推定します Q(St + 1、A)。ここで使用されているmax演算子は、完全に貪欲なポリシーに「従う」と見なすことができます。 しかし、エージェントは実際には貪欲なポリシーに従っていません;更新規則では、「これから貪欲なポリシーを実行し始めたとすると、将来の期待されるリターンはどうなるでしょうか?」とだけ書かれています。

これは直感的にどういう意味ですか?

他の回答で述べたように、上記の違いは、技術用語を使用すると、Sarsaはon-policy学習アルゴリズムであり、Q学習はoff-policy学習アルゴリズム。

制限内(経験を生成して学習するために無限の時間を与える)、およびいくつかの追加の仮定の下でこれは、SarsaとQ学習が異なるソリューション/「最適な」ポリシーに収束することを意味します

  • Sarsaエクスペリエンスを生成するために使用されたのと同じポリシーに従うことを前提として最適なソリューションに収束します 。これは、epsilon-greedyなどの(むしろ「愚かな」)ランダム性の要素を持つポリシーになることがよくあります。それ以外の場合は、何にでも収束しますよ。
  • Q-Learningは、経験とトレーニングを生成した後、貪欲なポリシーに切り替えるという前提の下で最適なソリューションに収束します

どのアルゴリズムをいつ使用するのですか?

Sarsaのようなアルゴリズムは、経験の学習/生成のプロセス中にエージェントのパフォーマンスを気にする状況では、通常推奨されます。たとえば、エージェントが崖から落ちると壊れる高価なロボットであると考えてください。費用がかかるため、学習プロセス中に頻繁に落下しないようにしてください。したがって、学習プロセス中のパフォーマンスを気にします。ただし、ランダムに動作する必要があることもわかっています(例:イプシロン貪欲)。これは、ロボットがランダムに(確率でイプシロンで)行動して転倒する可能性があるため、崖の横を歩くのは非常に危険であることを意味します。したがって、崖の近くにいることは危険であることをすぐに理解するほうが望ましいでしょう。 貪欲なポリシーが落下することなくそれに沿って歩くことができたとしても、ランダム性を備えたイプシロン貪欲なポリシーに従っていることがわかっているため、パフォーマンスを最適化することが重要です。時々バカになる。これは、Sarsaが望ましい状況です。

Q-learningのようなアルゴリズムは、トレーニングプロセス中のエージェントのパフォーマンスを気にしない場合に適していますが、最適な貪欲なポリシーを学習して、最終的に切り替えます。たとえば、いくつかの練習用ゲームをプレイし(ランダム性が原因で負けても構わない場合)、その後、重要なトーナメント(学習を停止し、イプシロン貪欲から貪欲ポリシーに切り替える)をプレイするとします。 )。これは、Q学習の方が優れているところです。

6
Dennis Soemers

Qラーニングの数式にインデックスの誤りがあります。サットンとバルトの148ページ。

Q(st、at)<-Q(st、at)+ alpha * [r(t + 1)+ gamma * max Q(st + 1、a)-Q(st、at)]

タイプミスは最大の引数です:

インデックスはst + 1とaですが、質問ではst + 1とat + 1です(これらはSARSAに適しています)。

これが少し役に立てば幸いです。

3
Alvin

Qラーニング

これはあなたのものです:Q-ラーニング:Q(St、At)= Q(St、At)+ a [R(t + 1)+割引*最大Q(St + 1、At)- Q(St、At)]

qラーニングに変更する必要があります:Q(St、At)= Q(St、At)+ a [R(t + 1)+割引*最大Q(St + 1、a)- Q(St、At)]

あなたが言ったように、あなたは更新eqの最大Q値を見つける必要があります。 aを変更すると、新しいQ(St、At)が得られます。注意して、最大Q値を提供するaは次のアクションではありません。この段階では、次の状態(St + 1)しかわかっておらず、次のラウンドに進む前に、StをSt + 1で更新する必要があります(St <-St + 1)。

各ループについて。

  • q値を使用してStからAtを選択します

  • atを取り、Rt + 1とSt + 1を観察する

  • 式を使用してQ値を更新します。

  • St <-St + 1

Stがターミナルになるまで

0
comx

SARSAとQlearningの唯一の違いは、SARSAが現在のポリシーに基づいて次のアクションを実行するのに対し、qlearningは次の状態の最大のユーティリティを使用してアクションを実行することです。

0
Beyhan Gül