Sinir ağlarında sigmoid fonksiyonun rol türevi


18

Sinir ağlarında sigmoid fonksiyonun türevinin rolünü anlamaya çalışıyorum. enter image description here

İlk önce sigmoid fonksiyonunu ve python kullanarak tanımdan tüm noktaların türevini çiziyorum. Bu türevin rolü tam olarak nedir? enter image description here

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
Daha fazla sorunuz varsa sormaktan çekinmeyin
JahKnows

Yanıtlar:


23

Sinir ağlarında türev kullanımı backpropagation adı verilen eğitim süreci içindir . Bu teknik, bir kayıp fonksiyonunu en aza indirgemek için en uygun model parametreleri kümesini bulmak için gradyan inişini kullanır . Örneğinizde, bir sigmoid türevini kullanmalısınız çünkü bu, bireysel nöronlarınızın kullandığı aktivasyondur.


Kayıp fonksiyonu

Makine öğrenmesinin özü, bir maliyet işlevini, bazı hedef işlevleri en aza indirgeyebileceğimiz veya en üst düzeye çıkarabileceğimiz şekilde optimize etmektir. Buna tipik olarak kayıp veya maliyet fonksiyonu denir. Genellikle bu işlevi en aza indirmek istiyoruz. Maliyet fonksiyonu, C , modeli model parametrelerinin bir fonksiyonu olarak modelinizden veri aktarırken ortaya çıkan hatalara dayalı olarak bir miktar ceza ilişkilendirir.

Bir görüntünün kedi mi yoksa köpek mi içerdiğini etiketlemeye çalıştığımız örneğe bakalım. Mükemmel bir modelimiz varsa, modele bir resim verebiliriz ve bize bir kedi mi yoksa köpek mi olduğunu söyleyecektir. Ancak, hiçbir model mükemmel değildir ve hatalar yapacaktır.

Modelimizi girdi verilerinden anlam çıkarabilmek için eğittiğimizde yaptığı hata miktarını en aza indirmek istiyoruz. Bu yüzden bir eğitim seti kullanıyoruz, bu veriler birçok köpek ve kedi resmi içeriyor ve bu görüntü ile ilişkili temel doğruluk etiketine sahibiz. Modelin eğitim yinelemesini her çalıştırdığımızda, modelin maliyetini (hata miktarını) hesaplıyoruz. Bu maliyeti en aza indirmek isteyeceğiz.

Her biri kendi amacına hizmet eden birçok maliyet fonksiyonu mevcuttur. Kullanılan ortak maliyet fonksiyonu, ikinci dereceden maliyet olarak tanımlanır.

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

Bu, N için öngörülen etiket ile temel doğruluk etiketi arasındaki farkın karesidirN üzerinde eğitim aldığımız görüntüleri . Bunu bir şekilde en aza indirmek isteyeceğiz.

Kayıp fonksiyonunu en aza indirme

Gerçekten de makine öğreniminin çoğu, bazı maliyet fonksiyonlarını en aza indirerek bir dağılımı belirleyebilen bir çerçeve ailesidir. Sorabileceğimiz soru "bir işlevi nasıl en aza indirebiliriz?"

Aşağıdaki işlevi en aza indirelim

y=x24x+6 .

Bunu çizersek, bir minimum olduğunu görebiliriz . Bunu analitik olarak yapmak için, bu fonksiyonun türevini şu şekilde alabiliriz:x=2

dydx=2x4=0

.x=2

Bununla birlikte, çoğu kez analitik olarak küresel bir minimum bulmak bazen mümkün değildir. Bunun yerine bazı optimizasyon teknikleri kullanıyoruz. Burada pek çok farklı yol vardır: Newton-Raphson, grid arama, vb. Bunların arasında gradyan kökenli . Sinir ağları tarafından kullanılan teknik budur.

Dereceli alçalma

Bunu anlamak için ünlü kullanılan bir benzetme kullanalım. 2D minimizasyon problemi düşünün. Bu, vahşi doğada dağlık bir yürüyüşe çıkmaya eşdeğerdir. En alt noktada olduğunu bildiğiniz köye geri dönmek istiyorsunuz. Köyün ana yönlerini bilmeseniz bile. Yapmanız gereken tek şey sürekli en dik yolu aşağı çekmek ve sonunda köye gideceksiniz. Böylece eğimin dikliğine dayanarak yüzeye ineceğiz.

Hadi fonksiyonumuzu alalım

y=x24x+6

