Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

グラフアルゴリズム実践活用術

 グラフアルゴリズム実践活用術

情報オリンピック夏季セミナー 2023: https://jcioi-summer-seminar-2023.peatix.com/ での講演スライドです。

講義概要: アルゴリズムを勉強していると,グラフアルゴリズムにたくさん出会います.しかし,グラフアルゴリズムが現実世界でどのように活躍しているのかについては目に触れる機会はあまりありません.本講演では,実社会で登場するグラフデータについての問題と,どのようなグラフアルゴリズムがそれらの問題を解決しているかについてご紹介します.

ノイズ除去のソースコード: https://colab.research.google.com/drive/1Mdr3KGrwuX9jAWHk5pVGH2HaUmLmR-jB?usp=sharing
背景除去のソースコード: https://colab.research.google.com/drive/1vm6BHg1rsujEOLAANfT29vMwGkTIOoeV?usp=sharing

連絡先: @joisino_ (Twitter) / https://joisino.net/

佐藤竜馬 (Ryoma Sato)

August 20, 2023
Tweet

More Decks by 佐藤竜馬 (Ryoma Sato)

Other Decks in Programming

Transcript

  1. 2 / 100 KYOTO UNIVERSITY 京大で機械学習を研究しています 佐藤 竜馬(さとう りょうま) 京都大学で機械学習の研究をしています。

    Twitter: @joisino_ 専門はグラフニューラルネットワーク 最適輸送・推薦システム 高校 2 年生のときに競技プログラミングをはじめる JOI 2014 金メダル IOI 2014 日本代表 銅メダル JOI 2014 夏季セミナー参加 AtCoder: 2818 Follow Me
  2. 5 / 100 KYOTO UNIVERSITY 本日の目標:アルゴリズムが実際に役立つことを知る  アルゴリズムを学んで何が出来る?  競プロの問題が解ける!楽しい!

    ↑ わかる。めっちゃいいこと。これはこれで素晴らしい。  他には? #月間競技プログラミングは役に立たない ?
  3. 6 / 100 KYOTO UNIVERSITY 本日の目標:アルゴリズムが実際に役立つことを知る  アルゴリズムを学んで何が出来る?  競プロの問題が解ける!楽しい!

    ↑ わかる。めっちゃいいこと。これはこれで素晴らしい。  他には? #月間競技プログラミングは役に立たない ?  アルゴリズムは実際に役立ちます!!! 生活に役立つ、お金になる、... etc.  競プロっぽい設定でかつ今日から使える(本当に今日から使える) アルゴリズムと問題を学んでモチベーションを付けることを目指します。
  4. 12 / 100 KYOTO UNIVERSITY 現実世界に登場するグラフ1: 路線図  頂点 =

    駅、辺 = 路線の路線図 https://subway.osakametro.co.jp/guide/routemap.php
  5. 14 / 100 KYOTO UNIVERSITY 現実世界に登場するグラフ3: 構文木  頂点 =

    単語や節、辺 = 包含関係の構文木 https://twitter.com/nakamurakihiro/status/1230798247989366784
  6. 16 / 100 KYOTO UNIVERSITY グラフは様々な物事を統一的に表現できる  グラフのスゴいところ: 一つのデータ構造で人間関係から分子まで統一的に扱える →

    グラフの処理技術さえ身につければあらゆる状況に対応できる  まとまりのないごちゃごちゃしたデータでもグラフを使えば 統一的に扱える! グラフはあらゆるデータに対応できるオールラウンダー選手 グラフアルゴリズムをマスターすればどんな状況にも対応できる Take Home Message
  7. 18 / 100 KYOTO UNIVERSITY 最短経路問題:頂点間の最適な移り方を求める  最短経路問題 入力:グラフ、頂点 s、頂点

    t 出力:s から t への最短経路  ここで、経路の長さは含まれる辺の本数とする。 s t
  8. 19 / 100 KYOTO UNIVERSITY 最短経路問題:頂点間の最適な移り方を求める  最短経路問題 入力:グラフ、頂点 s、頂点

    t 出力:s から t への最短経路  ここで、経路の長さは含まれる辺の本数とする。 s t
  9. 20 / 100 KYOTO UNIVERSITY 辺に長さがある変種もある  重み付き最短経路問題 入力:グラフ、各辺の長さ、頂点 s、頂点

    t 出力:s から t への最短経路  ここで、経路の長さは含まれる辺の長さの合計とする。 s t 8 8 6 12 8 8 2 2 3 2 12 14 3
  10. 24 / 100 KYOTO UNIVERSITY 解き方:幅優先探索  最短経路問題の解き方  0

    と辺で繋がっている頂点に 1 と書き込む 辺に向きを付けておく s t 0 1 1
  11. 25 / 100 KYOTO UNIVERSITY 解き方:幅優先探索  最短経路問題の解き方  1

    と辺で繋がっている頂点に 2 と書き込む 既に値が書き込まれている頂点はスキップ 辺に向きを付けておく s t 0 1 1 2 2 2 2 既に 0 と書かれているの でここには 2 と書かない
  12. 26 / 100 KYOTO UNIVERSITY 解き方:幅優先探索  最短経路問題の解き方  t

    に値が書き込まれたので終了 矢印を s までたどると最短経路が得られる s t 0 1 1 2 2 2 2 値 2 は経路の長さを表す
  13. 27 / 100 KYOTO UNIVERSITY 応用例 2: 地下鉄の移動コスト 0 1

    2 3 4 1 1 1 2 2 2 2 2 2 4 4 4 3 3 3 4 3 3 3 3 3 ゴール スタート 4 ホップで到達可能 → 1 ホップ 2 分とすると 8 分で到達可能(簡単のため乗り換え時間は無視)
  14. 28 / 100 KYOTO UNIVERSITY 応用例 3: コネを得る  推薦入試のために、憧れの

    T 教授にアポを取りたい できるだけ少ない紹介者を間に入れて連絡したい T 教授 あなた 友達の A ちゃん
  15. 30 / 100 KYOTO UNIVERSITY 応用例 3: コネを得る  解法:あなたを頂点

    s とし、T 教授を頂点 t として 最短経路問題を解く 頂点 t 頂点 s 間に 2 人 の紹介で T 教授にたどり着ける
  16. 37 / 100 KYOTO UNIVERSITY 応用例 4: 推しキャラのグッズを得る  解法:譲りたい赤を始点

    s に、欲しい黃を終点 t にして 最短経路を求める Aさん Bさん Cさん Eさん Dさん Fさん Iさん Gさん Jさん Kさん Hさん 頂点 t 頂点 s
  17. 38 / 100 KYOTO UNIVERSITY 応用例 4: 推しキャラのグッズを得る  解法:譲りたい赤を始点

    s に、欲しい黃を終点 t にして 最短経路を求める Aさん Bさん Cさん Eさん Dさん Fさん Iさん Gさん Jさん Kさん Hさん 頂点 t 頂点 s C さんに頼んで赤を緑に E さんに頼んで緑を橙に I さんに頼んで橙を黄に すればよい
  18. 39 / 100 KYOTO UNIVERSITY 応用例 5: 外貨を得る  手元に現金

    10 万円がある。 これをアメリカドルに両替したい。どうすればよいか。  入力:外貨の両替手数料 出力:最適な両替の仕方
  19. 40 / 100 KYOTO UNIVERSITY 応用例 5: 外貨を得る 手数料: 2000

    円  解法:手数料の情報を元にグラフを作る
  20. 41 / 100 KYOTO UNIVERSITY 応用例 5: 外貨を得る 手数料: 2000

    円 手数料: 800 円  解法:手数料の情報を元にグラフを作る
  21. 42 / 100 KYOTO UNIVERSITY 応用例 5: 外貨を得る 手数料: 2000

    円 手数料: 800 円 3000 円  解法:手数料の情報を元にグラフを作る
  22. 43 / 100 KYOTO UNIVERSITY 応用例 5: 外貨を得る 手数料: 2000

    円 手数料: 800 円 3000 円 200 円 500 円  解法:手数料の情報を元にグラフを作る
  23. 44 / 100 KYOTO UNIVERSITY 応用例 5: 外貨を得る 手数料: 2000

    円 手数料: 800 円 3000 円 200 円 500 円  解法:日本円を始点 s にドルを終点 t にして最短経路 頂点 t 頂点 s
  24. 45 / 100 KYOTO UNIVERSITY 応用例 5: 外貨を得る 手数料: 2000

    円 手数料: 800 円 3000 円 200 円 500 円  解法:日本円を始点 s にドルを終点 t にして最短経路 頂点 t 頂点 s 合計 1500 円で両替できる! 直接両替するより安い! 手数料 1700 円で円 → ドル両替サービスを始めると儲かる 外貨取引に限らず他の交易でも同じアイデアが使える
  25. 46 / 100 KYOTO UNIVERSITY 応用例 6: 映画推薦  映画の推薦サービスを作りたい

     入力:人々の映画視聴履歴 出力:各人へおすすめ映画を推薦
  26. 48 / 100 KYOTO UNIVERSITY 応用例 6: 映画推薦  解法:

    人と映画の距離を計算する 最短経路長 3: S さんが前に見た映画を見た 別の人がこの映画を見ている → 関連した良い映画かも 頂点 s 頂点 t 0 1 2 3
  27. 49 / 100 KYOTO UNIVERSITY 応用例 6: 映画推薦  解法:

    人と映画の距離を計算する 頂点 s 頂点 t 最短経路長 5: S さんの映画の好みからは 遠い映画かもしれない 0 1 2 3 4 5
  28. 50 / 100 KYOTO UNIVERSITY 応用例 6: 映画推薦  解法:

    全映画の距離を計算して、距離の近い映画を推薦する 距離 5 距離 3 視聴済(スキップ) : : 推薦
  29. 51 / 100 KYOTO UNIVERSITY 最短経路アルゴリズムだけで様々な問題を解決  最短経路問題が解けるようになると、推しグッズが手に入るし、 外貨が安く手に入る 

    ポイント:様々な問題を同じアルゴリズムで解くことができる (ほとんど)同じプログラムでこれら全ての問題を解ける 同じアルゴリズムでも工夫すると種々多様な問題を 解くことができる Take Home Message グラフを受け取って最短経路を出力するプログラム
  30. 52 / 100 KYOTO UNIVERSITY アルゴリズムだけでなくデータにも気を使おう  データの準備の仕方が重要  たくさんの取引情報を使ってグラフを作ると、それだけ掘り出し物が見つ

    かりやすくなる  たくさんの人々の映画視聴履歴を使ってグラフを作ると、それだけ 正確に距離を捉えられるようになる  全く同じプログラムを使っても、入力データを改良すると良い結果になる アルゴリズムを改良するだけでなく、入力データを工夫する ことも重要 Take Home Message
  31. 56 / 100 KYOTO UNIVERSITY 始点と終点を指定するバージョンもある  s-t グラフカット問題 入力:グラフ、頂点

    s, 頂点 t 出力:頂点集合の 2 分割のうち、 s が一方に含まれ、t がもう一方に含まれるもののうち、 間の辺の数が最小のもの s t
  32. 57 / 100 KYOTO UNIVERSITY 始点と終点を指定するバージョンもある  s-t グラフカット問題 入力:グラフ、頂点

    s, 頂点 t  出力:頂点集合の 2 分割のうち、 s が一方に含まれ、t がもう一方に含まれるもののうち、 間の辺の数が最小のもの s t 間の辺の本数は 2 本
  33. 58 / 100 KYOTO UNIVERSITY 重み付きバージョンも考えられる 重み付き s-t グラフカット問題 

    入力:グラフ、辺の太さ、頂点 s, 頂点 t  出力:頂点集合の 2 分割のうち、 s が一方に含まれ、t がもう一方に含まれるもののうち、 間の辺の太さの合計が最小のもの
  34. 59 / 100 KYOTO UNIVERSITY 解き方:全探索  グラフカット問題の解き方:  頂点の部分集合を全て調べる

    部分集合は 2n - 2 通り(どちらか空集合はスキップ) s-t カットのときは 2n-2 通り(s, t 以外の全部分集合)  最も間の辺が少なかったものを出力  指数時間だが一応解ける
  35. 60 / 100 KYOTO UNIVERSITY 実は多項式時間でも解ける  グラフカット問題の解き方:  頂点の部分集合を全て調べる

    部分集合は 2n - 2 通り(どちらか空集合はスキップ) s-t カットのときは 2n-2 通り(s, t 以外の全部分集合)  最も間の辺が少なかったものを出力  指数時間だが一応解ける  実は多項式時間でも解けます(複雑なので省略)  最大流最小カット定理や、Ford-Fulkerson などで検索
  36. 61 / 100 KYOTO UNIVERSITY 応用例1: クラスタ検出  人間関係の情報からどういうグループがあるかを検出したい 

    入力:人間関係の情報 出力:グループ情報  グループの例: アニメクラスタ、ヒップホップクラスタ、アイドルクラスタ、...
  37. 64 / 100 KYOTO UNIVERSITY 応用例2: 画像のノイズ除去  ノイズのある画像からノイズを除去したい 

    入力:ノイズ入りモノクロ画像      出力:ノイズ除去後の画像
  38. 66 / 100 KYOTO UNIVERSITY 応用例2: 画像のノイズ除去  解法:新しい頂点 s,

    t を作り、 黒頂点を s に、白頂点を t につなぐ s t
  39. 67 / 100 KYOTO UNIVERSITY 応用例2: 画像のノイズ除去  解法:新しい頂点 s,

    t を作り、 黒頂点を s に、白頂点を t につなぐ s t
  40. 69 / 100 KYOTO UNIVERSITY 応用例2: 画像のノイズ除去  解法:s-t 最小カットを求める

    s t 元々白色で t と繋がっているが、 左右下が黒頂点なので、 これを青側にすると左右下の辺 が生じて間の辺の本数が 多くなってなってしまう なので赤側にいく
  41. 71 / 100 KYOTO UNIVERSITY 応用例2: 画像のノイズ除去  実際に s-t

    カットでノイズ除去した結果  入力:ノイズ入りモノクロ画像 コード: https://colab.research.google.com/drive/1Mdr3KGrwuX9jAWHk5pVGH2HaUmLmR-jB?usp=sharing
  42. 72 / 100 KYOTO UNIVERSITY 応用例2: 画像のノイズ除去  実際に s-t

    カットでノイズ除去した結果  入力:ノイズ入りモノクロ画像      出力:ノイズ除去後の画像 コード: https://colab.research.google.com/drive/1Mdr3KGrwuX9jAWHk5pVGH2HaUmLmR-jB?usp=sharing
  43. 73 / 100 KYOTO UNIVERSITY 応用例3: 画像のトリミング  画像から人物をトリミングしたい 

    入力:背景付き画像       出力:人物のトリミング どこが人物でどこが背景かを 色で雑に指示している
  44. 79 / 100 KYOTO UNIVERSITY 応用例3: 画像のトリミング  実際に s-t

    カットでトリミングした結果  入力:背景付き画像 コード: https://colab.research.google.com/drive/1vm6BHg1rsujEOLAANfT29vMwGkTIOoeV?usp=sharing
  45. 80 / 100 KYOTO UNIVERSITY 応用例3: 画像のトリミング  実際に s-t

    カットでトリミングした結果  入力:背景付き画像       出力:人物のトリミング コード: https://colab.research.google.com/drive/1vm6BHg1rsujEOLAANfT29vMwGkTIOoeV?usp=sharing
  46. 84 / 100 KYOTO UNIVERSITY In: グラフ全体、Out: グラフのラベル  グラフ分類:グラフが表現する化合物に薬効があるかを判別する

    H C O H N O N 薬効あり H C O H O H H 薬効あり H C O H N O N 薬効あり H C H H N H H 薬効なし O C O H O H H ? H 例を学習
  47. 86 / 100 KYOTO UNIVERSITY グラフ分類も他の機械学習とほとんど同じようにできる  グラフ分類でも、画像分類とほとんど同じアプローチが使える  画像分類における畳み込みニューラルネットワークを

    グラフニューラルネットワークに置き換えるだけでオーケー  原理はほぼ同じ  グラフニューラルネットワークを説明している時間はないのでここでは 単純な 1-近傍分類法を紹介
  48. 87 / 100 KYOTO UNIVERSITY グラフの類似度を計算する関数を定義  ステップ 1: グラフどうしの類似度を計算する関数を作る

    def sim(G1, G2): point = 0 if G1 と G2 の頂点数が同じ: point += 1 if G1 と G2 の炭素原子の数が同じ: point += 3 if G1 と G2 の水素原子の数が同じ: point += 2 if G1 と G2 の両方にベンゼン環がある: point += 5 return point 類似度関数の 定義に正解はない。 どういうものを書くかはセンス
  49. 88 / 100 KYOTO UNIVERSITY 作った関数を使って、各訓練データとの類似度を計算  ステップ2: 各訓練データとの類似度を計算 H

    C O H N O N 薬効あり H C O H O H H 薬効あり H C O H N O N 薬効あり H C H H N H H 薬効なし O C O H O H H ? H point = 2 point = 5 point = 2
  50. 89 / 100 KYOTO UNIVERSITY 定義した類似度の意味で最も似ている訓練データを発見  ステップ3: 一番似ている訓練データを見つける H

    C O H N O N 薬効あり H C O H O H H 薬効あり H C O H N O N 薬効あり H C H H N H H 薬効なし O C O H O H H ? H point = 2 point = 5 point = 2 一番似ている
  51. 90 / 100 KYOTO UNIVERSITY 最も似ているデータのラベルと同じラベルで予測する  ステップ4: 一番似ている訓練データと同じラベルを出力 H

    C O H N O N 薬効あり H C O H O H H 薬効あり H C O H N O N 薬効あり H C H H N H H 薬効なし O C O H O H H 予測:薬効あり H point = 2 point = 5 point = 2 一番似ている
  52. 91 / 100 KYOTO UNIVERSITY 近傍分類は単純だが実はかなり強力  かなり単純だが、一応「例をもとに新しいデータの予測をする」という 目的はこれで達せられている 

    教師ラベル付きデータの質・量と類似度の定義次第では かなり良い精度を達成できる  ニューラルネットワークやカーネル法などのファンシーな手法も 根本の考え方は同じ いろんな要素が増えて、数理的な裏付けが付いただけ
  53. 92 / 100 KYOTO UNIVERSITY 生成モデルが流行している  タグ(呪文)を入れて画像を生成する手法が流行っている 賛否両論ありますが ((best

    quality)), ((masterpiece)), ((ultra-detailed)), (illustration), (detailed light), 1girl, blonde hair, blue eyes, smiling, bob cut
  54. 93 / 100 KYOTO UNIVERSITY 生成モデルが流行している  タグ(呪文)を入れて画像を生成する手法が流行っている  これが分子でできると便利そう

    ((best quality)), ((masterpiece)), ((ultra-detailed)), (illustration), (detailed light), 1girl, blonde hair, blue eyes, smiling, bob cut 有機、水溶性、軽量、安価、 無毒、薬効、...
  55. 94 / 100 KYOTO UNIVERSITY グラフ生成モデルも盛んに研究されている  構成要素を少し変えると(例:CNN を GNN

    に変える) VAE, GAN, 拡散モデルなど同じ技法がグラフ生成にも使える  Score-based Generative Modeling of Graphs via the System of Stochastic Differential Equations (ICML 2022)  デノイジング拡散モデルの枠組みを用いる ノイズ推定モデルに GNN を用いる
  56. 96 / 100 KYOTO UNIVERSITY まとめ:グラフは様々な物事を統一的に表現できる  友達関係から化合物まで何でも表現できる!  推しグッズの獲得から推薦システムの作成まで、幅広い問題を

    同じ最短経路のアルゴリズムを使って解くことができる! グラフはあらゆるデータに対応できるオールラウンダー選手 グラフアルゴリズムをマスターすればどんな状況にも対応できる Take Home Message 同じアルゴリズムでも工夫すると種々多様な問題を 解くことができる Take Home Message
  57. 100 / 100 KYOTO UNIVERSITY まとめ:グラフは様々な物事を統一的に表現できる  友達関係から化合物まで何でも表現できる!  推しグッズの獲得から推薦システムの作成まで、幅広い問題を

    同じ最短経路のアルゴリズムを使って解くことができる! グラフはあらゆるデータに対応できるオールラウンダー選手 グラフアルゴリズムをマスターすればどんな状況にも対応できる Take Home Message 同じアルゴリズムでも工夫すると種々多様な問題を 解くことができる Take Home Message