🐈

Act 27. 強化学習の概要

2024/11/30に公開

はじめに

Act 01. AIで外国為替を自動売買するまでの道のりをベースに学習を進めて行く。

前回は主成分分析について学習した。
次元削減を行うことでデータの特徴量の数を減らし、分析の精度も向上する一例を確認できた。

ものすごく興奮したが、今回からさらに興奮を味わうことになると確信している。

今後学習する内容は以下の通り。
学習はChatGTPさん考案の以下の順序で進めて行く。

学習順序

教師あり学習

  1. 線形回帰: 基本的な回帰問題を学ぶ。 2024/11/13 学習済み
  2. ロジスティック回帰: 分類問題の基本を理解する。 2024/11/17 学習済み
  3. 決定木: シンプルで直感的なモデル。 2024/11/20 学習済み
  4. ランダムフォレスト: 決定木のアンサンブル学習。 2024/11/22 学習済み

教師なし学習

  1. k平均法: クラスタリングの基本。 2024/11/24 学習済み
  2. 主成分分析(PCA): 次元削減の手法。2024/11/28 学習済み

強化学習

  1. 基本的な概念: エージェント、環境、報酬の関係を理解する。
  2. Q学習: 簡単な強化学習アルゴリズム。
    ※強化学習は重要だと判断したため、概念から再度学習する。

そう!今回からついに強化学習についての学習が始まる!
恐らく為替相場の分析・自動売買は強化学習関連のアルゴリズムと時系列データを分析するアルゴリズムなどを使用していくのではないかと推測している。

その内の一つについて学べるのだからそりゃ興奮するよね。
しかも個人的な話だけど、職場に資産形成をしている方がいらっしゃって、その方のお話を色々聞いてモチベも上がってるから大変なことになっている。

これを読んでいる誰かも一緒に機械学習の勉強を頑張ろうー!

強化学習について

ChatGTPさんの回答

いつものごとく、ChatGTPさんに機械学習ってなんぞや?と質問してみた。
すると、以下の通り回答を貰った。

強化学習(Reinforcement Learning, RL)は、試行錯誤を通じて最適な行動を学ぶAIの手法です。これを簡単に説明すると、AIエージェント(学習者)が環境とやりとりをしながら「どう行動すれば一番得をするか」を学ぶ仕組みです。


1. 基本構成

強化学習の基本は次の4つで構成されます:

(1) エージェント(Agent)

  • 学習を行う存在。人間で言えば「何をすれば得するか考える人」です。
  • 例:自動運転車、チェスAI、ゲーム内のキャラクター。

(2) 環境(Environment)

  • エージェントが行動する場。エージェントの行動によって状況が変わります。
  • 例:道路(自動運転)、将棋盤(将棋AI)、市場(FX)。

(3) 行動(Action)

  • エージェントが環境に対して選ぶ具体的な行動。
  • 例:ハンドルを右に回す(自動運転)、駒を動かす(将棋AI)、売買する(FX)。

(4) 報酬(Reward)

  • 行動の結果、エージェントが得る「評価」です。良い行動なら高い報酬、悪い行動なら低い報酬。
  • 例:目的地に早く到達する(+報酬)、事故を起こす(-報酬)。

2. 強化学習の流れ

以下のサイクルを繰り返します:

  1. エージェントが行動を選ぶ

    • 例:「今、信号が青だから進む」、「FX市場で価格が上がりそうだから買う」など。
  2. 行動を実行し、環境が変化する

    • エージェントの行動によって環境の状態が変化します。
    • 例:車が進んで次の信号に到達、FX価格が変化。
  3. 報酬を受け取る

    • エージェントが取った行動が「良かったか・悪かったか」を報酬として受け取ります。
    • 例:信号無視をせずに進んだ → 報酬+10、事故を起こした → 報酬-50。
  4. 学習する

    • 受け取った報酬をもとに「この行動は良かったのか?」を判断し、次回の行動を調整します。

3. 強化学習の目標

