.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関数

GELU関数

GELU(Gaussian Error Linear Units)は、OpenAI GPTやBERTで使われている。

出力層の活性化関数

恒等関数

Sigmoid関数

Softmax関数

推論と学習

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

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

深層学習の誤差逆伝播法

深層学習のテクニック

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

出力の分布

重みの初期値

バッチ正規化

過学習を起こし易い

概要

解決

実装

学習率の調整が難しい

概要

学習率とは、

解決

勾配消失問題が起こる

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

理由

解決

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

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

一般的なフツーのニューラルネットワーク

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

(Feedforward Neural Network: FNN)

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

(Deep Neural Network: DNN)

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

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

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

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

RNN Encoder-Decoder(Sequence-to-Sequence)

生成モデル系のニューラルネットワーク

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

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

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

特徴

RBMでできること

3D DNN

アプローチ

点群データ

3D DNNでできること

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

(Deep Q-Network: DQN)

特徴

DQNでできること

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

参考

Wikipedia

YouTube?

深層学習、DNN

RNN、CNN、

, etc.

Blog

Neural networks and deep learning

mizu-mi blog

ゼロから作るDeep Learning

Pythonで学ぶディープラーニングの理論と実装
https://www.oreilly.co.jp/books/9784873117584/

サンプル

https://github.com/oreilly-japan/deep-learning-from-scratch

その他、参考


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