为什么必须在神经网络中引入非线性

神经网络中,如果使用线性函数,每一层输出都是上层输入的线性函数,无论神经网络多深,输出都是输入的线性组合。加深神经网络的层数就没有什么意义了。线性函数的问题在于不管加深层数到多少,总是存在与之等效的无隐藏层的神经网络。为了稍微直观的理解这一点,考虑下面一个简单的例子。

存在一个线性函数 f ( x ) = a ∗ x ( a ≠ 0 ) f(x)=a*x(a≠0) f(x)=ax(a=0)作为激活函数,假设有三层线性网络 y = f ( f ( f ( x ) ) ) y=f(f(f(x))) y=f(f(f(x)))。很明显可以想到同样的处理可以由 y = a ∗ ( a ∗ ( a ∗ x ) ) = b x , ( b = a 3 ) y=a*(a*(a*x)) = bx, (b=a^3) y=a(a(ax))=bx,(b=a3)

也就是说,使用线性激活函数时,无法发挥多层网络带来的优势,因为得到的输出与原始输入还是线性关系。相反如果使用非线性函数,例如relu / sigmoid / softplus …等激活函数,给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

欢迎关注微信公众号(算法工程师面试那些事儿),建号初期,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~

算法工程师面试那些事儿

Guess you like

Origin blog.csdn.net/qq_40006058/article/details/121070585