
This course includes our updated coding exercises so you can practice your skills as you learn.
See a demo
このコースについてのお知らせです。コースの目的について解説しています。
コース概要です。各セクションの内容を解説しています。みんさんの興味に合ったセクションから始めるのもいいでしょう
どのような受講生が対象であるか、解説しています。不安な方は、コース購入前にみてください。
レクチャーの進め方について解説しています。万人向けに、分かりやすく作っているコースですが、少し専門的になったり、冗長に感じたりする部分があるかもしれません。どのように進めていったらよいのか解説しています。
このセクションの概要を解説しています。ゲームAIについて、その歴史を辿っていきます。
人工知能の定義について解説しています。巷にあふれる人工知能に関する言葉を一つ一つ整理しながら考えてみましょう。
世界初の計算機を開発したチューリングという数学者を紹介します。チューリングは、ドイツ軍の暗号機「エニグマ」の暗号を機械で解読したことで有名です。
チューリングの論文「計算する機械と知性」から、イミテーションゲームについてGoogle 翻訳 と、DeepLを参考にして翻訳してみました。チューリングテストと呼ばれる現在の人工知能の始まりがここにあります。大切な部分をイラストで解説しています。
発端となった第1次人工知能ブームについて解説します。チューリングテストから始まった機械による知性を「人工知能」と定義づけた瞬間です。ニューラルネットワークの研究もこのころから始まりました。
ニューラルネットワークに失敗した第1次期の人工知能の考え方を全く変えてしまった第2次人工知能ブームについて解説します。エキスパートシステムという「チカラワザ」でやり遂げようとした、コンピューターの使い方です。
現在の人工知能が第3次人工知能ブームと呼ばれています。ニューラルネットワークの改善で一気に火が付きました。AlphaGoはニューラルネットワークを使っています。
コンピューターによるチェスの歴史について紹介しています。真空管からマイコンに至るまで、AlphaGoが開発されるまでには、このようなことがあったのか、と興味深い解説が満載です。
ベル研究所が開発した本格的なチェスマシーンについて解説します。ここは、少し専門的な解説をしていますが、流して見ていっても大丈夫です。このような考え方があったということを記憶しておいてください。
IBMが開発した「Deep Blue」について解説します。「Deep Thought 」に引き続いてパワーアップしたこのマシンに、人間カスパロフが立ち向かいます。その対戦の一部をピックアップしました。
世紀の対決ともいわれた Deep Blue対カスパロフ戦における衝撃の布石を解説しています。どうして、そのようなことが起こったのか?当時の凄さがわかります。
AlphaGoの登場で世界は一変しました。世界最高の囲碁AIとは何物なのか、当時を振り返ってみます。
イ・セドルとの布石を実際に見ていきます。神の一手と言われたイ・セドル氏の打った手とは、どんなものだったのでしょうか。囲碁未経験者にとっても興味深いものです。
これセクションの概要です。
AlphaZeroに至るまでの経緯をみていきましょう。
まずはゲームAI界を席巻したAlphaGoについて簡単にまとめました。概要に目を通しておきましょう。
AlphaGoは棋譜データが必要でした。AlphaGo Zeroはその名の通り、棋譜データなしで学習することに成功しました。どのような方法で学習しているのか、その処理内容を見ていきましょう。
AlphaGo Zero では、ニューラルネットワークの構造が大きく変りました。AlphaGoでもシンプルだったネットワークが更に単純化されたことで、計算コストが削減されます。
AlphaGo では大量の特徴量を入力としていました。AlphaGo Zero では、入力に非常に少ない特徴量を使っています。これにより、更に計算コストが削減されます。局面情報がどのように変わったのか見ていきましょう。
AlphaGo Zero は、囲碁ゲーム専用のゲームAIでした。それを、チェスや将棋などでも学習可能にしたものがAlphaZero です。汎用的に使えるようになったAlphaZeroの概要を見ていきましょう。
AlphaGo から導入された自己対局について解説します。自己対局とはネットワークの学習ではありません。自己対局によって何が得られるのか見ていきましょう。
プログラミング初心者向けの、Python言語の練習です。
基本コマンドと制御文を書いてみましょう。
条件で変わる制御文を書いてみましょう。
繰り返しによる制御文を書いてみましょう。
このセクションの概要を解説しています。Mini-Max, Alpha Beta pruning, Monte Carlo method, そして Monte Carlo Tree Searchについて、紹介します。
Minimax は解を探索するアルゴリズムで、意思決定やゲーム理論などで使用され、対戦相手も最適なプレイをすると仮定して、プレーヤーにとって最適な動きを見つけるものです。まずは、ここからスタートしましょう。
Alpha-Beta 法は枝刈りを使った Mini-Max アルゴリズムの最適化手法です。Mini-Maxに、alphaとbetaという 2 つのパラメーターを渡すことから、アルファ-ベータ 法と呼ばれています。枝刈りによって計算時間が大幅に短縮され、よって検索がはるかに高速になり、ゲーム ツリーのより深いレベルに進むこともできます。
AlphaBeta法をプログラミングするにはどのようにしたらいいのでしょうか。まずは、プログラムの基本であるフローチャートをかいてみましょう。
フローチャートが書けたら、それをプログラムにおきかえてみましょう。特定の言語にこだわらない書き方でみていきます。
Alpha-Beta 関数をPythonコードの教材で動かしてみます。配列の変数を変えてみて、自分の思った通りの結果になるか、いろいろ試してみましょう。
アルファ・ベータ法のコードを参考に、ミニマックスのコードを書いてみましょう。
教材_MiniMaxのNoneの部分を埋めていきます。
モナコのモンテカルロに由来するこの方法とは、どんなものなのか、円周率をもとに考えてみましょう。
実際のモンテカルロ木探索の動きを3目並べで見てみましょう。
モンテカルロ木探索のコース概要です。
どんな結果が得られるのか、簡単なプログラムを使って三目並べで確認してみましょう。
Python言語で書かれたプログラムコードをGoogle Colaboratory 上で動かします。
木構造はノードとエッジという関係で構造化されています。モンテカルロ木探索のエッジは、様々な情報を保持し、更新しています。どのようなものなのか見ていきましょう。
木探索の仕組みについて解説しています。具体的な計算方法をのぞいてみましょう。
レクチャー動画の解説について、一部訂正があります。
モンテカルロ木探索の4大構造をまとめています。
JavaScript という言語の教材を動かして、シミュレーションの結果を確認してみましょう。動かすごとに変化する次の一手の候補や値を楽しみましょう。
SELECTは実際の次の一手のことではなく、シミュレーションで選ぶ一手です。どのようにして選ばれるのかみていきましょう。
SELECTで選ばれる一手は、PUCTアルゴリズムを使って決定されます。その計算方法を見てみましょう。
PUCTアルゴリズムで、次の手を選ぶ確率を視覚化してみました。教材を動かして確認してみましょう。
リーフノードに到達した場合、ノードを展開して、新たなノードを生成します。その仕組みを具体的にみていきましょう。
ゲームが終了した時は、その勝ち負けなどの結果をゲームの評価関数から受けます。バックアップは、その結果を更新します。ノードを展開したあとも、バックアップが行われます。
Q値の更新方法の解釈について述べています。
これまでの一連の流れを何度も繰り返して統計を取ります。
シミュレーションの統計結果をもとに、実際に手を決めます。AlphaGo Zero以降、ランダム性が加わりました。
AlphaGo Zeroから導入されたこのアルゴリズムは、モンテカルロ木探索で重要となってきます。
ディリクレノイズについて、Pythonコードで確認していきます。
ディリクレノイズがあるのとないのとでは、どう違うのか、グラフを出力して確認してみましょう。
このセクションの概要です。
ゲームの局面画像は、どのように入力されるのでしょうか?AlphaGo とAlphaGo Zero の違いでみていきます。
ニューラルネットワークについて簡単にイラストで解説します。
ニューラルネットワークを発展させた畳み込みというパラメータの持ち方について学びます。具体的に、どのようなことが起こっているのかイラストでみていきましょう。
畳み込みは、さわって覚える人工知能「ディープラーニング編」と合わせて見るとわかりやすいと思います。
ResNetは、Residual Network のことで、残差ネットワークともいわれています。ニューラルネットワークの独特の発想が良好に働いています。
方策を推論するネットワークです。方策とは、次はどれを選んだらいいのか予測することです。
各局面の状態の価値を推論するネットワークです。その状態を選んだ場合、果たして勝ちにつながりやすいのか、或いは負けにつながりやすいのか、ということを数値で表します。
ニューラルネットワークを学習させるためには、誤差を求めます。それぞれのネットワークモデルに応じた損失関数があります。AlphaZero の損失関数を見てみましょう。
回帰は、ある情報から別の何かを予測するものです。天気や気温などから、アイスクリームの売り上げを予測できます。AlphaZeroではどのように用いているのか、見ていきましょう。
回帰から損失を求めるには平均二乗誤差を使います。簡単ですので、計算してみましょう。
分類問題は画像認識でよく使われる方法です。AlphaGoなどでは、次のどの手を選べばよいのか、という方策の決定に使っています。
分類問題の損失計算には、クロスエントロピー誤差関数を使います。ディープラーニングは、ここでつまづく人が多いようです。名前の意味を考えるより、結果から見ていくとわかりやすいかもしれません。計算の中では何も「交差」していません。
クロスエントロピー誤差の計算をより詳しく知るために、電卓レベルでみていきます。
更にクロスエントロピー誤差を動物イラストで、解説していきます。ここまで見れば、かなり理解度は違ってきます。
学習モデルが入力情報に過剰に反応しないように、適度に更新値を緩和させます。これを行わないと、一度覚えたら、そればかりという「一つ覚え」になってしまいます。
正則化の古典的な教科書に基づいて解説していきます。少し難しく感じるかもしれませんが、頑張ってみていきましょう。
このセクションの概要です。五目並べで学習させてみます。人のように強くなるには適切なパラメータ設定と長い時間が必要ですが、実際に動かしてみることが大切です。
これ以降、AlphaZero用の教材を使って解説していきます。
Google Colaboratory で独自のデータを扱うにはマウント処理が必要です。マント後の処理も含めて概要を説明します。
教材を使って、マウント処理のPythonコードを実行してみます。簡単ですので、ここで手順を思えておきましょう。
どのような状態でAlphaZeroをうごかしたらいいのか、それぞれの場所で設定される値を事前に決めておきます。一般にこのように、外部で決めるパラメータのことをコンフィグ(configuration)と言っています。
これ以降、規定値について、同様のレクチャーが6回続きます。大体の見当がついている方は、後で見て確認しても問題ありません。興味のある部分から、どんどん知識を吸収していきましょう。
五目ゲームの環境に関するパラメータを設定します。
学習ループに関するパラメータを設定します。このように、ニューラルネットワークの学習パラメータに対して、固定されたパラメータのことをハイパーパラメータと呼びます。
学習モデルの中にもハイパーパラメータはあります。論文の内容と照らし合わせて、独自に設定してみましょう。
自己対局に関するパラメータを設定します。ここは、好みに合わせて設定値を決めても問題ない部分だと思います。
モンテカルロ木探索のパラメータを設定します。論文には既定値が紹介されていますが、好みで変更してもかまわない部分かと思われます。
コース用に独自に設けたパラメータです。データの保存先など、各自で扱いやすい値に設定してみましょう。
公開されているAlphaZeroを使って、実際に動かしてみることにします。まずは、AlphaZeroと五目並べのモジュールセットをインストールしてみましょう。
五目並べモジュールをインスタンス化します。インスタンスを生成することで、実際に使えるようになります。意味も含めて解説します。
小目五目並べの環境を使ってプレイしてみます。生のデータでの入力と出力を確認しておきましょう。
AlphaZeroの学習モデルをインスタンス化します。また、裏ワザとして、AlphaZeroの疑似モデルも使います。これにより、実行までの事前処理を短縮できます。
セルフプレイのモジュールをインスタンス化します。また、学習を継続するためのデータセットの読み込み処理も書いていきましょう。
本来は不要の処理ですが、これを使えばリプレイ・バッファの生成時間を短縮できます。
Trainモジュールをインスタンス化します。ここで一旦、次の学習ループに入るまでのおさらいをしてAlphaZeroとはどんなものだったのか、頭の中を整理しておきましょう。
前のレクチャーのフローからTrainループを実装していきましょう。何も難しいことはありません。
学習ループを実行させてみます。ゆっくりとですが、損失関数の出力が減少していっている様子が伺えます。
これ以降は、評価用の教材を使っていきます。CPUモードで学習させている場合、学習用の教材を停止させずに、評価の教材を並行して実行させることができます。
学習させたモデルでプレイさせてみます。人のように強くなるには適切なパラメータ設定と膨大な時間が必要ですが、一旦評価してみます。
すぐに成果を見たい場合は、三目並べで確認してみましょう。
最後のセルTrainを実行させますと、15分程度で未過学習モデルとの差が確認できます。
囲碁ゲームを追加しました。セミ・セルフプレイでは自分の対戦データも混ぜることも可能で、自分の強さに合わせながら学習させていくことができます。人間にとっての「教師あり学習」の始まりです。
(遊び方)
先ず、GoGame_SelfPlay_and_Train.ipynb を走らせて、学習モデルを作ります。
その後、GoGame_SemiSelfPlay.ipynb で学習モデルを読み込んでプレイします。
プレイが終わるごとに、新しいデータセットが保存され、本来のセルフプレイに取り込まれて学習されます。
ChatGPTに作らせたオセロゲーム環境での学習を追加しました。みなさん、勝てますか?
最後に、受講生の方へのお知らせです。
AlphaGoは大量のプロの棋譜データを集めて教師あり学習をさせていましたが、その後発表されたAlphaGoZeroは、プロの棋譜データなしで、まるで赤ちゃんのような状態から学習を始めてAlphaGoに勝つようになりました。さらに、AlphaGoZeroをより汎用的に改良したAlphaZero は大変シンプルな構造となっていて、強化学習初心者でも学びやすくなっています。モンテカルロ木探索 (Monte Carlo Tree Search) と、マルチヘッドのディープニューラルネットワークを中心に学んでいきます。
AlphaZeroは、Googleの巨大なネットワークの中で学習されたゲームAIですので、1台のマシンでは学習できませんが、論文に基づくコードを動かしながら、人の知識なしでゼロから学習を始めるAlphaZeroの構造を、強化学習の観点から、豊富な図とPythonプログラミングで楽しく学んでいきましょう。
前半には、チェス・マシン Deep Blue についての解説もあります。