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

存在一个线性函数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))=bx,(b=a3)y=a*(a*(a*x)) = bx, (b=a^3)y=a(a(ax))=bx,(b=a3)

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

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

算法工程师面试那些事儿

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