Beyond the State-of-the-Art

最先端を超えたいと思ってる(大嘘)エンジニアのブログ

Deep Learningをゼロから作ることにした(その2)

下記の本の勉強の続きです。今回は3章をフォローしたので、所感などを書きます。

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

2章でやったパーセプトロンからニューラルネットワークに移行するスタイルで書かれています。

実装するニューラルネットワークは3層のもので、移行のところでシグモイドやReLU等の活性化関数の導入がありました。 出力層の設計のところでsoftmax関数の導入がありました。softmax関数はn次元ベクトルからn次元ベクトルへの関数で、関数の値のk成分は

  \displaystyle f(\mathbf{x})_{k} = \frac{ \exp (x_k) }{ \sum_{i=1}^{N} \exp (x_k) }

で定義されます。ただし、この定義をそのまま使うとオーバーフローしやすくなるので、

  \displaystyle \frac{ \exp (x_k) }{ \sum_{i=1}^{N} \exp (x_k) } = \frac{ \exp (x_k + C) }{ \sum_{i=1}^{N} \exp (x_k + C) }

という関係式(Cは任意の定数)を使って、オーバーフロー対策をするという話が少し面白かったです。この関係式の証明は簡単にできます。

ニューラルネットワークの実装は、Numpyのおかげでスッキリと書けたのが良かったですね。

章の最後は、MNISTのデータと学習済みモデルを使って、実際に文字画像認識するという内容でした。データとモデルの準備は、オライリージャパンのGitHubリポジトリにあるPythonスクリプトで行うようになってました。deep learning以外のことに紙面を割くのは教育的ではないので、データとモデルの準備のコードの説明がなかったのは仕方ないとは思いますが、「ゼロから作る〜」というタイトルと乖離している印象を受けて少し残念に思いました。個人的には本書だけで完結する形式が望ましかったですね。

次章

次章ではニューラルネットワークで実際に学習を行います。