文章目录
在手写数字识别的训练准确度的实验,使用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}
∂w∂l,如何估计这个偏微分呢,方法是对参数
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}
∂w∂l将会非常小。
理论上我们可以设计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
|
|
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
|
|
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
|
|
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=w′x+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的区别
-
ReLU作用于单个neuron,依据neuron input选择激活或者屏蔽该neuron
Maxout作用于一组neuron,依据neuron input选择激活最大input的neuron -
ReLU是两组linear函数的组合
Maxout可以是两个或多个linear函数的组合 -
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。