当前位置:  开发笔记 > 人工智能 > 正文

神经网络中的连续输出

如何解决《神经网络中的连续输出》经验,为你挑选了2个好方法。

如何设置神经网络,使它们接受并输出连续范围的值而不是离散值?从我几年前做过的神经网络课程回忆起,激活函数将是一个sigmoid,它产生一个介于0和1之间的值.如果我希望我的神经网络产生一个真正有价值的标量,我该怎么做?我想也许如果我想要一个0到10之间的值,我可以将该值乘以10?如果我有负值怎么办?这是人们通常做什么或有其他方式吗?输入怎么样?

谢谢



1> Nate Kohl..:

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

有几种常见的方法:

每个值一个节点

线性激活函数 - 正如其他人所指出的,如果您担心Sigmoid函数的范围有限,则可以在输出节点上使用非sigmoid激活函数.但是,这可能会导致输出变得任意大,这可能会导致训练期间出现问题.

Sigmoid激活函数 - 简单地缩放sigmoid输出(或移位和缩放,如果你想要负值)是神经进化的常用方法.但是,值得确保您的S形函数不会太陡峭:陡峭的激活函数意味着"有用"值范围很小,这会迫使网络权重变小. (这主要是遗传算法的一个问题,它使用固定的权重修改策略,当需要小权重时效果不佳.)

常规sigmoid http://natekohl.net/media/sigmoid-reg.gif 陡峭的sigmoid http://natekohl.net/media/sigmoid-steep.gif

每个值的多个节点 - 在多个节点上传播单个连续值是表示连续输入的常用策略.它具有为网络提供更多"功能"的好处,代价是增加网络规模.

分箱 - 在多个节点上传播单个输入(例如,RBF网络,其中每个节点是基本功能,具有将由输入部分激活的不同中心).您可以获得离散输入的一些好处,而不会失去平滑的表示.

二进制表示 - 将单个连续值划分为2个N块,然后将该值作为N节点的二进制模式提供给网络.这种方法很紧凑,但有些脆弱,导致输入以非连续的方式变化.



2> mjv..:

没有规则要求输出(*)是任何特定的功能.实际上,我们通常需要在给定节点中实现的函数末尾添加一些算术运算,以便扩展和以其他方式将输出强制转换为特定形式.

使用全有或全无输出和/或0.0到1.0标准化输出的优点是它使事情更容易处理,并且还避免溢出等问题.

(*)"输出"在这里可以理解为网络内的给定节点(神经元)或整个网络的输出.
如Mark Bessey所示,输入[对整个网络]和[网络]的输出通常接收一些过滤/转换.正如在此回复和Mark的评论中暗示的那样,最好在网络的"隐藏"层中具有规范化/标准节点,并根据输入和/或输出的需要应用一些归一化/转换/离散化.网络; 然而,这种实践仅仅是实用性的问题,而不是一般的神经网络的必要要求.

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