Vanishing gradient and activiation funcation(ReLU、Maxout)


在手写数字识别的训练准确度的实验,使用sigmoid function。可以发现当层数越多,训练结果越差,训练集上准确度就下降很多。但是这个不是当层数多了以后就overfitting,因为这个是在training set上的结果,所以这不是overfitting的问题。

Vanishing gradient

当网络比较深的时候会出现vanishing Gradient problem,比较靠近input的几层gradient值十分小,靠近output的几层gradient会很大,当你设定相同的learning rate时,靠近input layer 的参数updata会很慢,靠近output layer的参数updata会很快。常常出现的现象是前几层的参数还没有太大变化的时候,后几层的参数就已经收敛了。所以在靠近input的地方,参数几乎还是random的时候,output就已经根据这些random的结果找到了一个local minimum,然后就收敛了。这个时候参数的loss下降的速度变得很慢,gradient已经接近于0了,但此时network几乎base on random的参数,所以model的参数并没有被训练充分,那在training data上得到的结果肯定是很差的。

梯度估计
假设neural network有一个参数 w w w,loss funcation l l l对参数 w w w的梯度 ∂ l ∂ w \frac{\partial l}{\partial w} wl,如何估计这个偏微分呢,方法是对参数 w w w做微小变动 △ w △w w,分析这个变动对loss的影响,也近似可以分析这个变动对output的影响。

梯度衰减
假设给一个靠近input layer的参数 w w w加上变动 △ w △w w。假设我们的△w很大,通过sigmoid function时这个output会很小(因为sigmoid function会将值压缩到0到1之间,将参数变化衰减),每通过一次sigmoid function就会decay一次,hidden layer很多的情况下, w + △ w w+△w w+w最后对loss 的影响将会非常小,也就是 ∂ l ∂ w \frac{\partial l}{\partial w} wl将会非常小。

理论上我们可以设计dynamic learning rate或者train RBM来解决这个问题,但直接改activation function可以从根本上解决问题。


ReLU

