概率与神经网络

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

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

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

我希望这能澄清问题..

编辑
在训练NN时,我在State1上随机执行Action并观察结果State2;然后教NN输入State1-Action-State2应导致输出1.0


回答:

首先,就传统的MLP术语来说,有几个小点(可能有助于网络搜索等):’sigmoid’和’tanh’不是’输出层’而是函数,通常称为“激活函数”。激活函数的返回值确实是每层的输出,但它们本身并不是输出层(也不计算概率)。

此外,你的问题提到了两个“选择”(“sigmoid和tanh”),但它们实际上不是选择,’sigmoidal函数’是一个通用/非正式的术语,用于一类函数,其中包括你提到的双曲正切(’tanh’)。

‘sigmoidal’这个术语可能源于函数的特征形状——无论x值如何,返回的(y)值都被限制在两个渐近值之间。函数输出通常被归一化,使这两个值为-1和1(或0和1)。(顺便说一下,这种输出行为显然受到生物神经元的启发,神经元要么激发(+1),要么不激发(-1)。)查看sigmoidal函数的关键属性,你可以明白为什么它们非常适合作为前馈、反向传播神经网络中的激活函数:(i)实值且可微分,(ii)具有一个拐点,(iii)具有成对的水平渐近线。

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

def step_fn(x) :  if x <= 0 :    y = 0  if x > 0 :    y = 1    

(从实际角度来看,我怀疑阶 leap函数作为激活函数的选择是否合理,但它可能有助于理解激活函数在NN操作中的目的。)

我想可能有无限多的可能激活函数,但在实践中,你只会看到少数几个;事实上,仅有两个就占了绝大多数情况(两者都是sigmoidal)。这里是它们(用python编写),以便你自己实验,考虑到主要选择标准是实用的:

# 逻辑函数def sigmoid2(x) :  return 1 / (1 + e**(-x))   # 双曲正切def sigmoid1(x) :  return math.tanh(x)

选择激活函数时需要考虑哪些因素?

首先,函数必须提供所需的行为(源自或由sigmoidal形状证明)。其次,函数必须是可微分的。这是反向传播的要求,这是训练期间使用的优化技术,用于“填充”隐藏层的数值。

例如,双曲正切的导数是(以输出形式表示,这是通常的写法):

def dsigmoid(y) :  return 1.0 - y**2

除了这两个要求之外,一个函数比另一个函数更好的原因是它能更有效地训练网络——即,哪个函数能在最少的轮次中达到收敛(达到局部最小误差)?

#——– 编辑(见下方OP的评论) ———#

我不太确定我是否理解了——有时候在没有代码的情况下很难传达NN的细节,所以我可能应该只说在以下条件下这是可以的:你希望NN预测的内容必须与训练期间使用的因变量相同。例如,如果你使用两个状态(例如,0,1)作为单一因变量来训练你的NN(这显然在你的测试/生产数据中缺失),那么这就是你的NN在“预测模式”下运行时(训练后,或使用一个合格的权重矩阵)将返回的内容。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注