Uma rede neural pode aprender uma derivada funcional e sua funcional?

11

Entendo que as redes neurais (NNs) podem ser consideradas aproximadores universais de ambas as funções e suas derivadas, sob certas premissas (tanto na rede quanto na função de aproximação). De fato, eu fiz vários testes em funções simples, mas não triviais (por exemplo, polinômios), e parece que eu posso realmente aproximar deles e de suas primeiras derivadas (um exemplo é mostrado abaixo).

O que não está claro para mim, no entanto, é se os teoremas que levam ao descrito acima se estendem (ou talvez possam ser estendidos) aos funcionais e suas derivadas funcionais. Considere, por exemplo, o funcional: com a derivada funcional: que f (x) depende inteiramente e não trivialmente de g (x) . Um NN pode aprender o mapeamento acima e sua derivada funcional? Mais especificamente, se alguém discretiza o domínio x sobre [a, b] e fornece f (x) (nos pontos discretizados) como entrada e F [f (x)]

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 saída, um NN pode aprender esse mapeamento corretamente (pelo menos teoricamente)? Se sim, ele também pode aprender a derivada funcional do mapeamento?

Eu fiz vários testes e parece que um NN pode realmente aprender o mapeamento F[f(x)] , até certo ponto. No entanto, embora a precisão desse mapeamento seja boa, não é ótima; e preocupante é que a derivada funcional computada é um lixo completo (embora ambos possam estar relacionados a problemas com o treinamento etc.). Um exemplo é mostrado abaixo.

Se um NN não é adequado para aprender um funcional e sua derivada funcional, existe outro método de aprendizado de máquina?

Exemplos:

(1) A seguir, é apresentado um exemplo de aproximação de uma função e sua derivada: Um NN foi treinado para aprender a função no intervalo [-3,2]: a partir do qual um valor razoável é obtida uma aproximação de : Observe que, como esperado, a aproximação NN de e sua primeira derivada melhoram com o número de pontos de treinamento, arquitetura NN, à medida que melhores mínimos são encontrados durante o treinamento, etc.f(x)=x3+x+0.5funçãodf(x)/dxf ( x )função derivadaf(x)

(2) A seguir, é apresentado um exemplo de aproximação de uma funcional e sua derivada funcional: Um NN foi treinado para aprender a funcional . Dados de treino foi obtida utilizando funções da forma , onde e foram gerados aleatoriamente. O gráfico a seguir ilustra que o NN é realmente capaz de aproximar muito bem: derivadas funcionais calculadas, no entanto, são lixo completo; um exemplo (para um ) é mostrado abaixo: Como uma observação interessante, a aproximação NN deF[f(x)]=12dx f(x)2f(x)=axbabF[f(x)]f ( x ) F [ f ( x ) ]funcionalf(x)derivado funcionalF[f(x)] parece melhorar com o número de pontos de treinamento etc. (como no exemplo (1)), mas a derivada funcional não.

Michael
fonte
Pergunta interessante. Como você está representando a entrada f do F funcional? Suponho que f esteja sendo quantificado para algum vetor de valores f (digamos, um vetor de 1000 amostras). Nesse caso, o que significa o eixo x do seu terceiro gráfico? Parece ser diferente do eixo x do seu quarto gráfico. A rede está sendo treinada para aprender F [f] e dF / df, ou você está computando dF / df depois que a rede é treinada?
Christian Bueno

Respostas:

3

Essa é uma boa pergunta. Eu acho que isso envolve prova matemática teórica. Trabalho com o Deep Learning (basicamente rede neural) há um tempo (cerca de um ano) e, com base no meu conhecimento de todos os artigos que li, ainda não vi provas disso. No entanto, em termos de prova experimental, acho que posso fornecer um feedback.

Vamos considerar este exemplo abaixo:

insira a descrição da imagem aqui

Neste exemplo, acredito que através da rede neural multicamada, ele deve ser capaz de aprender f (x) e também F [f (x)] via propagação traseira. No entanto, se isso se aplica a funções mais complicadas ou a todas as funções do universo, exige mais provas. No entanto, quando consideramos o exemplo da competição Imagenet - para classificar 1000 objetos, uma rede neural muito profunda é frequentemente usada; o melhor modelo pode atingir uma taxa de erro incrível de ~ 5%. Esse NN profundo contém mais de 10 camadas não lineares e esta é uma prova experimental de que um relacionamento complicado pode ser representado através de uma rede profunda [com base no fato de que sabemos que um NN com 1 camada oculta pode separar os dados de maneira não linear].

Mas se TODOS os derivados podem ser aprendidos exigiu mais pesquisa.

Não tenho certeza se existem métodos de aprendizado de máquina capazes de aprender completamente a função e sua derivada. Me desculpe por isso.

