据我了解,在深度神经网络中,我们在应用权重(w)和偏差(b)后使用激活函数(g)
(z := w * X + b | a := g(z))
。所以有一个复合函数 (g o z)
和激活函数使得我们的模型可以学习线性函数以外的函数。我发现 Sigmoid 和 Tanh 激活函数使我们的模型非线性,但我很难看到 ReLu(从 0 和 z 中取出最大值)可以使模型非线性......
假设如果每个 Z 始终为正,那么就好像没有激活函数......
那么为什么 ReLu 会让神经网络模型变得非线性?
决定一个函数是否是线性的当然不是一个观点或辩论的问题;线性函数有一个非常简单的定义,大致是:
f(a*x + b*y) = a*f(x) + b*f(y)
对于函数域中的 every
x
和 y
以及 a
和 b
常数。
“对于每个”的要求意味着,如果我们能够找到上述条件不成立的单个示例,那么该函数就是非线性的。
为了简单起见,假设
a = b = 1
,让我们尝试 x=-5, y=1
,其中 f
是 ReLU 函数:
f(-5 + 1) = f(-4) = 0
f(-5) + f(1) = 0 + 1 = 1
所以,对于这些
x
和 y
(实际上对于每个 x
和 y
和 x*y < 0
),条件 f(x + y) = f(x) + f(y)
不成立,因此函数是非线性的...
我们可能能够找到满足线性条件的子域(例如,
x
和y
都为负或正),这一事实将某些函数(例如ReLU)定义为分段 -线性,但仍然是非线性的。
现在,为了公平地对待你的问题,如果在特定应用中,输入碰巧“总是”要么全为正,要么全为负,那么是的,在这种情况下,ReLU 实际上最终会表现得像一个线性函数。但对于神经网络来说,情况并非如此,因此我们确实可以依靠它来提供必要的非线性......
没有激活函数的单个神经网络单元如下所示:
y=w*x + b
我们只能预测x和y之间的线性关系。然而,现实世界中的大多数问题都是非线性的,这意味着两个变量之间的关系不仅仅是加和乘。因此,我们需要其他东西来表达这种关系。
在模型中添加if-else
您可以将非线性视为模型中的
if-else
条件。我们不能直接将 if-else
条件放入模型中,因为模型的要点是自己学习这些条件。因此,我们需要赋予模型自行执行
if-else
条件并学习标准的能力。
为什么ReLU是非线性激活函数? 让我们看看 ReLU 是什么样的:
它有两次切割,一次从左侧到 0,一次从 0 之后向右。添加此函数允许模型根据输入输出单独的值,模仿 if-else
尽管
if-else
条件并不能准确描述非线性激活函数。至少你可以这样解释它们。