[書評] ゼロから作るDeep Learning(WIP)

ディープラーニングの勉強をしていますが、入門書を読んでいても簡単な説明とライブラリの使い方に終始する本が多くて、自分で実装しないとよく分からないなあと思っていました。思っていたんですが、良い本を見つけました。どうもかなり売れている本で、既にかなり有名みたいですが、感動したので紹介しておきます。オライリーから出ている「ゼロから作るDeep Learning」です。

この本の特徴は、名前のとおり、ディープラーニングのプログラムをスクラッチする所にあります。ディープラーニングのプログラムを実装する過程を通じ、ディープラーニングに必要な技術を身に付けるということを狙いとしています。これがまさに自分の探していた本で、自分で手を動かしながらディープラーニングを学びたいという人にはピッタリの本だと言えるでしょう(まだ読み終わっていませんが…)。

本書の構成は以下のようになっています。ディープラーニングの実装に用いるPythonへの入門から始まり、パーセプトロン、ニューラルネットワーク、ディープラーニングと学習を進めます。どの章についてもPythonで実装しながら論を進めるので、ディープラーニングに対する理解を深められそうです。

  • 1章:Python入門
  • 2章:パーセプトロン
  • 3章:ニューラルネットワーク
  • 4章:ニューラルネットワークの学習
  • 5章:誤差逆伝播法
  • 6章:学習に関するテクニック
  • 7章:畳み込みニューラルネットワーク
  • 8章:ディープラーニング
  • 付録A:Softmax-with-Lossレイヤの計算グラフ

1章:Python入門

本書では、プログラミング言語Pythonを用いてディープラーニングを実装していきます。第1章では、Pythonについて詳しく知らない人向けに、Pythonとは、という話から始まり、Pythonの基本的な文法やNumPy、Matplotlibの使い方に話が進みます。ディープラーニングをスクラッチする、と上の方で書きましたが、ライブラリとしてはNumPyとMatplotlibだけ使用します。

NumPyは数値計算のためのライブラリで、本書でのディープラーニングの実装において、数学的なアルゴリズムや行列の計算などに使います。NumPyがなければ、本書はあと200ページくらい厚くなっていたでしょう。また、Matplotlibはグラフ描画のためのライブラリです。

2章:パーセプトロン

パーセプトロン

パーセプトロンは「ニューラルネットワーク(ディープラーニング)の起源となるアルゴリズム」で、複数の信号を受け取ってひとつの信号を出力します(上図を参照のこと)。かいつまんで説明すれば、入力値として送られてきた信号と入力値に対する重みの積の総和がしきい値を超えた場合に、1が出力されます(これをニューロンが発火する、とも言います)。

このパーセプトロンを用いることにより、AND、NAND、ORという論理回路を表現することができます。そのPythonによる実装は、ANDの場合を例にとると以下のようになります(ソースコードは本書より引用)。

def AND(x1, x2):
	x = np.array([x1, x2])
	w = np.array([0.5, 0.5])
	b = -0.7
	tmp = np.sum(x * w) + b
	if tmp <= 0:
		return 0
	else:
		return 1

パーセプトロンではXORについては表現できないのですが、パーセプトロンの層を重ねることによってXORも表現することが可能です。本書では、「パーセプトロンは層を重ねることで非線形な表現も可能」になる、と表現されています。そのPythonによる実装は以下のようになり、AND、NAND、ORを組み合わせることによって、XORが実装されていることがわかります(ソースコードは本書より引用)。

def XOR(x1, x2):
	s1 = NAND(x1, x2)
	s2 = OR(x1, x2)
	y = AND(s1, s2)
	return y

3章:ニューラルネットワーク

ニューラルネットワーク

パーセプトロンでは重みを自分で決めなければなりませんでしたが、パーセプトロンでは重みを自動で学習することが可能になります。パーセプトロンでは隠れ層の活性化関数としてステップ関数を使いましたが、ニューラルネットワークではシグモイド関数やReLU関数を使います。パーセプトロンとニューラルネットワークの違いは、この活性化関数だけです。

ニューラルネットワーク

出力層の活性化関数は隠れ層の活性化関数とは異なる関数を用います。どのような問題を解くのかによって使用する関数が変わってきて、回帰問題(数値の予測)には恒等関数を、分類問題ではソフトマックス関数を用います。

4章:ニューラルネットワークの学習

ニューラルネットワークの学習

ニューラルネットワークでは、損失関数を指標として最適な重みパラメータの探索を行います。損失関数が最も小さくなる重みパラメータを探すことがニューラルネットワークの学習の目標です。損失関数としては、2乗和誤差と交差エントロピー誤差が用いられます。パラメータの探索には、勾配法を用います。

5章:誤差逆伝播法

誤差逆伝播法

誤差逆伝播法という手法を用いることにより、数値微分を用いる方法よりも高速に、効率よく重みパラメータに関する損失関数の勾配を求めることができます。

6章:学習に関するテクニック

以下、WIPです。