目次

はじめに

第1章 MNIST

1.1 MNISTについて
1.2 派生データセット

第2章 深層学習 -PyTorch-

2.1 環境構築
2.2 MNISTデータの読み込み
2.3 深層学習モデルを試す

第3章 手書き判定GUI

3.1 環境構築
3.2 GUIアプリ概要
3.3 実装
3.4 GUIアプリ実行

おわりに

著者紹介



はじめに

 本書をご覧いただきありがとうございます。この本は、機械学習のお試しデータセットとして広く世の中に使われているMNISTデータセットに着目した内容になっています。この本を読んで試しにプログラムを動かしてみることで、初学者の方がMNISTについて興味を持っていただくと共に、深層学習ライブラリとして公開されているPyTorchを活用し、深層学習でどんなことができるのかを知ってもらうための入り口となればと思っています。また付随して、深層学習の動作をGUIアプリ上で動かしてみることにより、Pythonを活用した簡易なGUIアプリ創作にも興味を持っていただければと思います。

 MNISTデータセットを活用した深層学習モデルの実装や取り組みはウェブ上の至る所で行われており、検索するとさまざまな面白い取り組みを見つけることができると思います。私自身も深層学習を学んでいく上で参考にした取り組みも多くありましたが、一方でそれらの参考情報がウェブ上に散逸しているようにも感じました。そこで、MNISTと深層学習というカテゴリで、これらの情報を自分なりに整理し、深層学習の初学者の方に役立てたいと思ったことがこの本を書いたモチベーションです。文章にお見苦しい点もあるとは思いますが、最後までご覧いただけると幸いです。

 下記に各章の概要について示します。

<第一章>
MNISTがどのようなデータセットなのか、またMNISTから派生したデータセットについて解説します。

<第ニ章>
深層学習ライブラリPyTorchにより、さまざまなタスク(分類、回帰、AutoEncoder、GAN、CAM、Segmentation)をMNISTのデータセットを活用して実際に動かしてみることに取り組みます。

<第三章>
実際に、任意で描画した手書き数字を深層学習で判定する簡易的なGUIアプリを作成します。

第1章 MNIST

本章では機械学習を試すデータセットとして著名なMNISTについて、その成り立ちや具体的なデータの中身について解説します。またウェブ上ではMNISTに関連する派生データセットも多数公開されており、これらのデータセットについても紹介します。

1.1 MNISTについて

1.1.1 概要

 MNISTは「0」〜「9」の手書き数字が描かれた画像を集めた大規模なデータセットです。入力画像から何の数字を示しているか分類する画像分類問題のデータセットとして人気が高く、深層学習の入門データセットとしてよく使用されています。

 名称に関しては主にMNIST(エムニスト)と呼ばれていますが、正式名称は「Mixed National Institute of Standards and Technology database」です。翻訳すると「国立標準技術研究所混合データベース」となりますが、これだとデータベースの出処しか分からずデータの中身に何が含まれているのか少し分かりにくいですね。MNISTは、手書きの数字「0」~「9」の画像で構成されるデータセットであると理解すればよいと思います。

 このMNISTデータは、1998年にアメリカ国立標準技術研究所=NIST(National Institute of Standards and Technology)のYann LeCunさん達の手によって作成されました。データの内容や詳細については後述しますが、データの数量としては訓練用データが60000枚、テスト用データが10000枚、合計70000枚の画像で構成されたデータセットです。またデータセットの特徴として、画像サイズは固定で、手書き文字が画像の中心に位置するように正規化されていることが挙げられます。

