ニューラルネットワークにおけるシグモイド関数の役割導関数


18

ニューラルネットワークにおけるシグモイド関数の微分の役割を理解しようとします。 ここに画像の説明を入力してください

最初に、シグモイド関数と、Pythonを使用した定義からのすべてのポイントの導関数をプロットします。この派生物の役割は正確に何ですか? ここに画像の説明を入力してください

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def derivative(x, step):
    return (sigmoid(x+step) - sigmoid(x)) / step

x = np.linspace(-10, 10, 1000)

y1 = sigmoid(x)
y2 = derivative(x, 0.0000000000001)

plt.plot(x, y1, label='sigmoid')
plt.plot(x, y2, label='derivative')
plt.legend(loc='upper left')
plt.show()

2
さらに質問がある場合は、遠慮なく質問してください
JahKnows

回答:


23

ニューラルネットワークでの導関数の使用は、逆伝播と呼ばれるトレーニングプロセス用です。この手法では、勾配関数を使用してモデル関数の最適なセットを見つけ、損失関数を最小化します。この例では、シグモイド微分を使用する必要があります。これは、個々のニューロンが使用している活性化であるためです。


損失関数

C

画像に猫または犬が含まれているかどうかにラベルを付けようとする例を見てみましょう。完璧なモデルがあれば、そのモデルに写真を与えることができ、猫か犬かを教えてくれます。ただし、完璧なモデルはなく、間違いを犯します。

入力データから意味を推測できるようにモデルをトレーニングするとき、モデルが犯すミスの量を最小限に抑えたいと思います。そのため、トレーニングセットを使用します。このデータには犬と猫の多くの写真が含まれており、その画像にグランドトゥルースラベルが関連付けられています。モデルのトレーニング反復を実行するたびに、モデルのコスト(ミスの量)を計算します。このコストを最小限に抑える必要があります。

多くのコスト関数が存在し、それぞれに独自の目的があります。使用される一般的なコスト関数は、次のように定義される2次コストです。

C=1Ni=0N(y^y)2

N

損失関数の最小化

実際、機械学習のほとんどは、いくつかのコスト関数を最小化することで分布を決定できるフレームワークのファミリにすぎません。質問できるのは「どのようにして関数を最小化できるか」です。

次の関数を最小化しましょう

y=x24x+6

x=2

dydx=2x4=0

x=2

ただし、多くの場合、解析的にグローバルな最小値を見つけることは不可能です。そのため、代わりにいくつかの最適化手法を使用します。ここにも、Newton-Raphson、グリッド検索など、さまざまな方法があります。これらの中には勾配降下法があります。これは、ニューラルネットワークで使用される手法です。

勾配降下

これを理解するために、よく使用されるアナロジーを使用しましょう。2D最小化の問題を想像してください。これは、荒野の山岳ハイキングに相当します。最下点にいるとわかっている村に戻りたいと思います。村の基本的な方向がわからなくても。あなたがする必要があるのは、絶えず最も急な道を下るだけで、最終的に村に着きます。そのため、傾斜の急さに基づいてサーフェスを下降します。

関数を見てみましょう

y=x24x+6

xyxx=8

xnew=xoldνdydx

ν

dydx=2x4

ν=0.1

反復1:

xnew=80.1(284)=6.8
xnew=6.80.1(26.84)=5.84
xnew=5.840.1(25.844)=5.07
xnew=5.070.1(25.074)=4.45
xnew=4.450.1(24.454)=3.96
xnew=3.960.1(23.964)=3.57
xnew=3.570.1(23.574)=3.25
xnew=3.250.1(23.254)=3.00
xnew=3.000.1(23.004)=2.80
xnew=2.800.1(22.804)=2.64
xnew=2.640.1(22.644)=2.51
xnew=2.510.1(22.514)=2.41
xnew=2.410.1(22.414)=2.32
xnew=2.320.1(22.324)=2.26
xnew=2.260.1(22.264)=2.21
xnew=2.210.1(22.214)=2.16
xnew=2.160.1(22.164)=2.13
xnew=2.130.1(22.134)=2.10
xnew=2.100.1(22.104)=2.08
xnew=2.080.1(22.084)=2.06
xnew=2.060.1(22.064)=2.05
xnew=2.050.1(22.054)=2.04
xnew=2.040.1(22.044)=2.03
xnew=2.030.1(22.034)=2.02
xnew=2.020.1(22.024)=2.02
xnew=2.020.1(22.024)=2.01
xnew=2.010.1(22.014)=2.01
xnew=2.010.1(22.014)=2.01
xnew=2.010.1(22.014)=2.00
xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00

