当用作深度神经网络中的激活函数时,ReLU 函数优于其他非线性函数,如 tanh 或 sigmoid。在我的理解中,激活函数的全部目的是让神经元的加权输入非线性交互。例如,当使用作为激活时,两个输入神经元的输出将是:
这将近似函数
和的不同幂的各种组合 。
尽管 ReLU 在技术上也是一个非线性函数,但我看不出它如何产生像和其他激活函数那样的非线性项。
编辑:虽然我的问题与这个问题相似,但我想知道即使是级联的 ReLU 也能够逼近这种非线性项。
当用作深度神经网络中的激活函数时,ReLU 函数优于其他非线性函数,如 tanh 或 sigmoid。在我的理解中,激活函数的全部目的是让神经元的加权输入非线性交互。例如,当使用作为激活时,两个输入神经元的输出将是:
这将近似函数
和的不同幂的各种组合 。
尽管 ReLU 在技术上也是一个非线性函数,但我看不出它如何产生像和其他激活函数那样的非线性项。
编辑:虽然我的问题与这个问题相似,但我想知道即使是级联的 ReLU 也能够逼近这种非线性项。
假设您想使用 ReLU。一种近似可能看起来像.
但这不是一个很好的近似值。但是您可以添加更多具有不同选择和的项来改进近似值。一个这样的改进,在更大的区间内误差是“小”的,是我们有,它变得更好。
您可以继续此过程,将术语添加到您喜欢的复杂程度。
请注意,在第一种情况下,近似值最适合,而在第二种情况下,近似值最适合。
x <- seq(-3,3,length.out=1000)
y_true <- x^2
relu <- function(x,a=1,b=0) sapply(x, function(t) max(a*t+b,0))
h1 <- function(x) relu(x)+relu(-x)
png("fig1.png")
plot(x, h1(x), type="l")
lines(x, y_true, col="red")
dev.off()
h2 <- function(x) h1(x) + relu(2*(x-1)) + relu(-2*(x+1))
png("fig2.png")
plot(x, h2(x), type="l")
lines(x, y_true, col="red")
dev.off()
l2 <- function(y_true,y_hat) 0.5 * (y_true - y_hat)^2
png("fig3.png")
plot(x, l2(y_true,h1(x)), type="l")
lines(x, l2(y_true,h2(x)), col="red")
dev.off()
将其视为分段线性函数。如果放大得足够远,要建模的函数的任何部分(假设它是平滑的)看起来都像一条线。