Googleは全社的にヘルスケア領域にディープラーニングを活用することに対して積極的である。DeepMindは2016年の7月には大手眼科病院のMoorfieldsとパートナーシップを発表し、眼疾患の早期発見と患者への正しい治療を提供することを目的として共同開発を開始している。

そして今回、Google BrainチームはJAMAに「Development and Validation of a Deep Learning Algorithm for Detection of Diabetic Retinopathy in Retinal Fundus Photographs」というタイトルで糖尿病網膜症の診察プロセスを変えうる研究成果の発表をした。

糖尿病網膜症の現状

糖尿病網膜症は、失明の原因とされている疾患で、糖尿病の3大合併症のうちの1つとされている。糖尿病患者のうち米国でおおよそ28.5%、インドで18%もの患者が発症している。

日本眼科学会の糖尿病網膜症のページによると、日本においても成人の失明原因の第一位とされているのだそう。

現状、かなり高度な研修を受けた医師のみが眼の検査をして発症しているかどうかを診察している。そして、この世界的な病気を一人ひとり検査できるほど眼科医は存在していない。だが、早期発見できれば有効な治療を受けることで失明を防止することができる。

糖尿病網膜症を検出する技術

Google Brainのヘルスケアページには機械学習技術をヘルスケア領域に適用していく事に関して以下のようなビジョンを示し、糖尿病網膜症の解決のために舵を切ったと語っている。

ディープラーニングはコンピュータービジョンの分野に革命をもたらしました。ほんの数年前にはSFのように見えていたことを実際に可能にしています。これらの新しいコンピュータービジョンを活用したシステムが人間並みに犬の品種を区別できるのであれば、医療画像を使って病気を識別することに応用できるのではないだろうか?2年ほど前に、この可能性を探求し始めたのです。

ディープラーニングを使って自動診察できるメリットは以下のようなことが考えられる。

  • 診察の効率性の向上により、早期発見や診察費を下げることができる
  • 医師が不足している地域の人にも診察することができる
  • 診察の再現性が高まる
  • 根本的な医師不足の解決策となる

さらに、高度な訓練を受けた医師ですら誤診をすることは避けられないだろう。ヒューマンエラーというのは必ず起きるのだ。

データセット

Googleはアルゴリズムの開発にあたって、ディープラーニングに学習させるためのデータセットを構築している。

インドと米国の両方の医師と緊密に強力して、54名の眼科医と1つの画像あたり3~7名から評価された12万8175枚の開発データセットを使って実験している。

それぞれのデータセットを以下の画像のように

網膜画像

  • 正常
  • 軽度の糖尿病網膜症
  • 中度の糖尿病網膜症
  • 重度の糖尿病網膜症
  • 増殖網膜症

に医師と強力して分類する。

アルゴリズム

GoogleはDeep Learningの手法であるConvolutional Neural Networkを使って網膜画像から症状の識別をしている。

Convolutional Neural Networkについて詳しくはこちらを参考にして欲しい

定番のConvolutional Neural Networkをゼロから理解する

2014年のILSVRC優良モデルとして勝利したアーキテクチャは、VGGNetとGoogLeNetだ。 糖尿病網膜症の検出には、このGoogLeNetのアーキテクチャの進化系のInception-v3を採用している。 どちらも、オブジェクト検出や超解像などのコンピュータービジョンのタスクにおいて従来よりも高いパフォーマンスを発揮することができる。

この両者のモデルの違いは何だろうか?

VGGNetは以下の図のように構成をシンプルに保っているものの、計算コストが高い。16層のVGGNetのVGG-16では1億3800万ものパラメータを使う。

vgg

一方で、以下の図のようにInception-v3は構成は複雑なものの、たったの2500万以下のパラメータしか使わない。

inceptin-v3

つまり、学習にかかる計算コストやメモリコストを抑えられるので、ビッグデータを扱うが高精度を求める場合には非常に向いている。また、実行環境のメモリや計算リソースなどの制約がある場合には役立つだろう。

糖尿病網膜症の検出モデルは、さらに10個のニューラルネットワークのアンサンブル学習を適用して出力を平均した結果を識別結果とすることで精度を高めている。

結果

テストには2つのデータセットを使っている。どちらも複数の眼科医から評価を受けた網膜画像となっている。

医療の分野では、病気を診断する際の指標として感度特異度が使われる。コンピューターサイエンスではTrue Positive Rate(Precision)とTrue Negative Rateがよく使われる。以下のように患者の疾患と検査結果を表にすると

感度と特異度

このように計算することができる。

感\,度\,(sensitivity) = \frac{a}{a + b}\\ \\ 特\,異\,度\,(specificity) = \frac{d}{b + d}\\

つまり感度は疾患を正しく陽性として診察できた確率で、特異度は疾患のない患者を正しく陰性として診察できる確率となる。

ディープラーニングを使ったアルゴリズムにおいて2つのデータセットで評価したとき、以下の表のような結果となった。正解データは眼科医の選択の多数決となっている。

データセット名 感度 特異度 眼科医の正答率
EyePACS-1 97.5% 93.4% 95.8%
Messidor-2 96.1% 93.9% 95.9%

ほとんど眼科医と同等の結果となったようだ。これまで、Kaggleなどのコンペティションなど開催されてきたが、以前もConvolutional Neural Networkを活用したものだったが、感度と特異度両方において高い成績を残すことが出来なかった。膨大な数のデータセットを作ることで高い精度の実験結果を出すことができたのだろう。

終わりに

今回のGoogleの実験では、医療の現場においても活用しうる可能性が示唆されている。

コンピューターサイエンスの領域でもまだまだ活発に技術が進歩していく中で、こういった実際の現場との協力でフィードバックを得ながら新しい価値を創出することはとても価値あることだと感じる。

参考