当前位置:  开发笔记 > 编程语言 > 正文

概率与神经网络

如何解决《概率与神经网络》经验,为你挑选了2个好方法。

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

即给定输入发生的概率是NN中sigmoid函数的输出

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

我希望确实清楚......

编辑
当训练NN时,我对State1做随机动作并观察结果State2; 然后教NN输入State1-Action-State2应该导致输出1.0



1> doug..:

首先,传统的MLP词典中只有几个小点(可能有助于互联网搜索等):'sigmoid'和'tanh'不是'输出层'而是功能,通常称为"激活功能".激活函数的返回值实际上是每层的输出,但它们本身不是输出层(它们也不计算概率).

另外,你的问题描述了两个"替代"("sigmoid和tanh")之间的选择,但它们实际上不是替代品,而是术语"S形函数"是一类函数的通用/非正式术语,包括双曲线您所指的切线('tanh').

术语'sigmoidal'可能是由于函数的特征形状 - 无论x值如何,返回(y)值都被约束在两个渐近值之间.函数输出通常被归一化,因此这两个值是-1和1(或0和1).(顺便说一句,这种输出行为显然受到生物神经元的启发,生物神经元要么发射(+1),要么不发射(-1)).看一下S形函数的关键属性,你可以看出为什么它们非常适合作为前馈,后向传播神经网络中的激活函数:(i)实值和可微分,(ii)只有一个拐点,和( iii)具有一对水平渐近线.

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

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

(实际上,我怀疑阶跃函数是激活函数的合理选择,但它可能有助于理解NN操作中激活函数的用途.)

我想有无限数量的可能的激活功能,但在实践中,你只看到一小撮; 实际上只有两个占绝大多数情况(两者都是S形).这里它们是(在python中)所以你可以自己试验,因为主要选择标准是实用的:

# logistic function
def sigmoid2(x) :
  return 1 / (1 + e**(-x))   

# hyperbolic tangent
def sigmoid1(x) :
  return math.tanh(x)

选择激活功能时需要考虑哪些因素?

首先,该函数必须给出期望的行为(由S形形成或由S形形状证明).其次,功能必须是可区分的.这是反向传播的要求,反向传播是在训练期间用于"填充"隐藏层的值的优化技术.

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

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

除了这两个要求之外,使一个函数在另一个函数之间的作用是它如何有效地训练网络 - 即哪一个导致在最短的时期内收敛(达到局部最小误差)?

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

我不太清楚我是否理解 - 有时很难在没有代码的情况下传达NN的细节,所以我可能只是说它受到这个条件的好处:你想要NN预测的必须与训练期间使用的因变量.因此,例如,如果您使用两个状态(例如,0,1)作为单个因变量(显然在您的测试/生产数据中缺失)训练您的NN,那么当您以"预测模式"运行时,您的NN将返回(培训后,或使用合格的权重矩阵).


+1然而,如果他直接估计概率,我想真正突出**开箱即用**1 /(1 + e\*\*( - x))将做正确的事情并产生两者之间的价值0和1.要使用tanh,他需要稍微修改激活函数,例如**tanh(x)/ 2 + 0.5**

2> Ivo Danihelk..:

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

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)

P(Y = 1 | x,h)是在看到x之后事件Y = 1的概率.

您的模型的最大似然假设是:

h_max_likelihood = argmax_h product(
    h(x)**y * (1-h(x))**(1-y) for x, y in examples)

这导致"交叉熵"损失函数.有关 损失函数及其推导,请参阅Mitchell机器学习中的第6章.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有