神经网络中的连续输出

如何设置神经网络,使其接受和输出连续范围的值,而不是离散的值?我记得几年前上神经网络课程时,激活函数是 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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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