神经网络中的连续输出
Posted
技术标签:
【中文标题】神经网络中的连续输出【英文标题】:Continuous output in Neural Networks 【发布时间】:2010-12-21 20:46:15 【问题描述】:如何设置神经网络,使其接受和输出连续范围的值而不是离散值? 根据我几年前做神经网络课程的回忆,激活函数将是一个 sigmoid,它产生一个介于 0 和 1 之间的值。如果我希望我的神经网络产生一个实值标量,我应该怎么做?我想也许如果我想要一个介于 0 和 10 之间的值,我可以将值乘以 10?如果我有负值怎么办?这是人们通常做的还是有其他方法?输入呢?
谢谢
【问题讨论】:
【参考方案1】:neuroevolution 领域的大部分工作涉及使用具有连续输入和输出的神经网络。
有几种常见的方法:
每个值一个节点 线性激活函数 - 正如其他人所指出的,如果您担心 sigmoid 函数的范围有限,可以在输出节点上使用非 sigmoid 激活函数。但是,这可能会导致您的输出变得任意大,这可能会导致训练期间出现问题。 Sigmoid 激活函数 - 简单地缩放 sigmoid 输出(或移位和缩放,如果您想要负值)是神经进化中的常用方法。但是,值得确保您的 sigmoid 函数不太陡峭:陡峭的激活函数意味着“有用”的值范围很小,这会迫使网络权重很小。 (这主要是遗传算法的问题,它使用固定的权重修改策略,在需要小权重时效果不佳。)(来源:natekohl.net)(来源:natekohl.net)
每个值多个节点 - 将单个连续值传播到多个节点是表示连续输入的常用策略。它的好处是为网络提供更多“功能”,但以增加网络规模为代价。 Binning - 将单个输入分布在多个节点上(例如RBF networks,其中每个节点都是具有不同中心的基函数,将被输入部分激活)。您可以在不丢失平滑表示的情况下获得离散输入的一些好处。 二进制表示 - 将单个连续值分成 2N 个块,然后将该值作为二进制模式输入网络中的 N 个节点。这种方法紧凑,但有点脆弱,会导致输入以非连续方式变化。【讨论】:
你确定RBF网络只有一个输入节点吗?据我了解,它们可能有任意多个输入节点,但只有一个输出。【参考方案2】:没有要求输出 ( * ) 是任何特定函数的规则。事实上,我们通常需要在给定节点中实现的函数本身的末尾添加一些算术运算,以便缩放或强制输出为特定形式。
使用全有或全无输出和/或 0.0 到 1.0 标准化输出的优势在于它使事情更容易处理,并且还避免了溢出等问题。
( * ) 这里的“输出”既可以理解为网络中给定节点(神经元)的输出,也可以理解为整个网络的输出。 正如 Mark Bessey 所指出的,[整个网络的]输入和[网络的]输出通常会接受一些过滤/转换。正如此响应和 Mark 的评论中所暗示的,最好在网络的“隐藏”层中具有规范化/标准节点,并根据输入和/或输出的需要应用一些规范化/转换/离散化网络;然而,这种做法只是实用性问题,而不是一般神经网络的必要要求。
【讨论】:
【参考方案3】:您通常需要对输入和输出进行一些过滤(电平转换等)。显然,过滤输入会改变内部状态,因此需要考虑不要丢失您尝试训练的信号。
【讨论】:
而且我相信有人会提到它 - 当然,您可以定义网络,这样您就不必必须对输入或输出进行任何转换。然而,拥有通用节点并进行一些显式过滤通常更容易。以上是关于神经网络中的连续输出的主要内容,如果未能解决你的问题,请参考以下文章