Biz belirleyecektir olan y en aza indirilir. Degrade iniş algoritması önce x için rastgele bir değer seçeceğimizi söylüyorxyx . başlayalım . Ardından algoritma, yakınsamaya ulaşıncaya kadar aşağıdakileri yinelemeli olarak yapacaktır.x=8

xnew=xoldνdydx

nerede öğrenme hızı, biz istediğimiz ne olursa olsun değer için bu ayarlayabilirsiniz. Ancak bunu seçmenin akıllı bir yolu var. Çok büyük ve minimum değere asla ulaşamayacağız ve çok büyük, oraya varmadan önce soooo'yu çok zaman harcayacağız. Dik yokuştan aşağı çekmek istediğiniz adımların boyutuna benzer. Küçük adımlar ve dağda öleceksin, asla inmeyeceksin. Çok büyük bir adım ve köy vurmak ve dağın diğer tarafında sona erme riski. Türev, bu eğimden en aza indirdiğimiz araçlardır.ν

dydx=2x4

ν=0.1

Yineleme 1:

x n e w = 6.8 - 0.1 ( 2 6.8 - 4 ) = 5.84 x n e w = 5.84 - 0.1 ( 2 5.84 - 4 ) = 5,07 x n e wxnew=80.1(284)=6.8
xnew=6.80.1(26.84)=5.84
xnew=5.840.1(25.844)=5.07
x n e w = 4.45 - 0.1 ( 2 4.45 - 4 ) = 3.96 x n e w = 3.96 - 0.1 ( 2 3.96 - 4 ) = 3.57 x n e w = 3.57 - 0.1 ( 2 3.57 - 4 )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
x n e w = 3.00 - 0.1 ( 2 3.00 - 4 ) = 2.80 x n e w = 2.80 - 0.1 ( 2 2.80 - 4 ) = 2,64 x n e wxnew=3.250.1(23.254)=3.00
xnew=3.000.1(23.004)=2.80
xnew=2.800.1(22.804)=2.64
x n e w = 2,51 - 0,1 ( 2 2,51 - 4 ) = 2,41 x n e w = 2,41 - 0,1 ( 2 2,41 - 4 ) = 2,32 x n e w = 2,32 - 0,1 ( 2 2,32xnew=2.640.1(22.644)=2.51
xnew=2.510.1(22.514)=2.41
xnew=2.410.1(22.414)=2.32
x n e w = 2.26 - 0.1 ( 2 2.26 - 4 ) = 2.21 x n e w = 2.21 - 0.1 ( 2 2.21 - 4 ) = 2.16 x n e w = 2.16 - 0.1 ( 2 olduğu 2.16 - 4 ) = 2.13 x nxnew=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
x n e w = 2.10 - 0.1 ( 2 2.10 - 4 ) = 2.08 x n e w = 2.08 - 0.1 ( 2 2.08 - 4 ) = 2.06 x n e w = 2.06 - 0.1xnew=2.130.1(22.134)=2.10
xnew=2.100.1(22.104)=2.08
xnew=2.080.1(22.084)=2.06
x n e w = 2.05 - 0.1 ( 2 2.05 - 4 ) = 2.04 x n e w = 2.04 - 0.1 ( 2 2.04 - 4 ) = 2.03 x n e w = 2.03 - 0.1 ( 2 2,03 - 4 ) =xnew=2.060.1(22.064)=2.05
xnew=2.050.1(22.054)=2.04
xnew=2.040.1(22.044)=2.03
x n e w = 2,02 - 0,1 ( 2 2,02 - 4 ) = 2,02 x n e w = 2,02 - 0,1 ( 2 2,02 - 4 ) = 2,01 x n e w = 2,01 - 0,1 ( 2 2,01 - 4 ) = 2,01 x n e w = 2,01xnew=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
x n e w = 2.01 - 0.1 ( 2 2.01 - 4 ) = 2.00 x n e w = 2.00 - 0.1 ( 2 2.00 - 4 ) = 2,00 x n exnew=2.010.1(22.014)=2.01
xnew=2.010.1(22.014)=2.00
xnew=2.000.1(22.004)=2.00
x n e 2.00-0.1(22.00-4)=2.00 x n e w =2.00-0.1(22.00-4)=2.00xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00
xnew=2.000.1(22.004)=2.00

Ve algoritmanın x = 2'de yakınsadığını görüyoruzx=2 ! Minimum değeri bulduk.


Sinir ağlarına uygulanır

İlk sinir ağları, sadece bazı girdilerin aldı tek nöron vardı ve daha sonra bir çıkış temin yxy^ . Kullanılan ortak bir işlev sigmoid işlevidir

σ(z)=11+exp(z)

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

burada , her bir x girişi için ilişkili ağırlıktır ve bir bwxb . Daha sonra maliyet fonksiyonumuzu en aza indirmek istiyoruz

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

Sinir ağı nasıl eğitilir?

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))

