【问题标题】:solving XOR with single layer perceptron用单层感知器解决 XOR
【发布时间】:2015-08-05 09:43:06
【问题描述】:

我一直听说 XOR 问题不能通过单层感知器(不使用隐藏层)来解决,因为它不是线性可分的。我知道没有可以分离类的线性函数。

但是,如果我们使用像 sin() 或 cos() 这样的非单调激活函数,情况仍然如此吗?我想这些类型的函数可能能够将它们分开。

【问题讨论】:

    标签: neural-network xor perceptron


    【解决方案1】:

    不,不是没有“黑客”

    当以图形方式说明异或问题时,我们需要隐藏层的原因一目了然。

    您不能绘制单个正弦或余弦函数来分隔两种颜色。您需要一个额外的线(隐藏层),如下图所示:

    【讨论】:

    • 但是让我们假设存在一个非单调函数,它在本地看起来像这样:i.imgur.com/Qi1FM3n.png 这肯定会分离类,对吧?我们不能旋转/变换 sin/cos 函数以获得相同的行为吗?
    • 一个函数不能映射到两个不同的 x 值。如果图表映射例如:x=0 -> y = 0.8 和 y = -0.8(如您发布的图片中所示),则无法用常规函数描述。这使我们无法使用任何需要激活函数的派生方法。
    • 我不太明白为什么在(单层)感知器中会出现这种情况。我们可以简单地使用所需输出和计算出的输出之间的差异来更新权重吗?
    • 我认为线性变换后变换到新的特征空间(显然应该有精心选择的系数)可以改变二维空间中数据的位置。并且可以用非单调函数来划分。
    【解决方案2】:

    是的,具有非单调激活函数的单层神经网络可以解决异或问题。更具体地说,周期函数会多次切割 XY 平面。即使是AbsGaussian 激活函数也会将其削减两次。

    自己试试:W1 = W2 = 100,Wb = -100,激活 = exp(-(Wx)^2)

    • exp(-(100 * 0 + 100 * 0 - 100 * 1)^2) = ~0
    • exp(-(100 * 0 + 100 * 1 - 100 * 1)^2) = 1
    • exp(-(100 * 1 + 100 * 0 - 100 * 1)^2) = 1
    • exp(-(100 * 1 + 100 * 1 - 100 * 1)^2) = ~0

    或者使用 abs 激活:W1 = -1,W2 = 1,Wb = 0(是的,即使没有偏差也可以解决)

    • abs(-1 * 0 + 1 * 0) = 0
    • abs(-1 * 0 + 1 * 1) = 1
    • abs(-1 * 1 + 1 * 0) = 1
    • abs(-1 * 1 + 1 * 1) = 0

    或正弦:W1 = W2 = -PI/2, Wb = -PI

    • sin(-PI/2 * 0 - PI/2 * 0 - PI * 1) = 0
    • sin(-PI/2 * 0 - PI/2 * 1 - PI * 1) = 1
    • sin(-PI/2 * 1 - PI/2 * 0 - PI * 1) = 1
    • sin(-PI/2 * 1 - PI/2 * 1 - PI * 1) = 0

    【讨论】:

      【解决方案3】:

      在最近的一篇论文中,作者设计了一个他们称之为Growing Cosine Unit(GCU)的神经元:

      【讨论】:

        猜你喜欢
        • 2017-02-15
        • 2017-08-29
        • 2018-07-14
        • 2012-04-30
        • 2015-08-14
        • 2018-07-15
        • 2014-08-09
        • 2018-07-05
        相关资源
        最近更新 更多