¿Puede una red neuronal aprender una función funcional y su derivada funcional?

10

Entiendo que las redes neuronales (NN) pueden considerarse aproximadores universales a ambas funciones y sus derivadas, bajo ciertos supuestos (tanto en la red como en la función para aproximar). De hecho, he realizado una serie de pruebas en funciones simples pero no triviales (p. Ej., Polinomios), y parece que realmente puedo aproximarlas bien y sus primeras derivadas (a continuación se muestra un ejemplo).

Sin embargo, lo que no está claro para mí es si los teoremas que conducen a lo anterior se extienden (o tal vez podrían extenderse) a los funcionales y sus derivados funcionales. Considere, por ejemplo, el funcional: con la derivada funcional: donde depende completamente, y no trivialmente, de . ¿Puede un NN aprender el mapeo anterior y su derivada funcional? Más específicamente, si uno discretiza el dominio sobre y proporciona (en los puntos discretizados) como entrada y

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)]como salida, ¿puede un NN aprender esta asignación correctamente (al menos teóricamente)? Si es así, ¿puede aprender también la derivada funcional del mapeo?

He realizado varias pruebas, y parece que un NN puede aprender el mapeo , hasta cierto punto. Sin embargo, aunque la precisión de este mapeo está bien, no es excelente; y preocupante es que la derivada funcional calculada es basura completa (aunque ambas podrían estar relacionadas con problemas de capacitación, etc.). Un ejemplo se muestra a continuación.F[f(x)]

Si un NN no es adecuado para aprender una función y su derivada funcional, ¿existe otro método de aprendizaje automático que lo sea?

Ejemplos:

(1) El siguiente es un ejemplo de aproximación de una función y su derivada: un NN fue entrenado para aprender la función sobre el rango [-3,2]: del cual un se obtiene una aproximación a tenga en cuenta que, como se esperaba, la aproximación NN a y su primera derivada mejoran con el número de puntos de entrenamiento, la arquitectura NN, a medida que se encuentran mejores mínimos durante el entrenamiento, etc.f(x)=x3+x+0.5d f ( x ) / d x f ( x )funcióndf(x)/dxfunción derivadaf(x)

