OpenStreetMapから交通流予測モデルを構築し、異なる道路ネットワーク間転移へ挑戦する
第四回 浅間下交差点周辺と川崎市立幸高校周辺を対象としたマルチネットワーク交通予測モデルの試作
はじめに
第1回では、OpenStreetMapとUXsimを利用して交通流データセットを作成しました。
- 第1回 OpenStreetMapから浅間下交差点周辺の交通流データセットを作る
https://qiita.com/ahaya/items/95567b4c44d0635bdbc8
対象としたのは横浜市西区の浅間下交差点周辺であり、122ノード・210リンクから構成される道路ネットワークを作成しました。
第2回では、このデータセットを用いて交通流予測モデルを構築しました。
- 第2回 交通流予測モデルを構築する
https://qiita.com/ahaya/items/c14e5d68538ac0d04391
モデルには Graph Embedding と Transformer を採用し、
過去1時間
↓
未来1時間
の交通流を予測しました。
第三回では浅間下交差点周辺で学習したモデルを利用し、ノード数の異なる川崎市立幸高校周辺の道路ネットワークへ転移学習を行いました。
- 第3回 ノード数の異なる道路ネットワークへの転移学習を試す。
https://qiita.com/ahaya/items/eb1ff83f522f2165f5ec
この回では、ある道路ネットワークで学習したモデルを別の道路ネットワークへ転移できることを確認しました。
行ったのは、浅間下交差点周辺で学習したモデルを川崎市立幸高校周辺へ転移する一方向の転移学習です。
今回はさらに発想を進め、複数の道路ネットワークを一つのTransformerで扱うことを考えます。
浅間下交差点周辺と川崎市立幸高校周辺という 異なる道路ネットワークを対象に、 マルチネットワーク交通予測モデルを試作しました。
対象道路ネットワーク
今回対象とするのは、
横浜市西区 浅間下交差点周辺(122ノード)
川崎市幸区 川崎市立幸高校周辺(126ノード)
の2つの道路ネットワークです。図1の赤丸で囲んだ2か所になります。

