有关激活函数的各个细节

1.神经网络最后一层 要有激活函数么?

不一定要有激活函数。见过代码,对mnist进行多分类的。直接wx+b,然后后面又接了一个soft max,使用交叉熵做loss function,学习率是0.01,虽然准确率不怎么样大概0.917(学习1000个batch,batch size是100),,但是证明 最后一层并不一定需要激活函数(也可以认为soft max也是一种激活函数)。


2.relu在0点处的导数?
ReLU(x) = max(0, x)
 First, you can just arbitrarily assign a value for the derivative of y = ReLU(x) when x = 0. Common arbitrary values are 0, 0.5, and 1.

A second alternative is, instead of using the actual y = ReLU(x) function, use an approximation to ReLU which is differentiable for all values of x. One such approximation is called softplus which is defined y = ln(1.0 + e^x) which has derivative of y’ = 1.0 / (1.0 + e^-x) which is, remarkably, the logistic sigmoid function. Neat!

3.神经网络能不能使用多种激活函数?

我想是可以的。并没有相关论文说一个神经网络不能使用多种激活函数。

4.什么样的函数 能成为激活函数?

激活函数一种映射h:R->R。且几乎处处可导 。激活函数一般具有以下性质:

-非线性

-几乎处处可导

-计算简单

-单调性

-输出值范围有限

5.什么时候选择a函数,什么时候选择b函数

a.2-3层不是很多层,任意可以尝试。

b.很多层的时候,不可以随意选择。会有梯度爆炸、梯度消失的问题。卷积推荐relu,recurrent推荐relu和tanh,

c.当你知道你想逼近的函数的某些特征时候,你可以选择可以更快近似这个函数的激活函数。比如sigmoid对于分类器很有效。因为要近似一个分类器,sigmoid的combine要比relu更容易,可以更快训练过程和收敛。

d.如果你不知道你想要逼近的函数的性质,你可以从relu开始,再尝试其他的激活函数。relu通常还不错,作为一个通用
的近似器。

e.如果想让结果在(0,1)之间,使用Sigmoid(如LSTM的各种Gates

f.如果想网络训练的很深,不要用S型的激活函数;

g.-如果使用ReLU,要注意初始化和learning rates的设置

h.如果使用ReLU,出现很多神经元死亡问题,且无法解决,可以尝试L-ReLUP-ReLUReLU的变体;

 

6.为啥要有激活函数?
a.神经网络中的激活函数能够引入非线性因素,提高模型的表达能力

b.一些激活函数能够起到特征组合的作用。

比如对于sigmoid函数σ(x)=1/(1+e^-x)。对e^x进行泰勒展开

平方项体现了特征的两两组合:


7.不同的激活函数各自有哪些性质?
a.step function

y=wx+b

y>thres y=1,否则为0。
那么当对多分类问题进行预测的时候,你的ouput很容易出现多个1的情况,你很难决定到底该选择哪个类别。
在训练的时候,你需要只有那个正确类别的位置为1,其他都是0,这很难train和收敛。

所以这种太过生硬的要么激活,要么不激活的激活函数 可能不太ok。我们想要一个可以给出'中间值'的激活函数,而这个中间值可以表示为概率或者置信度。

b.线性激活函数

如果A=cy(y这里是wx+b)是否可以呢。这是一个线性激活函数,其问题是,A对y的导数完全是常数,并不依赖于y的改变。
注意在这里思考,为什么我们想让A对y的导数依赖于y。 

Not possible to use backpropagation  (gradient descent) to train the model—the derivative of the function is a constant, and has no relation to the input, X. So it’s not possible to go back and understand which weights in the input neurons can provide a better prediction.

 

此外最大的问题是,如果是这种线性激活函数,一层层stack起来,最终的结果 还是一种线性,产生不了任何非线性。

 

c.sigmoid

非线性,sigmoid的combine仍然是非线性,它有比较平滑的导数。激活值有范围(0,1),而不是像线性函数一样
没有范围。此外它不像阶跃函数,非0即1,而是给出中间值,这个中间值可以表示为概率。
此外这个函数在x=±2的时候,梯度较大,会倾向于将激活值带到曲线的两侧。

问题:在曲线两侧,梯度很小,有梯度消失问题。NN在这个时候会拒绝学习或者学习速度非常慢。
有一些办法来处理这样的情况,所以应用的还挺广泛,尤其分类任务中。

输出不以0为中心,可能导致训练缓慢;(为什么不以0为中心,就慢了!!参考这篇文章https://liam.page/2018/04/17/zero-centered-active-function/)

指数计算,计算复杂度高;

d.tanh

tanh(x)=2*sigmoid(2x)-1,是一种经过scaled的sigmoid函数。所以具有sigmoid函数的所有特性。
激活值是有界的(-1,1)。它与sigmoid的最大不同是梯度更陡峭(某种程度上可以让收敛速度更快)。所以在使用的时候需要注意你对梯度的要求。此外tanh输出是以0为中心的。
tanh也存在梯度消失的问题。tanh使用得很广泛。

e.relu

A(x) = max(0,x)
首先relu看着好像有点像线性激活函数,但是实际上它是非线性的。relu的combine仍然是非线性的(任意函数都可以使用relu的combine来进行近似),所以我们可以stack layers。relu的激活数值范围是[0,inf]。

relu的激活具备稀疏性。tanh和sigmoid在激活的的时候是dense的,所以很costly,而relu只有一部分被激活,所以其是稀疏的和高效的,提供了神经网络的稀疏表达能力,更轻量级。relu的输出不是以0为中心的。

relu也有缺陷。relu图像左边是直线,所以那块的梯度是0。这会导致对错误和输入的变化停止反应,因为梯度是0。这叫做relu死亡问题。这会导致神经元死亡,网络的一大部分死掉。

有一些补救方法,其方法是将左边的水平线,变为y=ax,以让左边的梯度不再为0。
Leaky ReLU:α固定为x比较小的值,如0.01、0.05;
Parametric ReLU: α作为参数,自适应地从数据中学习得到;
Randomized ReLU:随机生成一个α,再进行修正;

与tanh和sigmoid相比,relu在计算上更高效,因为使用的是更简单的数学运算。在设计nn的时候,需要注意。

f.ELU

 

 

8.为啥要用bias?

答案很简单,我们考虑最简单的情况y=wx,x是一维向量,不加 bias 你的分割线就必须过原点,这显然是不灵活的。有了bias我们就可以上下左右移动我们的线了。神经网络是一样的道理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值