2019 年 3 月 15 日

ざっくり！ ディープラーニング
～入門編～
川内敬介
北海道大学大学院 医理工学院 修士課程 ２年

目次
はじめに ............................................................................................................................................... 2
第1章～ディープラーニングとは何か～ ................................................................................... 3

第2章～ディープラーニングのための環境構築～ ................................................................. 12

1.

バージョンの確認 ............................................................................................................................ 13

2.1.

CUDA のインストール................................................................................................................ 14

2.2.

cuDNn のインストール ............................................................................................................... 24

2.3.

Tensorflow のインストール......................................................................................................... 29

3.

動作確認 .......................................................................................................................................... 29

第3章～ディープラーニング入門～ ......................................................................................... 30

1.

リンゴとオレンジの分類 ................................................................................................................. 30

2.

その他のサンプルコード ................................................................................................................. 30

1はじめに
近年では人工知能に関する研究の発展により、コンピュータが囲碁の世界王者に勝利、自動車の自動運転が現実味を帯びてくる等、様々な分野で成果を上げています。この傾向は医療分野でも同様で、胸部レントゲン写真から肺結核の病変を自動検出したり、脳 MR 画像から脳腫瘍を自動抽出したりというような形での応用研究が進められています。
本研究室でも時代の潮流に乗り、人工知能に関する研究を進めてきました。という前置きは「プログラミング学習マニュアル」と同一で、本書では、既にプログラミングそのものに対する入門は完了していて、早くディープラーニングをやってみたいという人向けに、ディープラーニングを行うための環境構築と入門プログラムに関して紹介しています。

※本マニュアルの内容は１日で書き上げたため、内容の薄い部分が多分に存在します。
ご自由に加筆・修正し、より良いものに仕上げて頂けると幸いです。
2019 年 3 月 15 日

2

川内敬介

第 1 章 ～ディープラーニングとは何か～
以下では、ディープラーニングの中でも特に画像の分野で有名になった、「畳み込みニューラルネットワーク」を中心にザックリした歴史や原理をまとめています。ただの読み物で内容も本などに比べて薄いため、読み飛ばして第２章に進んでも構いません。

1. 従来型プログラムの限界
従来のプログラムは、指示された通りに計算を実行するためのものでした。そのため、数式として書き表せる問題を解くことはプログラムの得意分野です。一方で、画像や言語の認識のように人間ならこれまでの実例から「経験的」に容易に理解できるものの、数式に書き起こすことが困難な内容に関しては、プログラムは苦手分野としていました。

2. 機械学習
機械学習とはプログラムが「実例に基づく経験」から学び、結論を導く手法です。この手法によって、前述のような数式化できない問題に対しても人間と似た方法でコンピュータが「経験」から学習し、解を導き出す事ができるようになりました。この様子から、「機械学習」と呼ばれています。

3

3. 人工ニューロン
神経細胞のネットワークである人間の脳は、多数の「ニューロン」で構成されています。
ニューロンの働きは、前のニューロンから情報を受け取り、その情報に処理を施し、その結果を次のニューロンへ伝えることです。このニューロンの働きをプログラムとしてコンピュータ上で人工的に再現したものを「人工ニューロン」と呼びます。

4. 人工ニューラルネットワーク
人工ニューロンを複数接続し、人間の脳をプログラム上のシミュレーションで再現することを目標としたものです。入力が小さく、ネットワークを構成する層が浅ければそれなりの精度で学習可能です。しかし、入力が大きくなると、接続すべきニューロンの数が膨大となり、計算が追いつかないという問題点がありました。

5. ニューラルネットワークの考え方
図 1 のようなネットワークの場合、一番左の層は入力層(input layer)と呼ばれ、その中のニューロンを入力ニューロン(input neurons)と呼びます。また、一番右の層は出力層(output layer)と呼ばれ、出力ニューロン(output neurons)から構成されています。中央の層は隠れ層(hidden layer)と呼ばれていますが、特別隠れているわけではなく、入力でも出力でもない層の事をこのように呼んでいます。

4

図 1.ニューラルネットワークの構成

