Skip to main content
 首页 » 编程设计

artificial-intelligence之神经网络中的连续输出

2024年11月01日37dudu

如何设置神经网络,以便它们接受和输出连续范围的值而不是离散值?
根据我几年前做神经网络类(class)的记忆,激活函数将是一个 sigmoid,它产生一个介于 0 和 1 之间的值。如果我希望我的神经网络产生一个实值标量,我应该怎么做?我想也许如果我想要一个介于 0 和 10 之间的值,我可以将值乘以 10?如果我有负值怎么办?这是人们通常做的还是有其他方法?输入呢?

谢谢

请您参考如下方法:

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

有几种常见的方法:

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


  • (来源: natekohl.net)

    (来源: natekohl.net)
  • 每个值多个节点 - 在多个节点上传播单个连续值是表示连续输入的常用策略。它的好处是为网络提供更多“功能”,但以增加网络规模为代价。
  • 分箱 - 将单个输入分布在多个节点上(例如 RBF networks,其中每个节点都是具有不同中心的基函数,将被输入部分激活)。您可以在不丢失平滑表示的情况下获得离散输入的一些好处。
  • 二进制表示 - 将单个连续值分成 2N 个 block ,然后将该值作为二进制模式输入网络中的 N 个节点。这种方法紧凑,但有点脆弱,并导致输入以非连续方式变化。