Machine learning 概率论与神经网络

Machine learning 概率论与神经网络,machine-learning,neural-network,probability,classification,Machine Learning,Neural Network,Probability,Classification,直接在神经网络中使用sigmoid或tanh输出层来估计概率是一种好的做法吗 i、 e给定输入发生的概率是神经网络中sigmoid函数的输出 编辑 我想用神经网络来学习和预测给定输入发生的概率。。 您可以将输入视为STATE1-ActoStEnE2元组。 因此,NN的输出是在State1上应用操作时State2发生的概率 我希望这能澄清问题 编辑 训练NN时,我对状态1执行随机操作,并观察结果状态2;然后教NN输入State1-Action-State2应产生输出1.0,首先,只是传统MLP词典

直接在神经网络中使用sigmoid或tanh输出层来估计概率是一种好的做法吗

i、 e给定输入发生的概率是神经网络中sigmoid函数的输出

编辑
我想用神经网络来学习和预测给定输入发生的概率。。 您可以将输入视为STATE1-ActoStEnE2元组。 因此,NN的输出是在State1上应用操作时State2发生的概率

我希望这能澄清问题

编辑

训练NN时,我对状态1执行随机操作,并观察结果状态2;然后教NN输入State1-Action-State2应产生输出1.0,首先,只是传统MLP词典上的几个小点(可能有助于互联网搜索等):“sigmoid”和“tanh”不是“输出层”,而是函数,通常称为“激活函数”。激活函数的返回值实际上是每个层的输出,但它们不是输出层本身(也不计算概率)

此外,您的问题列举了两个“备选方案”(“sigmoid和tanh”)之间的选择,但它们实际上不是备选方案,而是术语“sigmoid函数”是一类函数的通用/非正式术语,其中包括您提到的双曲正切(“tanh”)

术语“sigmoidal”可能是由于函数的特征形状——返回(y)值被限制在两个渐近值之间,而与x值无关。函数输出通常是标准化的,因此这两个值是-1和1(或0和1)。(顺便说一句,这种输出行为显然是受到生物神经元的启发,它要么激发(+1),要么不激发(-1))。看看sigmoidal函数的关键属性,你可以看到为什么它们非常适合作为前馈、反向传播神经网络中的激活函数:(i)实值可微,(ii)正好有一个拐点,(iii)有一对水平渐近线

反过来,在使用backprop求解的FF神经网络中,sigmoidal函数是用作激活函数(也称为“挤压函数”)的一类函数。在训练或预测期间,输入的加权和(对于给定层,一次一层)作为参数传递给激活函数,激活函数返回该层的输出。另一组显然用作激活函数的函数是分段线性函数。阶跃函数是PLF的二进制变量:

def step_fn(x) :
  if x <= 0 :
    y = 0
  if x > 0 :
    y = 1    
<选择激活函数时考虑的因素是什么?

首先,函数必须给出所需的行为(由S形产生或由S形证明)。其次,函数必须是可微的。这是反向传播的一个要求,反向传播是训练期间使用的优化技术,用于“填充”隐藏层的值

例如,双曲正切的导数是(就输出而言,通常是这样写的):

除了这两个要求之外,使一个函数介于另一个函数之间的是它训练网络的效率——即,哪一个函数在最少的时间内导致收敛(达到局部最小误差)

#--------编辑(见下面OP的评论)---------#


我不太确定我是否理解——有时,如果没有代码,很难传达NN的详细信息,因此我可能应该说,受此限制是可以的:您希望NN预测的内容必须与训练期间使用的因变量相同。因此,例如,如果您使用两种状态(例如,0,1)作为单个因变量(测试/生产数据中明显缺失)训练您的神经网络,那么在“预测模式”(训练后或使用适当的权重矩阵)下运行时,您的神经网络将返回此结果.

这种方法有一个问题:如果你有来自R^n的向量,并且你的网络将这些向量映射到区间[0,1],则不能保证网络表示有效的概率密度函数,因为不能保证网络的积分等于1

例如,神经网络可以将任何输入形式的R^n映射到1.0。但这显然是不可能的

所以你问题的答案是:不,你不能


但是,您可以说您的网络从未看到“不现实”的代码示例,因此忽略了这一事实。有关这方面的讨论(以及关于如何使用神经网络对PDF建模的一些更酷的信息),请参阅

您应该选择正确的损失函数来最小化。 平方误差不会导致这里的最大似然假设。 平方误差来自高斯噪声模型:

P(y|x,h) = k1 * e**-(k2 * (y - h(x))**2)
你直接估计概率。你的模型是:

P(Y=1|x,h) = h(x)
P(Y=0|x,h) = 1 - h(x)
h_max_likelihood = argmax_h product(
    h(x)**y * (1-h(x))**(1-y) for x, y in examples)
p(Y=1 | x,h)是事件Y=1在看到x后发生的概率

模型的最大似然假设为:

P(Y=1|x,h) = h(x)
P(Y=0|x,h) = 1 - h(x)
h_max_likelihood = argmax_h product(
    h(x)**y * (1-h(x))**(1-y) for x, y in examples)
这导致了“交叉熵”损失函数。 见本手册第6章
关于损失函数及其推导。

Hi Betamoo,请澄清您所说的“给定输入的概率是sigmoid函数的输出”是什么意思?我有点困惑。我已经编辑了这个问题。。请看一看。+1但是,如果他直接估计概率,我想真正强调的是,开箱即用的1/(1+e**(-x))将做正确的事情,并产生介于0和1之间的值。要使用tanh,他需要稍微修改激活函数,例如tanh(x)/2+0.5我已经用训练NN的方法编辑了我的问题。。请看一看,告诉我这样做是否正确?这可能是吹毛求疵,但你的径向基函数的实现肯定有问题。1应该是lx吗?另外,我不相信