エージェントの目標は、長期的な報酬の合計(累積報酬)を最大化することです。
つまり、目先の利益だけでなく、将来的な利益も考えた行動を学びます。


4. 具体例

(1) ゲームでの例

  • ゲームAIが迷路からゴールする方法を学ぶとします。
    1. スタート地点から適当に動き回る。
    2. ゴールに到達したときだけ「報酬+100」を得る。
    3. ゴールする方法を何度も試しながら「どのルートが一番早いか」を学ぶ。

(2) 自動運転の例

  • 自動運転AIが「目的地まで安全に運転する方法」を学ぶ。
    1. 適当にハンドルやアクセルを操作。
    2. 事故を起こすと「報酬-100」、信号を守って走ると「報酬+10」など。
    3. 何度も走行を繰り返し、安全かつ効率的な運転方法を学ぶ。

(3) FXの例

  • FX取引で利益を最大化する行動を学ぶ。
    1. ランダムに「買い」や「売り」を選んで試す。
    2. 利益が出れば「報酬+」、損失が出れば「報酬-」を受け取る。
    3. 長期間で利益を最大化するための売買戦略を学ぶ。

5. 強化学習のメリットと課題

メリット

  • 明確なルールやデータがなくても「試行錯誤」で学べる。
  • 長期的な目標を考えた行動が得られる。

課題

  • 初期の学習ではランダムに行動するため、効率が悪い。
  • 状況や行動の組み合わせが膨大になると学習が遅くなる。
  • 十分なシミュレーション環境が必要。

6. 応用分野

  • ゲームAI(囲碁、チェス、将棋など)
  • ロボット制御(自動運転、ドローン操作など)
  • 金融(FX、株式取引の自動化)
  • 医療(治療計画の最適化)
  • 広告最適化(ユーザーのクリックを最大化する広告表示)

まとめ

強化学習は「試して学ぶ」AIの学習方法です。エージェントが環境で行動し、結果から学ぶことで、最適な行動を選べるようになります。特に、長期的な報酬を考慮した問題を解決するのに向いており、金融やゲーム、ロボット制御など幅広い分野で活用されています。

自分なりに解説

ChatGTPさんの回答を読んで概要は理解できた。
エージェント、環境、行動、報酬。そんなに難しいことはしてなさそう…?

ということでもう少し具体的な話を書いていこうと思う。

1. 数学的な定義

