今までサンプルとしてDeep Learningを使った顔の検出やテロップの検出をやってきましたが,今回は学生当時に研究していた海洋のデータを使って実験みました。
海洋物理×機械学習という感じで何かできないかなーと以前から考えてはいたのですが,考えつつ放置していたので,今回はあまり定量的には評価せずに定性的に評価してやってみました。
実験内容
そもそも海洋物理ってなんじゃらほいという方がほとんどだと思う反面,この記事に辿り付く人はほぼほぼ業界内の人だと思いますので,簡単に済ませたいと思います。
海洋物理でよく使われるデータのひとつとして,「海面高度」「海面水温」「鉛直プロファイル(水温・塩分など)」があります。
海面高度はこんなイメージです。
この図の場合だと,赤いほど海面が高く青いほど低いことを表しています。
ちなみに小学校の授業でよく聞く「黒潮」(房総半島以東は黒潮続流といいます)というのは,赤いところと青いところの境界を東へと流れている海流です。
海面水温も見た目は海面高度を同じような雰囲気になるので図は割愛します。
次に鉛直プロファイルですが,Argoフロートで取得したものを使用します。
この図は水温の鉛直プロファイルの例です。
そして最後に今回の実験でやりたいことですが,海面高度と海面水温のデータを入力として鉛直プロファイルを出力しようというものです。
海面高度・水温のデータは緯度方向・経度方向ともに解像度が0.25°なので,数km~数十km程度の細かい変動は再現できないので,今回は数百km程度の中規模変動を再現できるかということを目標にしたいと思います。
といってもそれ程複雑かつ定量的なことはせずに,黒潮続流を横切る断面図や黒潮続流よりも北にある暖水渦や,南にある冷水渦が鉛直断面図で見たときにそれっぽく再現できているかなーという程度の緩さでやってみます。
実行環境
毎度のごとくSurface BookのしょぼしょぼGPUを使います。
- GPU環境
- GPU付属版のSurface Book
- Requirement
- Python 3.6
- torch==1.0.1
- torchvision==0.2.2.post3
微妙に未完成の部分があったりしますが,ソースはこちらです。
使用データ
- 海面高度・水温
- Copernicus Marine Environment Monitoring Service (CMEMS)から取得
- http://marine.copernicus.eu/
- Argoプロファイル
- 東大の岡先生が提供されているデータを借用
- https://ocg.aori.u-tokyo.ac.jp/member/eoka/data/NPargodata/index-jp.html
本来は使用した期間やらなんやら細かいことまでちゃんと書かないといけないのですが,今回は「やってみました」程度の話なので詳細は割愛します。
ざっくり書くと,北太平洋亜熱帯循環域に絞って,学習データと推論用のデータは当然分割してあります。
ネットワーク構成
入力は海面高度と海面水温の2チャネル分で,それをConvolution層で畳み込んでいって,最後は鉛直プロファイルにしないといけないのでFull Connection層を入れてあります。
また,場所(緯度/経度)と時間情報も入れたかったのでFull Connection層には画像とは別に3ユニット分を接続してあります。
時間情報はRNNという意味ではなく,単純にいつのデータなのかを判別するという意味で使用することにします。
なお,今回のように複数の入力をもつネットワークを実装する方法については【PyTorch】入力データが複数ある場合の実装方法を見てみてください。
結果
まずは海面高度の図です。
この中に線を引いてある以下4つの”水温”の鉛直断面を定性的に確認してみます。
- 黒潮続流を横断する断面
- 亜寒帯域(混合水域)の暖水渦(っぽいやつ)の断面
- 亜熱帯域の冷水渦(っぽいやつ)の断面
- 亜熱帯域の高気圧性渦(っぽいやつ)の断面
▼1.黒潮続流を横断する断面
何となくそれっぽく推定できているような気がしますね。
左が南,右が北ですが,南側は海面が暖かく途中で冷水渦になりかけていそうな部分を横切って,また南側の海水がある部分になって,最後に北側の冷たい領域に行くという感じが再現されていそうです。
▼2.亜寒帯域(混合水域)の暖水渦(っぽいやつ)の断面
海面高度の図を見て頂ければ何となく分かりますが,中央に大きめの暖水渦があって,西側の端と東側の端が少し暖水渦っぽいものに引っ掛かっています。
この鉛直断面図を見ると同じような雰囲気が再現されているように見えます。東西の端と中央の海面水温が高めになっています。
▼3.亜熱帯域の冷水渦(っぽいやつ)の断面
海面高度を見ると中東に冷水渦のようなものが見えます。
2.の暖水渦の場合よりは変化が乏しいですが,こちらも中央部分で変化らしきものが見えます。中央部分の海面付近での水温がやや低くなっています。
▼4.亜熱帯域の高気圧性渦(っぽいやつ)の断面
海面高度を見ると中央のやや左寄りに少しだけ海面が高くなっている部分があります。
鉛直断面を見ると中央の左側の部分がすこーーーしだけ海面付近の水温が高くなっているようには見えますが,今まで見てきた3つの場合と比べると変化がかなり乏しいように見えます。
海面高度で見ても渦なのか微妙に分かりにくい部分がありますので,これについては詳しくは実際のプロファイルなどを確認しないと何とも言えない感じでしょうか。
まとめ
今回はDeep Learningを使って海面高度と海面水温から水温の鉛直プロファイルを推定してみました。
黒潮続流を横断するようなかなり変化が分かりやすいケースや,海面高度で見たときにはっきりと認識できる暖水渦・冷水渦についてはそれっぽく再現できていました。
一方で,亜熱帯域の高気圧性渦については明確な変化は見られませんでした。これは,本当に変化がない現象なのか,それとも再現出来ていないだけなのか2通りの解釈が出来るかと思います。今回はDeep Learningを海洋データに適用してみたらどうなるかという実験レベルの内容ですので,実際にはどうだったのかの解析までは行わないこととします。
もし,再現できていないということだった場合は,黒潮続流を横切ったり海水をトラップしているような暖水渦・冷水渦のような「海水の性質が大きく変化する」ような現象は海面の情報から推定できるけど,それ以外の物理変動を再現するのは難しいという感じでしょうか。
今回はかなり緩く書きましたので,何かあればTwitterでご質問頂ければ可能な範囲でお答えしたいと思います。