Bir sinir ağı fonksiyonel ve fonksiyonel türevini öğrenebilir mi?


11

Sinir ağlarının (NN) belirli varsayımlar altında (hem ağda hem de fonksiyonda yaklaşık olarak) hem fonksiyonlara hem de türevlerine evrensel yakınlaştırıcılar olarak kabul edilebileceğini anlıyorum. Aslında, basit ama önemsiz olmayan fonksiyonlar (örneğin polinomlar) üzerinde bir dizi test yaptım ve görünüşe göre onları ve ilk türevlerini iyi tahmin edebiliyorum (bir örnek aşağıda gösterilmiştir).

Bununla birlikte, benim için açık olmayan, yukarıdakilere yol açan teoremlerin fonksiyonellere ve fonksiyonel türevlerine uzanıp uzanmadığıdır (veya belki de genişletilebilir). Örneğin, şu işlevseli düşünün: ve fonksiyonel türev: burada tamamen ve non-trivially bağlıdır . Bir NN yukarıdaki haritalamayı ve fonksiyonel türevini öğrenebilir mi? Daha spesifik olarak, eğer alanı üzerinden ayrılırsa ve giriş olarak (ayrıklaştırılmış noktalarda) ve

F[f(x)]=abdx f(x)g(x)
δF[f(x)]δf(x)=g(x)
f(x)g(x)x[a,b]f(x)F[f(x)]çıktı olarak, bir NN bu eşlemeyi doğru öğrenebilir mi (en azından teorik olarak)? Eğer öyleyse, haritalamanın fonksiyonel türevini de öğrenebilir mi?

Birkaç test yaptım ve bir NN gerçekten de haritasını bir dereceye kadar öğrenebilir . Ancak, bu eşlemenin doğruluğu iyi olsa da, büyük değil; ve sıkıntı, hesaplanan fonksiyonel türevin tam bir çöp olmasıdır (her ikisi de eğitim, vb. ile ilgili olabilir). Aşağıda bir örnek gösterilmiştir.F[f(x)]

Bir NN bir fonksiyonel ve fonksiyonel türevini öğrenmek için uygun değilse, başka bir makine öğrenme yöntemi var mı?

Örnekler:

Bir NN işlevi öğrenmek için eğitildi: (1) aşağıdaki bir işlev ve türev yaklaşan bir örneğidir aralığında [-3,2] üzerinde: ki makul bir mesafede yaklaşma ortaya çıkacaktır: , NN yaklaşım, beklendiği gibi, Not minimum eğitim sırasında bulunan daha vb gibi, ve ilk türevi, eğitim noktaları NN mimarisi sayısı ile geliştirilmesif(x)=x3+x+0.5d f ( x ) / d x f ( x )fonksiyondf(x)/dxfonksiyon türevif(x)

(2) Aşağıdakiler bir işlevselliğe ve onun fonksiyonel türevine yaklaşmak için bir örnektir: Bir NN, işlevini öğrenmek için eğitildi . Eğitim verileri, formunun fonksiyonları kullanılarak elde edildi , burada ve rastgele üretildi. Aşağıdaki grafik, NN'nin gerçekten de oldukça iyi ulaşabildiğini göstermektedir : Bununla birlikte, hesaplanan fonksiyonel türevler tam çöptür; bir örnek (belirli bir ) aşağıda gösterilmiştir: İlginç bir not olarak, NN'ninF[f(x)]=12dx f(x)2f(x)=birxbbirbF[f(x)]f ( x ) F [ f ( x ) ]fonksiyonelf(x)fonksiyonel türevF[f(x)] (örneğin (1) 'de olduğu gibi) eğitim noktası sayısı vb.


İlginç soru. Fonksiyonel F'nin f girişini nasıl temsil ediyorsunuz? F'nin bazı f-değerleri vektörüne nicelendirildiğini varsayıyorum (1000 numunelik bir vektör diyelim). Eğer öyleyse, üçüncü grafiğinizin x ekseni ne anlama geliyor? 4. parselinizin x ekseninden farklı görünüyor. Ağ F [f] ve dF / df öğrenmek için eğitiliyor mu veya ağ eğitildikten sonra dF / df hesaplıyor musunuz?
Christian Bueno

Yanıtlar:


3

Bu iyi bir soru. Bence teorik matematiksel kanıt içeriyor. Bir süredir (yaklaşık bir yıl) Derin Öğrenme (temel olarak sinir ağı) ile çalışıyorum ve okuduğum tüm makalelerden aldığım bilgilere dayanarak, henüz bunun hakkında bir kanıt görmedim. Ancak deneysel kanıt açısından bence geri bildirimde bulunabilirim.

Aşağıda bu örneği ele alalım:

resim açıklamasını buraya girin

Bu örnekte, çok katmanlı sinir ağı üzerinden, hem f (x) hem de F [f (x)] 'i geri yayılma yoluyla öğrenebileceğine inanıyorum. Bununla birlikte, bu daha karmaşık işlevler veya evrendeki tüm işlevler için geçerli olsun, daha fazla kanıt gerektirir. Ancak, 1000 nesneyi sınıflandırmak için Imagenet yarışması örneğini ele aldığımızda , genellikle çok derin bir sinir ağı kullanılır; en iyi model ~% 5'e kadar inanılmaz bir hata oranı elde edebilir. Böyle derin NN, 10'dan fazla doğrusal olmayan katman içerir ve bu, karmaşık ilişkinin derin ağ yoluyla temsil edilebileceğine dair deneysel bir kanıttır [1 gizli katmanı olan bir NN'nin verileri doğrusal olmayan bir şekilde ayırabileceğini bildiğimiz gerçeğine dayanarak].