当たり前だが、強化学習についても数学は密接に絡んでいる。
先ほど、行動や報酬といった言葉が出てきたが、それらも以下の様に数学的に定義したりする。

  1. 状態(State: S_t
    時刻tにおける環境の状況を表す。
    FXの場合は"価格"や"移動平均線の値"、"ボリューム"など。

  2. 行動(Action: A_t
    エージェントが時刻tの時点で選択する行動。
    "売る"、"買う"、"何もしない"など。

  3. 報酬(Reward: R_t
    行動をとった結果の評価値。
    利益が出た場合は正の値、損失が出た場合は負の値など。

  4. 環境の遷移(Transition)
    エージェントの行動によって環境が変化すること。
    ポジジョンがなくなった。価格が変わった(エージェントの行動による変化なのかは怪しいが…)など。
    ※次の状態S_{t+1}は現在の状態S_tA_tに依存する。

  5. 方策(Policy: \pi(a|s)
    状態(s)で行動(a)を選ぶ確率。
    ※強化学習では、この方策を最適化していく。

2. 学習の目標

強化学習の目標は、長期的な報酬の合計(累積報酬)を最大化することだった。
買いポジションに対して、利益が出た瞬間に利確するのではなく、少しの期間はホールドしてさらに利益を上げようなんてこともやってくれるってことか!?優秀すぎる…。

累積報酬の最大化を数式で表すと以下の通り。

G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots
  • G_t: 時刻 t における累積報酬(エージェントの目標)。これが最大になるようにする。
  • \gamma\text{(ガンマ)}: 割引率(0〜1の値)。将来の報酬をどれだけ重要視するかを表す。
    • 例:\gamma = 0.9 なら「将来の報酬も現在の報酬の90\%として考慮」。
    • 将来の報酬を軽視するなら \gamma を小さくする。
      FXの場合は、利益にしろ損失にしろ将来の報酬を重要視した方が良さそう。ポジション持った直後にすぐ利確・損切しているようだと、スプレッドや手数料を考慮するとマイナスになる可能性が高いしね…。

具体的な数字を使っても説明しておく。
例えばドル円の相場が以下のような状態だったとする。

時刻 価格
2024/11/30 10:00 150.0
2024/11/30 11:00 150.5
2024/11/30 12:00 150.8
2024/11/30 13:00 151.3
2024/11/30 14:00 149.6
2024/11/30 15:00 152.1
2024/11/30 16:00 150.3

この相場に対して、10時に買いポジションを持ったと仮定し累積報酬を求めていく。
なお、\gamma0.9とする。

まずはそれぞれの時間で、1時間前と比べてどの程度の損益(報酬:R_t)が発生しているか確認していく。
※報酬は計算しやすいように増加分に\times10をしていく。

時刻 価格 損益(報酬: R_t
2024/11/30 10:00 150.0 -
2024/11/30 11:00 150.5 +50
2024/11/30 12:00 150.8 +30
2024/11/30 13:00 151.3 +50
2024/11/30 14:00 149.6 -170
2024/11/30 15:00 152.1 +250
2024/11/30 16:00 150.3 -180

上記の表の内容に対して累積報酬を求めていく。
おさらいだが累積報酬の式は以下の通り。

G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots

値を当てはめると以下の通りになる。

G_t = 50 + 0.9 \times 30 + (0.9)^2 \times 50 + (0.9)^3 \times (-170) + (0.9)^4 \times 250 + (0.9)^5 \times (-180)

各時点で得られる報酬は以下の通り。

・時刻 11:00 (t+1) までの累積報酬

R_{t+1} = 50

・時刻 12:00 (t+2) までの累積報酬

R_{t+1} + \gamma R_{t+2} = 50 + 27 = 77

・時刻 13:00 (t+3) までの累積報酬

R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} = 50 + 27 + 40.5 = 117.5

全て計算していくと最終的に以下の様になる。
累積報酬が一番高いのは15時だということが分かる。

時刻 価格 損益(報酬: R_t 累積報酬(G_t)
2024/11/30 10:00 150.0 - -
2024/11/30 11:00 150.5 +50 +50
2024/11/30 12:00 150.8 +30 +77
2024/11/30 13:00 151.3 +50 +117.5
2024/11/30 14:00 149.6 -170 -6.4
2024/11/30 15:00 152.1 +250 +157.625
2024/11/30 16:00 150.3 -180 +51.337

13時の時点で利確するよりも、15時の時点で利確した方が累積報酬は高くなるため、13時の時点での行動はなにもしないとなる。

ここまでが強化学習の目標である累積報酬の最大化となる。

3. 強化学習のアルゴリズム

強化学習でもいくつかのアルゴリズムが存在する。
代表的なものを上げると以下の通り。

  • モデルフリー型
  • Q学習(Q-Learning)
  • SARSA など

このシリーズではQ学習のみを学ぶ予定。
理由は、Q学習に深層学習を組み合わせた、深層強化学習というものがあるらしいのと、強化学習の中ではQ学習が一番メジャーぽいから。

Q学習の学習プロセスなどは次の記事で書こうと思う。
今回はあくまでも強化学習の概要について。

累積報酬を最大化するのが強化学習っていう理解だけ脳みそに焼き付けてこの記事は終了する。

さいごに

いやー、楽しいね。
今後分析するにあたって強化学習がどのように役に立つのか考えるだけで楽しい。

ちなみに、今後の学習を進めて行くにあたって実際の相場のデータが必要になると思う。
どうやってデータを集めるのかって話があるけど、国内だとGMOコインでAPIが無料公開されていた。

詳しくはコチラを見てほしい。
口座開設は1日で終わったから、実際に使ってみてどんな感じだったかも記事にしていこうと思う。

ではまた。

Discussion