LoginSignup
29
21

More than 5 years have passed since last update.

深層学習を読んでいったときのメモ (1. 順伝播型ネットワーク)

Last updated at Posted at 2016-05-02

今回の内容

順伝播型ネットワーク

深層学習が成り立つ仕組み、問題に対するアプローチについて簡単に触れます。

はじめに

最近、深層学習について興味があって、理解した内容を書いていこうと思います。
今回の教科書は深層学習という本で勉強します。教科書を丸っきり一緒のことは書かないです。
この本の内容は大きく分けて以下のものがあります。

  1. 順伝播型ネットワーク
  2. 確率的勾配降下法
  3. 誤差逆伝播法
  4. 自己符号化器
  5. 畳込みニューラルネット
  6. 再帰型ニューラルネット
  7. ボルツマンマシン

順番にメモを書いていきます。今回は順伝播型ネットワークをメモを書きます。

1. 順伝播型ネットワーク

1.1 順伝播型ネットワークについて

順伝播型ネットワークとは、情報が入力側から出力側に一方向にのみ伝搬させていくネットワークのことです。
(他の文献では多層パーセプトロンともいうみたいです。)

下の図は入力が4個あって、出力も4個です。別に入力数と出力数が異なっていてもよいです。
(例えば、色んな手書きの数字を入力にして、0~9の数字の評価を行なうってのは入力がN個で出力が10個だったりします。)

順伝播ネットワーク.png

丸の一つ一つが何らかの情報を表しており、これをユニットといいます。
また、入力層、出力層、中間層はそれぞれ、
入力のユニットの集まりの層、最終結果のユニットの集まりの層、入力層と出力層の間の層
となっています。(中間層は隠れ層ともいうみたいです。)

中間層にあるユニットは、一つ前の層の情報を使って、新しい情報$u$を生成し、活性化関数$f$に$u$を与えてユニットの出力$z$を作り出します。

1.2 ユニットの出力

さて、新しい情報$u$の生成の仕方ですが、
このネットワークは第1層から第2層、第2層から第3層・・・というように伝搬していきます。
伝搬させるときに情報に重みをつけて伝搬させていきます。
上の図ではオレンジの線に対して重みがのっている感じです。

例えば、第1層から第2層への伝搬を考えると、$u_1$は$x_1$の情報と$x_2$の情報、$x_3$の情報、$x_4$の情報と入力に依存しない微調整できるバイアス$b_1$で出来ています。
それぞれに対する重みを$w_{11}, w_{12}, w_{13}, w_{14}$とするとユニット$u_1$は以下のように算出されます。

u_1 = w_{11} x_1 + w_{12} x_2 + w_{13} x_3 + w_{14} x_4 + b_1

これを$u_2, u_3, u_4$も同様に計算してあげると以下のように表現できます。

u_2 = w_{21} x_1 + w_{22} x_2 + w_{23} x_3 + w_{24} x_4 + b_2\\
u_3 = w_{31} x_1 + w_{32} x_2 + w_{33} x_3 + w_{34} x_4 + b_3\\
u_4 = w_{41} x_1 + w_{42} x_2 + w_{43} x_3 + w_{44} x_4 + b_4

活性化関数$f$に$u_1, u_2, u_3, u_4$を与えてあげれば、ユニットの出力$z_1, z_2, z_3, z_4$は以下のようになります。

z_1 = f(u_1)\\
z_2 = f(u_2)\\
z_3 = f(u_3)\\
z_4 = f(u_4)

これを行列表現すれば、かなり見通しがいいですね。

\left[
    \begin{array}{rrr}
      u_1 \\
      u_2 \\
      u_3 \\
      u_4 
    \end{array}
\right]
 = 
\left[
    \begin{array}{rrr}
w_{11} & w_{12} & w_{13} & w_{14}\\
w_{21} & w_{22} & w_{23} & w_{24}\\
w_{31} & w_{32} & w_{33} & w_{34}\\
w_{41} & w_{42} & w_{43} & w_{44}
    \end{array}
\right]
\left[
    \begin{array}{rrr}
      x_1 \\
      x_2 \\
      x_3 \\
      x_4 
    \end{array}
\right]
 + 
\left[
    \begin{array}{rrr}
      b_1 \\
      b_2 \\
      b_3 \\
      b_4 
    \end{array}
\right]

⇒

{\bf u} = {\bf w} {\bf x} + {\bf b}
\left[
    \begin{array}{rrr}
      z_1 \\
      z_2 \\
      z_3 \\
      z_4 
    \end{array}
\right]
 = 
f\left(
\left[
    \begin{array}{rrr}
      u_1 \\
      u_2 \\
      u_3 \\
      u_4 
    \end{array}
\right]
\right)
⇒

{\bf z} = f({\bf u})

1.3 多層ネットワーク

