目前激活函数有以下几种:

Sigmoid

优点如下: 很容易解释神经元的"firing rate",我搜了一下,"firing rate"是神经编码里的名词,具体没有太关注。 缺点如下:

  • 容易饱和,导致梯度为0;
  • 非zero-centered,即sigmoid的输出的均值为0;
  • 操作比较费时,但是相较于卷积这些操作,不足以提之。

注意:非zero-centered指的是sigmoid的输出恒为正,在多层神经网中,sigmoid的输出作为下一级的输入,在反向传播更新参数W的时候,会导致每次更新参数要么全部加,要么全部减,取决与输入。推理如下: 可以看出,由于总是大于0(此处为这一层的输入,也就是上一层sigmoid的输出)。梯度总是和同号,即要么全为正,要么全为负。这样就会导致zig zag path,至于为什么这么描述,我其实不太理解,不过正常更新参数迭代的时候,在每一轮迭代的过程中,参数中有的增大有的减小,这样可以快速收敛,而不是同时增大或同时减小,这会导致收敛很慢。参考

tanh

缺点:依然容易饱和,导致梯度消失。 不过相对sigmoid来说,解决了zero-centered的问题。

ReLU

优点:

  • 不会饱和;
  • 计算很快;
  • 收敛快(sigmoid/tanh的6倍) 缺点:
  • 非zero-centered的输出;
  • 当输入为小于0的时候,ReLU输出为0,这就很有可能导致该参数一直无法更新.

注意:由于小于0,被抑制,所以在使用ReLU的时候,通常给bias初始化为0.01。例如,将学习率设为较大的时候,可以发现40%的W一直被抑制。当然一般开始的学习率都会设置的比较合理,不会过大。

Leaky ReLU

优点:

  • 不会饱和;
  • 计算快;
  • 收敛快(sigmoid/tanh的6倍)
  • 不会出现ReLU在小于0的时候,就出现抑制的情况。

注意:还有一种PReLU激活函数:, 作为一个参数放在网络里学习。

Maxout

优点如下:

  • ReLU和Leaky ReLU形式的扩展,他们的优点他都有;
  • 不会出现抑制的情况; 缺点:
  • 激活函数的参数等变多。

ELU

优点如下:

  • ReLU有的优点他都有;
  • 不会被抑制;
  • 输出的结果接近Zero mean. 缺点:
  • 操作耗时。

激活函数图如下图所示: activation

小结

在实际实验中:

  • 使用ReLU;
  • 可以尝试Leaky ReLU/maxout/ELU
  • 不要使用Sigmoid和tanh

results matching ""

    No results matching ""