1 / 59

機械学習特論  第10回講義 最適化 手法1 遺伝的アルゴリズム

機械学習特論  第10回講義 最適化 手法1 遺伝的アルゴリズム. 知能工学専攻 串田 淳一. kushida@hiroshima-cu.ac.jp. 予定( 2019 年). 第 10 回  最適化手法 1 (6/10) 遺伝的アルゴリズム (Genetic A lgorithm, GA) 第 11 回  最適化手法 2 (7/1) 差分進化 (Differential Evolution, DE) 第 12 回  最適化 手法 3 (7/8) 粒子群 最適化 (Particle Swarm Optimization, PSO). 講義 資料 URL

lexie
Download Presentation

機械学習特論  第10回講義 最適化 手法1 遺伝的アルゴリズム

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 機械学習特論 第10回講義最適化手法1遺伝的アルゴリズム機械学習特論 第10回講義最適化手法1遺伝的アルゴリズム 知能工学専攻 串田淳一 kushida@hiroshima-cu.ac.jp

  2. 予定(2019年) • 第10回 最適化手法1 (6/10) 遺伝的アルゴリズム(Genetic Algorithm, GA) • 第11回 最適化手法2 (7/1) 差分進化(Differential Evolution, DE) • 第12回 最適化手法3(7/8) 粒子群最適化(Particle Swarm Optimization, PSO) 講義資料URL http://www.ints.info.hiroshima-cu.ac.jp/~kushida/ML/index.htm

  3. 本日の内容 • 遺伝的アルゴリズムの概要 • 遺伝的アルゴリズムの処理手順 • 代表的なベンチマーク関数 • レポート課題,サンプルプログラムの説明

  4. 最適化手法 対象とする問題を数学的な問題としてモデル化(定式化) 定式化した問題を解くことで解を求める手法 最適化問題を解くためのアプローチ • 数理最適化(数理計画法) • メタヒューリスティクス • 単純なルールや発見的手法を反復的に用いる • (限られた時間内に,できる限り良質な)近似解を求めるアルゴリズム

  5. メタヒューリスティクス手法 進化的アルゴリズム (Evolutionary Algorithm, EA) 進化的計算(Evolutionary Computation, EC) • 生物進化に基づくアプローチ • 遺伝的アルゴリズム(Genetic Algorithm, GA) • 差分進化(Differential Evolution, DE) • 群知能に基づくアプローチ • 粒子群最適化(Particle Swarm Optimization, PSO)

  6. 遺伝的アルゴリズムとは • Genetic Algorithm(GA): • 生物進化をモデル化した最適化アルゴリズム • (最適化:ある関数の最も小さい/大きい値になる変数を見つけること) • 問題の解 →「生物の個体」 • 形質遺伝,淘汰,突然変異などのメカニズムを模して解を探索 • 複数の個体を用いて探索 (Population based search) 解きたい問題の 解候補 個体集団 (Population)

  7. 進化論と進化的計算 地球には様々な生物が存在する. • 環境に適応した優秀な個体だけが子孫を残すことができる.(劣等な個体は淘汰される) • 優秀な個体の子孫が繁栄する. • 残った個体は突然変異を起こす場合があり,前の世代よりも優秀になることも、逆になることもある. これらを繰り返して,生物は進化してきた. 進化的計算 (GA) 「優秀な個体 = 良い解答」と見立て,進化的な演算を用いて 解を改善し,良い解を残していく

  8. GAの歴史 • 1975年、John Hollandにより提案 • 文字列,ビット列{0,1}が対象(e.g. ナップサック問題) • その後様々な,拡張・改良が行われる • 設計変数が実数値である連続関数最適化問題にも対応 • GAの応用事例 • 製品のデザインの最適化 • 新幹線のフロントノーズの設計 • 飛行機の翼の形状 • タイヤのトレッドパターン • スケジューリング • 時間割・勤務表の最適化 • ジョブショップ・スケジューリング

  9. ナップサック問題 荷物 1 荷物2 重さ: 4kg 価値: 150 重さ: 7kg 価値: 100 荷物4 20kgまで入る (制約条件) 荷物 3 重さ: 6kg 価値: 90 重さ: 10kg 価値: 160 合計の価値が最大になるような 品物の組み合わせを探す

  10. GAによるナップサック問題の解法 0:入れない 1:入れる ナップサック問題の解 (ビット列で表現:コード化) 個体 適応度=価値の合計 - ペナルティ(超過量) 交叉 子1 親1 子2 親2 突然変異はビットを反転

  11. 実数値遺伝的アルゴリズム(Real-coded genetic algorithm) • 連続空間を探索領域とする • 探索する変数を(コード化せずに)実数値のまま扱う • 各個体は実数値のベクトルで表現 個体

  12. 最適化問題の定式化 minimize 目的関数 は決定変数ベクトル() subject to 不等式制約 等式制約 上下限制約 線形計画問題:が線形(一次式) 非線形計画問題:のいずれかが非線形

  13. 問題例 目的関数 不等式制約 等式制約 上下限制約

  14. GAによる解探索 • 確率的な多点探索法 (進化は複数の個体が必要) • 探索空間内にランダムで探索点(個体)を発生させる • 個体の位置を更新しながら(進化させながら)解を探索 Sphere関数  Sphere関数における探索

  15. GAが適用可能な問題 • 決定変数の上下限制約のみを有する最適化問題 •     minimize 𝑓(𝒙) • subject to≤≤, 𝑖=,…,𝐷 • (,…,)は𝐷次元決定変数ベクトル • 𝑓(𝒙)は目的関数 (最適化する関数) • はそれぞれ,𝐷個の決定変数 の下限値,上限値 • 全ての上下限制約を満足する領域: 探索空間 Sphere function 探索する関数の性質が分からなくても (目的関数が不連続関数,微分不可能関数であっても) 探索点(個体)に対し,良さの評価値(関数値)を得ることができれば適用可能 () ?

  16. 解探索のイメージ • 関数の最小値(最大値)を探す=砂漠で最も石油が出る場所を探す • 一回掘るとその場所の埋蔵量(良さ)が分かる • たくさん掘れば大体の埋蔵量が把握できるが,その分コストが掛かる • なるべく少ない回数(コスト)で,最も埋蔵量が多い場所を見つけるには?

  17. 理想的な解探索 「大域的な探索」から「局所的な探索」へシフトするような探索 • 探索序盤は十分な多様性を保持し,網羅的に広い範囲を探索 • 探索終盤は集団を収束させ,優良な解周辺を集中的に探索 集団の分布 局所解への収束 (探索失敗) 局所解 局所解 多様性の保持と探索の集中化はトレードオフ →バランスを考慮した探索を実現することが課題 最適解

  18. GAのアルゴリズム S0.初期化 個体(遺伝子)をランダムに生成し,初期集団を構成する.  また,各個体を評価する.(適応度/適合度: fitness を計算する) S1.終了判定 終了条件を満足したら,終了する.  (許容解を発見,最大世代数に達した,最大関数評価回数に達した,など) S2.親選択 子を生成する親を選択する S3.交叉と突然変異(遺伝演算) 交叉確率()に基づき,親個体(通常は2個体)から子個体を生成する. 突然変異確率()に基づき,子個体の遺伝子に突然変異を適用する. 子個体を評価する. S4.生存者選択 親個体と子個体から,次世代に残る個体を選択する. S5.S1.へ戻る

  19. GAの擬似コード Initialize P(0) = { xi | i=1, 2, ... , N},Nは個体数(集団サイズ) EvaluateP(0) 個体の適合度(関数値)を求める for(t=1; 終了条件を満足しない; t++) { // tは世代数 for(i=1; i≦N; i++) { if(u(0,1) < ) 親個体を2個選択し,交叉により子個体xi’を生成 else 親個体を選択し,xi’ とする for(xi’の全ての遺伝子x’ij) if( u(0,1) < )x’ijを突然変異 } Evaluate C(t)={x’i | }子個体の集合C(t)を評価する P(t+1)=P(t)とC(t)から生存者を選択 } P(0)は最初の 個体集団 は0から1の範囲で予め決定 は0から1の範囲で予め決定 u(0,1)は区間[0,1]の一様乱数

  20. GAの探索のイメージ 個体集団から遺伝演算によりを生成 とから次世代(世代)に残す個体を選択(不要な個体を削除) 選択された(生き残った)個体をとする(世代交代) 子 子 子 子 子

  21. 子個体生成の手順 遺伝子に変化を加える C(t) 子個体集団 交叉 P(t) 突然変異 x1’ x1’ x1’ x2’ x3’ x4’ 親個体の遺伝子を組み合せて 子を生成 x5’ 親個体を選択 x6’ 突然変異 x7’ x2’ x8’ x2’ x9’ 交叉をしない場合 (x2’=) P(t)(親個体の集団)と同じ数だけ子を生成

  22. 親個体の選択方法(parent selection) 良い子個体を生成するためには • なるべく「適応度の高い個体」を親とする • ただし,「ある程度多様な個体」を選ぶ必要がある (集団の多様性を維持するため) 両者をバランス良く選択する必要がある • ⇒GAの代表的な親個体の選択方法 • ルーレット選択 • ランキング選択 • トーナメント選択

  23. ルーレット選択 • 親として選択される確率を個体の適応度に比例させる. • 個体の適応度をとすると,選択確率は (適応度は非負でなければならない) • 非常に適応度の高い個体が出現すると,急速に多様性が失われることがある. :個体数 個体5 個体1 *最大化問題とする  →関数値が大きいほど親として   選ばれやすい 個体4 個体2 個体3

  24. ランキング選択 • 個体のランクを適応度の良い順に1, 2, … , とし,ランクによって選択確率を決定する. • 個体のランクをとした場合,選択確率は ,, • はパラメータ(ユーザが決定) • ランク1の個体は,ランクの個体は,メジアンの個体はの確率で選択される の場合の選択確率 *最大化問題とする

  25. トーナメント選択 • ランダムに選択したトーナメントサイズ()個の個体から最良の個体を選択する. • はパラメータ(ユーザが決定) • を大きくすると良い個体が選ばれやすくなり,探索速度が増加する(選択圧が強くなる).一方,集団の多様性が失われて局所解に陥りやすくなる. 個の親候補 P(t) 最良の個体 (関数値が最も良い個体) を親として選択する ランダム で選択

  26. 交叉(Crossover) 選択された親個体の形質を受け継いだ子個体を生成する ⇨「親個体群の分布」と似た分布となるような子個体を生成 実数値GAにおける代表的な交叉方法 • ブレンド交叉(BLX-) • シンプレックス交叉(SPX) • 単峰性正規分布交叉(UNDX) 親2 親3 正規分布 親1 SPX交叉の例 UNDX交叉の例

  27. ブレンド交叉(BLX-) • 子の次元の遺伝子は2つの親(,)の遺伝子を含む拡張領域から乱数を用いて選択 はの一様乱数(次元ごとに決定) あるいは(理論値) 両親によって決まる,各辺が座標軸に平行な超直方体の領域において ランダムサーチを行う 1 子 親1 子 1 子 子 親2 子

  28. 突然変異(mutation) 子の遺伝子の値を変異させる  方法:ある分布に従う乱数を発生 • Gauss分布 平均値標準偏差の正規分布の確率密度関数 • Cauchy分布 の確率密度関数 は位置(location) は尺度(scale) 標準正規分布 標準コーシー分布

  29. 突然変異の種類 子の次元目の遺伝子の突然変異 ・Gauss突然変異 ・Cauchy突然変異 ・一様突然変異 は範囲[0,1]の一様乱数,はステップサイズ(変異の幅) 𝐶はコーシー乱数 突然変異の対象となる遺伝子は確率で選ばれる 各遺伝子が変異する確率 が妥当 (平均1遺伝子が変異)

  30. 生成される子個体の位置 突然変異 親1 交叉で生成された子 次元 1 2 3 4 5 6 7 8 9 10 親2 上下限を超えた解が生成された場合  ⇒修正し,制約内へ

  31. 上下限制約を満たす方法:鏡像反射 新たに生成した個体 修正した個体 次元ごとに(上限/下限から) はみ出した分を反射する は

  32. 〇生存者選択1(survivor selection) ・離散世代モデル 生成したC(t)を,そのまま次世代個体として選択 P(t) C(t) P(t+1) x1’ x2’ x3’ x4’ x5’ x6’ x7’ x8’ x9’

  33. 〇生存者選択2(survivor selection) ・連続世代モデル P(t)とC(t)を合わせて,関数値順にソート 上位個を次世代個体として選択 x1’ x1’ P(t) C(t) P(t+1) x2’ x3’ x5’ x4’ x3’ x5’ x6’ x9’ x7’ x8’ x4’ x9’ x7’

  34. 〇生存者選択3(survivor selection) ・エリート選択 前世代の最良個体を必ず生存者として選択 (離散世代モデルと併用) P(t) C(t) P(t+1) x1’ x2’ x3’ 最良個体 x4’ x5’ x6’ x7’ x8’ x9’

  35. GAの各オペレータの役割 突然変異 親個体の分布とは異なる (交叉では生成されない)領域を探索 交叉 親個体の分布と似たような (特徴を引き継ぐ)分布を生成 親個体集団 子個体集団 局所解 局所解 最適解 生存選択 良好な個体を次世代に残す (ただし多様性を保つために,適応度が悪い個体も選択する必要がある)

  36. 目的関数の特徴 • 関数の形状:単峰性/多峰性 単峰性 多峰性 • 変数間依存性 • 目的関数を各変数ごとの関数の和として分離して表現できるか/できないか • ) • ) • 悪スケール性 • 各変数のスケールが大きく異なるか/同等か

  37. 代表的なベンチマーク関数 Sphere function 単峰性のシンプルな関数,変数間依存性なし 各次元毎に最小値を探せる! Minimum is

  38. Sum of different powerfunction 悪スケール性を持つ ⇨関数の傾斜が次元ごとに異なる Minimum is

  39. Rastriginfunction Minimum is 多峰性関数,変数間依存性なし 格子状(座標軸に並行)に局所解が存在

  40. Rosenbrockfunction Star型 Chain型 Minimum is • 変数解間依存性あり (変数同士の積の項がある) • 座標軸に平行でない長い谷があり,最適解は谷の中に位置する • 変数間依存性はStarの方が強い

  41. Schafferfunction Minimum is 多峰性,変数解間依存性あり

  42. Schwefel function Minimum is 多峰性,変数間依存性なし 最適解は定義域)の端

  43. Griewank function Minimum is 巨視的に見ると単峰性 微視的に見ると多峰性 多峰性,変数解間依存性あり

  44. 遺伝的アルゴリズム レポート課題 サンプルプログラムを参考にして,関数の最適化を行い, 下記の項目についてレポートせよ. • プログラムの変更点/工夫した点 • パラメータ調整の様子 • プログラムの変更の試行錯誤 • 試行錯誤した上での最良の結果 などについてもレポートに含めて下さい. 最適化対象の関数: • Sphere関数(30次元) (全員) • Schaffer 関数(30次元)学籍番号が偶数 • Griewank関数(30次元)学籍番号が奇数 締め切り 6/14(金) 串田居室(情643)のメールボックスに提出

  45. サンプルプログラムでのGAの実装 • パラメータ設定 • 個体数,交叉率,突然変異率 • 親個体の選択の仕方 • トーナメント選択(パラメータ) • 交叉方法 • BLX- (パラメータ) • 突然変異 • ガウス突然変異(パラメータ) • コーシー突然変異(パラメータ) • 一様突然変異(パラメータ) • 生存者選択 • 離散世代モデル,連続世代モデル

  46. プログラム中の変更可能なパラメータ • 個体数(Nindividuals) • トーナメントサイズ(TournamentSize) • 交叉率(Pc): 個体が交叉を行う確率 • BLX-αのパラメータ(Alpha) • 突然変異率(Pm): 遺伝子に突然変異を行う確率 • ガウス(or コーシー)突然変異の分散の初期値(Delta_0) • ガウス(or コーシー)突然変異の分散の最終値(Delta_T) 初期値Delta_0とDelta_Tで制御 δ delta-=(Delta_0-Delta_T)/T_MAX; Delta_0 Delta_T 世代 0 T_MAX

  47. パラメータ設定 #define RUN_MAX 30// 試行回数(平均性能を調べるため) #define MAX_EVALUATIONS 200000//最大関数評価回数 #define Nindividuals 50// 個体数 #define T_MAX (MAX_EVALUATIONS/Nindividuals) // 最大世代数(繰り返し回数) 固定 使用できる計算コストはMAX_EVALUATIONSで決定する => 何回,個体の適応度(関数値)を計算したか? Nindividuals Nindividuals MAX_EVALUATIONS 同じ 評価回数 T_MAX MAX_EVALUATIONS T_MAX T_MAXは設定した個体数により自動的に決まる

  48. 個体の構造体 /* 個体の構造体 */ typedefstruct { double *x; /* genes */ double f; /* fitness value */ } IndividualRec, *Individual; … #define Nvariables 30 // 決定変数ベクトルの次元 固定

  49. 初期化領域 • #define LOWER -100.0 // 下限 • #define UPPER 100.0 // 上限 固定 関数Initializeで上下限内に初期個体を生成 for(i=0; i<n; i++) { for(j=0; j<Nvariables; j++) P[i].x[j]=LOWER+(UPPER-LOWER)*Rand(); // 上下限制約内にランダムに生成 EvaluateIndividual(&P[i]); // 個体の評価 if(better(P[i].f, P[best].f)) best=i; } *探索中は上下限の制約なし

  50. main関数 int main(void) { intrun; Individual Pop, New, Best; double min, max; Pop=NewIndividuals(Nindividuals*2); New=&Pop[Nindividuals]; Best=NewIndividuals(1); double sum=0, ssum=0; for(run=0; run<RUN_MAX; run++) { srand((run+1)*123456789); // 乱数シードの設定 SGA(Pop, New, Best); printf("%2d: ", run+1); Print(Best); } … P(t) POP n個体を動的に割り当てる関数 C(t) NEW Best 世代を通しての 最良個体 … …

More Related