R h2o深度学习权重与归一化

R h2o深度学习权重与归一化,r,neural-network,deep-learning,h2o,R,Neural Network,Deep Learning,H2o,我通过R界面探索h2o,得到一个奇怪的重量矩阵。我的任务很简单:给定x,y计算x+y。 我有214行3列。第一列(x)从(-1000,1000)均匀绘制,第二列(y)从(-100100)均匀绘制。我只是想把它们结合起来,这样我就有了一个隐藏层和一个神经元。 这是我的代码: library(h2o) localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE) train <- h2o.importFile(path

我通过R界面探索h2o,得到一个奇怪的重量矩阵。我的任务很简单:给定x,y计算x+y。
我有214行3列。第一列(x)从(-1000,1000)均匀绘制,第二列(y)从(-100100)均匀绘制。我只是想把它们结合起来,这样我就有了一个隐藏层和一个神经元。 这是我的代码:

library(h2o)
localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE)
train <- h2o.importFile(path = "/home/martin/projects/R NN Addition/addition.csv")
model <- h2o.deeplearning(1:2,3,train, hidden = c(1), epochs=200, export_weights_and_biases=T, nfolds=5)
print(h2o.weights(model,1))
print(h2o.weights(model,2))
由于某些原因,y的权重值比x的权重值低0.055-10倍。因此,最终神经网络将计算x+y/10。但是,h2o.predict实际上返回正确的值(即使在测试集上也是如此)。

我猜有一个预处理步骤在某种程度上扩展了我的数据。有没有办法重现模型产生的实际重量?我希望能够可视化一些非常简单的神经网络。

如果所有输入特征都具有均值
0
和标准偏差
1
,则神经网络的性能最好。如果特征具有非常不同的标准偏差,则神经网络的性能非常差。正因为如此,
h20
才为您实现了这一标准化。换句话说,在训练你的网络之前,它会计算你所有特征的平均值和标准偏差,并用
(x-mean)/stddev
替换原始值。在您的例子中,第二个特征的
stddev
比第一个特征的小10倍,因此在标准化之后,这些值在它们对总和的贡献方面变得更加重要10倍,而指向隐藏神经元的权重需要将其抵消。这就是为什么第二个特征的权重要小10倍。

如果所有输入特征都具有均值
0
和标准偏差
1
,则神经网络的性能最好。如果特征具有非常不同的标准偏差,则神经网络的性能非常差。正因为如此,
h20
才为您实现了这一标准化。换句话说,在训练你的网络之前,它会计算你所有特征的平均值和标准偏差,并用
(x-mean)/stddev
替换原始值。在您的例子中,第二个特征的
stddev
比第一个特征的小10倍,因此在标准化之后,这些值在它们对总和的贡献方面变得更加重要10倍,而指向隐藏神经元的权重需要将其抵消。这就是为什么第二个功能的重量要小10倍

> print(h2o.weights(model,1))
          x          y
1 0.5586579 0.05518193

[1 row x 2 columns] 
> print(h2o.weights(model,2))
        C1
1 1.802469