神经网络,深度学习,为什么要用激活函数?????

1.先抛开什么神经,深度之类的不好理解的东西。

回想一下,我们是要用这个东西干什么?
答案很简单,有两种问题————对应两种模型
模型分类:回归模型和分类模型
回归模型:预测连续值,是多少的问题。北京房价是多少?食堂阿姨给我盛饭是多少?
分类模型:预测离散值,是不是的问题。这个背影是不是帅哥?这个人是不是喜欢我?

1++ 激活函数在深度学习中是用来干什么的?

先说下卷积层,学深度学习的应该都是知道卷积层的,那卷积层具体指什么呢?其实卷积层就是我们所做的一大堆特定的滤波器,该滤波器会对某些特定的特征进行强烈的响应,一般情况下是结果值非常大。而对一些无关特性,其响应很小,大部分是结果相对较小,或者几乎为0。这样就可以看做为激活,当特定卷积核发现特定特征时,就会做出响应,输出大的数值,而响应函数的存在把输出归为0~1,那么大的数值就接近1,小的数值就接近0。因此在最后计算每种可能所占比重时,自然大的数值比重大。

2.我们说下分类问题

我们想要把一个二维图分成几类,我们之前是怎么做的?
这里写图片描述
画一条直线,这个问题还是比较简单,一条直线解决不了两条就可以了。
这里写图片描述
这就是我们的一个没有激活函数的网络,可以看出该网络是x1和x2的线性组合,
这里写图片描述
这里写图片描述
你可能会说了,那再加一层呢??
再加一层变为y=w11(w1x1+w2x2+b)+w22(w1x1+w2x2+b)+b
请拆开看一下——————是不是还是线性的?这样就严重影响了我们分类的效果,我们根本无法解决非线性问题。

3.那么加上激活函数(activation function)就不一样

激活函数其实是对应到生物学上的定义,激活状态为有信号,非激活状态为无信号。然而对应到这里的激活函数,其实就有些变质了,如果还在想着激活为1,非激活为0,那么是无法理解神经网络中的激活函数的。
神经网络的激活函数其实是将线性转化为非线性的一个函数,并非只是简单地给予0,或者给予1。
这里写图片描述
这里写图片描述
这里写图片描述
1.对于分类问题,当然0,1就可以解决问题了,而且可以看出我们的结果也只有0~1,那想让y输出是其他呢?答案肯定是有的,先看下边激活函数
这里写图片描述这里写图片描述
Sigmoid 非线性映射实数到[0,1]区间,右:tanh非线性映射实数到[-1,1]区间
这两种方法都有梯度消失的缺点
网上也会有很多人说——在靠近最大值和最小值时,梯度近似为0

要想解决这个问题我们需要一个问题一个问题来入手
梯度是什么?
梯度是损失函数对w的求导
为什么是这个?
因为我们需要让我们的预测结果接近真实的结果,而我们的损失函数是什么?
损失函数是(实际值-预测值)的均方差。
那么调整什么会对预测结果造成影响?
调整y=f(wx+b)的w,b,一般情况下会有这种写法:
这里写图片描述
这是一种说法,另一种更为具体的是需要谁,就对谁求导。
这里写图片描述
这里也可以看出来加了一个1/2,目的是在求导时候与导数的2相抵消。而前面的α是学习速率,只是一个系数,这里不着重强调了,有专门关于这个的讲解的文章。
这里提一下,为什么学习速率太大就会导致不收敛呢,梯度一直在减小的,那么梯度学习速率不是也减小了吗?
听我说吧,不是这样的,梯度确实应该随着迭代减小,可是……学习速率过大,梯度下降都困难
这里写图片描述
从上边也可以看出,我们求导主要还是针对了激活函数,当我们的结果越来越趋向于最终结果时,很有可能进入函数的饱和区,也就是s型函数近似为平行线的区域,这时我们的求解即使没有达到最优,我们的迭代也不再变化了。
这里在深度学习中还有两个概念梯度消失和梯度爆炸。
下面图片为引用,引用博客在图上
这里写图片描述
sigmoid,梯度消失就会很明显了,梯度不大于0.25
这里写图片描述
tanh比sigmoid要好一些,但是它的倒数仍然是小于1的
这里写图片描述

ReLU

这里写图片描述 f(x)=max(0,x) 把小于0的x全部移动到0 ReLU 得到的SGD的收敛速度会比 sigmoid/tanh 快很多,不过假如你的learning rate 很大,那么很有可能你网络中的40%的神经元都”dead”了。 ReLU梯度为1,只有一边又饱和的问题,因此其梯度能在深度网络中传递。这很好地解决了上面曲线激活函数的梯度消失和梯度爆炸的问题,因此被广泛应用在深度学习中。 ReLU同时引入了稀疏的特性(人类在判断问题时,往往会直接去掉一大部分的无用信息),ReLU完全把小于0的项全部取0。