ニューラルネットワークの入出力層の設計は非常に単純です。例えば、←が猫か犬かを判断する場合を考えます。設計の方法としては、この画像が 28×28 の白黒画像であれば、入力ニューロンの数は 28×28=784 になり、色の度合いは明度を 0 から 1 の適切な値で表します。また、出力層は 1 つのニューロンで、出力値が 0.5 以上なら"入力画像は猫"ということを示し、0.5 以下なら"入力画像は猫ではない"ということを示します。
しかし、単純であるがゆえに大きな問題を抱えています。それは入力が大きくなるほど、接続すべきニューロンが多くなりすぎてしまうということです。例えば入力画像が200×200 のフルカラー画像なら入力ニューロンの数は 200×200×3(RGB)=120,000 となります。結果、全てのニューロンを接続することが難しく、接続したところで訓練データに対する過学習のリスクが増大してしまいます。以上より、現在ではこのような単純なニューラルネットワークは使用されていません。
5

6. 畳み込みニューラルネットワーク CNN
ニューラルネットワークに対し、畳み込み演算を利用することによって、入力が画像であるという条件付きですが、そのことを巧妙に利用してパラメータをどんどん減らしていくネットワークです。200×200 のフルカラー画像のように従来のニューラルネットワークでは学習が難しかったような巨大な入力にも対応できるようになりました。

6.1. 画像の特徴
図 2 では円の特徴を捉えようとしています。のように 1 ピクセルに着目した場合、(a)では白、(b)では黒で塗りつぶされているという情報しか入手できません。一方、のように複数ピクセルにまとめて注目した場合、(a)でも(b)でも斜め方向に黒く塗りつぶされている部分があるという共通した特徴が見えてきます。したがって、1 ピクセルだけでなく、ある程度の領域をまとめて入力することによって、より良い特徴が抽出できることが予想されます。

6

(a)

図 2.画像の特徴抽出(b)6.2. 畳み込み
上記のような「特徴をまとめる」を実現するのが CNN です。図 2 におけるの領域を 1 つの特徴として圧縮します。これを畳み込みと表現しています。CNN ではこのを平行移動させながら画像と掛け合わせる事によって、画像の特徴を領域ごとにまとめて学習します。

7

6.3. フィルタと特徴マップ
前述のをフィルタと呼びます。このフィルタは、例えば図 2 のように画像から斜めの線を検出するものや縦線・横線を検出するもの等、入力画像の「特徴を際立たせるもの」です。つまり、授業で学んだ Sobel フィルタや Prewitt フィルタのようなものと考える事ができます。このフィルタを入力画像に対して平行移動しながら掛け合わせて「特徴マップ」を作成します。この操作を「畳み込み」と呼んでいます(図 3)。特徴マップを作成することによって、その後の処理を画像そのものではなく、特徴を抽出したマップで行えるようになるため、学習させる要素数を減少させることができます。

図 3.畳み込みと特徴マップ（gif 画像は参考文献 3 参照）

8

6.4. コンボリューション層とプーリング層
6.4.1. コンボリューション層 (畳み込み層)
入力画像の特徴を際立たせるための層です。通常のニューラルネットワークでは元の画像の画素値をそのまま学習するため、画像全体の特徴を把握することできませんでした。そこで CNN では畳み込みによって特徴の際立った特徴マップを作成し、学習に用います。初期の層ではエッジ、それ以降の層では輪郭→形状→全体というようにだんだんと広範囲にわたる特徴を掴んでいきます。一般に、このコンボリューション層を重ねるほど、より特徴の際立った特徴マップが出来上がり、表現力が向上します。
6.4.2. プーリング層
入力画像の細かな特徴を削除するための層です。そのまま学習してしまうと注目すべき特徴が多く、計算に膨大な時間がかかってしまう場合が多々あります。そのため、あまり目立たない特徴は削除し、特に際立った特徴のみで学習することによって、計算量を低減する働きを持ちます(図 3)。

図 4.プーリング
9ほかには位置ずれやノイズを対処しやすくなる等のメリットがあります。しかし、このプーリング層はあくまでも特徴を削除する層であるため、多用しすぎると大事な特徴までも取り除いてしまう可能性があります。特に最近ではプーリング層を減らし、複数のコンボリューション層を重ねることによって、よりはっきりとした特徴を抽出しながら計算量を低減する工夫もよく行われています。また近年ではコンピュータの性能が大幅に向上しているため、そもそも特徴が多くて学習できないということは無くなってきています。

