【问题标题】:sigmoid - back propagation neural networksigmoid - 反向传播神经网络
【发布时间】:2016-09-19 03:52:05
【问题描述】:

我正在尝试创建一个可用于信用评分的示例神经网络。由于这对我来说是一个复杂的结构,所以我尝试先从小处学习它们。

我使用反向传播创建了一个网络 - 输入层(2 个节点)、1 个隐藏层(2 个节点 +1 个偏差)、输出层(1 个节点),它使用 sigmoid 作为所有层的激活函数。我首先尝试使用 a^2+b2^2=c^2 对其进行测试,这意味着我的输入是 a 和 b,目标输出是 c。

我的问题是我的输入和目标输出值是实数,范围可以从(-/infty,+/infty)。因此,当我将这些值传递给我的网络时,我的错误函数将类似于(目标网络输出)。那是正确的还是准确的?从某种意义上说,我得到了网络输出(范围从 0 到 1)和目标输出(一个很大的数字)之间的差异。

我已经读到解决方案是首先进行规范化,但我不确定如何执行此操作。在将输入值和目标输出值输入网络之前,我是否应该对其进行标准化?最好使用什么归一化函数,因为我阅读了不同的归一化方法。在获得优化的权重并使用它们测试一些数据后,由于 sigmoid 函数,我得到了一个介于 0 和 1 之间的输出值。我应该将计算值恢复为未标准化/原始形式/值吗?或者我应该只标准化目标输出而不是输入值?这真的让我困了好几个星期,因为我没有得到想要的结果,也不确定如何将标准化思想融入我的训练算法和测试中。..

非常感谢!!

【问题讨论】:

    标签: neural-network logistic-regression backpropagation activation-function


    【解决方案1】:

    所以回答你的问题:

    1. Sigmoid 函数将其输入压缩到区间 (0, 1)。它通常在分类任务中很有用,因为您可以将其输出解释为某个类别的概率。您的网络执行回归任务(您需要逼近实值函数)-因此最好将线性函数设置为来自最后一个隐藏层的激活(在您的情况下也是第一个:))。
    2. 我建议您不要在隐藏层中使用 sigmoid 函数作为激活函数。最好使用tanhrelu 非线性。可以在here 找到详细说明(以及一些有用的提示,如果您想保留 sigmoid 作为激活)。
    3. 了解您的网络架构不适合您尝试解决的任务也很重要。您可以了解一些不同的网络可能会学到什么here
    4. 在规范化的情况下:您应该规范化数据的主要原因是不向您的网络提供任何 spourius 先验知识。考虑两个变量:ageincome。第一个不同,例如5 到 90。第二个不等,例如1000 到 100000。income 的平均绝对值比 age 大得多,因此由于您的模型中的线性变换 - ANN 在您的开始时将income 视为更重要训练(因为随机初始化)。现在考虑您正在尝试解决一项任务,您需要对给定的人是否有白发进行分类:) income 真的是这个任务更重要的变量吗?
    5. 有很多关于如何规范化输入数据的rules of thumb。一种是将所有输入压缩到[0, 1] 间隔。另一个是让每个变量都有mean = 0sd = 1。当给定变量的分布类似于正态分布时,我通常使用第二种方法,而在其他情况下,我通常使用第一种方法。
    6. 当涉及到对输出进行归一化时,在解决回归任务(尤其是在多元回归情况下)时,对输出进行归一化通常也很有用,但它不像在输入情况下那么重要。
    7. 您应该记住保留恢复输入和输出原始大小所需的参数。您还应该记住仅在训练集上计算它们并将其应用于训练集、测试集和验证集。

    【讨论】:

    • 非常感谢!这澄清并帮助了很多! :)
    猜你喜欢
    • 2015-03-03
    • 2012-02-21
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2014-03-15
    • 2018-05-17
    相关资源
    最近更新 更多