地図データ:© OpenStreetMap contributors
図1 予測対象とした2か所(赤丸)
マルチネットワーク交通予測モデル
多言語Transformerとの類似
自然言語処理の分野では、日本語や英語など異なる言語を一つのTransformerで処理する多言語モデルが広く利用されています。
例えば、
日本語
↓
Tokenizer
英語
↓
Tokenizer
Shared Transformer
という構成をとることで、入力表現が異なっていても、文法や意味といった共通知識をTransformer内部で共有できます。
参考文献
[1] Alexis Conneau et al.,
"Unsupervised Cross-lingual Representation Learning at Scale",
ACL 2020.
https://arxiv.org/abs/1911.02116
本研究ではこの発想を道路ネットワークへ適用します。
両者の対応関係を表1に示します。
表1 多言語NLPとの対応表
| 多言語NLP | 本研究 |
|---|---|
| 日本語Tokenizer | 浅間下GraphEmbedding |
| 英語Tokenizer | 川崎GraphEmbedding |
| Shared Transformer | Shared Transformer |
| 言語別Head | 道路ネットワーク別Fully |
道路のマルチネットワーク
図1で示した2つの道路ネットワークはノード数や道路構造が異なります。
本研究では、
- GraphEmbedding
- PositionEmbedding
- Fully
には道路ネットワーク固有の情報が含まれる一方、
- Transformer
- LayerNorm
には道路ネットワークを超えて利用可能な交通流の共通知識が含まれているという仮説を立てました。
この仮説に基づき、図2に示すマルチネットワーク交通予測モデルを構築します。
なお、本実験では比較を容易にするため、両ネットワークで車両需要プロファイルは共通としています。
したがって本稿で評価するのは需要パターンの違いではなく、
異なる道路ネットワーク構造に対して
Transformerの内部表現を共有できるか
という点です。
図2 モデル構成
実装
本研究では道路ネットワークごとの情報を NetworkAdapter として保持します。
class NetworkAdapter(nn.Module):
def __init__(
self,
num_nodes,
graph_pos_embedding_table,
graph_embedding,
fully
):
super().__init__()
self.num_nodes = num_nodes
self.graph_pos_embedding_table = graph_pos_embedding_table
self.graph_embedding = graph_embedding
self.fully = fully
浅間下交差点周辺と川崎市立幸高校周辺について、それぞれ独立した Adapter を用意します。
adapters = {
"sengenshita":
NetworkAdapter(
num_nodes=122,
graph_pos_embedding_table=
sengenshita.graph_pos_embedding_table,
graph_embedding=
sengenshita.graph_embedding,
fully=
sengenshita.fully
),
"kawasaki":
NetworkAdapter(
num_nodes=126,
graph_pos_embedding_table=
kawasaki.graph_pos_embedding_table,
graph_embedding=
kawasaki.graph_embedding,
fully=
kawasaki.fully
)
}
forward() は
def forward(
self,
data,
batch_size,
network_name
):
adapter =
self.adapters[network_name]
graph_pos_emb =
adapter.graph_pos_embedding_table(...)
temp =
adapter.graph_embedding(data)
x = tokens + graph_pos_emb
x = self.shared_blocks(x)
x = self.shared_ln_f(x)
x = adapter.fully(x)
return x
ポイントは、
- GraphEmbedding
- PositionEmbedding
- Fully
をネットワークごとに切り替えている一方、
- Transformer
- LayerNorm
は共通化している点です。
これにより異なる道路ネットワークを一つのTransformerで処理できます。
GraphEmbeddingの詳細は第2回を参照してください。
実験条件
次のような条件で推論を行いました。
どちらのadapterを使うかはコンフィグファイルの中でselected_areaとして指定します。
表2 実験条件
| 項目 | 内容 |
|---|---|
| 対象ネットワーク① | 浅間下交差点周辺(122ノード) |
| 対象ネットワーク② | 川崎市立幸高校周辺(126ノード) |
| 共有対象 | Transformer, LayerNorm |
| 個別保持 | GraphEmbedding, PositionEmbedding, Fully |
| 需要プロファイル | 共通 |
推論結果
まず、それぞれの道路ネットワークに対して推論を行った結果を表3に示します。
表3 推論結果
| ネットワーク | ノード数 | MAE | RMSE | MAPE |
|---|---|---|---|---|
| 浅間下交差点周辺 | 122 | 2.986 | 5.376 | 36.16% |
| 川崎市立幸高校周辺 | 126 | 3.021 | 5.842 | 41.62% |
表3より、浅間下交差点周辺と川崎市立幸高校周辺の両方に対して良好な予測精度が得られました。
推論結果の例を図3、図4に示します。
図4 川崎市立幸高校周辺の予測結果
第三回との違い
今回のモデルと第三回のモデルを比較すると表4のようになります。
表4 第三回との比較
| 項目 | 第三回 | 第四回 |
|---|---|---|
| 手法 | 転移学習 | マルチネットワーク |
| Transformer | 川崎へ転移 | 共通利用 |
| GraphEmbedding | 個別 | 個別 |
| PositionEmbedding | 個別 | 個別 |
| Fully | 個別 | 個別 |
| 推論対象 | 川崎のみ | 浅間下・川崎 |
| ノード数 | 122→126 | 122・126同時対応 |
考察
表3より、 浅間下交差点周辺では MAE=2.986、 川崎市立幸高校周辺では MAE=3.021 となり、両ネットワークでほぼ同等の予測性能が得られました。
今回のモデルでは、
- GraphEmbedding
- PositionEmbedding
- Fully
をネットワークごとに保持し、
- Transformer
- LayerNorm
のみを共有しています。
つまり予測性能が維持されたことは、
Transformer内部で学習された交通流表現の一部が、道路ネットワークを超えて利用可能である可能性を示しています。
これは第三回で行った転移学習の結果とも整合しています。
第三回では浅間下交差点周辺で学習したTransformerを川崎市立幸高校周辺へ転移し、一定の性能が得られることを確認しました。
今回の結果はさらに一歩進み、
道路ネットワークごとに
GraphEmbedding
PositionEmbedding
Fully
を持ちながら、Transformerを共有します。
つまり単なる転移学習ではなく、 一つのTransformerを複数道路ネットワークで共有するというマルチネットワーク構成が成立する可能性を示しています。
この構造は、多言語Transformerが言語ごとのTokenizerとHeadを持ちながらTransformerを共有する構成とも類似しています。
そして今回の結果は、交通流予測においても道路ネットワークを超えて共有可能な表現が存在する可能性を示唆しています。
まとめ
本稿では、
- 横浜市西区浅間下交差点周辺(122ノード)
- 川崎市幸区川崎市立幸高校周辺(126ノード)
を対象として、マルチネットワーク交通予測モデルを試作しました。
道路ネットワークごとに
- GraphEmbedding
- PositionEmbedding
- Fully
を持たせる一方、
- Transformer
- LayerNorm
を共有する構造を採用しました。
その結果、両ネットワークで同等の予測性能が得られ、
交通流に関する共通知識がTransformer内部で表現されている可能性が示されました。
今回は道路ネットワークごとに個別に推論を行いましたが、今後はLoRAのBatch Inferenceのように複数道路ネットワークを同時に処理する仕組みや、複数ネットワークのデータを用いたShared Transformerの共同学習にも取り組みたいと考えています。
将来的には、個別道路ネットワークに依存しない交通流の基盤モデル(Foundation Model)構築への発展を目指せればと思います。
関連記事
- OpenStreetMapから交通流予測モデルを構築し、異なる道路ネットワーク間転移へ挑戦する ⑤ 複数道路ネットワークによる共同学習を試す
https://qiita.com/ahaya/items/f9a4af657a7982ca80fd

