Hinton Neural Networks课程笔记1c:几种**函数Linear、Binary、ReLU、Stochastic binary neurons
本章简单介绍了一些神经元的**函数,包括Linear、Binary、ReLU和一些概率统计方面的变种。
笔者在刷CS231n的时候也记录了相关内容,贴在这里方便比较:CS231n课程笔记5.1:神经网络历史&**函数比较
为什么**函数都相对简单
首先说明idealize具有很多实际意义:某件事物本身是复杂的,其内可能包含许多没有应用价值的小细节,idealize可以去繁化简,从而可以更好的把握主旨;idealize之后就方便使用数学方法计算,并且对其他类似的系统做模拟;一旦能够了解主旨之后,加入细节是一个相对简单的过程。(笔者印象中最有名的idealize的例子应该就是牛顿定律和相对论了)
综上,idealize虽然得到的结果不准确,但很有意义。神经网络就是对神经元群的idealize,具体可以表现为使用实数值模拟离散的spike活动,**函数用一些简单函数进行模拟。
**函数
线性函数 Linear
如上图所示,就是输入的加权和再加上bias。这个函数十分简单,但是功能也很有限。(如果神经网络中仅使用线性**函数,那么其只能学习到线性函数,因为多个矩阵连乘还是矩阵)。
Binary Threshold Neurons
如上图所示,对于大于某个threshold的输入,输出1,否则输出0。Hinton有提到这是受到Von Neumann在设计计算机过程中的思想影响提出的**函数。(笔者个人觉得该函数满负荷自己对神经元的直观理解的,即当足够的化学信号接收到之后,相应个神经元的细胞膜打开离子门,产生一个spike。但明显这种**函数在绝大多数(/除了threshold点以外)区域导数为0,而唯一的变化点也没有经典导数,不适合用于现代神经网络中)。Binary Threshold Neurons有两种等价表达式如下:
Rectified Linear Neurons/Units (ReLU)
其公式形式如上图。ReLU是现在最常见的用于神经网络内的**函数了,简单操作,耗时少,又具有非线性特性,并减免了梯度消失的问题。(现在也有很多ReLU的变种,2016-2017年左右刚出了一个SeLU,有时间再去刷刷这个论文)
Sigmoid
这个函数也是相当的经典,在神经网络初始阶段被广泛应用,方程式是经典的逻辑斯蒂函数。这个函数全部区域可导,而且导数易求;输出在0到1之间。但是相比于tanh,其输出均为正数,所以输出的均值不为0,而这又被证实不易于神经网络学习收敛;其次对于接近于0和1的部分,其导数接近于0,所以有明显的梯度衰减问题。故而在深度神经网络内已经很少使用其作为**函数。
随机二值神经元 Stochastic Binary Neurons
这种神经元的输出仍是只有0或1,但与Binary Threshold不同的是,它把sigmoid的输出当做概率,并根据其按照一定概率输出0或1。类似的也可以把ReLU的输出当做Poisson rate。