【フレームワークを使用せず】ゼロから作る物体検出AIモデル
【No.10】ニューラルネットワークの実装(3層のNN構築-概要)

1. 本記事について

本記事は、これまでの内容(ニューラルネットワークの理解その1〜4)を踏まえ、ニューラルネットワークをpythonプログラムに落とし込んでいきます。
本記事はこれまで実装してきた処理を使用して、簡単なニューラルネットワーク(NN)を実装していきます。

前回は、重みの更新について解説しました。)

ニューラルネットワークの実装(入力層・Affine前半〜重みの更新)を見てから、本記事を見ることをお勧めします。

注意事項として、本シリーズではpythonの基礎的な解説、numpyの基礎的な解説は割愛させていただきます。特に、numpy配列やshape等頻出なので、その辺の知識が不十分の場合は、そちらの習得を先に行うことをお勧めします。

本シリーズを進めていくにあたり、参考にさせていただく書籍があります。オライリー・ジャパンから出版されている「ゼロから作るDeep Learning ーPythonで学ぶディープラーニングの理論と実装」です。

本記事は、上記書籍を参考にさせていただいております。

2. 構築するNNの概要

前回迄実装してきた各処理を使って、簡単なニューラルネットワーク(以下NN)を構築し、実際に学習と推論を行ってみます。

これから行うことは、①NNの概要を決定、②NNをpythonで構築、③構築したNNで楽手と推論
です。今回は①を行います。

使用する関数

まず、前回迄実装してきた各処理(クラス)を以下に列挙します。

・Affine
・Leaky ReLU
・loss(SSE)
・SGD(今回は使用しない)
・Momentum

これらを使用します。

入力

次に、NNに入力するものを確認します。入力は画像データです。サイズは28*28でモノクロ画像です。
図1の様に数字が描かれている画像です。

図1 画像データ

入力する画像は「0」から「2」が描かれたものを使用します。
NNを使って、入力画像が「0」の画像なのか「1」の画像なのか「2」の画像なのか判定してもらおうと思っています。

アーキテクチャ

次に、NNの構成(アーキテクチャ)を考えます。
要は、中間層を何層にするとか、第2層目のノードは何個にするとかを決めます。

今回中間層は3層にします。
各層のノード数は以下とします。

入力層 :784
中間層1層目:400
中間層2層目:100
中間層3層目:3
(出力層) :3
図2 ネットワークのアーキテクチャ

入力層は画像サイズに合わせて28*28*1=784としています。
もし入力がカラー画像だったら28*28*3=2352となります。

画像データを1次元化してネットワークに流すのは微妙なのですが、今回は中間層にAffineを使用するのでこの様にしています
(本シリーズの後半で、画像の形状そのままで処理可能なネットワーク(CNN)を解説しますので、お待ちいただければと思います)。

中間層はAffineを使用し、Affineの後に活性化関数Leaky ReLUを使用します。
3層目については恒等関数です(つまり、活性化関数を使用しないことと同義)。

出力層は何もしません。出力層でよくある処理が、多クラス分類をする際にソフトマックス関数を入れ込む等です。

実は今回も多クラス分類なので、最後にソフトマックス関数、ロス関数にクロスエントロピー誤差を使用するのが王道かと思いますが、今回はそれらは扱いません。理由は、YOLOv1で上記いずれも使用していないからです。

ロス関数

ロス関数を決めます。SSE(2乗和誤差)を使用します。

式1

\( E = \frac{1}{2}\sum_{k=1}^{n}{(y_k - t_k)^2} \)

2つの中間層を経て、ロス関数で誤差を算出します。

重み更新

誤差を算出したら、それを元に逆伝播を実施します。逆伝播によって各重みの勾配(dW)が計算されるので、dWを使って重みを更新します。

今回Momentumを使用します。SGDでなくMomentumを使用する理由は、YOLOv1でMomentumを使用しているからです。

次回は定義したアーキテクチャや関数を実際にpythonで書いてみようと思います。

3. まとめ

今回はニューラルネットワークの実装(3層のNN構築-概要)について解説しました。

次回も是非みてみてください!

4. 参考文献

斎藤康毅 著 「ゼロから作るDeep Learning ーPythonで学ぶディープラーニングの理論と実装」

・物体検出AIの導入
・アノテーションサービス
・手書き計算サイト ZONE++ の運営
・技術ブログ LAB++の運営
   上記をメインにおこなっております

詳しくはこちら

Category

Search