这次系列主要讲解的内容是神经网络容易被忽视的基础知识,这次讲第一部分:
基本神经元
作为线性分类器的单个神经元
为什么要是深度神经网而不是”肥胖“神经网络?
为什么在人工神经网络中的神经元需要激活函数?
一些主要的激活函数
神经网络中的偏置有什么意义?
初始化神经网络的参数可以全为0吗,其他普通线性分类器呢?
交叉熵损失存在的意义和与平方差损失相比有什么好处?
神经元
下面图表的左边展示了一个生物学的神经元,右边展示了一个常用的数学模型。乍一看还是有点相似的,事实上也是,人工神经网络中的神经元也有受到生物神经元的启发。总结要点:
在生物的神经元(也就是左图)中,树突将信号传递到细胞体,信号在细胞体中相加。如果最终之和高于某个阈值,那么神经元将会激活,向其轴突输出一个峰值信号,注意这里输出是一个脉冲信号!
在数学计算模型(也就是右图)中,首先将输入进行加权求和加上偏执,得到待激励值,然后将该值作为输入,输入到激活函数中,最后输出的是一个激励后的值,这里的激活函数可以看成对生物中神经元的激活率建模。由于历史原因,激活函数常常选择使用sigmoid函数,当然还有很多其他激活函数,下面再仔细聊!
需要注意:1.一个神经元可以看成包含两个部分,一个是对输入的加权求和加上偏置,一个是激活函数对求和后的激活或者抑制。2.注意生物中的神经元要复杂的多,其中一个是生物中的输出是一个脉冲,而现在大多数的数学模型神经输出的就是一个值,当然现在也有一些脉冲人工神经网络,可以自行了解!
作为线性分类器的单个神经元
比如基础的逻辑回归,结合上面的神经元知识,可以发现,逻辑回归就是激活函数是sigmoid的单层简单神经网络。也就是说,只要在神经元的输出端有一个合适的损失函数,就能让单个神经元变成一个线性分类器。因此说,那些线性的分类器本身就是一个单层神经网络
但注意,对于非线性的模型:SVM和神经网络走了两条不同的道路:神经网络通过多个隐层的方法来实现非线性的函数,有一些理论支持(比如说带隐层的神经网络可以模拟任何函数),但是目前而言还不是非常完备;SVM则采用了kernel trick的方法,这个在理论上面比较完备(RKHS,简单地说就是一个泛函的线性空间)。两者各有好坏,神经网络最近的好处是网络设计可以很灵活,有很多的trick&tip,很多理论都不清不楚的;SVM的理论的确漂亮,但是kernel设计不是那么容易,所以最近也就没有那么热了。
为什么要是深度神经网而不是”肥胖“(宽度)神经网络?
“肥胖”网络的隐藏层数较少,如上左图。虽然有研究表明,浅而肥的网络也可以拟合任何的函数,但它需要非常的“肥胖”,可能一层就要成千上万个神经元。而这直接导致的后果是参数的数量增加到很多很多。
也有实验表明,也就是上图的实验,我们可以清楚的看出,当准确率差不多的时候,参数的数量却相差数倍。这也说明我们一般用深层的神经网络而不是浅层“肥胖”的网络。
注意:说神经网络多少层数的时候一般不包括输入层。 在神经网络中的激活主要讲的是梯度的更新的激活
为什么在人工神经网络中的神经元需要激活函数?
上图可看做普通的线性分类器,也就是线性回归方程。这个比较基础,效果如右图。当然有时候我们发现这样的线性分类器不符合我们要求时,我们很自然的想到那我们就加多一层,这样可以拟合更加复杂的函数,如下图a:
图a图b
但同时当我们动笔算下, 就会发现, 这样一个神经网络组合起来,输出的时候无论如何都还是一个线性方程。如上图b右边,就只能这样分类。(那也太蠢了吧)。下图表示一层加如激活函数的情况!
一层很多时候是远远不够的,前面讲过,简单的线性分类器就可以看成是一层的神经网络,比如上图,激活函数是signmoid,那就可以看成是二分类的逻辑回归!
下面扩展到多层,如下图1,2:
图1图2
图1是一个简单的MLP(全链接神经网络),图2的右边课简单表示左图的可视化,那么对比之前的无激活函数的图,很明显是更加的非线性,拟合能力也会更强,同时可以想到,当层数更多,其能力也会越来越强!
简单来说:就是使得神经网络具有的拟合非线性函数的能力,使得其具有强大的表达能力!
简单扩展,神经网络的万能近似定理:一个前馈神经网络如果具有线性层和至少一层具有"挤压"性质的激活函数(如signmoid等),给定网络足够数量的隐藏单元,它可以以任意精度来近似任何从一个有限维空间到另一个有限维空间的borel可测函数。
要相符上面的定理,也就是想拟合任意函数,一个必须点是“要有带有“挤压”性质的激活函数”。这里的“挤压”性质是因为早期对神经网络的研究用的是sigmoid类函数,所以对其数学性质的研究也主要基于这一类性质:将输入数值范围挤压到一定的输出数值范围。(后来发现,其他性质的激活函数也可以使得网络具有普适近似器的性质,如ReLU 。
AI遇见机器学习
mltoai
领取专属 10元无门槛券
私享最新 技术干货