Ancak TÜM türevlerin öğrenilip öğrenilemeyeceği daha fazla araştırma gerektiriyordu.

İşlevi ve türevini tamamen öğrenebilecek makine öğrenme yöntemleri olup olmadığından emin değilim. Bunun için üzgünüm.


Cevabınız için teşekkür ederim. Aslında ilk başta bir sinir ağının işlevsel bir fonksiyona yaklaşabileceği konusunda biraz şaşırdım. Gerçi bunu kabul ederek, o zaman sezgisel olarak fonksiyonel türevi hakkındaki bilgilerin çözümde (işlevlerde olduğu gibi), özellikle basit işlevler ve işlevler için (örneğin örneğinizde) yer alması gerektiği anlaşılmaktadır. ancak durum böyle değildir. Örneğinizin ışığında, orijinal gönderime bazı örnekler ekledim.
Michael

Harika, sinir ağınızın ayarı nedir? Katman sayısı, gizli birimler, etkinleştirme işlevleri, vb. Gibi
RockTheStar

Çeşitli ayarları denedim: 1-3 gizli katman, 5 ila 100 gizli birim (katman başına), çeşitli giriş sayısı (fonksiyonel, bu sonsuza kadar giden sınır olarak tanımlanırken, dört nokta kadar denedim) , sigmoid ve tanh (normal, LeCun tarafından önerilenin yanı sıra) aktivasyon fonksiyonları ve çeşitli eğitim yöntemleri (backpropagation, QRPROP, partikül sürüsü optimizasyonu ve diğerleri). Hem şirket içi hem de bazı tanınmış yazılımları denedim. Bazı şeyleri değiştirirken işlevselliğe yaklaşma konusunda iyileşme sağlayabilirken, fonksiyonel türevde yapamam.
Michael

Güzel. Hangi yazılımı kullandınız? Ağ ayarınızı optimize etmek için çapraz doğrulama yaptınız mı? İşte düşüncelerimden bazıları: (1) 3 veya daha fazla gizli katman beklenebilir, çünkü sorun oldukça doğrusal değildir, (2) gizli birimler için eksik ayar kullanmaya çalışın, yani, giriş-100-50-20 -çıkış, giriş-20-50-100-çıkış yerine, (3) sigmoid veya tanh yerine ReLU kullanın; bir araştırma 2010'larda birkaç makale yayınladı ve ReLU'nun daha iyi sonuca yol açabileceğini kanıtladı, (4) kilo kaybı, öğrenme oranı gibi parametreler önemlidir, uygun şekilde ayarladığınızdan emin olun, (5) bir araç olarak
kahve

Şirket içi yazılımların yanı sıra, ++, Encog ve NeuroSolutions istatistiklerini kullandım (ikincisi sadece ücretsiz bir deneme idi ve artık kullanmıyorum). Bir şeyleri optimize etmek için henüz çapraz doğrulamayı denemedim, ama yapacağım; Diğer önerilerinizi de deneyeceğim. Düşünceleriniz için teşekkür ederim.
Michael