7. CNN と学習に必要な画像数
人間は、これまでに積み重ねて来た膨大な「経験」と身に着けた「知識」に応じて物体を認識します。上記では画像 1 枚にのみ注目して話を進めましたが、経験や知識に基づく人間的な認識をコンピュータで再現するニューラルネットワークでは、人間の経験や知識に代わるたくさんの画像が必要になります。基本的には多ければ多いほど良いですが、近年では、転移学習という手法が広く使用されており、数百から数千枚程度の画像があれば十分になりつつあります。

108. CNN 応用の具体例
本研究室では以下のような研究を行っています。
⚫

分類：PET-MIP 画像から性別、腫瘍の有無、悪性リンパ腫の病期等を自動的に分類⚫

領域抽出：PET 画像から脳腫瘍や心筋等の位置を自動的に抽出⚫

画像生成：画像のサイノグラムから直接再構成画像を生成⚫

超解像：画像の高周波数成分を予測し、ボケた画像を高画質化

9. 詳細な解説について
以上の解説では説明不足の部分が多く、理解が難しいかと思います。そのため、以下に挙げた参考文献および HP で学習することをお勧めします。したがって、詳しいことに関してはそれらにお任せすることとします。
1. 実践 Deep Learning. Nikhil Buduma 著. オライリー. 2018.
2. ニューラルネットの歴史：https://www.slideshare.net/AkinoriAbe1/ss-69510936
3. サルでもわかる機械学習：http://i-doctor.sakura.ne.jp/dokuwiki/
4. CNN の仕組み： https://bit.ly/2AdTtwU
5. 定番の Convolutional Neural Network をゼロから理解する：https://bit.ly/2hEWNbc

11

第 2 章 ～ディープラーニングのための環境構築～
ディープラーニングを実行するためにはやはり環境構築が必要です。この PC には「Python がインストールされているから大丈夫」という事ではなく、ディープラーニングのためのあれこれがあります。環境構築のやり方は参考 HP（http://bit.ly/2TEU0Bl）に記載されていますが、コンピュータに関する知識が豊富な方向けに書かれているようで、入門レベルでは画像が少なく難易度が高いです。という事で、以下では「TensorFlow」というディープラーニングのためのツールを使用する際に必要となる環境構築について、画像付きで 1 から解説していきます。
ただし、以下の解説は TensorFlow の GPU 版をインストールする場合の説明です。GPUが搭載されていない PC に環境構築する場合や、そもそも GPU が何かわからない場合には手順 1～X まで読み飛ばして手順 Y から作業を開始してください。

※TensorFlow は近々バージョン 2.0 に更新されるらしいです（2019 年 3 月 15 日現在の最新版は 1.12。また、2.0 は Alpha 版を開発中）。2.0 では CUDA 10 に正式対応するなど大幅な刷新がある予定です。更新の際には以下の記事を適宜、最新版に合わせたバージョンに読みかえて環境構築を進めてください。

12

1. バージョンの確認
プログラミング界隈で一番面倒くさいのがバージョンの管理です。「1.0 なら動作したのに、1.1 だとうまく動作しない…」というようなことが良く起こります。という事で、まずは「TensorFlow」の公式ホームページの最下層の GPU という表に記載されている最新のVersion を確認してください（下図の内の数字）。

※上記の Tensorflow 公式ホームページでは 1.12.0 までしか情報がありませんが、2019 年 3
月 15 日現在の最新版は 1.13.1 となっています。このバージョンでは現時点では cuDNN は7.5、CUDA は 10.0 にしか対応していません。公式ホームページに情報が載っていない場合には Google で「Tensorflow x.xx.x CUDA」などと検索し、確認してからインストールする、
もしくはこの記事の通り 1.12.0 をインストールしてください。

2. 必要なソフトウェアのインストール「TensorFlow」というツールを使用するためには TensorFlow 本体のほかに、先ほど 1でバージョンを確認した「CUDA」と「cuDNN」という 2 つのソフトウェアのインストールが必要です。

