Turunan peran fungsi sigmoid dalam jaringan saraf


18

Saya mencoba memahami peran turunan dari fungsi sigmoid dalam jaringan saraf. masukkan deskripsi gambar di sini

Pertama saya plot fungsi sigmoid, dan turunan dari semua titik dari definisi menggunakan python. Apa sebenarnya peran derivatif ini? masukkan deskripsi gambar di sini

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
Jika Anda memiliki pertanyaan lain jangan ragu untuk bertanya
JahKnows

Jawaban:


23

Penggunaan turunan dalam jaringan saraf adalah untuk proses pelatihan yang disebut backpropagation . Teknik ini menggunakan gradient descent untuk menemukan set parameter model yang optimal untuk meminimalkan fungsi kerugian. Dalam contoh Anda, Anda harus menggunakan turunan dari sigmoid karena itu adalah aktivasi yang digunakan neuron individu Anda.


Fungsi kerugian

Inti dari pembelajaran mesin adalah untuk mengoptimalkan fungsi biaya sehingga kita dapat meminimalkan atau memaksimalkan beberapa fungsi target. Ini biasanya disebut kerugian atau biaya funtion. Kami biasanya ingin meminimalkan fungsi ini. Fungsi biaya, , mengaitkan beberapa penalti berdasarkan kesalahan yang dihasilkan ketika meneruskan data melalui model Anda sebagai fungsi dari parameter model.C

Mari kita lihat contoh di mana kita mencoba memberi label apakah suatu gambar mengandung kucing atau anjing. Jika kita memiliki model yang sempurna, kita dapat memberikan gambar model dan itu akan memberi tahu kita apakah itu kucing atau anjing. Namun, tidak ada model yang sempurna dan itu akan membuat kesalahan.

Ketika kami melatih model kami untuk dapat menyimpulkan makna dari input data kami ingin meminimalkan jumlah kesalahan yang dibuatnya. Jadi kami menggunakan set pelatihan, data ini berisi banyak gambar anjing dan kucing dan kami memiliki label kebenaran dasar yang terkait dengan gambar itu. Setiap kali kami menjalankan iterasi pelatihan model, kami menghitung biaya (jumlah kesalahan) model tersebut. Kami ingin meminimalkan biaya ini.

Banyak fungsi biaya ada masing-masing melayani tujuan mereka sendiri. Fungsi biaya umum yang digunakan adalah biaya kuadratik yang didefinisikan sebagai

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

Ini adalah kuadrat dari perbedaan antara label yang diprediksi dan label kebenaran dasar untuk gambar yang kami latih. Kami ingin meminimalkan hal ini dalam beberapa cara.N

Meminimalkan fungsi kerugian

Memang sebagian besar pembelajaran mesin hanyalah keluarga kerangka kerja yang mampu menentukan distribusi dengan meminimalkan beberapa fungsi biaya. Pertanyaan yang bisa kita tanyakan adalah "bagaimana kita bisa meminimalkan suatu fungsi"?

Mari meminimalkan fungsi berikut

y=x24x+6 .

Jika kita memplot ini kita bisa melihat bahwa ada minimum di . Untuk melakukan ini secara analitis kita dapat mengambil turunan dari fungsi ini sebagaix=2

dydx=2x4=0

x=2 .

Namun, sering kali menemukan minimum global secara analitik tidak layak. Jadi alih-alih kami menggunakan beberapa teknik optimasi. Di sini juga ada banyak cara berbeda seperti: Newton-Raphson, pencarian grid, dll. Di antaranya adalah gradient descent . Ini adalah teknik yang digunakan oleh jaringan saraf.

Keturunan Gradien

Mari kita gunakan analogi yang terkenal digunakan untuk memahami ini. Bayangkan masalah minimisasi 2D. Ini sama dengan berada di kenaikan gunung di hutan belantara. Anda ingin kembali ke desa yang Anda tahu berada di titik terendah. Bahkan jika Anda tidak tahu arah mata angin desa. Yang perlu Anda lakukan adalah terus mengambil jalan terjal, dan Anda akhirnya akan sampai ke desa. Jadi kita akan turun ke permukaan berdasarkan kecuraman lereng.

Mari kita ambil fungsi kita

y=x24x+6

kita akan menentukan yang diminimalkan . Algoritma keturunan gradien pertama mengatakan kita akan memilih nilai acak untuk . Mari kita inisialisasi pada . Kemudian algoritma akan melakukan hal berikut secara iteratif sampai kita mencapai konvergensi.y x x = 8xyxx=8

xnew=xoldνdydx

