神经网络可以学习功能及其功能派生吗?


11

我了解到,在某些假设下(在网络和要近似的函数上),神经网络(NN)可以视为函数及其派生类的通用逼近器。实际上,我已经对简单但非平凡的函数(例如多项式)进行了许多测试,似乎我确实可以很好地近似它们和它们的一阶导数(下面显示一个示例)。

然而,我不清楚的是,导致上述结论的定理是否扩展到(或可能扩展到)泛函及其函数导数。例如,考虑以下函数: ,其中函数导数: 其中,完全而不是完全取决于。NN可以学习上面的映射及其功能派生吗?更具体地说,如果一个离散化的域比和提供(在离散点)作为输入和

F[FX]=一个bdX FXGX
δF[FX]δFX=GX
FXGXX[一个b]FXF[FX]作为输出,NN能否正确(至少在理论上)正确学习此映射?如果是这样,它还能学习映射的功能导数吗?

我已经做过许多测试,似乎NN确实可以在某种程度上学习映射。但是,虽然此映射的准确性尚可,但并不理想。麻烦的是计算出的函数导数是完全垃圾(尽管这两个都可能与训练等有关)。一个例子如下所示。F[FX]

如果NN不适合学习某个函数及其函数导数,那么还有另一种机器学习方法吗?

例子:

(1)以下是近似函数及其衍生物的一个例子:一个NN被训练学习函数在范围[-3,2]: 从该合理得到与近似值: 请注意,正如预期的那样,对的NN近似值及其一阶导数随训练点数,NN体系结构的改善而提高,因为在训练过程中发现了更好的最小值等。FX=X3+X+0.5d f x / d x f x 功能dFX/dX函数导数FX

(2)以下是近似的函数及其函数导数的示例:训练了NN以学习函数。使用形式为函数获得训练数据,其中和是随机生成的。下图说明了NN确实能够很好 地近似 。下面显示了一个示例(针对特定的): 作为一个有趣的注释,的NN近似F[FX]=1个2dX FX2FX=一个Xb一个bF[FX]˚F X ˚F [ ˚F X ]功能性FX功能导数F[FX] 似乎随着训练点数等的增加而提高(如示例(1)所示),而功能导数则没有。


有趣的问题。您如何表示函数F的输入f?我假设f被量化为一些f值向量(例如1000个样本的向量)。如果是这样,您的第三幅图的x轴是什么意思?它似乎与第4个图的x轴不同。是正在训练网络学习F [f]和dF / df,还是在训练网络后计算dF / df?
Christian Bueno

Answers:


3

这是一个很好的问题。我认为它涉及理论上的数学证明。我从事深度学习(基本上是神经网络)已有一段时间了(大约一年),根据我从阅读的所有论文中获得的知识,我还没有看到关于这一点的证据。但是,就实验证明而言,我认为我可以提供反馈。

让我们考虑下面的示例:

在此处输入图片说明

在这个例子中,我相信通过多层神经网络,它应该能够通过反向传播学习f(x)和F [f(x)]。但是,无论是将其应用于更复杂的函数,还是应用于宇宙中的所有函数,都需要更多的证明。但是,当我们以Imagenet竞争为例-要对1000个对象进行分类时,通常会使用非常深的神经网络。最好的模型可以实现令人难以置信的错误率,约为5%。这种深层NN包含10个以上的非线性层,这是一个实验证明,可以通过深层网络表示复杂的关系[基于我们知道具有1个隐藏层的NN可以非线性分离数据的事实]。

但是,是否可以学习所有派生还需要更多的研究。

我不确定是否有任何机器学习方法可以完全学习该功能及其派生类。对于那个很抱歉。


谢谢您的回答。一开始我真的感到有些惊讶,因为神经网络完全可以近似一个功能。尽管接受了它可能的事实,然后它确实在直觉上似乎将有关其函数导数的信息包含在解决方案中(与函数一样),尤其是对于简单函数和函数(如您的示例),在实践中,然而,这种情况并非如此。根据您的示例,我在原始帖子中添加了一些示例。
迈克尔

太酷了,您的神经网络设置是什么?例如层数,隐藏单元,激活功能等
。– RockTheStar

我尝试了各种设置:1-3个隐藏层,5到100个隐藏单元(每层),各种输入(虽然功能被定义为达到无穷大的极限,但我尝试了少至4点) ,S形和tanh(正常的,以及LeCun推荐的)激活功能,以及各种训练方法(反向传播,QRPROP,粒子群优化等)。我已经尝试过内部和一些知名软件。虽然我在更改事物时可以在逼近功能上有所改进,但不能在功能派生中使用。
迈克尔

凉。您使用什么软件?您是否进行了交叉验证以优化网络设置?这是我的一些想法:(1)我希望可能需要3个或更多隐藏层,因为问题是高度非线性的;(2)尝试对隐藏单元使用不完整的设置,即input-100-50-20 -输出,而不是输入20-50-100-输出,(3)使用ReLU代替S型或tanh;一项研究在2010年代发表了几篇论文,并证明ReLU可以带来更好的结果,(4)诸如体重下降,学习率之类的参数很重要,请确保对其进行适当的调整,(5)caffe作为工具
RockTheStar

除了内部软件外,我还使用了stats ++,Encog和NeuroSolutions(后者只是免费试用版,不再使用了)。我还没有尝试过交叉验证来优化功能,但是我会的。我也会尝试您的其他建议。谢谢你的想法。
迈克尔


0

F[f(x)]=一个bFXGXdX
GXF一世X 一世=0中号F[F一世X]
F[FX]=ΔX[F0G02+F1个G1个++Fñ-1个Gñ-1个+FñGñ2]
F[FX]ΔX=ÿ=F0G02+F1个G1个++Fñ-1个Gñ-1个+FñGñ2
F0=一个 F1个=FX1个  Fñ-1个=FXñ-1个 Fñ=b
一个<X1个<<Xñ-1个<b  ΔX=XĴ+1个-XĴ

中号F一世X 一世=1个中号一世

F[F一世X]ΔX=ÿ一世=F一世0G02+F一世1个G1个++F一世ñ-1个Gñ-1个+F一世ñGñ2

G0Gñ

X=[F00/2F01F0ñ-1个F0ñ/2F10/2F11F1个ñ-1个F1个ñ/2F中号0/2F中号1个F中号ñ-1个F中号ñ/2]
ÿ=[ÿ0ÿ中号]

GX

import numpy as np 

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

X[一个b]

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

让我们以不同频率的正弦和余弦作为我们的训练功能。计算目标向量:

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

现在,回归矩阵:

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

线性回归:

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

在此处输入图片说明GX

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

在此处输入图片说明

F[FX]FX

F[FX]=一个b大号FXdX
F0F1个FñX
F[FX]=一个b大号FXFXdX
FF0F1个Fñ大号F0F1个Fñ,尽管它可能不像在线性情况下那样容易,但是可以尝试使用非线性方法(例如神经网络或SVM)来学习它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.