132.1. Visual studio Community のインストール
CUDA をインストールするためには Visual studio Code の親玉である Visual studio が必要になります。
2.1.1. まずは Visual Studio の公式ホームページへ移動し、Visual Studio IDE という項目の「Windows 用ダウンロード」にマウスをポイントし、Community2017 をクリック

2.1.2. ダウンロードが開始されるので、保存

14

2.1.3. ダウンロードした「vs_community__12130772.1552870834.exe」を起動すると、以下の画面が表示されるので、続行(C)

2.1.4. C++によるデスクトップ開発を選択して、インストール2.1.5. インストールが完了したら自動的に Visual Studio が起動するので、画面を閉じます。

15

2.2. CUDA のインストール
CUDA の公式ホームページからダウンロードします。現在の最新版は 10.1 ですが、改造無しの Tensorflow で使用できるのは 9.2 までなので 9.2 のインストール方法を解説します。
2.2.1. Download Now >をクリック

2.2.2. Legacy Releases をクリック

16

2.2.3. CUDA Toolkit 9.2 をクリック

2.2.4. Windows をクリック

17

2.2.5. Version の 10 をクリック

2.2.6. Installer Type の exe(local)をクリック

18

2.2.7. Base Installer の Download(1.5GB)をクリックして、保存

2.2.8. 続いて、Patch 1 (Released Aug 16, 2018)の Download(58.7MB)もクリックして保存
2.2.9. ダウンロードが完了したら、「cuda_9.2.148_win10.exe」をダブルクリックして起動。
そのまま OK をクリックしてインストール開始

192.2.10. しばらくすると、勝手に以下のような画面に切り替わるので、同意して続行

2.2.11. そのまま、次へ20

2.2.12. 途中で次の画面が出てきたら、インストールをクリック

2.2.13. 最後に以下の画面で次へをクリッすれば CUDA のインストールは完了です。

21

2.2.14. 続いて、2.1.8 でダウンロードしたパッチをインストールしていきます。
まずは、「cuda_9.2.148.1_windows.exe」をダブルクリックで起動し、何も考えずに OKをクリックします。

2.2.15. 同意して続行するをクリック

22

2.2.16. 次へ

2.2.17. 閉じるで完了です。

23

2.3. cuDNn のインストール
2.3.1. 次に、公式ホームページから cuDNN をインストールしていきます。
まずは、Download cuDNN をクリックします。

2.3.2. cuDNN をダウンロードするためには nVIDIA の開発者登録が必要なので、Join をクリック

24

2.3.3. Create account をクリックして会員登録を進めていきます。

ただし、Google や facebook のアカウントを所持している場合は、Log in with google
や Log in with facebook をクリックしてアカウントを再利用することで入力次項が減るのでお勧めです。

25

2.3.4. 必要事項を入力して、CREATE ACCOUNT をクリックすれば会員登録完了

2.3.5. 会員登録が完了したら 2.2.2 の画面に戻って、Login をクリックし、以下の画面で必要事項を入力。Login をクリックしてアカウントにログインします。

26

2.3.6. ここで改めて最初のホームページから Download cuDNN をクリックします。
2.3.7. I Agree To～にチェックをつけて、2.3.8. Download cuDNN v7.5.0 (Feb 21, 2019), for CUDA 9.2 をクリック

2.3.9. cuDNN Library for Windows 10 をクリックして、保存27

2.3.10. 「cudnn-9.2-windows10-x64-v7.5.0.56.zip」を展開して、出てきた cuda というフォルダの中身を「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2」にコピーすれば、cuDNN の設定も完了です。

28

2.4. Tensorflow のインストール
2.4.1. ここでやっと Tensorflow をインストールできます。
まずは、コマンドプロンプトを起動し、仮想環境に入ります（仮想環境を使用していない場合は単にコマンドプロンプトを起動してください）。
2.4.2. 次に、以下のコマンドを実行します。
pip install tensorflow-gpu

2.4.3. これでインストール完了です。

3. 動作確認
VScode 等で以下のコードを記述し、「Hello world!」と表示できれば Tensorflow の環境構築は成功です。
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))29

第 3 章 ～ディープラーニング入門～
1. リンゴとオレンジの分類
ここに超有名なディープラーニング入門記事があります。是非参考にして下さい。
2. その他のサンプルコード
この PC の中にいろいろ入っているので、参考にして下さい。

30