di mana adalah tingkat pembelajaran, kita dapat mengatur ini untuk nilai apa pun yang kita suka. Namun ada cara cerdas untuk memilih ini. Terlalu besar dan kita tidak akan pernah mencapai nilai minimum kita, dan terlalu besar kita akan membuang banyak waktu sebelum kita sampai di sana. Ini analog dengan ukuran anak tangga yang ingin Anda turuni lereng yang curam. Langkah-langkah kecil dan Anda akan mati di gunung, Anda tidak akan pernah turun. Langkah terlalu besar dan Anda berisiko menembak desa dan berakhir di sisi lain gunung. Derivatif adalah sarana yang digunakan untuk melakukan perjalanan menuruni lereng menuju minimum.ν

dydx=2x4

ν=0.1

Iterasi 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 w = 5.07 - 0.1xnew=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.96-0,1(23.96-4)=3.57
x n e w = 3,25 - 0,1 ( 2 3,25 - 4 ) = 3,00 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 w =xnew=3.57-0,1(23.57-4)=3.25
xnew=3.25-0,1(23.25-4)=3,00
xnew=3,00-0,1(23,00-4)=2.80
xnew=2.80-0,1(22.80-4)=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.64-0,1(22.64-4)=2.51
xnew=2.51-0,1(22.51-4)=2.41
xnew=2.41-0,1(22.41-4)=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 2.16 - 4 ) = 2.13 x nxnew=2.32-0,1(22.32-4)=2.26
xnew=2.26-0,1(22.26-4)=2.21
xnew=2.21-0,1(22.21-4)=2.16
xnew=2.16-0,1(22.16-4)=2.13
x n e w =2.10-0.1(22.10-4)=2.08 x n e w =2.08-0.1(22.08-4)=2.06 x n e w =2.06-0.1(xnew=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.03-0,1(22.03-4)=2.02
xnew=2.02-0,1(22.02-4)=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 e w = 2,00 - 0,1 ( 2 2,00 -xnew=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 w = 2.00 - 0.1 ( 2 2.00 - 4 ) = 2.00 x n e w = 2.00 - 0.1 ( 2 2.00 - 4 ) = 2.00xnew=2.000.1(22.004)=2,00
xnew=2,00-0,1(22,00-4)=2,00
xnew=2,00-0,1(22,00-4)=2,00

Dan kita melihat bahwa algoritma konvergen di ! Kami telah menemukan minimum.x=2


Diterapkan ke jaringan saraf

Jaringan saraf pertama hanya memiliki satu neuron yang mengambil beberapa input dan kemudian memberikan output . Fungsi umum yang digunakan adalah fungsi sigmoidyxy^

σ(z)=11+exhal(z)

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

di mana adalah bobot terkait untuk setiap input dan kami memiliki bias . Kami kemudian ingin meminimalkan fungsi biaya kamix bwxb

C=12Nsaya=0N(y^-y)2 .

Bagaimana cara melatih jaringan saraf?

Kami akan menggunakan gradient descent untuk melatih bobot berdasarkan output dari fungsi sigmoid dan kami akan menggunakan beberapa fungsi biaya dan kereta api pada batch data ukuran .NCN

C=12NsayaN(y^-y)2

ywy^ adalah kelas prediksi yang diperoleh dari fungsi sigmoid dan adalah label kebenaran dasar. Kami akan menggunakan gradient descent untuk meminimalkan fungsi biaya sehubungan dengan bobot . Untuk mempermudah hidup kami, kami akan membagi turunannya sebagai berikutyw

Cw=Cy^y^w .

Cy^=y^-y

dan kami memiliki dan turunan dari fungsi sigmoid adalah demikian yang kita miliki,y^=σ(wTx)σ(z)z=σ(z)(1-σ(z))

y^w=11+exhal(wTx+b)(1-11+exhal(wTx+b)) .

Jadi kita dapat memperbarui bobot melalui gradient descent sebagai

wnew=wHaild-ηCw

di mana adalah tingkat belajar.η


2
tolong beri tahu saya mengapa proses ini tidak digambarkan dengan baik di buku? Apakah Anda punya blog? Bahan apa untuk mempelajari jaringan saraf yang Anda rekomendasikan? Saya punya data uji dan saya ingin melatihnya. Bisakah saya menggambar fungsi yang akan saya perkecil? Saya ingin memvisualisasikan proses ini untuk lebih memahaminya.
lukassz

Bisakah Anda menjelaskan backpropagation dengan cara sederhana ini?
lukassz

1
Jawaban Luar Biasa ... (+ 1)
Aditya

1
Backprop juga mirip dengan apa yang Dijelaskan JahKnows di atas ... Hanya gradien yang dibawa sampai ke input langsung dari output .. Pencarian google cepat akan membuat ini jelas .. Juga hal yang sama berlaku setiap fungsi aktivasi lainnya juga ..
Aditya

1
@ lukassz, perhatikan bahwa persamaannya sama dengan yang saya miliki untuk pembaruan bobot pada persamaan sebelumnya sebelum. . Dia menggunakan fungsi biaya yang sama dengan saya, jangan lupa bahwa Anda perlu mengambil turunan dari fungsi kerugian juga, yang menjadi , di mana adalah label yang diprediksi dan adalah kebenaran dasar label. Cw=(y^-y)turunan dari sigmoidy^-yy^y
JahKnows

2

Selama fase di mana jaringan saraf menghasilkan prediksi, itu memberi makan input ke depan melalui jaringan. Untuk setiap layer, input layer berjalan pertama melalui transformasi affine dan kemudian dilewatkan melalui fungsi sigmoid .XWX+bσ(WX+b)

Untuk melatih jaringan, output kemudian dibandingkan dengan output yang diharapkan (atau label) melalui fungsi biaya . Tujuan dari seluruh prosedur pelatihan adalah untuk meminimalkan fungsi biaya tersebut. Untuk melakukan itu, dilakukan teknik yang disebut gradient descent yang menghitung bagaimana kita harus mengubah dan sehingga biaya berkurang.y^y L.(y,y^)=L.(y,σ(WX+b))Wb

Gradient Descent mengharuskan penghitungan turunan dari fungsi biaya wrt dan . Untuk melakukan itu kita harus menerapkan aturan rantai , karena turunan yang perlu kita hitung adalah komposisi dua fungsi. Seperti yang ditentukan oleh aturan rantai, kita harus menghitung turunan dari fungsi sigmoid .Wb

Salah satu alasan mengapa fungsi sigmoid populer dengan jaringan saraf, adalah karena turunannya mudah dihitung .


1

Dengan kata sederhana:

Derivatif menunjukkan kemampuan neuron untuk belajar pada input tertentu.

Misalnya jika input 0 atau 1 atau -2 , turunannya ("kemampuan belajar") tinggi dan propagasi balik akan meningkatkan bobot neuron untuk sampel ini secara dramatis.

Di sisi lain, jika input adalah 20 , turunannya akan sangat dekat dengan 0 . Ini berarti bahwa propagasi balik pada sampel ini tidak akan "mengajarkan" neuron ini untuk menghasilkan hasil yang lebih baik.

Hal-hal di atas berlaku untuk satu sampel.

Mari kita lihat gambar yang lebih besar, untuk semua sampel dalam set pelatihan. Di sini kita memiliki beberapa situasi:

  • Jika turunan adalah 0 untuk semua sampel dalam set latihan Anda DAN neuron selalu menghasilkan hasil yang salah - itu berarti neuron jenuh (bisu) dan tidak akan membaik.
  • Jika turunannya 0 untuk semua sampel dalam set latihan Anda DAN neuron selalu menghasilkan hasil yang benar - itu berarti neuron telah belajar dengan sangat baik dan sudah sepintar mungkin (catatan: kasus ini baik tetapi mungkin menunjukkan potensi overfitting, yang tidak baik)

  • Jika turunannya 0 pada beberapa sampel, non-0 pada sampel lain DAN neuron menghasilkan hasil yang beragam - ini menunjukkan bahwa neuron ini melakukan beberapa pekerjaan yang baik dan berpotensi meningkat dari pelatihan lebih lanjut (meskipun tidak harus karena tergantung pada neuron lain dan data pelatihan yang Anda memiliki)

Jadi, ketika Anda melihat plot turunannya, Anda dapat melihat seberapa banyak neuron siap untuk belajar dan menyerap pengetahuan baru, diberi input tertentu.


0

Derivatif yang Anda lihat di sini penting dalam jaringan saraf. Itulah alasan mengapa orang umumnya lebih suka sesuatu yang lain seperti unit linear yang diperbaiki .

Apakah Anda melihat penurunan turunan untuk kedua ujungnya? Bagaimana jika jaringan Anda ada di sisi paling kiri, tetapi perlu pindah ke sisi kanan? Bayangkan Anda berada di -10.0 tetapi Anda ingin 10.0. Gradien akan terlalu kecil untuk jaringan Anda untuk menyatu dengan cepat. Kami tidak ingin menunggu, kami ingin konvergensi yang lebih cepat. RLU tidak memiliki masalah ini.

Kami menyebut masalah ini " Saturasi Jaringan Saraf ".

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.