OpenStreetMapから交通流予測モデルを構築し、異なる道路ネットワーク間転移へ挑戦する
第5回 複数道路ネットワークによる共同学習を試す
この記事でわかること
- 異なる2つの街の道路データを、1つのAI(Transformer)で同時に賢く学習させる実装方法
- バラバラのノード数(122と126)の壁を、Adapter構造で綺麗に解決する PyTorch コード
目次
- はじめに
- 第4回の振り返り
- Shared Transformerの共同学習
- 実装
- 実験条件
- 推論結果
- 第4回との比較
- 考察
- まとめ
1. はじめに
本連載では、OpenStreetMapとUXsimを利用して交通流予測モデルの構築を進めています。
第1回では、OpenStreetMapから道路ネットワークを取得し、UXsimを利用して交通流データセットを作成しました。
- 第1回 OpenStreetMapから浅間下交差点周辺の交通流データセットを作る
https://qiita.com/ahaya/items/95567b4c44d0635bdbc8
第2回では、Graph EmbeddingとTransformerを用いた交通流予測モデルを構築し、
過去1時間
↓
未来1時間
の交通流予測を行いました。
- 第2回 交通流予測モデルを構築する
https://qiita.com/ahaya/items/c14e5d68538ac0d04391
第3回では、浅間下交差点周辺で学習したモデルを利用し、ノード数の異なる川崎市立幸高校周辺の道路ネットワークへの転移学習を試しました。
- 第3回 ノード数の異なる道路ネットワークへの転移学習を試す
https://qiita.com/ahaya/items/eb1ff83f522f2165f5ec
第4回では、複数の道路ネットワークが一つのTransformerを共有するマルチネットワーク交通予測モデルを試作しました。
- 第4回 浅間下交差点周辺と川崎市立幸高校周辺を対象としたマルチネットワーク交通予測モデルの試作
https://qiita.com/ahaya/items/90ef60e375a25a382123
その結果、
GraphEmbedding
PositionEmbedding
Fully
は道路ネットワークごとに保持しながら、
Transformer
LayerNorm
を共有する構成でも良好な予測精度が得られることを確認しました。
今回はさらに発想を進め、浅間下交差点周辺と川崎市立幸高校周辺のデータを用いてShared Transformerの共同学習を行います。
一つの道路ネットワークから別の道路ネットワークへ転移するだけでなく、
複数道路ネットワーク
↓
Shared Transformer
↓
共同学習
が成立するのかを検証します。
2. 第4回の振り返り
第4回では、一つのTransformerを異なる道路ネットワークで共有しても良好な予測性能が得られることを確認しました。
しかし、第4回で利用したShared Transformerは、浅間下交差点周辺で学習済みのTransformerを流用したものであり、複数道路ネットワークのデータを用いて学習されたものではありませんでした。
もし共同学習が成立すれば、道路ネットワークごとに個別のTransformerを学習する必要がなくなり、一つのTransformerを複数道路ネットワークで共有しながら学習できる可能性があります。
そこで今回は、浅間下交差点周辺と川崎市立幸高校周辺のデータを用いてShared Transformerの共同学習を試します。
3. Shared Transformerの共同学習
共同学習では
浅間下交差点周辺
+
川崎市立幸高校周辺
の両方のデータを利用してShared Transformerの共同学習を行います。
モデル構成は第4回と同様に、図1の構成をとり、
図1 モデル構成
GraphEmbedding
PositionEmbedding
Fully
を道路ネットワークごとに保持し、
Transformer
LayerNorm
を共有します。
学習時には浅間下交差点周辺と川崎市立幸高校周辺の学習データを交互に入力し、同一のTransformerを更新します。
浅間下データ
↓
Transformer更新
川崎データ
↓
Transformer更新
学習の流れを図にすると、図2のように書けます。
図2 学習の流れ
この学習が成立すれば、道路ネットワークごとに個別のTransformerを学習する必要がなくなり、一つのTransformerを複数道路ネットワークで共同利用できる可能性があります。
4. 実装
第4回では道路ネットワークごとに個別に推論を行いました。
今回は、浅間下交差点周辺と川崎市立幸高校周辺の学習データを交互に入力し、Shared Transformerを共同学習します。
なお、Shared TransformerおよびLayerNormには、第4回で利用した浅間下交差点周辺の学習済みモデルを初期値として利用しました。
学習ループの概要を以下に示します。
for epoch in range(max_epoch):
model.train()
for (xs, ys), (xk, yk) in zip(
train_loader_sengenshita,
train_loader_kawasaki):
#
# 浅間下
#
xs = xs.to(device)
ys = ys.to(device)
optimizer.zero_grad()
out_s = model(
xs,
xs.shape[0],
"sengenshita"
)
ys = ys.squeeze(-1).transpose(1, 2)
loss_s = criterion(
out_s,
ys
)
loss_s.backward()
optimizer.step()
#
# 川崎
#
xk = xk.to(device)
yk = yk.to(device)
optimizer.zero_grad()
out_k = model(
xk,
xk.shape[0],
"kawasaki"
)
yk = yk.squeeze(-1).transpose(1, 2)
loss_k = criterion(
out_k,
yk
)
loss_k.backward()
optimizer.step()
浅間下交差点周辺のデータと川崎市立幸高校周辺のデータを交互に入力することで、それぞれの誤差に基づいてShared Transformerを更新します。
浅間下
↓
Forward
↓
Loss
↓
Shared Transformer更新
川崎
↓
Forward
↓
Loss
↓
Shared Transformer更新
という処理を繰り返すことで、一つのTransformerを複数道路ネットワークのデータで共同学習します。
5. 実験条件
共同学習には、
- 浅間下交差点周辺(122ノード)
- 川崎市立幸高校周辺(126ノード)
の2つの道路ネットワークを利用しました。
学習には第4回で構築した学習済みモデルを初期値として使用し、Shared Transformerを両ネットワークのデータで追加学習しました。
表1に実験条件を示します。
表1 実験条件
| 項目 | 内容 |
|---|---|
| 対象ネットワーク① | 浅間下交差点周辺(122ノード) |
| 対象ネットワーク② | 川崎市立幸高校周辺(126ノード) |
| Shared Transformer | 第4回の学習済みモデルを利用 |
| Shared LayerNorm | 第4回の学習済みモデルを利用 |
| GraphEmbedding | ネットワークごとに保持 |
| PositionEmbedding | ネットワークごとに保持 |
| Fully | ネットワークごとに保持 |
| 学習方法 | 両ネットワークのデータを交互に入力 |
| 評価指標 | MAE, RMSE, MAPE |
学習時には浅間下交差点周辺と川崎市立幸高校周辺のデータを交互に入力し、Shared Transformerを更新しました。
6. 推論結果
共同学習後の推論結果を表2に示します。
表2 共同学習後の推論結果
| ネットワーク | ノード数 | MAE | RMSE | MAPE |
|---|---|---|---|---|
| 浅間下交差点周辺 | 122 | 2.931 | 5.231 | 36.05% |
| 川崎市立幸高校周辺 | 126 | 3.013 | 5.621 | 43.39% |
また、相関係数は
- 浅間下交差点周辺:0.875
- 川崎市立幸高校周辺:0.822
となりました。
推論結果の例を図3および図4に示します。
図3 浅間下交差点周辺の推論結果
図4 川崎市立幸高校周辺の推論結果
7. 第4回との比較
第4回では、Shared Transformerを共有した状態で各道路ネットワークの推論を行いました。
一方、今回は浅間下交差点周辺と川崎市立幸高校周辺の両方のデータを利用してShared Transformerの共同学習を行いました。
共同学習によって予測性能がどのように変化したのかを確認するため、第4回との比較を行います。
表3 第4回との比較
| ネットワーク | MAE(第4回) | MAE(第5回) | RMSE(第4回) | RMSE(第5回) |
|---|---|---|---|---|
| 浅間下交差点周辺 | 2.986 | 2.931 | 5.376 | 5.231 |
| 川崎市立幸高校周辺 | 3.021 | 3.013 | 5.842 | 5.621 |
表3より、共同学習後も両ネットワークで予測性能は維持されており、MAEおよびRMSEはわずかに改善しました。
8. 考察
表3より、共同学習後も浅間下交差点周辺および川崎市立幸高校周辺の両ネットワークで予測性能が維持されていることが分かります。
特に、
-
浅間下交差点周辺
- MAE:2.986 → 2.931
- RMSE:5.376 → 5.231
-
川崎市立幸高校周辺
- MAE:3.021 → 3.013
- RMSE:5.842 → 5.621
となり、いずれのネットワークでもわずかな性能向上が見られました。
今回の共同学習では、
GraphEmbedding
PositionEmbedding
Fully
は道路ネットワークごとに保持し、
Transformer
LayerNorm
を共有しています。
また、Shared TransformerおよびLayerNormには第4回で利用した学習済みモデルを初期値として利用し、浅間下交差点周辺と川崎市立幸高校周辺の両方のデータを用いて追加学習を行いました。
もし一方の道路ネットワークに過度に適応してしまう場合は、もう一方の予測性能が低下する可能性があります。
しかし今回の実験では両ネットワークで性能の維持あるいは改善が確認されました。
この結果は、Shared Transformerが道路ネットワークごとの個別情報だけでなく、複数の道路ネットワークに共通する交通流の特徴を学習できている可能性を示しています。
まとめ
この結果は、Shared Transformerが道路ネットワークごとの個別情報だけでなく、複数の道路ネットワークに共通する交通流の特徴を学習できている可能性を示しています。
第4回ではShared Transformerを共有した推論が成立することを確認しましたが、今回はさらに一歩進み、複数道路ネットワークによる共同学習も成立する可能性が示されました。
今回の共同学習では道路ネットワークごとに順番に学習を行いました。
次回はさらに発想を進め、複数道路ネットワークを同一バッチで処理するBatch Inferenceに挑戦したいと思います。

