深度学习中常用的激活函数和损失函数
对于激活函数跟损失函数做一下记录,后面再看时也方便,可能有些图片搬运的各位大佬的,还请见谅。
激活函数
激活函数有很多,主要记录常用的和比较经典的一些,例如sigmoid、tanh、RELU及其变种。
首先说一下激活函数的作用,一般激活函数作用于神经网络中卷积层的后面,用来引入非线性因素,通过激活函数这种非线性函数来加强神经网络的拟合能力(不再单纯是线性函数了)。
- Sigmoid函数
sigmoid函数是早期神经网络非常常见的一种激活函数,其数学表达式如下:
Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过 Euler integral
f(z)=11+e−z f(z)=\dfrac{1}{1+e^{-z}} f(z)=1+e−z1
函数图像如下:
sigmoid函数的作用如上图所示,把数据变换成0~1之间的数,过于大的数为1,过于小的数位0 。这个函数在早期的深度学习中使用较多,现在很少使用。原因是sigmoid函数容易在反向传播时造成梯度消失或者爆炸,从他的导数图像就可以看到:
最大值位0.25,我们在回传时,每经过一层梯度变为以前的0.25倍,很容易造成梯度消失。而且Sigmoid 的 output 不是0均值(即zero-centered),这样会使得下一层的输入会是非零均值的,在反向传播时,梯度就会保持一个方向,参数更新就会缓慢。
2. tanh函数
tanh函数的数学表达式如下:
tanh(x)=ex−e−xex+e−x tanh(x)= \dfrac{e^{x}-e^{-x}}{e^{x}+e^{-x}} tanh(x)=ex+e−xex−e−x
函数图像以及导数图像如下:
从图像可以看到,tanh函数解决了sigmoid函数非零均值的缺点,但是梯度消失依旧存在。
3. Relu函数
Relu函数数学表达式:
y=max(0,x) y=max(0,x) y=max(0,x)
从表达式可以看到,Relu函数十分简单相对于上面两个函数中包含指数操作,Relu函数首先在运算量上就由较大的优势。
Relu函数图像及导数函数图像:
从图像可以看到,Relu函数在正半轴就是输