Rectified Linear Unit(整流线性单元函数,又称修正线性单元)
a = { 0 z<0 z z≥0 a= \begin{cases} 0& \text{z<0}\\ z& \text{z≥0} \end{cases} a={0zz<0z≥0
跟sigmoid function比起来,选择ReLU的理由如下:

  • 运算快
  • 生物上的观察
  • 无穷多bias不同的sigmoid叠加会得到ReLU
  • 处理Vanishing gradient

thinner linear network

whole network
thinner linear network

ReLU可以看做是两条linear funcation的组合,当input>0时,ReLU表现为linear funcation a = z a=z a=z,当input<0时,ReLU表现为linear funcation a = 0 a=0 a=0,而当某个neuron因为input小于0而导致output=0时,该neuron被屏蔽(对整个network没有任何作用),因此可以把它们从network中拿掉。拿掉所有output为0,此时整个network就变成了thinner linear network

How to train

微分问题:梯度下降要求loss funcation可以对参数作微分,ReLU是一个分段函数,存在不可微分点,怎么微分?

实际上我们真正训练的并不是一个含有ReLU函数的network,而是一个化简后的thinner linear network。依据某一特定的data,屏蔽掉输出为0的neuron后,network变为thinner linear network,剩下的neuron上的activiation funcation仅为linear,因此可以轻松求微分。

linear问题:通常使用激励函数是要做non-linear处理,也是为了比较复杂的model,而使用ReLU会让network整体变成一个linear model吗?这样得到的function不是会变得很弱吗?

使用ReLU之后的network整体来说还是non-linear的,thinner linear network的结构依输入数据而定,thinner linear network确实是线性的,但training data中由多笔数据,它们输入到network所形成的thinner linear network的结构并不统一,每笔data所训练的参数也不同,最终network的所有参数均可以被训练到,因此从整体看network是非线性的。

ReLU-variant

ReLU存在缺陷,当input<0时,output=0,此时微分值gradient也为0,没办法update参数。

Leaky ReLU
a = { 0.01 z z<0 z z≥0 a= \begin{cases} 0.01z& \text{z<0}\\ z& \text{z≥0} \end{cases} a={0.01zzz<0z≥0

  • input<0时,gradient=0.01,仍然可以微分后更新值

Parametric ReLU
a = { α z z<0 z z≥0 a= \begin{cases} \alpha z& \text{z<0}\\ z& \text{z≥0} \end{cases} a={αzzz<0z≥0

  • input<0时, α \alpha α作为梯度,它被作为network中的一个参数,可以通过training data学出来,甚至每个neuron都可以有不同的 α \alpha α

Maxout

在这里插入图片描述

Maxout与在layer上做Max Pooling相似,它和原来的network不同之处在于,它把neuron按一定规则分组,当input乘以权重计算出所有neuron的 z z z,然后选取其中的最大值当做这个组的output,代替activation function,组中包含neuron的个数是network structure里一个需要被调的参数。

thinner linear network

根据具体输入的data,max函数选择的neuron确定,其他neuron被屏蔽,把其他neuron从network中去掉从而得到thinner linear network。
在这里插入图片描述

Learnable Feature

Maxout → \rightarrow ReLU
neuron输入
模拟结果

ReLU:

  • input: z = w x + b z=wx+b z=wx+b
  • output: a = σ ( z ) a=\sigma(z) a=σ(z)

Maxout:

  • input: z 1 = w x + b      z 2 = 0 z_1=wx+b\ \ \ \ z_2=0 z1=wx+b    z2=0
  • output: a = m a x ( z 1 , z 2 ) a = max(z1,z2) a=max(z1,z2)

Maxout → \rightarrow more than ReLU

除了ReLU,Maxout还可以实现更多不同的activation function

neuron输入
模拟结果

ReLU:

  • input: z = w x + b z=wx+b z=wx+b
  • output: a = σ ( z ) a=\sigma(z) a=σ(z)

Maxout:

  • input: z 1 = w x + b      z 2 = w ′ x + b ′ z_1=wx+b\ \ \ \ z_2=w'x+b' z1=wx+b    z2=wx+b
  • output: a = m a x ( z 1 , z 2 ) a = max(z1,z2) a=max(z1,z2)

这个时候你得到的activation function的形状,是由neuron的input的参数 w , b , w ′ , b ′ w,b,w',b' w,b,w,b决定的,因此它是一个Learnable Activation Function,具体的形状可以根据training data去generate出来。


How to train

与ReLU的情况一样,实际上我们真正训练的并不是一个含有max函数的network,而是一个化简后的thinner linear network。

Max operation是多个linear的组合,根据具体的data,neuron采用的linear funcation确定,此时network的结构就会确定,依据这个linear funcation进行微分,那么就可以使用backpropagation的方法去训练这个thinner network中的参数。由于我们有很多笔training data,所以network的structure在训练中不断地变换,实际上最后每一个参数都会被训练到。

Summary

ReLU与Maxout的区别

  1. ReLU作用于单个neuron,依据neuron input选择激活或者屏蔽该neuron
    Maxout作用于一组neuron,依据neuron input选择激活最大input的neuron

  2. ReLU是两组linear函数的组合
    Maxout可以是两个或多个linear函数的组合

  3. ReLU是静态的
    Maxout是动态的,每个neuron的input( z = w 1 x 1 + w 2 x 2 z=w_1x_1+w_2x_2 z=w1x1+w2x2)组成maxout的一个linear函数

ReLU与Maxout的相似处

ReLU与Maxout可以使用的的原理大体是相同的,都是将network简化为thinner linear network进行训练

微分角度:整体看待network时,max函数无法微分,但在具体的实践上,从thinner linear network的角度,max函数被转化为某个具体linear函数时,便可以微分。

non-linear角度:以thinner linear network的角度,network属于linear network,可以最终化简为linear funcation,但总整体看,就是一个复杂的network。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值