複数の層から出来ている順伝搬ネットワークを多層ネットワークといいます。

第1層の情報を${\bf z^{(1)}} = {\bf x}$、第2層の新しい情報を${\bf u^{(2)}}$、第1層から第2層への重みを${\bf w^{(1)}}$、第1層から第2層へのバイアスを${\bf b^{(1)}}$とすれば、

{\bf u^{(2)}} = {\bf w^{(1)}} {\bf z^{(1)}} + {\bf b^{(1)}}

と書けるので、第$l+1$層の新しい情報は、下のようの簡潔に表わすことができます。

{\bf u^{(l+1)}} = {\bf w^{(l)}} {\bf z^{(l)}} + {\bf b^{(l)}}

各層$(l = 1, 2, 3, \cdots)$に対して、適切な活性化関数$f^{(l)}$を用意してあげれば、各層のユニットの出力は以下のようになります。

{\bf z^{(l+1)}} = f^{(l+1)}({\bf u^{(l+1)}})

1.4 順伝搬型ネットワークの設計

1.2, 1.3の内容から以下のようなことがわかります。

入力から、重みとバイアスを用いて、出力が計算される

⇒ 入力から期待する結果を得るには、重みとバイアスを調節してあげればよい

従って、順伝搬型ネットワークの設計のアプローチとしては以下のようになります。

  1. 入力に対する期待する結果を用意する
  2. 重みとバイアスを調節して、入力から期待する結果得るようにする

ここで、入力を${\bf x}$、出力を${\bf y}$としたときの、順伝搬型ネットワークを${\bf y} = F({\bf x; w, b})$として定義することにします。

1.4.1 学習の枠組み

まず入力に対する期待する結果を用意します。
例えば、手書きの数字を認識させるとき、手書きの数字と期待する数字をペアでデータとして、いっぱい持っておきます。
この1つ1つのデータを訓練サンプルといい、その集合を訓練データと呼びます。

ここでは、1つの入力を$x$、その期待する出力を$y$と定義します。
すると、N個の訓練サンプルは$d_1 = (x_1, y_1), d_2 = (x_2, y_2), \cdots, d_N = (x_N, y_N)$と定義でき、
訓練データは{$(x_1, y_1), (x_2, y_2), \cdots, (x_N, y_N)$}と表現できます。

次に、重みとバイアスを調節して訓練データ通りの結果にしたいけど、どうやって調節していくのか。

それは、ネットワークが表す関数$F$と訓練データとの近さを表す尺度を決めて、できるだけ差が少なくなるようにパラメータを調節します。
その尺度を表す関数を損失関数と呼びます。

どうも、考える問題について、適切な活性化関数と損失関数の組み合わせがあるようです。

先人の知恵をお借りすると、考える問題別に以下の組み合わせが一般的のようです

問題の種別 活性化関数 損失関数
回帰 恒等写像 二乗誤差
二値分類 ロジスティック関数 エントロピー誤差
多クラス分類 ソフトマックス関数 交差エントロピー誤差

回帰とは、出力値に連続値をとる関数を対象に訓練データをよく再現するような関数を定める問題のこと。
例えば、「身長から体重を推測する」とか「「広告宣伝費」と「来店者数」の関係から推測する」など。

二値分類は、入力の内容に応じて、2種類に区別する問題のこと
例えば、「顔の写真を与えた時に性別を判断する」など。

多クラス分類は、入力の内容に応じて、有限個のクラスに分類すること
例えば、「手書きの数字を入力して、数字を判断する」など。

なので、顔の写真を与えて、「~しているとき」「~していないとき」の判定を行なうときは二値分類のアプローチ、
「笑顔」「怒っている顔」「寝ている顔」「びっくりした顔」など判定したいときは多クラス分類のアプローチとなります。

あとは、式だけ紹介します。

恒等写像

f(u) = u

ロジスティック関数

f(u) = \frac{1}{1+e^{-u}}

ソフトマックス関数

f_{k}^{(l)}(u) = \frac{\exp( {u_k^{(l)}} )}{\sum_{j=1}^{K} \exp( {u_j^{(l)}} )} (Kは各層のユニット数)

二乗誤差

E({\bf w, b}) = \sum_{n=1}^{N} || d_n - F({\bf x_n; w, b}) ||

エントロピー誤差

E({\bf w, b}) = -\sum_{n=1}^{N} [d_n \log(F({\bf x_n; w, b})) + (1 - d_n) \log(1 - F({\bf x_n; w, b}))] 

交差エントロピー誤差

E({\bf w, b}) = -\sum_{n=1}^{N} \sum_{k=1}^{K}[d_{nk} \log(f_{k}^{(L-1)}({\bf x_n; w, b})))] 

次回は、確率的勾配降下法で、重みとバイアスの調節を行なう方法について書きます。

29
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
21