昨天我们提到当你的Network很深的时候,设定同样的Learning rate,就会产生输入还是几乎随机的时候,输出已经收敛了,就会以为是找到Local minimum。而我们可以透过改Activation function来解决这个问题。
这个Activation function的输入 如果大於 0,输出 就会等於输入,而如果输入小於 0,输出等於 0。而为什麽要选择这个Activation function呢?
刚刚我们提到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输入小於 0,输出会是 0,这样你就没有办法更新你的参数了,所以应该要让在输入小於 0 的时候,输出还是有一点点的值,就是在输入小於 0 的时候,输出是输入乘上 0.01,这个叫做Leaky ReLU。
有些人又会觉得说为什麽是乘上 0.01 而不是乘上 0.07, 0.08,所以他们又提出了Parametric ReLU,是在输入小於 0 的时候,输出等於输入乘上一个Network的参数 ,可以透过训练资料学出来,甚至每一个Neuron都可以有不同的 值。
<<: javascript函式与动态变更网页内容(DAY17)
前两章我们已经透过 NFS 与 iSCSI 两种通讯协定将储存服务器挂接进来给 Proxmox V...
上一篇,我们学到了如何用CSS选取HTML物件,但我们只选取了HTML物件,而没有改变HTML物件的...
什麽是 Builder Pattern? 将建造物件的实作拆开,由使用者觉得要选择建造什麽,来一步一...
哈罗大家好~ 关於 SharePoint 功能其实还可以再说个五天八夜(?),但我想在善用云端工具提...
条件式就是小学常写的造样造句:如果...就(否则)...的概念。 这边会介绍几种常用的条件式语句 i...