atolab

モノづくりを楽しむ大学生の備忘録。まだまだ初心者です。お手柔らかにお願いします。

ゼロから作るDeep Learning

去年、大学の生協で少し安く売っており、前から興味を持っていたので買ったのですが、読む暇もなく帰省中についに読んだので内容を復習程度にまとめます。

パーセプトロン

パーセプトロンとは、ニューラルネットワークの起源となるアルゴリズムで複数の入力信号を1つの出力信号にするもの。

例えば2入力のパーセプトロンは以下のように図示される。
f:id:atmos-tic:20170223130450j:plain
画像の文字が少し違うのは勘弁です。

図の〇は「ニューロン」、「ノード」と呼ばれている。
{ω_1,ω_2}は各入力信号固有の重み。
出力信号yは入力信号に重みを付けた総和がある限界値を超えた場合に1となります。この限界値を閾値と呼び、θする。
数式で表すと以下のようになる。
{
    \begin{eqnarray}
    y=\left\{ \begin{array}{ll} 
    0 & (ω_1 x_1+ω_2x_2 ≦ θ) \\
    1 & (ω_1 x_1+ω_2x_2 > θ)
  \end{array}\right.
\end{eqnarray}
}

入力信号も0または1として、{ω_1,ω_2}、θを定めることでAND、NAND、ORという論理回路パーセプトロンを使うことで表現できる。

バイアス
{
    \begin{eqnarray}
    y=\left\{ \begin{array}{ll} 
    0 & (b+ω_1 x_1+ω_2x_2 ≦ 0) \\
    1 & (b+ω_1 x_1+ω_2x_2 > 0)
  \end{array}\right.
\end{eqnarray}
}
上の式は、先の式を少し変えたもの。入力信号に{ω_1,ω_2}の重みをつけてb(バイアス)を加え、その値が0を上回れば1を出力し、そうでなければ0を出力するというものです。

多層パーセプトロンによるXORゲート
{y=AND(NAND(x1,x2), OR(x1,x2))}
ように組み合わせることでXORの論理回路を作り出すことをできる。これを多層パーセプトロンという。

ニューラルネットワーク
活性化関数
下の図のh(X)を活性化関数と呼ぶ。入力信号の総和がどのように活性化するか決定する関数。
f:id:atmos-tic:20170223155820j:plain
活性化関数は非線形関数であることが重要。活性化関数が線形関数の場合、ニューラルネットワークの層がどれだけ深くしても意味がなくなる。

ステップ関数
{
    \begin{eqnarray}
    h(x)=\left\{ \begin{array}{ll} 
    0 & (x ≦ 0) \\
    1 & (x > 0)
  \end{array}\right.
\end{eqnarray}
}
シグモイド関数
{h(x)=\frac{1}{1+exp(-x)}}
ReLU関数
{
    \begin{eqnarray}
    h(x)=\left\{ \begin{array}{ll} 
    0 & (x ≦ 0) \\
    x & (x > 0)
  \end{array}\right.
\end{eqnarray}
}

損失関数
ニューラルネットワークがどれだけ不正確を表す関数。正確さを扱うのではなく不正確さを扱うのは、この関数を微分しより正確になる方向にパラメーターを調節するのだが、正確さを扱うとこの微分が0になりやすく扱い辛いため。
損失関数が最小となるパラメータが最適なパラメータとなる。

{y_k}ニューラルネットワークの出力、{t_k}は教師データとして
2乗和誤差
{E=\frac{1}{2}\sum_{k}(y_k - t_k)^2}
交差エントロピー
{E=-\sum_{k}t_k\log(y_k)}

今までは、難しい本を何とか読んでいましたがこの本は分かりやすく説明してあり読んでいて楽しかったです。
あとこの記事で初めてLatex使いました。難しいけど、数式を表現できるのはうれしいですね。