(コラム) 公式サイトのMNISTデータ

 作者Yann LeCunさん達が公開しているサイトは、こちらのURL(http://yann.lecun.com/exdb/mnist/)です。サイト上には上記で述べた訓練データ、テストデータが.gz形式のファイルとして、以下のリストのように画像とラベルデータが計4種類に分かれて提供され、ダウンロードが可能になっています。バイナリ形式のため、解凍しただけでは画像やラベルは確認できないのでご注意下さい。

<公式サイトよりダウンロード可能なMNISTデータリスト>
train-images-idx3-ubyte.gz:  training set images (9912422 bytes)
train-labels-idx1-ubyte.gz:  training set labels (28881 bytes)
t10k-images-idx3-ubyte.gz:   test set images (1648877 bytes)
t10k-labels-idx1-ubyte.gz:   test set labels (4542 bytes)

 次章ではPyTorchライブラリを使用して、MNISTの中身を確認します。まずデータの中身を実際に見てみたいと思われる方は、次章をご覧ください。

1.1.2 データ内訳

 ここでは具体的なMNISTデータセットの中身について確認していきます。既に述べた通り、MNISTは「0」〜「9」の手書き数字の画像データで構成されています。図1.1に実際の各数字の画像データの一部の例を示します。紙面上は大きく見えるかもしれませんが、実際のデータとしての画像サイズは28×28ピクセルの小さい正方形の白黒画像で表現されています。MNISTデータセットでは各画像に合わせてどの数字に該当するかを示す「0」~「9」の正解ラベルデータも存在しています。

図1.1: MNIST手書き数字0〜9の画像例

 MNISTの訓練用データ、テスト用データの内訳を表1.1に示します。ここでいう訓練用データとは学習に使用するデータ、テスト用データは学習ではなく評価に使用するデータを意味しています。訓練用データとテスト用データはそれぞれデータを集めた抽出元が2箇所存在しており、同じ数量の訓練用データとテストデータがそれぞれの場所から抽出されています。抽出元と振り分けの内訳を以下の表に示します。MNISTについて記述されている論文には、データ抽出先①の「米国勢調査局職員」の文字は、一方のデータ抽出先②の「高校生」達と比較すると文字がきれいで認識しやすいと述べられています。それを踏まえて、訓練用データとテスト用データは混合して構成されたようです。

表1.1: MNIST訓練データとテストデータ内訳
データ抽出元 訓練データ [枚数] テストデータ [枚数]
①米国勢調査局職員 30000 5000
②高校生 30000 5000
(①+②)合計 60000 10000

 また「0」~「9」までの数字の各ラベルに対する訓練用データとテスト用データの枚数は以下の表1.2の通りです。含まれている数字は同数ではなく、枚数にばらつきが存在しています。ただし訓練用とテスト用どちらも、ラベル毎のデータ枚数の割合はほぼ同じに調整されています。例えば「0」のラベルに着目すると訓練用データの全体に対する割合は5923/60000=9.87%、テスト用データは980/10000=9.80%となり割合がほぼ同じになっています。またデータ数の最大最小に関しては最も多いラベルは「1」で、逆に最も少さいラベルは「5」のようです。最大最小のラベルのデータ数を比べると、訓練用データだと約1300枚近く枚数差があります。

 MNISTデータセットのもうひとつの特徴としては、手書き文字の著者数に関する情報を持っていることがあります。著者数は訓練用データ:250名、テスト用データ:250名に分かれて収集されており、訓練用とテストデータに同じ著者は存在しない構成となっています。

表1.2: 各ラベルのデータ枚数
ラベル 0 1 2 3 4 5 6 7 8 9
訓練用 5923 6742 5958 6131 5842 5421 5918 6265 5851 5949
テスト用 980 1135 1032 1010 982 892 958 1028 974 1009

1.1.3 分類性能

 MNISTの画像分類性能について、データセット作成者のYann LeCunさん達のサイトでは各機械学習モデルにおけるMNISTのテストデータに対する分類性能の研究成果も公開されています。例えばConvolutional nets(畳み込み層を使ったニューラルネットワーク)における最新の2012年の結果を確認すると、テストデータに対して99.77%の割合で画像の分類に成功しています。

 またニューラルネット以外の機械学習手法での分類性能の結果が公開されており、2002年と少し古い結果ではありますがSVM(Support Vector Machine)を活用した結果もあります。しかしながらSVMの手法では99.44%と0.33%低い値であり最新のニューラルネットの結果の方が良い性能を出しています。

 いろいろと結果を眺めていると、1998年に発表された層が少ない2層のニューラルネット(隠れ層が300ユニットのモデル)では95.3%の分類性能であるなど、過去の段階ではニューラルネットワークモデルは他の手法に比べて見劣りしています。しかしながら近年での結果を見ると、より多層にしたり畳み込み層を追加する等モデルの変化によって改善されていることが確認できることから、現在のニューラルネットモデルの急激なパフォーマンス向上を表していることがうかがえます。

 下記表1.3にはYann LeCunさんのサイトから一部引用し、各手法における最新の結果をまとめたものを示します。Test Error Rateでの表記のため、分類成功率ではなく失敗率を示しています。そのため、値が小さい方が分類性能が良い手法となります。

表1.3: 各機械学習手法におけるMNIST分類性能
手法 モデル詳細 Test Error Rate (%) 発表年
Linear Classifers pairwise linear classifier 7.6 1998
K-Nearest Neighbors K-NN, shape context matching 0.63 2002
Boosted Stumps product of stumps on Haar f. 0.87 2009
Non-Linear Classifers 1000 RBF + linear classifier 3.6 1998
SVMs Virtual SVM, deg-9 poly, 2-pixel jittered 0.56 2002
Neural Nets deep convex net, unsup pre-training [no distortions] 0.83 2010
Convolutional Nets committee of 35 conv. net, 1-20-P-40-P-150-10 [elastic distortions] 0.35 2012
試し読みはここまでです。
この続きは、製品版でお楽しみください。