【Day 17】深度学习(Deep Learning)--- Tip(二)--- ReLU

Vanishing Gradient Problem

昨天我们提到当你的Network很深的时候,设定同样的Learning rate,就会产生输入还是几乎随机的时候,输出已经收敛了,就会以为是找到Local minimum。而我们可以透过改Activation function来解决这个问题。

ReLU(Rectified Linear Unit)

这个Activation function的输入 https://chart.googleapis.com/chart?cht=tx&chl=z 如果大於 0,输出 https://chart.googleapis.com/chart?cht=tx&chl=a 就会等於输入,而如果输入小於 0,输出等於 0。而为什麽要选择这个Activation function呢?

  1. 跟Sigmoid function比起来运算更快。
  2. 有生命上的理由,与生物上的观察结合。
  3. 可以看成是无穷多的Sigmoid function叠加的结果。
  4. 可以解决Vanishing Gradient的问题。

刚刚我们提到ReLU作用在两个不同的区域,输入大於 0 和输入小於 0,也就是说输出只有两种情况一个是输出等於输入,也就是Activation function是Linear的,另一个是输出等於 0。

而输出是 0 的那些Neuron对整个Network根本没有影响,也不会影响最後输出的值,所以其实可以直接把它从Network里面拿掉。这样剩下来的Neuron都是Linear的时候,整个Network就会等於是一个Linear Network,就不会有Gradient越来越小的问题了。

但要注意的是,整个Network整体来说还是Non-linear的,如果对输入做小小的改变,不改变Neuron运算区域,它是一个Linear function,但是如果对输入做比较大的改变,而改变了Neuron的运算区域,它就变成是Non-linear的。
还有另外一个问题是,我们之前说在做Gradient Descent的时候,你需要对Loss function做微分,也就是说要可以对Nerual Network做微分,但ReLU不可微。而实际上你可以当作是,在输入大於 0 的区域的时候,Gradient的微分就是 1,而在输入小於 0 的时候,Gradient的微分就是 0。

ReLU - variant

Leaky ReLU

有些人会觉得说原本的ReLU输入小於 0,输出会是 0,这样你就没有办法更新你的参数了,所以应该要让在输入小於 0 的时候,输出还是有一点点的值,就是在输入小於 0 的时候,输出是输入乘上 0.01,这个叫做Leaky ReLU。

Parametric ReLU

有些人又会觉得说为什麽是乘上 0.01 而不是乘上 0.07, 0.08,所以他们又提出了Parametric ReLU,是在输入小於 0 的时候,输出等於输入乘上一个Network的参数 https://chart.googleapis.com/chart?cht=tx&chl=%5Calpha,可以透过训练资料学出来,甚至每一个Neuron都可以有不同的 https://chart.googleapis.com/chart?cht=tx&chl=%5Calpha 值。


参考资料

李宏毅老师 - ML Lecture 9-1


<<:  javascript函式与动态变更网页内容(DAY17)

>>:  [D15] CNN

Proxmox VE 客体机磁碟迁移

前两章我们已经透过 NFS 与 iSCSI 两种通讯协定将储存服务器挂接进来给 Proxmox V...

Day 6:常见的CSS tag+应用

上一篇,我们学到了如何用CSS选取HTML物件,但我们只选取了HTML物件,而没有改变HTML物件的...

DAY 17:Builder Pattern,一步一步的建造产品

什麽是 Builder Pattern? 将建造物件的实作拆开,由使用者觉得要选择建造什麽,来一步一...

【DAY 12】简单化、视觉化组织团队工作 - Planner

哈罗大家好~ 关於 SharePoint 功能其实还可以再说个五天八夜(?),但我想在善用云端工具提...

Day 3 - 条件式

条件式就是小学常写的造样造句:如果...就(否则)...的概念。 这边会介绍几种常用的条件式语句 i...