RockTheStar
fonte
Obrigado pela sua resposta. Na verdade, fiquei um pouco surpreso a princípio que uma rede neural pudesse se aproximar de alguma funcionalidade. Aceitando o fato de que poderia, parece intuitivamente que as informações sobre sua derivada funcional devem estar contidas na solução (como é o caso das funções), especialmente para funções e funcionais simples (como no exemplo). Na prática, No entanto, este não é o caso. À luz do seu exemplo, adicionei alguns exemplos ao meu post original.
Michael
Legal, qual é a configuração da sua rede neural? Tais como o número de camadas, as unidades escondidos, funções de activação, etc
RockTheStar
Eu tentei várias configurações: 1-3 camadas ocultas, 5 a 100 unidades ocultas (por camada), vários números de entrada (enquanto o funcional é definido como o limite que leva ao infinito, tentei apenas quatro pontos) , funções de ativação sigmoide e tanh (normais e recomendadas pela LeCun) e vários métodos de treinamento (propagação posterior, QRPROP, otimização de enxame de partículas e outros). Eu tentei tanto em casa como em alguns softwares conhecidos. Embora eu possa obter melhorias na aproximação do funcional à medida que mudo as coisas, não posso na derivada funcional.
Michael
Legal. Qual software você usou? Você fez a validação cruzada para otimizar sua configuração de rede? Aqui estão alguns dos meus pensamentos: (1) eu esperaria que 3 ou mais camadas ocultas fossem necessárias, porque o problema é altamente não linear, (2) tente usar configurações incompletas para unidades ocultas, ou seja, input-100-50-20 -output, em vez de input-20-50-100-output, (3) use ReLU em vez de sigmoid ou tanh; uma pesquisa publicou poucos artigos na década de 2010 e comprovou que a ReLU pode levar a melhores resultados, (4) parâmetros como queda de peso, taxa de aprendizado são importantes, certifique-se de ajustá-los adequadamente, (5) caffe como uma ferramenta
RockTheStar
Além do software interno, usei o stats ++, o Encog e o NeuroSolutions (o último foi apenas um teste gratuito e não o uso mais). Ainda não tentei a validação cruzada para otimizar as coisas, mas tentarei; Também tentarei suas outras sugestões. Obrigado por seus pensamentos.
Michael
3

As redes neurais podem aproximar mapeamentos contínuos entre os espaços vetoriais euclidianos quando a camada oculta se torna infinita em tamanho. Dito isto, é mais eficiente adicionar profundidade do que largura. Um funcional é simplesmente um mapa onde o intervalo é isto é, . Portanto, sim, as redes neurais podem aprender funcionais desde que a entrada seja um espaço vetorial dimensional finito e a derivada seja facilmente encontrada pela diferenciação no modo reverso, também conhecida como retropropagação. Além disso, quantizar a entrada é realmente uma boa maneira de estender a rede para entradas de função contínuas.R N = 1f:RMRNRN=1

Daniel Worrall
fonte
0

Se o funcional está na forma então pode ser aprendido com uma regressão linear, considerando as funções de treinamento suficientes e valores alvo . Isso é feito aproximando a integral por uma regra trapezoidal: que é que

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

Suponha que temos funções de treinamento . Para cada , temos Mfi(x), i=1,,Mi

F[fi(x)]Δx=yi=fi0g02+fi1g1+...+fi,N1gN1+fiNgN2

Os valores são encontrados como solução de um problema de regressão linear com uma matriz de variáveis ​​explicativas e o alvo vetor .g0,,gN

X=[f00/2f01f0,N1f0N/2f10/2f11f1,N1f1N/2fM0/2fM1fM,N1fMN/2]
y=[y0,,yM]

Vamos testá-lo para um exemplo simples. Suponha que é um gaussiano.g(x)

import numpy as np 

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

Discretize o domíniox[a,b]

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

Vamos usar seno e cosseno com diferentes frequências, conforme nosso treinamento funciona. Calculando o vetor de destino:

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

Agora, a matriz regressora:

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

Regressão linear:

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

insira a descrição da imagem aqui A função gaussiana é aprendida com sucesso, embora os dados estejam um pouco espalhados pela função verdadeira. A propagação é maior onde é próximo de zero. Essa propagação pode ser suavizada com um filtro Savitzky-Golayg(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()

insira a descrição da imagem aqui

Em geral, não depende linearmente de , que é Ainda pode ser escrito como uma função de após a discretização de que também é verdadeiro para os funcionais da forma porque pode ser aproximado por diferenças finitas de . Como é uma função não linear deF[f(x)]f(x)

F[f(x)]=abL(f(x))dx
f0,f1,fNx
F[f(x)]=abL(f(x),f(x))dx
ff0,f1,fNLf0,f1,fN, pode-se tentar aprendê-lo com um método não linear, por exemplo, redes neurais ou SVM, embora provavelmente não seja tão fácil como no caso linear.

Vladislav Gladkikh
fonte