为什么需要非线性激活函数?
说起神经网络肯定会降到神经函数,看了很多资料,也许你对激活函数这个名词会感觉很困惑, 它为什么叫激活函数?它有什么作用呢?
看了很多书籍上的讲解说会让神经网络变成很丰富的算法, 还有的会说让神经网络的表达能力更强大了, 是不是很笼统,看到这些不要烦躁,要有耐心。
国内学习深度学习,我看多最好的课程,能看的明白的还是吴恩达的课程,单同学对于一些英语水平比较低的同学, 学起来可能会比较吃力,即时有字幕可能还是回错过一些关键点,而且学习起来会比较枯燥。这里我还是推进结合一些比较详细的Ng教授的课程笔记来看。这样看起来会比较详细,也更容易理解。
言归正传还是看看为什么要有激活函数?来证明一下:
现在我们去掉激活函数g
令 :
- (1) a[1]=z[1]=w[1]x+b[1]a^{[1]} = z^{[1]} = w^{[1]}x + b^{[1]}a[1]=z[1]=w[1]x+b[1]
- (2) a[2]=z[2]=w[2]a[1]x+b[2]a^{[2]} = z^{[2]} = w^{[2]}a^{[1]}x + b^{[2]}a[2]=z[2]=w[2]a[1]x+b[2]
将式子(1)代入式子(2)中,则:
a[2]=z[2]=w[2](w[1]x+b)+b[2]a^{[2]} = z^{[2]} = w^{[2]}(w^{[1]}x + b) + b^{[2]}a[2]=z[2]=w[2](w[1]x+b)+b[2] - (3) a[2]=z[2]=w[2]w[2]x+w[2]b[1]+b[2]a^{[2]} = z^{[2]}=w^{[2]}w^{[2]}x + w^{[2]}b^{[1]} +b^{[2]}a[2]=z[2]=w[2]w[2]x+w[2]b[1]+b[2]
简化多项式a[2]=z[2]=w′x+b′a^{[2]} = z^{[2]} = w^{'}x + b^{'}a[2]=z[2]=w′x+b′
如果你是用线性激活函数或者叫恒等激励函数,那么神经网络只是把输入线性组合在输出。
在深度网络中, 即有很多层隐藏层, 如果你使用线性激活函数或者没有使用一个激活函数,那么无论你的神经网络有多少层一直在做的只是计算性函数,所以不如直接去掉所有隐藏层。
总结: 不能再隐藏层线性激活函数,可以使用ReLU 或者tanh。
非线性激活函数对于神经网络十分关键。