3

Sinir ağları , gizli katmanın boyutu sonsuz olduğunda Öklid vektör uzayları arasındaki sürekli eşleşmelere yaklaşık olarak yaklaşabilir . Bununla birlikte, derinlik eklemek genişlikten daha etkilidir. İşlevsel, yalnızca aralığın yani olduğu bir haritadır . Yani evet, nöral ağlar, girdi sonlu boyutlu bir vektör uzayı olduğu ve türevinin ters mod farklılaşması, yani geri çoğaltma ile kolayca bulunabildiği sürece fonksiyonları öğrenebilir. Ayrıca, girdinin nicelenmesi, ağı sürekli işlev girişlerine genişletmenin iyi bir yoludur.R , N = 1f:R,MR,N-R,N-=1


0

F[f(x)]=birbf(x)g(x)dx
g(x)fben(x), ben=0,...,MF[fben(x)]
F[f(x)]=Δx[f0g02+f1g1+...+fN--1gN--1+fN-gN-2]
bu burada
F[f(x)]Δx=y=f0g02+f1g1+...+fN--1gN--1+fN-gN-2
f0=bir, f1=f(x1), ..., fN--1=f(xN--1), fN-=b,
bir<x1<...<xN--1<b,  Δx=xj+1-xj

Mfben(x), ben=1,...,Mben

F[fben(x)]Δx=yben=fben0g02+fben1g1+...+fben,N--1gN--1+fbenN-gN-2

g0,...,gN-

X=[f00/2f01...f0,N--1f0N-/2f10/2f11...f1,N--1f1N-/2...............fM0/2fM1...fM,N--1fMN-/2]
y=[y0,...,yM]

g(x)

import numpy as np 

def Gaussian(x, mu, sigma):
    return np.exp(-0.5*((x - mu)/sigma)**2)

x[bir,b]

x = np.arange(-1.0, 1.01, 0.01)
dx = x[1] - x[0]
g = Gaussian(x, 0.25, 0.25)

Eğitim fonksiyonumuz olarak farklı frekanslarda sinüs ve kosinüs alalım. Hedef vektörün hesaplanması:

from math import cos, sin, exp
from scipy.integrate import quad

freq = np.arange(0.25, 15.25, 0.25)

y = []
for k in freq:
    y.append(quad(lambda x: cos(k*x)*exp(-0.5*((x-0.25)/0.25)**2), -1, 1)[0])
    y.append(quad(lambda x: sin(k*x)*exp(-0.5*((x-0.25)/0.25)**2), -1, 1)[0])
y = np.array(y)/dx

Şimdi, regresör matrisi:

X = np.zeros((y.shape[0], x.shape[0]), dtype=float)
print('X',X.shape)
for i in range(len(freq)):
    X[2*i,:] = np.cos(freq[i]*x)
    X[2*i+1,:] = np.sin(freq[i]*x)

X[:,0] = X[:,0]/2
X[:,-1] = X[:,-1]/2

Doğrusal regresyon:

from sklearn.linear_model import LinearRegression
reg = LinearRegression().fit(X, y)
ghat = reg.coef_

import matplotlib.pyplot as plt 

plt.scatter(x, g, s=1, marker="s", label='original g(x)')
plt.scatter(x, ghat, s=1, marker="s", label='learned $\hat{g}$(x)')
plt.legend()
plt.grid()
plt.show()

resim açıklamasını buraya giring(x)

from scipy.signal import savgol_filter
ghat_sg = savgol_filter(ghat, 31, 3) # window size, polynomial order

plt.scatter(x, g, s=1, marker="s", label='original g(x)')
plt.scatter(x, ghat, s=1, marker="s", label='learned $\hat{g}$(x)')
plt.plot(x, ghat_sg, color="red", label='Savitzky-Golay $\hat{g}$(x)')
plt.legend()
plt.grid()
plt.show()

resim açıklamasını buraya girin

F[f(x)]f(x)

F[f(x)]=birbL(f(x))dx
f0,f1...,fN-x
F[f(x)]=birbL(f(x),f'(x))dx
f'f0,f1...,fN-Lf0,f1...,fN-, muhtemelen doğrusal olmayan bir yöntemle, örneğin sinir ağları veya SVM ile öğrenilmeye çalışılabilir, ancak muhtemelen doğrusal durumdaki kadar kolay olmayacaktır.

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.