激活函数(activation function)

激活函数activation function

  • 激活函数的介绍
    • 阶跃函数(Step Function)--- 最简单的二分类非线性激活函数开始
    • mish激活函数

激活函数的介绍

首先看一个普通的神经网络:普通的线性公式
激活函数(activation function)_第1张图片
这个普通的神经网络就可以轻松解决线性二分类问题
激活函数(activation function)_第2张图片
当遇到复杂的二分类,普通的线性神经网络不管怎样平移和翻转,都无法进行二分类,因此基于泰勒公式:一个函数f(x) 可以由N次多项式来表达或者近似

然后我们通过不断叠加简单神经网络级就可以得到复杂的神经网络
激活函数(activation function)_第3张图片Output = w7(input1w1 +input2w2)+w8(input1w3+input2w4)+w9(input1w5+input2w6)
稍作调整:Output = input1(w1w7+w3w8+w9w5)+input2(w2w7+w4w8+w6w9)
假设Output = 0
所以:input1 = input2
( w2w7+w4w8+w6w9)/(-w2w7+w4w8+w6w9)
因此又回到y= X*W的线性模式
也就是说,现在的神经网络学习能力非常有限,无法去解决非线性问题,叠加简单神经网络解决不了非线性分类问题

换个思路:把线性神经网络换成曲线(非线性的)
转换思路:
从最简单的神经网络 Y = W * X +B------最简单的非线性神经网络Y = WXX+B
对于简单的二次函数Y = XX图像如下
激活函数(activation function)_第4张图片
如果可以经过一系列理想运算Y = W
X*X+B 可以得到下图:
激活函数(activation function)_第5张图片
由此,便得到了我们想要的二分类结果。

二:对输出值的分类
对于Y =W*X +B根据input X的值,我们会对Y值进行分类。
比如:Y>0 分类为1,Y<0分类为0

三:通过算出输出误差error (output Y - target Y) 来更新权值
激活函数(activation function)_第6张图片假设我们的输入X的绝对值特别大,或者无限大,那么Y值就会特别大
直接导致error太大,更新出来的权值没有意义,或者无法更新权值

四:反向传播

如果我们的神经网络函数是线性的、那么它的导数就是个常数
意味着gradient和X 无关了,也就是很输入无关了

在做反向传播的时候,Gradient 的改变也变成常数,和输入的改变X(delta(x)) 无关


综合以上问题引出了激活函数(Activation Function)
激活函数确实是很好宽广的点,它对于提高模型鲁棒性,非线性表达能力,缓解梯度消失问题,将特征图映射到新的特征空间从何更有利于训练,加速模型收敛等问题都有很好的帮助

阶跃函数(Step Function)— 最简单的二分类非线性激活函数开始

激活函数(activation function)_第7张图片
当输入(也就是神经网络Y的输出)大于0就被分类到1(100% 被激活 ),小于0就分到0,(没有被激活),激活值可以是0%-100%中的任意值

值越大,激活程度越高 对于分类,也就意味着它属于这一类的概率越大

其他激活函数
激活函数(activation function)_第8张图片

mish激活函数

mish函数的论文名是 “Mish: A Self Regularized Non-Monotonic Neural Activation Function”
mish的函数式 ( ) = ⋅ ℎ( ( )),然后就是在众多实验上表现比relu和swish等其他函数都要好、
图像:
激活函数(activation function)_第9张图片
激活函数(activation function)_第10张图片
mish函数具有以下几个特点:1、无上限,但是有下限;2、光滑;3、非单调,接下来文章介绍了下mish函数有什么优点

  1. 没有上限,这样可以保证没有饱和区域,因此在训练过程中不会有梯度消失的问题,这个和relu后面的激活函数一样
  2. 有下限的话能够保证具有一定的regularization effect,这对于神经网络训练来说是一个很好的特性
  3. 非单调性,这个在swish里面也强调过,文章说这种特性能够使得很小的负input在保持负output的同时也能够 improves expressivity and gradient flow(有些我觉得不太会翻译的,就保留原单词了),这里给了一张图,左边是激活函数输入的分布,右边是激活函数输出的分布,图不是很清楚,但是主要想说明能够在输入较小负input的时候可以放大幅度,但是较大负input的时候就会把他变小,这里我理解主要好处是输入较小负数的时候往往梯度回传也会很小,这样会导致收敛较慢,但是如果输入较大负数的时候不缩小的话,又容易梯度爆炸吧
  4. 光滑性,这个主要是相比relu的,relu在0点处不光滑,会在实际优化中遇到一些求解的问题,当然这个应该还是和具体算法有关,大部分我们就把relu=0的时候梯度也变成0了,然后文章继续提到mish的光滑的特性使得在求解和模型泛化性方面相比其他激活函数表现要优良,我理解这也是他最大的创新改进点,他给了一个通过五层初始化的网络输出的landscape,可以看到relu这个在坐标轴方向看非常不平滑,这样会影响收敛的速度,从这个图看swish和mish表现还蛮相似的

知乎文章:https://zhuanlan.zhihu.com/p/152333029

你可能感兴趣的:(目标检测,深度学习,人工智能)