Pythonで強化学習を始める方法!OpenAI Gym(Gymnasium)の活用ガイド
生徒
「最近よく聞く『強化学習』って何ですか?AIが自分で学習するって聞いたんですけど、初心者でもPythonで作れますか?」
先生
「強化学習は、コンピューターが『試行錯誤』を通じて、どう行動すれば一番良い結果(報酬)が得られるかを自ら学ぶ仕組みのことですよ。Pythonには『OpenAI Gym(現在はGymnasium)』という便利な道具箱があるので、初心者の方でも始められます!」
生徒
「パソコンをあまり触ったことがない僕でも、具体的にどうやってプログラムを動かせばいいのか知りたいです!」
先生
「もちろんです!まずは強化学習の基本的な考え方から、実際にAIを動かす準備まで、順番に解説していきましょう。」
1. 強化学習とは?初心者にわかりやすい例えで解説
強化学習(きょうかがくしゅう)とは、機械学習というAIを作る技術の一種です。一言でいうと、「アメとムチ」を使ってコンピューターを賢くする仕組みのことです。
例えば、あなたが愛犬に「お座り」を教える場面を想像してみてください。ワンちゃんが正しく座れたら、ご褒美におやつ(アメ)をあげますよね。逆に、座らなかったらおやつはもらえません(ムチ)。これを何度も繰り返すと、ワンちゃんは「お座りをすればおやつがもらえる!」と学習して、自分から進んでお座りをするようになります。これこそが強化学習の本質です。
プログラミングの世界では、このワンちゃんの役割を「エージェント」、おやつを「報酬(ほうしゅう)」、ワンちゃんが置かれている場所を「環境(かんきょう)」と呼びます。強化学習は、ゲームの攻略やロボットの自動制御など、正解が一つではない複雑な問題を解くのが得意な技術なのです。
2. Pythonが強化学習に最適な理由
プログラミング言語にはたくさんの種類がありますが、なぜAIや強化学習では「Python(パイソン)」が使われるのでしょうか。その理由は、Pythonが「読みやすくて、拡張機能が豊富だから」です。
Pythonは、まるで英語を読んでいるかのようなシンプルな書き方が特徴で、初心者の方でも比較的短い時間で基本をマスターできます。また、世界中の頭の良い人たちが作った「ライブラリ」という便利な部品が無料で公開されています。強化学習のための部品もたくさん揃っているため、ゼロから難しい計算式を書かなくても、部品を組み合わせるだけで高度なAIが作れてしまうのです。
パソコンの操作に自信がない方でも、まずは「Pythonという魔法の杖を使えば、複雑なAIも操れるようになる」というイメージを持ってください。
3. OpenAI Gym(Gymnasium)とは何か?
強化学習を始めるにあたって欠かせないのが、OpenAI Gym(オープンエーアイ・ジム)です。これは、強化学習のAIを訓練するための「バーチャルな練習場」です。
AIを賢くするためには、実際に何度も失敗を繰り返す場所が必要です。しかし、本物のロボットで練習させると、転んで壊れてしまうかもしれません。そこで、コンピューターの中に仮想的な環境を用意します。例えば「棒を倒さないようにバランスを取るゲーム」や「車を山の頂上まで走らせるゲーム」などがパッケージ化されています。
現在は「Gymnasium」という名前に引き継がれていますが、使い方はほぼ同じです。この練習場を使うことで、私たちは複雑な物理法則の計算をプログラミングすることなく、AIの「考え方」を作る部分だけに集中できるのです。
4. 開発環境を整えよう!ライブラリのインストール
まずは、強化学習を行うための準備をしましょう。Pythonがインストールされているパソコンで、「ターミナル」や「コマンドプロンプト」という黒い画面を開いて、以下の魔法の言葉を入力します。
これを行うことで、あなたのパソコンに強化学習用の練習場(Gymnasium)がダウンロードされます。最新のAI開発では、この「ライブラリのインストール」が最初の大きな一歩になります。
# 強化学習の練習場をインストールするコマンド
# ターミナルやコマンドプロンプトで実行してください
pip install gymnasium
pip install pygame
上記のコードを実行すると、強化学習に必要な道具が自動的に揃います。pygameというのは、ゲーム画面をパソコンに映し出すための補助的な部品です。これだけで、世界レベルのAI研究者と同じ土俵に立つ準備が整いました。
5. 最初の一歩!環境を立ち上げてみよう
準備ができたら、実際に練習場(環境)を作ってみましょう。今回は「CartPole(カートポール)」という、台車の上に立った棒を倒さないように左右に動かす有名なゲームを呼び出してみます。
プログラミング未経験の方は、「インポート(import)」という言葉を覚えてください。これは「このプログラムで、あの部品を使いますよ」という宣言のことです。
import gymnasium as gym
# 「CartPole」という名前の練習場を作ります
# render_mode="human" にすると、画面にゲームが表示されます
env = gym.make("CartPole-v1", render_mode="human")
# 練習場を最初の状態にリセットします
observation, info = env.reset()
print("準備が完了しました!ゲーム画面が表示されます。")
このプログラムを実行すると、小さなウィンドウが開き、台車と棒が表示されるはずです。まだAIの頭脳は入っていないので、画面が出るだけですが、これだけでも「AIを動かすための舞台」が作れたことになります。
6. エージェントにランダムな動きをさせてみる
次に、AI(エージェント)に何か行動をさせてみましょう。まずは一番簡単な「適当に動く」というコードを書きます。これは、右も左もわからない赤ちゃんが、とりあえず手足をバタバタさせている状態と同じです。
強化学習では、このように最初はランダムに動き、その結果として報酬が得られたかどうかを確認するプロセスを繰り返します。以下のコードでは、20回だけランダムに台車を動かしてみます。
import gymnasium as gym
env = gym.make("CartPole-v1", render_mode="human")
env.reset()
for _ in range(20):
# 0か1(左か右)をランダムに選びます
action = env.action_space.sample()
# 選んだ行動を実行し、その結果を受け取ります
observation, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
env.reset()
env.close()
実行結果として、画面の中の台車がガタガタと左右にランダムに動き、棒がすぐに倒れてしまう様子が見られるでしょう。倒れたら「リセット」して、また最初からやり直す仕組みになっています。
7. 強化学習の「状態」と「報酬」を理解する
AIが賢くなるためには、今の状況を把握し、自分の行動が良いことなのか悪いことなのかを知る必要があります。ここで重要になるのが「状態(じょうたい)」と「報酬(ほうしゅう)」です。
先ほどのコードに出てきた observation が「状態」です。これには、台車の位置、速度、棒の角度、棒の倒れる速さといったデータが入っています。人間が「今、棒が右に傾いているな」と目で見て判断するように、AIはこの数字データを見て状況を判断します。
そして reward が「報酬」です。CartPoleの場合、棒が立っている間は毎ステップ「1点」がもらえます。AIの目的は、この合計得点をできるだけ高くすることです。得点が高ければ「今の動きは良かったんだ!」と学習し、その行動を優先的に選ぶようになります。
8. 学習の流れ:エピソードとステップ
強化学習をプログラミングする際によく出てくる単語に「エピソード」と「ステップ」があります。これは初心者が最初につまずきやすいポイントなので、しっかり解説します。
- ステップ: 1回1回の行動のこと。時計の針が1秒進むようなイメージです。
- エピソード: ゲーム開始から、ゲームオーバー(棒が倒れる)までのひとまとまりのこと。
AIは、何千、何万という「エピソード」を繰り返して学習します。1回のエピソードで失敗しても、次のエピソードでは「さっきは右に動かしすぎて倒れたから、次は少し控えめにしよう」と修正していくのです。この気の遠くなるような反復練習を、文句も言わずに超高速でやってくれるのがコンピューターの凄いところですね。
9. 強化学習アルゴリズムの種類を知っておこう
AIにどうやって学習させるか、その「攻略法」のことをアルゴリズムと呼びます。強化学習には有名なアルゴリズムがいくつかあります。
Q学習(Q-Learning)
どの状態でどの行動をとれば、将来的にどれくらい報酬がもらえるかを「表(テーブル)」にして覚える方法です。迷路の脱出などに使われます。
DQN(Deep Q-Network)
Q学習に「ディープラーニング(深層学習)」を組み合わせたものです。複雑な画像なども処理できるようになり、囲碁のAIや難しいアクションゲームの攻略に使われます。
まずは名前を聞いたことがある程度で大丈夫です。初心者のうちは、これらを簡単に使える「Stable Baselines3」という便利なライブラリを使うのがおすすめです。
10. 実際にAIを賢くするための第一歩
最後に、AIが現在の状況(数値)をどのように認識しているか、中身を少しだけ覗いてみましょう。以下のコードを実行すると、AIが見ている「生の世界(数字の羅列)」を画面に表示できます。これがAIにとっての「視覚」なのです。
import gymnasium as gym
env = gym.make("CartPole-v1")
state, info = env.reset()
# AIが受け取っている「状態」のデータを出力してみます
print("AIが見ている現在の状態:")
print(state)
# 1回行動してみる
action = env.action_space.sample()
next_state, reward, terminated, truncated, info = env.step(action)
print(f"行動後の報酬: {reward}")
print(f"次の状態: {next_state}")
env.close()
実行すると、以下のような結果が表示されます。
AIが見ている現在の状態:
[ 0.01234567 0.02345678 -0.03456789 -0.04567891]
行動後の報酬: 1.0
次の状態: [ 0.0128148 0.2188492 -0.03548147 -0.34440024]
一見するとただの数字の集まりですが、AIはこの数字の変化から「棒がどっちに倒れそうか」を読み取ります。このデータを元に、次の行動を決定するプログラムを書くことが、強化学習のプログラミングの醍醐味です。
いかがでしたでしょうか?PythonとOpenAI Gymを使えば、誰でもAIの訓練場を作り、自分だけの賢いエージェントを育てる準備ができます。まずは、この不思議な数字の世界を楽しんでみてください!