レポート課題:人工知能
講義のホームページはこちらです.
締め切り
第一回レポート(第1問~第6問):12月22日の23:59まで。
第二回レポート(第7問~第12問):2月4日の23:59まで。
注意事項
- 講義の内容により変更の可能性がある。最終的な内容は必ず講義の際に確認すること。
- 各回で提出する課題数は任意であるが、最低数は1問である。 問題の難易度を印で示しているので、提出の際の参考にすること。 簡単な問題であれば2問以上を提出することがのぞましい。
- 原則として、締切日より遅れて提出された場合は 採点の対象としない。 ただし、何らかの理由があれば、 締め切りまでに提出したレポートについて更新・修正版をのちに 提出することは認めることがある。
- また、特段の理由があれば提出期限を延長する。
レポート採点方針
- 当然ながら提出したからといって満点とは限らない。
- とりあえず適当に書いて提出するというのは印象が悪いので注意せよ。
- 最終評価は合計点をもとにした相対評価となる。
- 難しい問題に挑戦したり、多くの人が解かないような問題を解答すると ポイントが高い。
- AIらしいユニークな解答も評価する。
- 参考までに★で難易度を示しておく。
課題内容
- (第1問:課題番号01★)
昨年度のノーベル化学賞はゲームAIに関連している。
その詳細はこのHPなどに詳しい。
では、Folditを遊んでみてその実体験を報告せよ。 ただし 個人の責任でゲームに参加すること。
とくに、
- ゲームに直観が有効だったか
- 本格的な科学に貢献できる意識があったか
- 共同作業・闘争意識の効果はあるか
- ShakeやWiggleなどのツールは局所解の脱出に役立ったか
- チュートリアルを含めてどのくらいの時間で何位まで達成したか
- 将来のAIの応用に貢献するか
また、ある程度の順位(過去で受講した者の最高記録:7000+,10位)は必須である。「ちょっとやってみた」というようなレポートは評価が低い。
Hint1: Foldit!の解説は 教科書 の6.1節にある。
Hint2: 説明のスライドはここにある。また、Foldit!をもとにしてNatureに掲載された論文はここにある。
- (第2問:課題番号02★) 講義で説明したように、 三段論法推論にはヒトにとって解き易いものと解き難いものがある。これについては、 メンタルモデル( 教科書1.3節)による説明が認知科学的になされている。
- 三段論法推論には教科書 の図1.7で説明しているように全部で64種類ある。これらの問題をいろいろな用語や何気ない会話で試してみる。
- LLMがいかに間違えるのか・正しく答えるのかを観察し、集計する。
- さまざまなChain of Thoughtや呪文を工夫してみよ。
- どのように錯覚して回答するのかを記述する。
- (第3問:課題番号03★)次の2問にすべて答えること。
- 進化計算の原理を身近な例を用いて分かりやすく説明せよ。少なくとも以 下の項目についてアナロジーで解説すること。
- 交叉
- 突然変異
- 世代交代
- 集団初期化
- 選択・淘汰
- 適合度計算
- 探索が上手くいくようす
- 進化計算の面白い応用例・実用例について調べて考察せよ。 講義などで説明した例や以下のような著名な例は除く。
- 遺伝的アルゴリズムでブランコの漕ぎ方を学習させた動画
- 進化するマリオのお話
- 対話型似顔絵作成システムNIGAO
- グラディウスを学習させてみた
- GAでモナリザを描く
- Mondriaan Art by Evolution on the Web
- 遺伝的アルゴリズムを用いてハイハイを学習させる
- 畝見先生のSBART(抽象画生成)
- Synplant「遺伝を利用したソフトウェアシンセサイザ」
- 『グリムノーツRepage』から見る遺伝的アルゴリズムのゲームバランス調整における事例とその可視化
- 進化計算をオープンハウスの宅地自動区割りに活用
- 物流センター在庫配置最適化
- 三菱電機のZEB(net Zero Energy Building)における設備運用最適化およびアスクルの在庫配置最適化の事例
- 放送局CM順位づけ業務に「進化計算ダーウィン」を導入
- 対話型進化計算を利用したネックレスデザインシステム
- sakanaAIの進化的アルゴリズムによる基盤モデルの構築
- (第4問:課題番号04★★) 次のようなスタンプパズルを考えよう。盤の上に〇かXの印が置かれている。スタンプを押すと〇とXが入れ替わる。 ただしスタンプは回転して使うことができるが、枠の外にはみ出して一部だけ押すことは許されない。
- (第5問:課題番号05★★★) ノーベル化学賞はタンパク質のフォールディング問題の解法によるものであった。これに関連してHPモデル格子型構造予測問題をGAで解いてみよう。
- 標準的なGA(ダーウィン進化)
- ボールドウィン進化 型GA:個体の適合度を評価するため、その個体をスタート地点としてとり、局所解に達するまで山登り法などで局所探索を実施する。もとの個体の適合度は上で得られた局所最適解である。しかし子孫を作るときには、局所探索による「学習済み」の改善個体ではなく、オリジナルの個体の遺伝子型が用いられる。
- ラマルク進化型GA:ボールドウィン進化と同じく、局所探索を行い適合度を評価する。 ただし、局所探索で改良された個体によって子孫が作られる。つまり獲得形質を受け継ぐ。
- 配列20 (HP)2PH2PHP2HPH2P2HPH
- 配列48 P2HP2H2P2H2P5H10P6H2P2H2P2HP2H5
- 配列48 HPH2P2H4PH3P2H2P2HPH2PHPH2P2H2P3HP8H2
- 配列48 PHPH2P2HPH3P2H2PH2P3H5P2HPH2(PH)2P4HP2(HP)2
- 配列48 PH2P6H2P3H3PHP2HPH2(P2H)2P2H2P2H7P2H2
- (第6問:課題番号06★★★) 平面上に23個の点をできるだけ「美しく」配置せよ。
- 例えば、10個の点であれば以下のようなものが考えられる。
- 進化計算を推奨するが、ニューラルネット、強化学習、その他のAI手法で探索してもよい。
- 評価関数(「美しさ」の基準、適合度)を工夫すること。例えば、対称性の個数、直線状に並んだ数、思いつきにくさ、希少性、力学的エネルギ―最小化などが考えられる。
- 個性を生かすことが重要なので、他の点数でも配置可能なもの(円周上、直線上など)はポイントが低い。
- 他の個数の点でも同じ基準ではできるだけ面白くなってはいけない。
- 得られた結果がどのように面白いかを考察したかも重視する。
- 必ずしも最適解(?)が得られなくても成績評価には関係しない。 どれだけ工夫したか、考察したかで評価する。
- AI探索が目的なので、LLMに聞いたというような解答は原則的に認められない。
- (第7問:課題番号07★)
ヒトは確率推論が必ずしも得意ではない。またランダム性の認識に関しても間違えやすい。これらのことから、
スティーブン・ピンカー
は「人間は合理性に反して、ある事象に明確な原因があると断定することがある」と述べている。では、LLM(や生成AI)とヒトはどのように違うのだろうか。これについて、自分の経験や検証実験などを通して考察せよ。
少なすぎるもの・内容がないものは採点しない。
以下のような手順をとること。
(1)LLM(や生成AI)でいくつかの確率的推論を試す。promptや呪文、CoTなどさまざまに試して、答え方の違いや錯覚(hallucination)に注目すること。有名な問題例を直接使うとLLMは訓練例からそのまま回答する可能性があり、有用なデータが得られない。そのため以下のような点を 自分で工夫して実験を行うとポイントが高い。- 複数のLLMでの比較をしてみる
- 温度を変えたり、質問の仕方をかえてみる
- 可能なら図形を利用してマルチモーダルに質問する
(4)このような実験に関して今後工夫すべき点について考察せよ。例えば、LLMにどのような質問をすればよいか、ヒトに対してどのようなアンケートを集めるべきか、など。
Hint1: ランダム性の錯誤(星座・ヒカリムシとランダムドット)、ギャンブラーの誤謬、ロンドンの爆撃については 参考書 の3.2節に説明されている。
Hint2: 参考書 の2章、3章にある以下のような問題を利用すると良い。このうちの一部についてはアンケートや講義で説明している。当然ながら有名な問題をそのまま利用すると、解答例がLLMにあるので注意すること。
- 乳がんの危険性
- 山田さん夫妻のこども
- 落雷の確率
- 3囚人の問題
- モンティホール問題
- Truel
- (第8問:課題番号08★★) 教科書の例題3.2 ではナイト・ツアーというパズルを解説している。これはチェス盤の上に置かれたナイトをあるマスから他のマスに移動させる解法である。なおナイトは下図のように最大8箇所の●の部分に移動できる。
- 最初にチェス盤上にチェスの駒が1つ置かれている。
- 先手はその駒を普通のチェスの動きでどこかへ動かす。
- 後手もその駒を普通のチェスの動きでどこかへ動かす。ただし前にいたことのあるマス目の再訪は禁じられている。
- これを交互に繰り返す。
- 最初に動けなくなった方が負けである。
- ケース1:駒がルーク(将棋の飛車)のとき
- ケース2:駒がキング(将棋の王将)のとき
- alpha-betaカットのプログラム(Tit-tac-toe)
- gcc common.c ab.c -lm としてコンパイルする。
- min-maxのプログラム(Tit-tac-toe)
- gcc common.c minmax.c -lm としてコンパイルする。
- 3次元Tit-for-tat(4x4x4)のプログラム(その1)
- UTC法との対戦を行う。
- コマンドライン引数によってオプションが指定できる。
- ./main [先手:0, 後手:その他(default:0)] [UCTの総playout回数(default:10000)]
- 例) ./main 0 10000
- 3次元Tit-for-tat(4x4x4)のプログラム(その2)
- UTC法 v.s. min-max(α・βカット)の対戦を行う。
- 実行には引数にplayout数を入れる。
- 評価関数は 単純に隅や真ん中が強くなるようにするだけである。
- (第9回問:課題番号09★)
講義では人間のリスク認知の偏りやヒューリスティックスとしてのプロスペクト理論について説明した。
では、LLM(や生成AI)も同じような認知や知覚の偏りを示すのであろうか?
実験的に検証してみよう。
少なすぎるもの・内容がないものは採点しない。
以下のような手順をとること。
(1)質問をLLM(や生成AI)に対して行い、promptや呪文・CoTなどさまざまに工夫して答え方の違いを観察する。
とくに 無関係な選択肢からの独立性や一億円のチャンスおよび 最後通牒ゲーム について面白そうな題材を試すとポイントが高い。
また、講義で説明したフレーミング効果、授かり効果、損失回避、Rabinの定理、アレのパラドクスなどに関する検証をするとよい。
なお、有名な問題例を直接使うとLLMは訓練例からそのまま回答する可能性があり、有用なデータが得られない。そのため 自分で工夫 した例で検証すること。
(2)(Option)画像を用いたLLMに対して、以下のような実験を行ってどのように心理効果を誘発するかを確かめてみる。- ブーバ/キキ効果を真似て質問する
- さまざまな錯視の画像を見せる
- スーパーの値引き画像(参照点の比較)、授かり効果などを図で検証する
(4)このような実験に関して今後工夫すべき点について考察せよ。例えば、LLMにどのような質問をすればよいか、ヒトに対してどのようなアンケートを集めるべきか、など。
Hint1: 講義資料は ここ にある。プロスペクト理論については 参考書 の6章に、最後通牒ゲームについては同じ本の4.5節において説明されている。
Hint2: ヒトに対するデータは、上の講義資料に書かれている。また関連するアンケートデータは以下にある。適宜集計や編集して使用してほしい。 Hint3: GPTにプロスペクト理論が適応するかについて調べた研究論文が ここにある。また、プロスペクト理論を想定した金融やマーケットにLLMを利用する研究は ここにある。 LLMにおいてブーバ・キキ効果を検証した論文は ここにある。
Hint4: 以下のような点を自分で工夫して実験を行うとポイントが高い。- 複数のLLMでの比較をしてみる
- 温度を変えたり、質問の仕方をかえてみる
- 可能なら図形を利用してマルチモーダルに質問する
- (第10問:課題番号10★★)
メタヒューリスティクスには、数多くの手法が
提案されている。たとえば以下のようなものがある。これらのいくつかは講義で説明した。
- Artifical Bee Colny (ABC)
- Ant colony optimization (ACO)
- Particle Swarm Optimization (PSO)
- カッコウ探索:Cuckoo search
- Harmony Search (HS)
- カエル探索:Shuffled Frog-Leaping Algorithm (SFLA)
- Honey-Bee Mating Optimization (HBMO)
- Invasive Weed Optimization (IWO)
- Teaching-Learning-Based Optimization (TLBO)
- ホタル探索:Firefly Algorithm (FA)
- コウモリ探索:Bat Algorithm (BA)
- Plant Propagation Algorithm (PPA)
- Water Cycle Algorithm (WCA)
- Symbiotic Organisms Search (SOS) algorithm
- Harris hawks optimization (HHO)
- Black Hole Algorithm (BHA)
- Fruit fly optimization algorithm (FOA)
- Ant lion optimizer (ALO)
- Moth-flame optimization algorithm (MFO)
- Elephant herding optimization (EHO)
- Coral reef optimization
- Monarch butterfly optimization
- Egyptian Vulture Optimization
- Lion swarm optimization
- ネコ探索:Cat swarm optimization
- ゴキブリ探索:Cockroach Swarm Optimization
- バクテリア探索:Bacterial Foraging Optimization
- 灰色オオカミ探索:Grey Wolf Optimiation (GWO)
- 花火アルゴリズム:fireworks algorithm
- クジラ探索:Whale optimization algorithm
- リス探索:Squirrel search algorithm
- 重力探索:Gravitational search algorithm (GSA)
- ひらめき探索:Brain Storm Optimization (BSO)
- 集団心理療法探索:Group Counseling Optimization (GCO)
なお、メタヒューリスティックス研究に関しては、玉石混交であったり、同じような手法の重複提案であるような批判もなされている。その詳細は 『深層学習とメタヒューリスティクス ディープ・ニューラルエボリューション(6.8節)』 にある。
ここでは、LLM(や生成AI)に基づいて新しいメタヒューリスティックを提案し、実際にコード化をして動作確認をしてみよう。 以下の手順にしたがうこと。
(1)LLMにメタヒューリスティックスの例を3~6個程度あげさせて、その詳細について説明してもらう。特定のキーワードをpromptに入れた方がよい。例:大域的探索のため、群知能、組み合わせ探索、など。
(2)(1)であげられたそれぞれのアルゴリズムに関して、重要な特徴や探索性能に影響を与える要素に関して説明させる。それの妥当性について考察せよ。幻覚症状(hallucination)に注意すること。
(3)特定のタスクに対して、(1)であげられたメタヒューリスティックスのハイブリッド版やそれらの改良版を提案させる。それについて説明させ、pseudo-codeやpython codeを出力させる。特定タスクとしては、TSPやNクィーンのような具体的な問題などでよいが、有名な問題には解答例がLLMにあるので面白くない。より一般的な探索問題として指定することを奨励する。
Hint: promptとしては、「多様性を維持せよ」、「exploration(探査)とexploitation(利用)の効果的なバランスをとれ」、「局所解に陥らない」、「目的関数の評価回数をできるだけ少なくする」など講義で説明した探索に重要な要素を入れるのが好ましい。(4)実際にpseudo-codeを実行させてLLMの提案を検証する。(3)で想定したタスクを実際に解かせてみる。その上で、fatal error(明確なバグ)があるか・修正可能か、実行レベルでの性能、計算効率、すでにあるメタヒューリスティックスとの比較、などについて考察せよ。
なお、ここではLLMを利用してメタヒューリスティックスのハイブリッド法や新手法を提案することを目指しているので、得られたメタヒューリスティックスが不十分であっても問題ない。むしろ、LLMを利用する場合の有用性や欠点、拡張点を考察してほしい。
Hint1: メタヒューリスティックスについて、最近の解説には以下のような論文がある。- Crow Search Algorithm: Theory, Recent Advances, and Applications
- Sea Lion Optimization Algorithm for Solving the Maximum Flow Problem
Hint2: LLMでメタヒューリスティックスのアルゴリズムを創る論文は ここ にある。 - (第11問:課題番号11★★★)
講義ではBoidによる魚や鳥の群れのシミュレーションについて説明した。
群れるのは捕食者から逃れるためと思われているが、一方で群集は捕食者から目立つのに群れるのはなぜだろうか。
これに関していくつかの仮説が知られている。
- 希釈効果仮説 dilution effect hypothesis
- 攪乱効果仮説 confusion effect hypothesis
- 利己的な群れ仮説 selfish herd hypothesis
ここではシミュレーションでconfusion effectについてシミュレーションで検証してみよう。
以下のようにするとよい。- BoidもしくはCouzinアルゴリズムにより小魚(被捕食者)の群れを実装する。
- そこに大きな魚(捕食者)を導入する。小魚は大魚に対して逃げるようにする。捕食者は小魚よりもスピードを大きくする。
- 大きな魚が小魚を捕食するアルゴリズムとしては以下の方法を実装する。
- 捕食者にはある半径の視野がある
- さらにBlind spotもある
- 視野内に入った最後の小魚を追う(Hint2の論文のFig.2参照)
- 小魚のパラメータ(集団数、集団の密度、群れのパラメータ)を変えることで、どのように捕食されるかを観察する。
捕食の成功の度合いを、- 時間当たりの捕食数
- 最初に捕食に成功するまでの時間
ただし、必ずしも的確に比較できなくても成績評価には関係しない。 どれだけ工夫したか、考察したかで評価する。
Hint1: BoidやCouzinのシミュレーションプログラムは参考書 「Unity シミュレーションで学ぶ人工知能と人工生命 創って理解するAI」などで提供されている。
Hint2: SwarmとConfusion effectに関するシミュレーション実験に関する論文は ここにある。ここでは、大きな魚が最後に視野に入った小魚を追うように設計されている(Fig.2参照)。小魚は大魚からの攻撃を避けるように学習(進化)した結果Swarm現象を創発するようになる。
Hint3: 小魚のパラメータの群れのパラメータとしては、Boidにおけるベクトル和の係数、Couzinのアルゴリズムにおける半径が考えられる。 - (第12問:課題番号12★★★)
メタヒューリスティックスを用いた多目的最適化のシミュレータを作成せよ。
2次元のパレートフロントをうまくとらえられるかを実験してみよう。
以下のいずれかの手法を1つ以上(できれば2つ)用いること。
- Harmony Search
- Gravitational search
- ホタル探索:Firefly Algorithm (FA)
- Sea Lion Optimization Algorithm
- Lion swarm optimization
講義で説明した多目的最適化のVEGAシミュレータは ここにある(java executable file)。 またシミュレータの使用方法はここにある。 javaソースファイルははここにある。
以下に述べられている例題か自分で考えた面白い例題を試すこと。 パレートフロントが異なる問題(凸型フロント、凹型フロントなど)の実験を行って 結果を観察するとよい。
探索で得られたパレート解の 精度に対する評価指標としては以下の2つを用いるとよい。
- 優越個体割合(Ratio of Non-dominated Individuals: RNI)
- 解の多様性の評価指標として被覆率(Cover Rate: CR)詳しくはこの資料を参照。
Hint1: VEGAのアルゴリズムとシミュレータの解説は この本の5.6節にある。
Hint2: 以下の論文などが参考になる。
(1) LLM(大規模言語モデル)でも三段論法が解けるらしい。実際に解かせてみよ。以下の点に留意すること。
(3) また今後「強いAI」を実現するために、どのようなデータを集めて研究すべきか、論理的推論の必要性などについて論述せよ。参照した文献、引用文献、出典は必ず文献リストに挙げること。
Hint1: 参考書 の『4.4節:三段論法推論:ソクラテスは死ぬか?』では三段論法のメンタルモデルの詳細が説明されている。
Hint2: LLMによる三段論法推論の研究は ここ などにある。
なおこの課題で求めているのはわかりやすいデモや応用であり、 学術論文や技術的詳細ではない。
実応用例については、 特許・新聞記事・論文などの出典とともに、どのように応用されているかをわかりやすく平易な言葉で説明すること。
例えば、2x2の4角形のスタンプを押すことで次のように印が変わる。
|
|
|
|
|
(1)次の初期配置について、L型のスタンプを押してすべての印を〇にする手順を探索せよ。A*,深さ優先,広さ優先探索をそれぞれ実行して探索の効率(解に到達するまでのノー ドの展開数)を比較すること。ただしスタンプは回転して使っても良い。自分でA*用の効果的なヒューリスティックスを考えて実験してみるとポイントが高い。
|
|
|
|
|
(2)次のそれぞれのスタンプを使って、(1)の問題の初期状態のいくつかを解け。ただしスタンプは回転して使っても良い。 A*,深さ優先,広さ優先探索をそれぞれ実行して探索の効率(解に到達するまでのノー ドの展開数)を比較すること。自分でA*用の効果的なヒューリスティックスを考えて実験してみるとポイントが高い。
|
|
|
講義で説明した以下のプログラムを拡張するとよい。
Hint1: このパズルは解ける問題と解けない問題がある。なぜか、考えてみよう。それを考えて例題やスタンプを選ぶこと。
Hint2: 講義で説明した15パズルによる奇偶性。
Hint3: 対称性を考えて探索を効率的に行うこと。
このとき、その問題に関して次の3つの異なったGAの性能を比較しなさい。
Hint1: ボールドウィン進化とラマルク進化の詳細は 参考書 の5.1節にある。
Hint2: (2次元での)配列の例としては以下の問題に挑戦するか、任意の配列を入力としてもよい。
Hint3: GAを用いたHP folding問題の解法についての古典的論文は ここ にある。これに基づいたpython版のGAシミュレータは ここ にある。
23という数の個性をどのように生かして探索したのかについて説明すること。
見やすくなるために必要なら補助線(曲線)を書き加えよ。
Hint: たとえば対話側進化計算(IEC)で配置を進化させる試みがある。これを拡張しても良い。 IECによる23点配置の進化のunityでのデモプログラムはここにある。
(1)次の初期配置について、以下のそれぞれにおいては先手必勝かもしくは後手必勝のいずれかになることが知られている。このことを探索によって示せ。ただし初期位置を●とする。
|
|
|
(2)駒がクィーン(将棋の飛車+角の動きをする)のとき、以下の盤面に対して先手必勝となる場所を探索せよ。ない場合には、「無し」と回答せよ。
|
|
|
(3)駒がナイトのとき、7x7および8x8の盤面それぞれに対して先手必勝となる場所を探索せよ。ない場合には、「無し」と回答せよ。
講義で説明した以下のプログラムを拡張するとよい。 オリジナルな実装でないものは採点しない。
提出方法
以下のものを提出すること。提出方法はここに示す通りである。
- プログラムを作成した場合、 実現したシステムに関する説明(どの部分をどう創意工夫したかなど)。さら にアルゴリズム、ソースリストの説明。
- 結果の表示(グラフなどを用いると分かりやすい)。
- 結果に関する考察と評価。
- 授業に関するコメント、要望など(次回の参考にするので是非書いて下さい)。
