真面目なプログラマのための
ディープラーニング入門

新山 祐介
はじめに:
本講座は「機械学習ってなんか面倒くさそう」と感じている プログラマのためのものである。本講座では 「そもそも機械が『学習する』とはどういうことか?」 「なぜニューラルネットワークで学習できるのか?」といった 根本的な疑問に答えることから始める。 そのうえで「ニューラルネットワークでどのようなことが学習できるのか?」 という疑問に対する具体例として、物体認識や奥行き認識などの問題を扱う。 最終的には、機械学習のブラックボックス性を解消し、所詮は ニューラルネットワークもただのソフトウェアであり、 固有の長所と短所をもっていることを学ぶことが目的である。 なお、この講座では機械学習のソフトウェア的な原理を中心に説明しており、 理論的・数学的な基礎はそれほど厳密には説明しない。 使用環境は Python + PyTorch を使っているが、一度原理を理解してしまえば 環境や使用言語が変わってもそれほど混乱しないはずである。

てっとり早く概要が知りたい人は、本講座の超要約を参照のこと。 全部読む時間がない方で、とりあえずニューラルネットワークの基本原理だけを 理解できればいいという方は第3回まで、ディープラーニングのさわりまでを 理解したい方は第5回までを読むのがおすすめ。

本講座の公式サイト および 例題のソースコード一覧

受講対象者:
達成目標:
免責事項: 本講座は新山 祐介が個人の興味において制作したものです。 内容の正確さは保証しません。 また本サイトは常時更新されており、 内容は予告なく変更されることがあります。

目次

  1. プログラマのための Python 入門
    Python にそれほど詳しくない人のため、Python のおもな機能をおさらいする。 機械学習に関する話は一切出てこないので、 Pythonに習熟している人は読みとばしてもかまわない。
  2. 機械が「学習する」とはどういうことか?
    簡単な機械学習アルゴリズム (決定木) の実装をおこない、 機械学習の基本的な概念・用語 (特徴量とは何か、 訓練データとテストデータの違いは何か、など) を説明する。
  3. なぜニューラルネットワークで学習できるのか?
    ニューラルネットワークの原理と勾配降下法について説明し、 Python で簡単なニューラルネットワークを実装する。 これが完了した時点で、読者はニューラルネットワークについて 明確なイメージが持てているはずである。
  4. ディープラーニングへの入り口: MNIST
    NumPy を使ってニューラルネットワークの実装を効率化し、 より多くの入力を扱えるようにする。 これを使って画像認識の代表的なタスクである MNIST の学習を実装する。
  5. 画像処理に適したニューラルネットワークとは?
    画像認識の性能を上げるための様々なテクニックについて解説する。 そのひとつである畳み込みニューラルネットワークを解説し、 これを使って MNIST と CIFAR-10 を学習する。
  6. GPU の仕組みと PyTorch 入門
    GPU を使ったディープニューラルネットワークを開発するための準備をおこなう。 PyTorch の使い方を説明し、それを使って MNIST を再実装する。
  7. ディープラーニング応用: 物体認識と奥行き推定
    現実的なディープラーニングの問題にチャレンジする。 はじめによく知られた画像認識システムである VGG を紹介する。 つぎに物体認識 (YOLO) および奥行き推定の原理を説明し、 PyTorch を使ってそれを実装する。 また、アノテーションツール (VIA) の簡単な使い方についてもふれる。
  8. さらにディープな世界へ: 勾配消失問題と残差ネットワーク (ResNet)
    勾配消失問題と残差ネットワーク (ResNet) を紹介し、 PyTorch をさらに活用するためのトピック (転移学習、ONNX形式など) について触れる。

クリエイティブ・コモンズ・ライセンス
この作品は、クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。
Yusuke Shinyama