x=2


ニューラルネットワークに適用

xy^

σ(z)=11+exp(z)

y^(wTx)=11+exp(wTx+b)

wxb

C=12Ni=0N(y^y)2

ニューラルネットワークのトレーニング方法

CN

C=12NiN(y^y)2

y^yw

Cw=Cy^y^w

Cy^=y^y

y^=σ(wTx)σ(z)z=σ(z)(1σ(z))

y^w=11+exp(wTx+b)(111+exp(wTx+b))

そのため、次のように勾配降下により重みを更新できます。

wnew=woldηCw

η


2
このプロセスが書籍であまりうまく説明されていない理由を教えてください。ブログはありますか?ニューラルネットワークを学習するためのどの教材をお勧めしますか?テストデータがあり、それをトレーニングしたいです。最小化する関数を描画できますか?このプロセスを視覚化して、理解を深めたいと思います。
-lukassz

この単純な方法で逆伝播を説明できますか?
lukassz

1
すばらしい答え...(+ 1)
アディティア

1
Backpropは、JahKnowsが上で説明したものにも似ています...その勾配だけが、出力から入力まで直接運ばれます。グーグルですばやく検索すると、これが明確になります。また、他のすべてのアクティベーション関数も同じです。 ..
アディティア

1
Cw=(y^y)derivative of sigmoidy^yy^y

2

XWX+bσ(WX+b)

ネットワークを訓練するために、出力次に期待される出力(またはラベル)と比較されを介してコスト関数。トレーニング手順全体の目標は、そのコスト関数を最小化することです。それを行うために、勾配降下と呼ばれる手法が実行され、とを変更してコストを削減する方法を計算します。 YLY Y=LYσWX+BWBy^y L(y,y^)=L(y,σ(WX+b))Wb

勾配降下法では、コスト関数wrtおよびの導関数を計算する必要があります。そのためには、計算する必要がある導関数が2つの関数の合成であるため、チェーンルールを適用する必要があります。チェーンルールの指示に従って、シグモイド関数の導関数を計算する必要がありますbWb

シグモイド関数がニューラルネットワークで人気がある理由の1つは、その導関数が計算しやすいためです。


1

簡単な言葉で:

微分は、特定の入力で学習するニューロンの能力を示します。

たとえば、入力が0または1または-2の場合、導関数(「学習能力」)が高く、逆伝播により、このサンプルのニューロンの重みが劇的に改善されます。

一方、入力が20の場合、導関数は0に非常に近くなります。これは、このサンプルでの逆伝播が、このニューロンを「教えて」より良い結果を生まないことを意味します。

上記のことは、単一のサンプルに対して有効です。

トレーニングセットのすべてのサンプルについて、全体像を見てみましょう。ここにはいくつかの状況があります。

  • トレーニングセット内のすべてのサンプルの微分が0であり、ニューロンが常に間違った結果を生成する場合-ニューロンが飽和(ダム)し、改善されないことを意味します。
  • トレーニングセットのすべてのサンプルの微分が0であり、ニューロンが常に正しい結果を生成する場合 -ニューロンは非常によく学習しており、すでに可能な限りスマートになっていることを意味します(補足:このケースは良好ですが、潜在的な過剰適合を示している可能性があります良くない)

  • 一部のサンプルで微分が0、他のサンプルで0以外、およびニューロンが混合結果を生成する場合-このニューロンは何らかの良い仕事をしており、さらなるトレーニングから改善される可能性があることを示します(必ずしも他のニューロンやトレーニングデータに依存するわけではありませんが持ってる)

したがって、微分プロットを見ると、特定の入力が与えられた場合に、ニューロンが新しい知識を学習および吸収するためにどれだけ準備したかを確認できます。


0

ここに表示される微分は、ニューラルネットワークでは 重要です。それが人々が一般に整流線形ユニットのような他の何かを好む理由です。

2つの端の派生的な低下が見られますか?ネットワークが非常に左側にあるが、右側に移動する必要がある場合はどうなりますか?あなたが-10.0にいるが、10.0が欲しいと想像してください。勾配が小さすぎて、ネットワークをすばやく収束できません。待ちたくはありません。もっと早く収束したいのです。RLUにはこの問題はありません。

この問題を「ニューラルネットワークの飽和」と呼びます。

参照してくださいhttps://www.quora.com/What-is-special-about-rectifier-neural-units-used-in-NN-learningを

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.