(2) El siguiente es un ejemplo de aproximación de un derivado funcional y funcional: A NN fue entrenado para aprender el funcional . Los datos de entrenamiento se obtuvieron utilizando funciones de la forma , donde y se generaron aleatoriamente. La siguiente gráfica ilustra que el NN es capaz de aproximarse bastante bien a : sin embargo, las derivadas funcionales calculadas son basura completa; a continuación se muestra un ejemplo (para una específica : Como nota interesante, la aproximación NN aF[f(x)]=12dx f(x)2f(x)=axbabF[f(x)]f ( x ) F [ f ( x ) ]funcionalf(x)derivada funcionalF[f(x)] parece mejorar con el número de puntos de entrenamiento, etc. (como en el ejemplo (1)), pero la derivada funcional no lo hace.

Miguel
fuente
Interesante pregunta. ¿Cómo representa la entrada f de la F funcional? Supongo que f se está cuantizando en algún vector de valores f (digamos un vector de 1000 muestras). Si es así, ¿qué significa el eje x de su tercer gráfico? Parece ser diferente al eje x de su 4º gráfico. ¿La red está siendo entrenada para aprender F [f] y dF / df, o estás calculando dF / df una vez que la red está entrenada?
Christian Bueno

Respuestas:

3

Esta es una buena pregunta. Creo que implica una prueba matemática teórica. He estado trabajando con Deep Learning (básicamente red neuronal) durante un tiempo (aproximadamente un año), y según mi conocimiento de todos los documentos que leí, todavía no he visto pruebas de esto. Sin embargo, en términos de pruebas experimentales, creo que puedo proporcionar una retroalimentación.

Consideremos este ejemplo a continuación:

ingrese la descripción de la imagen aquí

En este ejemplo, creo que a través de la red neuronal multicapa, debería poder aprender tanto f (x) como también F [f (x)] a través de la propagación inversa. Sin embargo, si esto se aplica a funciones más complicadas o a todas las funciones del universo, requiere más pruebas. Sin embargo, cuando consideramos el ejemplo de la competencia Imagenet --- para clasificar 1000 objetos, a menudo se usa una red neuronal muy profunda; El mejor modelo puede lograr una increíble tasa de error de ~ 5%. Tal NN profundo contiene más de 10 capas no lineales y esta es una prueba experimental de que una relación complicada puede representarse a través de una red profunda [basado en el hecho de que sabemos que un NN con 1 capa oculta puede separar datos de forma no lineal].

Pero si TODOS los derivados se pueden aprender requiere más investigación.

No estoy seguro de si existen métodos de aprendizaje automático que puedan aprender la función y su derivada por completo. Lo siento por eso.

RockTheStar
fuente
Gracias por su respuesta. Al principio me sorprendió un poco que una red neuronal pudiera aproximarse a una funcional. Sin embargo, aceptando el hecho de que podría hacerlo, entonces parece intuitivamente que la información sobre su derivada funcional debe estar contenida en la solución (como es el caso con las funciones), especialmente para funciones simples y funcionales (como en su ejemplo) En la práctica, Sin embargo, éste no es el caso. A la luz de su ejemplo, agregué algunos ejemplos a mi publicación original.
Michael
Genial, ¿cuál es la configuración de su red neuronal? Como el número de capas, unidades ocultas, funciones de activación, etc.
RockTheStar
He intentado varias configuraciones: 1-3 capas ocultas, 5 a 100 unidades ocultas (por capa), varios números de entrada (mientras que el funcional se define como el límite de que esto va al infinito, he intentado tan solo cuatro puntos) , funciones de activación sigmoidea y tanh (normal, así como la recomendada por LeCun), y varios métodos de entrenamiento (retropropagación, QRPROP, optimización de enjambre de partículas y otros). He probado tanto el software interno como el conocido. Si bien puedo obtener una mejora en la aproximación de lo funcional a medida que cambio las cosas, no puedo hacerlo en la derivada funcional.
Michael
Frio. ¿Qué software usaste? ¿Ha realizado una validación cruzada para optimizar la configuración de su red? Estos son algunos de mis pensamientos: (1) esperaría que se requieran 3 o más capas ocultas porque el problema es altamente no lineal, (2) trate de usar una configuración incompleta para unidades ocultas, es decir, input-100-50-20 -output, en lugar de input-20-50-100-output, (3) use ReLU en lugar de sigmoid o tanh; una investigación publicó algunos artículos en la década de 2010 y demostró que ReLU puede conducir a mejores resultados, (4) parámetros como la pérdida de peso, la tasa de aprendizaje son importantes, asegúrese de ajustarlos adecuadamente, (5) caffe como herramienta
RockTheStar
Además del software interno, he usado stats ++, Encog y NeuroSolutions (este último era solo una prueba gratuita y ya no lo uso). Todavía no he intentado la validación cruzada para optimizar las cosas, pero lo haré; También intentaré tus otras sugerencias. Gracias por tus pensamientos.
Michael
3

Las redes neuronales pueden aproximarse a mapeos continuos entre espacios vectoriales euclidianos cuando la capa oculta se vuelve de tamaño infinito. Dicho esto, es más eficiente agregar profundidad que ancho. Un funcional es simplemente un mapa donde el rango es es decir, . Entonces, sí, las redes neuronales pueden aprender funciones siempre que la entrada sea un espacio vectorial dimensional finito y la derivada se encuentre fácilmente por diferenciación en modo inverso, también conocida como propagación hacia atrás. Además, cuantificar la entrada es una buena forma de extender la red a entradas de función continua.R N = 1f:RMRNRN=1

Daniel Worrall
fuente
0

F[f(x)]=abf(x)g(x)dx
g(x)fi(x), i=0,,MF[fi(x)]
F[f(x)]=Δx[f0g02+f1g1+...+fN1gN1+fNgN2]
F[f(x)]Δx=y=f0g02+f1g1+...+fN1gN1+fNgN2
f0=a, f1=f(x1), ..., fN1=f(xN1), fN=b,
a<x1<...<xN1<b,  Δx=xj+1xj

Mfi(x), i=1,,Mi

F[Fyo(X)]ΔX=yyo=Fyo0 0sol0 02+Fyo1sol1+...+Fyo,norte-1solnorte-1+Fyonortesolnorte2

sol0 0,...,solnorte

X=[F00/ /2F01...F0 0,norte-1F0 0norte/ /2F10/ /2F11...F1,norte-1F1norte/ /2...............FMETRO0 0/ /2FMETRO1...FMETRO,norte-1FMETROnorte/ /2]
y=[y0 0,...,yMETRO]

sol(X)

import numpy as np 

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

X[una,si]

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

Tomemos senos y cosenos con diferentes frecuencias como nuestras funciones de entrenamiento. Cálculo del vector objetivo:

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

Ahora, la matriz regresiva:

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

Regresión lineal:

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

ingrese la descripción de la imagen aquísol(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()

ingrese la descripción de la imagen aquí

F[F(X)]F(X)

F[F(X)]=unasiL(F(X))reX
F0 0,F1...,FnorteX
F[F(X)]=unasiL(F(X),F(X))reX
FF0 0,F1...,FnorteLF0 0,F1...,Fnorte, uno puede intentar aprenderlo con un método no lineal, por ejemplo, redes neuronales o SVM, aunque probablemente no será tan fácil como en el caso lineal.

Vladislav Gladkikh
fuente