神经网络中的连续输出

如何设置神经网络,使其接受和输出连续范围的值,而不是离散的值?我记得几年前上神经网络课程时,激活函数是 sigmoid 函数,它会产生一个介于 0 和 1 之间的值。如果我希望我的神经网络产生一个实值标量,我应该怎么做?我想,如果我想要一个介于 0 和 10 之间的值,我可以简单地将该值乘以 10 吗?如果我有负值呢?人们通常这样做,还是有其他方法?输入又该怎么办?

谢谢


回答:

神经进化领域的大部分工作都涉及到使用具有连续输入和输出的神经网络。

有几种常见的方法:

  • 每个值一个节点
    • 线性激活函数 – 正如其他人所指出的,如果您担心 sigmoid 函数的有限范围,您可以在输出节点上使用非 sigmoid 激活函数。但是,这可能会导致您的输出变得任意大,从而在训练期间导致问题。
    • Sigmoid 激活函数 – 简单地缩放 sigmoid 输出(或者,如果您想要负值,则进行平移和缩放)是神经进化中的一种常见方法。但是,值得确保您的 sigmoid 函数不要太陡峭:陡峭的激活函数意味着“有用”的值范围很小,这会迫使网络权重变小。(这主要是遗传算法的问题,遗传算法使用固定的权重修改策略,当需要小权重时,该策略效果不佳。)

regular sigmoid
(来源: natekohl.net)
steep sigmoid
(来源: natekohl.net)

  • 每个值多个节点 – 将单个连续值分布在多个节点上是表示连续输入的常用策略。它具有为网络提供更多“特征”的优点,但代价是增加了网络规模。
    • 分箱 (Binning) – 将单个输入分布在多个节点上(例如,RBF 网络,其中每个节点都是一个具有不同中心的基函数,该中心将被输入部分激活)。您可以获得离散输入的一些好处,而不会丢失平滑的表示。
    • 二进制表示 – 将单个连续值分成 2N 块,然后将该值作为二进制模式输入到 N 个节点。这种方法很紧凑,但有点脆弱,并且会导致输入以非连续的方式变化。

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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