Pythonではじめるオープンエンドな進化的アルゴリズム

―発散型の機械学習による多様な解の探索

[cover photo]
TOPICS
Python
発行年月日
PRINT LENGTH
296
ISBN
978-4-8144-0000-3
FORMAT
Print PDF EPUB
Ebook
3,520円
Ebookを購入する
Print
3,520円

人工生命の研究分野で開発された、「発散型」アルゴリズムが近年注目を浴びています。深層学習を含む多くの機械学習アルゴリズムが、1つの最適解を求める「収束型」のアルゴリズムであるのに対し、進化計算をベースにして開発された「発散型」アルゴリズムは多様な解を求めることができる画期的なアプローチです。本書はこの革新的な発散型アルゴリズムに焦点を当て、進化計算の基礎となる集団的探索の考え方、既存の収束型アルゴリズムとの違い、そして有用性について説明します。NEAT、新規性探索、品質多様性、共進化といった代表的なアルゴリズムのほか、CPPN、POETなどの最新アルゴリズムも取り上げています。この本は、未来のAI技術を先導するための必読書です。

関連ファイル

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

正誤表

目次

まえがき

Ⅰ部 基礎知識

1章 創造し続けるAIへ:オープンエンドな探索
    1.1 人工知能の学習と目的関数の役割
    1.2 目的型探索の限界
    1.3 終わりなき探索:オープンエンドな探索の可能性
    1.4 コンピュータを用いたオープンエンドな探索の実現方法
        1.4.1 集団的探索の力:共同での解決策探求
        1.4.2 未知の開拓:目的に囚われすぎない探索
        1.4.3 多様性の確保:多角的な視点からの探索
        1.4.4 環境の活用:探索空間の拡張
    1.5 まとめ

2章 進化的アルゴリズムの基礎
    2.1 NEATアルゴリズム
        2.1.1 遺伝的アルゴリズムの概要
        2.1.2 NEATアルゴリズムの概要
    2.2 NEATアルゴリズムの実装
        2.2.1 アルゴリズムの流れ
    2.3 XOR回路の実験
        2.3.1 ニューラルネットワーク(表現型)の初期構造
        2.3.2 サンプルプログラムの実装
        2.3.3 サンプルプログラムの実行
    2.4 迷路の実験
        2.4.1 迷路
        2.4.2 ロボット
        2.4.3 設定ファイル
        2.4.4 評価クラス
        2.4.5 評価関数
        2.4.6 実行
        2.4.7 サンプルプログラムの実行
    2.5 ロボットの実験
        2.5.1 ロボットの構造
        2.5.2 評価クラスと実行方法
        2.5.3 評価関数
        2.5.4 実行
        2.5.5 サンプルプログラムの実行
    2.6 CPPN
        2.6.1 CPPNの概要
        2.6.2 CPPNの利点
        2.6.3 CPPNアルゴリズムの実装
    2.7 CPPN-NEATアルゴリズム
        2.7.1 CPPNによる画像生成の仕組み
        2.7.2 Picbreeder
        2.7.3 CPPN-NEATによるロボット構造の進化
    2.8 CPPN-NEATアルゴリズムの実装
        2.8.1 アルゴリズムの流れ
        2.8.2 主なクラス
        2.8.3 実行
        2.8.4 サンプルプログラムの実行
    2.9 まとめ

Ⅱ部 発散的な探索

3章 新規性探索アルゴリズム
    3.1 新規性を追求する目的のない探索
    3.2 目的関数に基づくアプローチの限界
    3.3 新規性探索アルゴリズムのアプローチ
    3.4 二足歩行ロボットの実験
    3.5 新規性探索アルゴリズムと目的型探索の違い
    3.6 新規性探索アルゴリズムがうまくいく3つの理由
        3.6.1 理由1:現在と過去を比べることは簡単である
        3.6.2 理由2:単純な行動から複雑な行動へと進化していく
        3.6.3 理由3:思わぬ行動が目的達成の足がかりとなる
    3.7 新規性探索アルゴリズムの実装
        3.7.1 新規性計算モジュールの導入
        3.7.2 個体の行動データの取得
        3.7.3 アルゴリズムの流れ
    3.8 迷路タスク
        3.8.1 MazeControllerEvaluatorNSクラス
        3.8.2 実行
        3.8.3 サンプルプログラムの実行
    3.9 ロボットタスク
        3.9.1 EvogymControllerEvaluatorNSクラス
        3.9.2 実行
        3.9.3 サンプルプログラムの実行
        3.9.4 目的型探索との比較
    3.10 まとめ

4章 品質多様性アルゴリズム
    4.1 生態学的ニッチと品質多様性アルゴリズム
    4.2 Map-Elitesアルゴリズム
    4.3 Map-Elitesアルゴリズムの応用事例
        4.3.1 ソフトロボットの設計への応用
        4.3.2 適応的なロボット設計への応用
        4.3.3 人間にも難しいゲームのクリア
    4.4 Map-Elitesアルゴリズムの実装
        4.4.1 アルゴリズムの流れ
        4.4.2 主なクラス
        4.4.3 行動記述子の設計
        4.4.4 実行
        4.4.5 サンプルプログラムの実行
        4.4.6 平らな地面を歩くタスク: Walker-v0
        4.4.7 行動記述子を設定して実行する
    4.5 まとめ

Ⅲ部 共進化による探索

5章 共進化アルゴリズム
    5.1 共進化とは
        5.1.1 最小基準共進化アルゴリズム
        5.1.2 環境に制約を加える
    5.2 MCCアルゴリズムの実装
        5.2.1 アルゴリズムの流れ
    5.3 迷路実験
        5.3.1 ブートストラップ
        5.3.2 実行
        5.3.3 サンプルプログラムの実行
    5.4 まとめ

6章 POETアルゴリズム
    6.1 共進化:複雑で多様な環境への適応
        6.1.1 POETアルゴリズムの概要
        6.1.2 POETアルゴリズムがうまくいく理由
    6.2 POETアルゴリズムの実装
        6.2.1 アルゴリズムの流れ
        6.2.2 Evolution Gymでの実装
    6.3 サンプルプログラムの実行
        6.3.1 前に進むタスク:Parkour-v0
        6.3.2 回転することに報酬が与えられるタスク:Parkour-v1
        6.3.3 環境に関するパラメータ
    6.4 まとめ

Ⅳ部 オープンエンドな探索のこれから

7章 おわりに
    7.1 生成モデルによるオープンエンドなアルゴリズムの新展開
    7.2 多様なゲームステージを生成する
        7.2.1 大規模言語モデルを利用したゲームステージの生成
        7.2.2 新規性探索アルゴリズムを活用した多様なステージ生成
    7.3 多様なエージェントを生成する 
    7.4 大規模言語モデルの可能性
        7.4.1 従来の遺伝子エンコーディングとランダムな突然変異の限界
        7.4.2 大規模言語モデルによるエンコーディングと賢い探索
        7.4.3  Picbreederによる人間との相互作用を取り入れたオープンエンドな探索
        7.4.4 現代版Picbreederとその進化
    7.5 オープンエンドなアルゴリズムのさらなる発展に向けて
        7.5.1 複数エージェントによる戦略の共進化
    7.6 さいごに
    7.7 まとめ

付録A Evolution…Gym入門
    A.1 Evolution Gymと仮想世界のロボット
    A.2 ロボットの設計
    A.3 ロボットの観測値
    A.4 サンプルプログラムを実行する
    A.5 サンプルプログラムで提供しているロボットの構造
    A.6 結果を可視化する

参考文献
索引