36層DNNによる日本人男性余命予測

私はできるだけ長生きしたいと思っていますが、残念ながら永久に生きられるわけではありません。寿命まであとどれくらいあるのだろうと思い、予測する深層モデルを作ってみました。現在の年齢を入力すると(数字で入力したエンターを押して下さい)、余命があと何年ありそうか予測値を計算します。

36層DNNによる日本人男性余名予測デモ

タイトルからも分かるように DNN (Deep Neural Network) を使っています。(今の時代当然ですよね!)ちまちまやっていてもしょうがないので36層(なにせ Deep ですから!)ほど線形(アフィン)変換+ReLUの層を積んでいます。あと、いつものごとく入力は多次元ベクトルに embedding して、出力層を regression して余命を推定しています。(細かいところはソースを御覧ください。)データは厚生労働省が公開しているものを使っています。

深層学習って本当に凄いですよね!

ちょっと待て

そもそもやりたいことは、年齢(一次元の数値)から余命(一次元の数値)を当てることです。容易に想像できるように、年齢と余命にそれほど複雑な関数関係があるとは思えません。実際、厚生労働省の統計を見ると、年齢が上がるにつれ余命はなだらかに短くなっていきます。線形ではありませんが、少なくとも36層も積まないと近似できないようなものではありません。

また、そもそも余命というものは個々人で相当開きがあります。遺伝的な影響もそうですが、不慮の事故や社会的なストレスなど、外部要因の影響が相当大きいことも想像にかたくありません。したがって、さきほどの統計にあるようにせいぜい平均値を参考程度に示すのが関の山、どだい年齢だけから余命を推定することに意味はほとんどないと思います。

最後に、このようなざっくりした近似ならばもっとわかりやすく簡単にできる方法があります。たとえば、さきほどの統計表を見て、自分の年齢にもっとも近い平均余命を二つ選んで、その間は線形補間すれば十分よい精度で予測できます。この方がずっと簡単ですし、どうしてそういう予測になったのか説明することもできます。説明できるということは正しさが検証できるということなので、一石二鳥です。それと比べて36層DNNの方は予測を計算する手順を追うことはできますが、それが説明と呼べるかというと怪しいところです。

タネあかし

実は、この36層DNNはデータから学習したものではありません。直前の段落で説明した方法(直近の2点から線形補間する)を手計算で式変形して、アフィン変換+ReLU の繰り返しになるようにし、計算結果が等しくなるように厚生労働省の平均余命の統計表から適切にパラメータを計算したものです。さらにそれだけだと面白くないので、余計な次元を追加して乱数でパラメータを埋めてあります。

一体何のためにこんなことをしたのかというと、「DNNでどんな関数でも表現できる」ということと「表現できた関数が理解できる」というのは全く別の問題だということを示すためです。これはある意味当然のことなのですが、深層学習を使う時にはそもそも近似したい関数が複雑なので学習したモデルも理解できないのか、それとは関係なくモデル理解というのが難しいことなのかわかりにくいところがあります。今回の例は、何を計算しているのか言われてみればすぐ分かるのに、DNNで表現してしまうと訳がわからない例になっていると思います。

深層学習を実世界で利用していくにあたっては、どうしても中身の理解や説明が必要になってくる場面が出てくると思います。私自身もいろいろと考えたり試したりしていますが、なかなかDNNが「わかった」という感じにはなりません。これから先どうなるのか、とても興味深いです。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中