我正在通过学习神经网络来训练自己。有一个函数我无法让我的神经网络学习:f(x) = max(x_1, x_2)
。这似乎是一个非常简单的函数,有 2 个输入和 1 个输入,但是一个 3 层神经网络训练了超过 1000 个样本和 2000 个时期,却完全错误。我正在使用 deeplearning4j
。
对于神经网络来说,max 函数很难学习是什么原因,还是我只是调错了它?
最佳答案
只是想指出:如果你使用 relu
而不是 tanh
实际上有一个精确的解决方案,我猜你是否会将网络缩小到这个完全相同的大小(1 个隐藏层和 3 个节点),你总是会得到这些权重(节点的模块排列和权重的缩放(第一层按 gamma 缩放,第二层按 1/gamma 缩放):
max(a,b) = ((1, 1, -1)) * relu( ((1,-1), (0,1), (0,-1)) * ((a,b)) )
其中 *
是矩阵乘法。
这个等式将以下人类可读的版本翻译成神经网络语言:
max(a,b) = relu(a-b) + b = relu(a-b) + relu(b) - relu(-b)
我还没有实际测试过它,我的观点是,从理论上讲,网络应该很容易学习这个功能。
编辑: 我刚刚对此进行了测试,结果如我所料:
[[-1.0714666e+00 -7.9943770e-01 9.0549403e-01]
[ 1.0714666e+00 -7.7552663e-08 2.6146751e-08]]
和
[[ 0.93330014]
[-1.250879 ]
[ 1.1043695 ]]
那里对应第一层和第二层。转置第二个并与第一组权重相乘,最终得到一个标准化版本,可以很容易地与我的理论结果进行比较:
[[-9.9999988e-01 9.9999988e-01 1.0000000e+00]
[ 9.9999988e-01 9.7009000e-08 2.8875675e-08]]
关于neural-network - 通过神经网络回归最大函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35623995/