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

目次

概要

モデル

学習

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

「重み」のパラメタの決定

構造

第0層(入力層

そのままの値を出力(出力に重みを掛けられる。

第1層(中間層(隠れ層

第2層(出力層

誤差の計算と重みの更新

出力と教師信号の誤差の計算をし、
2→1→0層と層の重みを更新していく(誤差逆伝播法

数学的に

関数

関数はニューラルネットワーク全体で1つの関数、個々の合成関数。

特徴

計算

入力層~中間層の

上記を行列計算に出来る。

┌z11,z12,z13,z14┐      ┌t11,t12,t13,t14┐
│z21,z22,z23,z24│ = Φ(│t21,t22,t23,t24│)
└z31,z32,z33,z34┘      └t31,t32,t33,t34┘

出力層と誤差計算

活性化関数

Step関数Sigmoid関数

共通点

相違点

Step関数

実装

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

※ 0、1を真偽のキャストで返しているのがトリッキーだよ。

グラフ

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

"""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関数グラフ

Sigmoid関数

もともと出力層の活性化関数から転用されたものなので詳細はそちらを参照。

              1
h(x) = ────────
        1 + exp(-x)

実装

ポイントは、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刻みのプロットをSigmoid関数にかけてグラフ化する。

"""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関数グラフ

tanh関数

で、勾配消失問題を引き起こし難く、学習をより高速化させる。

実装

def tanh(x):
    y = np.tanh(x)
    return y

グラフ

x = np.arange(-10.0, 10.0, 0.1)
y = tanh(x)
plt.plot(x, y)
plt.ylim(-1.2, 1.2)
plt.show()
tanh関数グラフ

ReLU関数

主流

実装

np.maximumとか知らんわwと思ってググると、大きい方を返すと。
(つまり、xが、0以下のときは0が返り、0以上になるとxの値が返る。)

"""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刻みのプロットをReLU関数にかけてグラフ化する。

"""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()
ReLU関数グラフ

ReLU派生系

Leaky ReLU関数

Leaky ReLU関数グラフ

Parametric ReLU

LeakyReLU のく 0 部分の直線の傾きを「学習によって最適化」

Randomized ReLU

LeakyReLU のく 0 部分の直線の傾きを「ランダムに試す」

その他の活性化関数

Absolute value rectification

主に物体認識に使用されている。

def abs_relu(x):
    return np.abs(x) 

Maxout関数

出力層の活性化関数

恒等関数

Sigmoid関数

Softmax関数

推論と学習

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

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

深層学習の誤差逆伝播法

深層学習のテクニック

ニューラルネットワークの問題点

過学習を起こし易い

概要

解決

実装

学習率の調整が難しい

概要

学習率とは、

解決

勾配消失問題が起こる

誤差逆伝播法の計算において入力層に近い手前の層まで学習が行き渡らなくなる現象

理由

解決

により(事前学習とファイン・チューニングを用いず、)全体の学習ができるようになった。

ニューラルネットワークの色々

順伝播型ニューラルネットワーク(FNN)

(Feedforward Neural Network: FNN)

ディープニューラルネットワーク(DNN)

(Deep Neural Network: DNN)

DNNの説明は本項で行われています。

畳み込みニューラルネットワーク(CNN)

再帰型ニューラルネットワーク(RNN)

長短期記憶ニューラルネットワーク(LSTM)

(Long short-term memory: LSTM)

特徴

LSTMでできること

RNNでできること

拡張形式、GRU

自己符号化器(AE:オートエンコーダ)

特徴

AEでできること

様々な用途で利用されている。

AEの歴史

元々、(入出力兼務の)可視層と隠れ層の2層のネットワークだが、

※ AEは、勾配消失問題を事前学習とファイン・チューニング
  よって解決しニューラルネットワーク発展の礎となった。

制限ボルツマン・マシン(RBM)

特徴

RBMでできること

3D DNN

アプローチ

点群データ

3D DNNでできること

深層生成ネットワーク(DGN)

特徴

DGNでできること

敵対的生成ネットワーク(GAN)

(Generative Adversarial Network: GAN)

特徴

本物の画像と見分けのつかない画像を出力する。

GANでできること

深層Qネットワーク(DQN)

(Deep Q-Network: DQN)

特徴

DQNでできること

深層強化学習の事例を参照。

参考

Wikipedia

YouTube?

深層学習、DNN

RNN、CNN、

, etc.

Blog

Neural networks and deep learning

mizu-mi blog


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS