机器学习中的激活函数(真·函数)

学过机器学习的都知道,激活函数很重要,没有它们就只有线性神经网路(效果堪忧)。并且它们还决定了训练的精准度和速度。这主要是应为在做backpropagation的时候,决定一个神经网络中的hidden layer里的一个神经元的weight和bias改怎么调需要激活函数的导数。

现在市面上主要的激活函数大概是这些:

1. Sigmoid

2. Tanh

3. ReLU

4. Leaky ReLU

5. ELU

6. SELU

7. SiLU

8. swish

9. mish

1. Sigmoid:


\sigma (x) = \frac{1}{1+e^{-x}}

2. Tanh.

tanh(x)

3. ReLU

有点不好搞,因为大部分的函数是这样的:

ReLU(x)=max(0,x)

这虽然是个函数,但是我想自己想办法解决。

ReLU(x)=\frac{x+\left|x\right|}{2}

我们可以看到当x<=0的时候,x和|x|会相互抵消,所以会变成0。但是当x>0的时候,x和|x|会得到2x,所以要÷2。

ReLU(x)=\frac{x+\left|x\right|}{2}

4. Leaky ReLU

Leaky ReLU比ReLU更好,应为它可以解决ReLU的一个问题:神经元死亡问题(可以上网查,我在这里就不细讲了)。

现在,我需要用另一种方式。

首先,我需要找到一个公式,当x<0的时候,函数输出0,否则输出1。

OK,我也是直接找到这个公式好吧。

\frac{x+|x|}{2|x|}

这个公式来源于之前ReLU(x)的公式:\frac{x+|x|}{2}

ReLU的公式在x<=0的时候,输出0,但是当x>0的时候输出x。

而我们这个公式把输出除以x,所以就能得到1。

Leaky ReLU的大部分函数是这样的,alpha的值一般在0.01。

Leaky ReLU(x) = max(\alpha x, x)

而我自己的函数是这样的。

LeakyReLU(x)=\frac{x^{2}+x\left|x\right|-a_{1}x^{2}+a_{1}x\left|x\right|}{2\left|x\right|}, \alpha =0.01

这个函数是一个从两个函数的出来的:

\frac{x^{2}+x\left|x\right|}{2\left|x\right|} +\frac{-\alpha x^{2}+\alpha x\left|x\right|}{2\left|x\right|}

而这两个函数又可以被分解为:

\frac{x+\left|x\right|}{2\left|x\right|}x +\frac{-x+\left|x\right|}{2\left|x\right|}\alpha x

\frac{x+|x|}{2|x|}会在x<0的情况下输出0,在x>=0的时候输出1。
所以大家理解一会就会懂了。

LeakyReLU(x)=\frac{(1-2\alpha)x+\left|(1-2\alpha)x\right|}{(2-4\alpha)},\alpha =0.01

5. ELU

开始有一点复杂了。

ELU(x)=max(\alpha (e^{x}-1),x)

一般alpha=1。

我们能推算出ELU的公式:

\frac{x+|x|}{2|x|}x+\frac{-x+|x|}{2|x|}\alpha (e^{x}-1)

简化一下

ELU(x,\alpha )=\frac{x^2+x|x|+\alpha (e^{x}-1)(|x|-x)}{2|x|}

我来解释一下:

D(x)=\frac{x+|x|}{2|x|}

首先,我们想要在x>0的时候用y=x这个方程, 并且,在x<=0的时候用\alpha (e^{x}-1),所以,我们要把D(x)乘以x,然后把它加到D(-x)乘以\alpha (e^{x}-1)。比如说,如果x>0,D(x)就会输出1,而D(-x)会输出零。所以整个算式就变成:

D(x)x+0=1x

所以x>0的时候就会得到x。

但是如果x<=0,就会变成:

0+D(x)\alpha (e^{x}-1)=1\alpha (e^{x}-1)

所以就会得到\alpha (e^{x}-1)

\frac{x^2+x|x|+\alpha (e^{x}-1)(|x|-x)}{2|x|},\alpha =1

6. SELU

SELU和ELU差不多。

SELU(x) = 1.0507009873554804934193349852946ELU(x,1.6732632423543772848170429916717)

其实就是ELU前面乘了一个数,并且alpha被设为了一个特定的数。这两个数使用证明得出来的。

SELU(x) = 1.0507009873554804934193349852946ELU(x,1.6732632423543772848170429916717)

7. SiLU

SiLU的公式很简单:

SiLU(x)=\frac{x}{1+e^{-x}}

熟悉激活函数的肯定一眼就能看出来SiLU就是x*sigmoid(x)。

SiLU(x)=\frac{x}{1+e^{-x}}

8. swish

谷歌搞出来的。

公式为:

swish(x)=\frac{x}{1+e^{-\beta x}}

相信很多人一眼就看出来swish就是x\sigma (\beta x)

swish(x)=\frac{x}{1+e^{-\beta x}},\beta =2

9. mish

SiLU的姐妹函数。

公式为:

mish(x)=x\tanh(\ln(1+e^{x}))

mish(x)=x\tanh(\ln(1+e^{x}))

最后,所有的公式都放到这个链接里面了

致谢:

Sigmiod、Tanh、Relu、Mish...等激活函数的那点事儿 - 知乎icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/139696588

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值