我最近在研究神经网络的理论。对ANN中梯度下降和激活函数的作用有些困惑。
据我所知,激活函数用于将模型转换为非线性模型。这样它就可以解决非线性可分的问题。而梯度下降是帮助模型学习的工具。
所以我的问题是:
-
如果我使用像sigmoid这样的激活函数来构建模型,但不使用梯度下降来改进模型,而是使用经典的感知器学习规则:Wj = Wj + a*(y-h(x)),其中h(x)是带有净输入的sigmoid函数。模型能学会非线性可分的问题吗?
-
如果我在模型中不包括非线性激活函数。只是简单的净输入:h(x) = w0 + w1*x1 + … + wj*xj。并使用梯度下降来改进模型。模型能学会非线性可分的问题吗?
我对这个问题真的很困惑,不知道是哪个因素是模型能够学习非线性可分问题的主要原因。
回答:
监督学习101
这是一个相当深入的问题,所以我先回顾一下基础知识,以确保我们彼此理解。监督学习,尤其是分类,在最简单的形式中,试图从一组观测值{(x_i,y_i)}
中学习一个函数f
,使得y=f(x)
。在实践中会遇到以下问题:
- 你对
f
一无所知。它可能是多项式、指数,或者是某种在数学上甚至没有适当名称的高度非线性事物。 - 你用来学习的数据集只是你试图学习的真实数据分布的一个有限的,可能有噪声的子集。
因此,你找到的任何解决方案都必须是近似的。你将使用的架构类型将决定一个函数家族h_w(x)
,每个w
的值将代表这个家族中的一个函数。请注意,由于通常有无限多的可能w
,函数家族h_w(x)
通常是无限大的。
学习的目标将是确定哪个w
最合适。这就是梯度下降介入的地方:它只是一个优化工具,帮助你选择合理的w
,从而选择特定的模型h(x)
。
问题是,你试图近似的实际f
函数可能不属于你决定选择的h_w
家族,因此你会…
回答实际问题
现在基础知识已经覆盖了,让我们回答你的问题:
-
在单层模型ANN的输出端放置一个像sigmoid这样的非线性激活函数并不能帮助它学习非线性函数。实际上,单层ANN相当于线性回归,添加sigmoid将其转化为逻辑回归。为什么它不起作用?让我尝试一个直观的解释:单层输出的sigmoid在那里是为了将其压缩到
[0,1]
,以便可以将其解释为类成员概率。简而言之,sigmoid作为硬步函数的可微近似。我们的学习过程依赖于这种平滑性(到处都有良好的梯度可用),使用步函数会破坏例如梯度下降。这并不改变模型的决策边界是线性的事实,因为最终的类决策是从sum(w_i*x_i)
的值中得出的。这可能不是很令人信服,所以让我们用Tensorflow Playground来进行说明。请注意,学习规则在这里并不重要,因为你优化的函数家族仅包含其输入的线性函数,所以你永远不会学到一个非线性函数! -
如果你去掉sigmoid激活,你就剩下一个简单的线性回归。你甚至不将结果投影回
[0,1]
,所以输出不会简单地解释为类概率,但最终结果将是相同的。参见Playground的视觉证明。
那么需要什么呢?
要学习非线性可分的问题,你有几种解决方案:
-
预处理输入x为x’,这样以x’作为输入可以使问题线性可分。这只有在你知道决策边界应该采取的形状时才有可能,因此通常只适用于非常简单的问题。在游乐场问题中,由于我们处理的是一个圆,我们可以将
x1
和x2
的平方添加到输入中。尽管我们的模型在其输入上是线性的,但已经仔细选择了输入的适当非线性变换,所以我们得到了一个极好的拟合。 -
我们可以尝试通过添加一个或多个隐藏层来自动学习数据的正确表示,这些层将努力提取一个好的非线性变换。可以证明,使用单个隐藏层只要隐藏神经元的数量足够高,就足以近似任何东西。对于我们的例子,我们使用仅几个带有ReLU激活的隐藏神经元就得到了一个好的拟合。直观上,你添加的神经元越多,决策边界可以变得越“灵活”。深度学习领域的人们一直在增加深度而不是宽度,因为可以证明使网络更深可以使其总体上需要更少的神经元,尽管这使得训练更加复杂。