吴恩达深度学习笔记

1. 深度学习概论

1.1 激活函数 activation functions

摘录自 [1]

1.1.1 为什么使用激活函数

激活函数通常有如下一些性质:

  • 非线性: 当激活函数是线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。但是,如果激活函数是恒等激活函数的时候(即$f(x)=x$),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。

  • 可微性: 当优化方法是基于梯度的时候,这个性质是必须的。

  • 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。

  • $f(x)≈x$: 当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。 输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate。

这些性质,也正是我们使用激活函数的原因!

1.1.2 Sigmoid

Sigmoid 是常用的非线性的激活函数,它的数学形式如下:$f(x)=\frac{1}{1+e^{-x}}$

sigmoild

它能够把输入的连续实值“压缩”到0和1之间。特别的,如果是非常大的负数,那么输出就是-1;如果是非常大的正数,输出就是1。

1.1.2 tanh

tanh 是sigmoid的变形 $tanh(x)=2sigmoid(2x)-1$

tanh

1.1.3 ReLU

rectified linear unit 修正线性单元,数学表达式 $ f(x)=max(0,x) $

ReLU

ReLU 的优点:

  • Krizhevsky et al. 发现使用 ReLU 得到的SGD的收敛速度会比 sigmoid/tanh 快很多(看右图)。有人说这是因为它是linear,而且 non-saturating
  • 相比于 sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。

ReLU 的缺点: 训练的时候很”脆弱”,很容易就”die”了. 举个例子:一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这个情况发生了,那么这个神经元的梯度就永远都会是0.

实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都”dead”了。 当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。

1.1.4 Leaky-ReLU、P-ReLU、R-ReLU

  • Leaky ReLUs: 就是用来解决 “dying ReLU” 的问题的。 $$ f(x)=\alpha x,(x<0) $$ $$ f(x)=x,(x>=0) $$

leaky-relu

  • Parametric ReLU:

对于 Leaky ReLU 中的α,通常都是通过先验知识人工赋值的。 然而可以观察到,损失函数对α的导数我们是可以求得的,可不可以将它作为一个参数进行训练呢? Kaiming He的论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》指出,不仅可以训练,而且效果更好。

公式非常简单,反向传播至未激活前的神经元的公式就不写了,很容易就能得到。对α的导数如下: $$ \frac{\delta y_i}{\delta \alpha}=0,\;\;(if \;\;y_i >0), else \;\;=y_i $$ 原文说使用了Parametric ReLU后,最终效果比不用提高了1.03%.

  • Randomized ReLU:

Randomized Leaky ReLU 是 leaky ReLU 的random 版本 (α 是random的). 它首次试在 kaggle 的NDSB 比赛中被提出的。

核心思想就是,在训练过程中,α 是从一个高斯分布 U(l,u) 中 随机出来的,然后再测试过程中进行修正(有点像dropout的用法)。

1.1.5 Maxout

Maxout出现在ICML2013上,作者Goodfellow将maxout和dropout结合后,号称在MNIST, CIFAR-10, CIFAR-100, SVHN这4个数据上都取得了start-of-art的识别率。 Maxout 公式如下:$fi(x)=max{j\in [1,k]}z_{ij}$,假设 w 是2维,那么有: $f(x)=max(w_1^Tx+b_1,w_2^Tx+b_2)$。

可以注意到,ReLU 和 Leaky ReLU 都是它的一个变形(比如,w1,b1=0 的时候,就是 ReLU)。

Maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。作者从数学的角度上也证明了这个结论,即只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是”隐隐含层”节点的个数可以任意多。

所以,Maxout 具有 ReLU 的优点(如:计算简单,不会 saturation),同时又没有 ReLU 的一些缺点 (如:容易 go die)。不过呢,还是有一些缺点的嘛:就是把参数double了。

1.1.6 其他激活函数

other-activation -functions1

other-activation -functions2

参考文献:


  1. 【机器学习】神经网络-激活函数-面面观(Activation Function) http://blog.csdn.net/cyh_24/article/details/50593400 [return]