Böylece ağırlıkları degrade iniş ile güncelleyebiliriz.

wnew=woldηCw

η


2
lütfen söyle bana bu süreç kitaplarda neden bu kadar güzel anlatılmıyor? Bir blogun var mı? Sinir ağlarını öğrenmek için hangi materyalleri öneriyorsunuz? Test verilerim var ve bunları eğitmek istiyorum. Minimize edeceğim bir işlevi çizebilir miyim? Daha iyi anlamak için bu süreci görselleştirmek istiyorum.
lukassz

Geri yayılımı bu basit şekilde açıklayabilir misiniz?
lukassz

1
İnanılmaz Cevap ... (+ 1)
Aditya

1
Backprop ayrıca JahKnows'ın yukarıda açıkladığı şeye benziyor ... Sadece degrade, çıkışlardan doğrudan tüm girişlere taşınır .. Hızlı bir google araması bunu netleştirir .. Ayrıca aynı diğer tüm aktivasyon işlevlerine de gider ..
Aditya

1
@lukassz, denkleminin son denklemden önceki ağırlık güncellemesiyle aynı olduğunu fark ettim. Cw=(y^-y)*sigmoid türevi. Benimle aynı maliyet fonksiyonunu kullanıyor, kayıp fonksiyonunun türevini de almanız gerektiğini unutmayın, bu olury^-y, nerede y^ tahmin edilen etiketler ve ytemel hakikat etiketleridir.
JahKnows

2

Sinir ağının tahminini oluşturduğu aşamada, girişi ağ üzerinden ileriye doğru besler. Her katman için, katmanın girdisiX önce afin bir dönüşümden geçer WX+b ve sonra sigmoid fonksiyonundan geçer σ(WX+b).

Ağı eğitmek için çıktı y^ daha sonra beklenen çıktıyla (veya etiketle) karşılaştırılır yBir aracılığıyla maliyet fonksiyonu L(y,y^)=L(y,σ(WX+b)). The goal of the whole training procedure is to minimize that cost function. In order to do that, a technique called gradient descent is performed which calculates how we should change W and b so that the cost reduces.

Gradient Descent requires calculating the derivative of the cost function w.r.t W and b. In order to do that we must apply the chain rule, because the derivative we need to calculate is a composition of two functions. As dictated by the chain rule we must calculate the derivative of the sigmoid function.

One of the reasons that the sigmoid function is popular with neural networks, is because its derivative is easy to compute.


1

In simple words:

Derivative shows neuron's ability to learn on particular input.

For example if input is 0 or 1 or -2, the derivative (the "learning ability") is high and back-propagation will improve neuron's weights for this sample dramatically.

On other hand, if input is 20, the the derivative will be very close to 0. It means that back-propagation on this sample will not "teach" this neuron to produce a better result.

The things above are valid for a single sample.

Let's look at the bigger picture, for all samples in the training set. Here we have several situations:

  • If derivative is 0 for all samples in your training set AND neuron always produces wrong results - it means the neuron is saturated (dumb) and will not improve.
  • If derivative is 0 for all samples in your training set AND neuron always produces correct results - it means the neuron have been studying really well and already as smart as it could (side note: this case is good but it may indicate potential overfitting, which is not good)

  • If derivative is 0 on some samples, non-0 on other samples AND neuron produces mixed results - it indicates that this neuron doing some good work and potentially may improve from further training (though not necessarily as it depends on other neurons and training data you have)

So, when you are looking at the derivative plot, you can see how much the neuron prepared to learn and absorb the new knowledge, given a particular input.


0

The derivative you see here is important in neural networks. It's the reason why people generally prefer something else such as rectified linear unit.

Do you see the derivative drop for the two ends? What if your network is on the very left side, but it needs to move to the right side? Imagine you're on -10.0 but you want 10.0. The gradient will be too small for your network to converge quickly. We don't want to wait, we want quicker convergence. RLU doesn't have this problem.

We call this problem "Neural Network Saturation".

Please see https://www.quora.com/What-is-special-about-rectifier-neural-units-used-in-NN-learning

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.