图2:单层感知机分割平面

图2中,左图是没有激活函数的单层感知机结构,其中 w_1,w_2 是权重值, b 是偏置值,它的工作原理是:输入一个样本(有两个特征 (x_1,x_2) ),如果 y>0 说明该样本是正类;如果 y<0 ,说明该样本是负类。我们这里不讨论 y=0 的特殊情况。根据单层感知机的工作原理,我们画出右边的坐标图。

结论是:不带激活函数的单层感知机是一个线性分类器,不能解决线性不可分的问题。 不能解决图1中的二分类问题。

2) 用多个感知机(不带激活函数)

不带激活函数的单层感知机解决不了问题,那我们就会想到用多个感知机进行组合,获得更强的分类能力,看看能不能解决我们的线性不可分问题。如图3所示。

图9:可能学习到的分类曲线

总结:激活函数是用来加入非线性因素的,提高神经网络对模型的表达能力,解决线性模型所不能解决的问题。要知道大部分问题是非线性问题,因此激活函数是必不可少的。

【待看】 Hyper-parameters in Action! Part I — Activation Functions (可能需要翻墙)

3、常见的激活函数

26种神经网络激活函数可视化
Visualising Activation Functions in Neural Networks (可能需要翻墙)

以三种常见的为例介绍,Sigmoid、tanh、Relu

3.1 Sigmoid

Sigmoid函数式:

Sigmoid函数图像:

  • 函数在两端的饱和区梯度趋近于0,当反向传播时 容易出现梯度消失或梯度爆炸 (不清楚为什么会梯度爆炸?)
  • 输出不是0均值(zero-centered) ,这样会导致,如果输入为正,那么导数总为正,反向传播总往正方向更新,如果输入为负,那么导数总为负,反向传播总往负方向更新,收敛速度缓慢
  • 运算量较大
  • pytorch中Sigmoid函数的使用

    def tanh():
        x = np.arange(-10, 10, 0.1)
        y = (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
        plt.plot(x, y)
        plt.grid()
        plt.show()
    

    tanh 函数求导: