.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

ニューラルネットワークは、

  • パーセプトロンの、

    「重み」のパラメタ(w1, w2, θ(-b))の決定は人手によって行われる。

という問題を、データから自動で「重み」のパラメタを学習することで解決する。

  • パーセプトロンでは、活性化関数にステップ関数(段階関数)を使用していたが、
    ニューラルネットワークでは、これ以外の活性化関数を使用する。
  • ネットワークにループする結合を持たず、
    第0層        第1層          第2層~
    入力層 → 中間層(隠れ層) → 出力層

というように単一方向へのみ信号が伝播する。

  • 機械学習の、
    • 学習フェーズでは、信号は逆方向に伝播する。
    • 推論フェーズでは、信号は順方向に伝播する。

活性化関数

ステップ関数とシグモイド関数とReUL関数がある。

  • ステップ関数とシグモイド関数
    • 相違点
      • ステップ関数:0, 1の信号
      • シグモイド関数:連続的な実数の信号
  • 共通点
    • 非線形な関数
    • 0 <= 出力信号 <= 1 に収める。
    • 入力信号が重要な時に1に近い、重要でない時0に近い値を返す。
  • ニューラルネットワークでは、非線形な関数を使用する必要がある。
    • 線形関数を用いてはならないのは、多層化の意味が無くなるため。
    • 例 : 線形な h(x) = cx を多層化しても h(h(h(x))) = cccx となり1層で表現可能。
  • しかし、最近は、ReUL関数の利用が主流になっている。

ステップ関数

実装

なんとなくAPI仕様を知らないと難しい感じ。

  • パターン1
    """This is a test program."""
    
    import numpy as np
    
    def step_function(x_1):
        """This is a test program."""
        y_1 = x_1 > 0
        return y_1.astype(np.int)
  • パターン2
    """This is a test program."""
    
    import numpy as np
    
    def step_function(x_1):
        """This is a test program."""
        return np.array(x_1 > 0, dtype=np.int)

グラフ

-5.0 ~ 5.0までの0.1刻みのプロットをステップ関数にかけてグラフ化する。

"""This is a test program."""

import numpy as np
import matplotlib.pylab as plt

def step_function(x_1):
    """This is a test program."""
    # 上記のいずれかの実装を選択。

X = np.arange(-5.0, 5.0, 0.1)
Y = step_function(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)  # 図で描画するy軸の範囲を指定
plt.show()
step関数グラフ

シグモイド関数

              1
h(x) = ────────
        1 + exp(-x)
  • exp(-x)とは、eの-x乗を意味する。
  • eはネイピア数(2.7182)の実数を表す。

実装

ポイントは、Pythonのブロードキャストによって配列も計算できる点。

"""This is a test program."""

import numpy as np

def sigmoid(x_1):
     """This is a test program."""
    return 1 / (1 + np.exp(-x_1))   

グラフ

-5.0 ~ 5.0までの0.1刻みのプロットをシグモイド関数にかけてグラフ化する。

"""This is a test program."""

import numpy as np
import matplotlib.pylab as plt

def sigmoid(x_1):
    """This is a test program."""
    return 1 / (1 + np.exp(-x_1))

X = np.arange(-5.0, 5.0, 0.1)
Y = sigmoid(X)
plt.plot(X, Y)
plt.ylim(-0.1, 1.1)
plt.show()
sigmoid関数グラフ

ReUL関数

ReUL(Rectified Linear Unit)関数

  • 入力が0以下なら0を出力する。
  • 入力が0を超えていればそのまま出力する。
           ┌
           │0 ( a <= 0 )
y = h(a) = <
           │a ( a > 0 )
           └
  • 最近の主流。

実装

"""This is a test program."""

import numpy as np

def relu(x_1):
    """This is a test program."""
    return np.maximum(0, x)  

グラフ

-5.0 ~ 5.0までの0.1刻みのプロットをReUL関数にかけてグラフ化する。

"""This is a test program."""

import numpy as np
import matplotlib.pylab as plt

def relu(x_1):
    """This is a test program."""
    return np.maximum(0, x_1)

X = np.arange(-5.0, 5.0, 0.1)
Y = relu(X)
plt.plot(X, Y)
plt.ylim(-0.1, 5.1)
plt.show()
ReUL関数グラフ

ニューラルネットワーク(推論)

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

深層学習の高速化

深層学習のテクニック

参考


添付ファイル: filerelu _graf.png 88件 [詳細] filesigmoid_graf.png 94件 [詳細] filestep_graf.png 100件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-28 (金) 23:07:59 (698d)