Neural network 如何计算神经网络中输入的权重

Neural network 如何计算神经网络中输入的权重,neural-network,Neural Network,神经网络经过充分训练后(假设是正常的前馈网络),是否有方法计算一个输入相对于最终输出的权重?请注意,我不是在谈论输入相对于一个神经元的权重(该值应在训练过程中由NN计算和调整) 例如,如果我有3个输入x1、x2和x3,并且我有一个输出y。网络训练后,我能知道x1对y的影响有多大吗?我想应该用y对x1的偏导数来计算。但是我怎么知道网络所代表的非线性函数呢?这可能吗 谢谢 好问题 我想到了两种方法。一种是使用“Hinton图”(通过谷歌查看)进行目视检查。然而,另一个简单的方法是为单个输入输入一个较

神经网络经过充分训练后(假设是正常的前馈网络),是否有方法计算一个输入相对于最终输出的权重?请注意,我不是在谈论输入相对于一个神经元的权重(该值应在训练过程中由NN计算和调整)

例如,如果我有3个输入x1、x2和x3,并且我有一个输出y。网络训练后,我能知道x1对y的影响有多大吗?我想应该用y对x1的偏导数来计算。但是我怎么知道网络所代表的非线性函数呢?这可能吗

谢谢

好问题

我想到了两种方法。一种是使用“Hinton图”(通过谷歌查看)进行目视检查。然而,另一个简单的方法是为单个输入输入一个较大的值,为其他输入输入一个较小的值(零?),然后查看它对每个输出值的作用

还有其他更高级的方法,但这是一个很好的开始


祝你好运!如果您觉得有什么有趣的事情,请告诉我们哪些计算最适合您。

我发现了一个很好的工作:

美国北卡罗来纳州卡里SAS研究所Warren S.Sarle的“如何衡量投入的重要性”

简而言之:

  • 求和权重不起作用
  • 对标准化权重求和不起作用
  • 对渐变求和不起作用
  • 一个接一个地删除(归零或设置为平均值)输入[并重新训练]——虽然有效,但需要很多时间
  • 将输出与输入之间的微小差异相加-效果非常好
现在简要介绍我更喜欢使用的最后一种方法:
对于输出函数Y=f(X1,X2,X3),您可以计算:

   D1 = f( X1+h, X2, X3) - f( X1, X2, X3)
   D2 = f( X1, X2+h, X3) - f( X1, X2, X3)
   D3 = f( X1, X2, X3+h) - f( X1, X2, X3)
所有输入值对的这些绝对差异的平均值可以很好地估计每个输入的重要性

这就是我在Lua Torch中的做法

注1:我取平方差而不是绝对值。
注2:我的输入矩阵是标准化的,这就是为什么我可以选择 h的值为[-1..1]

local samples\u count=输入:大小(1)
本地输入\u计数=输入:大小(2)
本地输出=模型:正向(输入):克隆()
局部重要性=火炬零点(输入\计数)
打印(“处理输入1到”。.tostring(输入计数));io.flush()
对于i=1,输入值为
io.write(“\r处理”。.tostring(i));io.flush()
对于h=-1,1,0.2do
本地输入\u h=输入:克隆()
如果h~=0,则输入{h[{},{i,i}}]:add(h)end
本地输出=模型:正向(输入)
重要性[i]=重要性[i]+torch.add(outputs_h,-1,outputs):pow(2):sum()
结束——对于h
end—用于输入\u计数
重要性:部门(样本数量)
打印(“\n重要性:\n”,重要性)

你所说的“我如何知道网络所代表的非线性函数”是什么意思?毕竟,你训练过它,所以你应该知道超参数,激活函数,等等。或者你正在使用一些黑盒库实现?@larsmans请原谅我的无知,因为我是神经网络的新手。我不知道“超参数”是什么意思。我只是想找到一个表示x1和y之间关系的函数(在上面的例子中)。虽然我知道权重和活动函数,但我仍然不知道如何“组合”这些值以形成单个函数。前馈神经网络计算的函数通常是
Y=f(σ(X×W1.t+b1)×W2.t+b2)
对于两层网络,f是任务特定的,σ=tanh。取Y wrt的导数,任何输入特征都会在任何教科书中解释,例如…@larsmans非常感谢您提供的信息。我会读课本的。可能是课本的副本