神经网络是一种比较难以理解的结构,关于神经网络的各种层次的说明解释,大家请移步百度、google
本次的分享会从人类视觉角度、生物角度谈一谈神经网络中的一些优化算法。
首先,计算机领域设计出来的算法、模型和数据结构,都可以理解为一种建模操作(这是一种解释方式)。比如:决策树,可以理解为把数据结构仿造树枝树干的结构进行设计的,以树为模型;SVM,可以理解为把数据堆从多维的角度,进行高维分类,以超平面为模型;然后,神经网络,以生物神经结构为出发点,仿生物进行计算机建模。
因此,数学模型,计算机模型,跟现实中的东西不能一一对应,也不需要一一对应,我们只需要用一些存在的形式,来作为设计模型的解释。也许很多东西不能理解,比如全连接层的结构跟神经结构是天壤之别的,但是我们仿造这种神经结构设计全连接层的结构,它的效果非常显著,这就足够了。
一、relu和leaky_relu
其图像分别如下:
怎么解释这两个图像呢?
先说relu。
比如:人的听力,在20Hz以下咱们是听不到的,任何低于20Hz的振动频率的发声,我们是感受不到的。换句话说,我们的神经元对此完全没反应。但是在高于20Hz以后,声音变大变小我们能比较清晰的感知的,这部分relu函数用线性函数来体现。所以,relu反应的就是这一种情况。relu图像看出,在某一个阈值(x<0)以下,函数的值都是0,此处就是用数学的方法来模拟生物进行模型设计的典例。
那leaky_relu呢?
说完声音,我们聊聊温度。大家都应该听说过温水煮青蛙的故事吧。我们把一直青蛙放在20度的凉水中,如果慢慢的给它加热,到50度、70度,他就被温柔地热死了,但如果我们瞬间把它丢进温度为70度的热水里,它可能一下就蹦出来。这个故事有点不太靠谱,但是它足以说明的一个问题。神经元的反应是有强弱之分的。
其实人的神经不完全如relu函数表达的那样。就比如刚才说的温度。如果我们把手放在20度的凉水中,然后慢慢加热,在50度之前,我们是能感受到一点点温度在升高的,但是不足以我们热得把手拿出来,这个温度变化非常慢,我们感受到的变化自然也很微弱,但是不管怎么样,我们还是能感受到。因此,leaky_relu体现的就是这一现象。不是所有的神经元反应都是如同relu一样的。所以才提出leaky_relu这一优化算法。说来说去,都是对的,因为从仿生角度,两者都可。只是笔者个人比较偏向后者的用法。
至于其他的各种relu变体,大家继续移步百度和google
二、dropout
dropout,简单理解为“丢弃”,举个栗子说明这个“丢弃”的意思。我们看下面一张图
我们玩一个找茬游戏,在上图中找出彼此不一样的局部。其中黄色标注部分是我一眼就看到的,然后我们着重说一下红色标注部分。红色部分是我们基本可以确认,找不出相异点的部分,即:即使你在这些地方怎么找,都找不出不同之处。也就是说,这些部位,对我们找不同没有用,因为真正不同的地方在黄色区域。
再举一个例子,在一个十字路口,我们让一个红绿色盲用两分钟去辨认哪盏灯是红灯,哪盏灯是绿灯,是不可能的(有人说,我看车什么时候走,就知道了。。。别戳破,咱们聊点正经的)。也就是说,红绿色盲本身就对红绿不敏感,甚至没感觉,而你倒好,偏偏让人家去识别红绿灯,不管怎么识别,他唯一能做的就是,猜。。。所以你说,他说上面是绿灯时,你信不信?
在神经网络中,有些神经元或者神经元参数,对接下来的训练层是没有任何激活作用的,即:我们所谓的不敏感。如同上例的色盲,无论你再怎么让他辨认,十分钟二十分钟,甚至十个小时,他都没有办法认出哪个是红灯,哪个是绿灯。这部分辨识红绿的神经元对他来说,已经没用了。于是在神经网络中,我们使用“丢弃”的方式,drop掉部分神经元。但是,在神经网络中,我们并非把所谓的“不敏感”或者“无用”的神经元丢掉,而是随机丢弃一部分神经元,这么做是为了防止边界“死亡”神经元的对网络层的0贡献,和各种神经元之间的强连接,让机器真正学到其“规律”。
L1、L2和Dropout传送门:
http://lib.csdn.net/article/deeplearning/51257
三、BN
https://blog.csdn.net/hjimce/article/details/50866313
BN是一个前两三年才提出的一个优化神经网络的措施,在一定程度上代替了标准化和归一化、L1、L2以及Dropout。它在某种程度上,打乱了原有的特征分布,形成新的统一的分布态,具体对复杂的神经网络是好是坏,难以用有限的数据做说明。只是很多研究以及笔者自己做了几套训练数据对比,BN配合Dropout相对比较号,比较明显的就是收敛速度相对快一点。详细研究文献,大家可参考google文献进行查阅。
左图是单纯的Dropout做的训练,右图是BN+Dropout做的训练,说实话差异并不大,怎么用还得视具体数据集观察。但是在设计神经网络的时候,建议把口留出来。