赞
踩
线性分类器只能用直线对数据进行划分。因此当原始数据分布的比较好的时候,如下图所示,用线性分类器就能够很好的把图中的黄点和蓝点分开。
但如果不同种类的数据融合在一起时就不太好用直线去分割了,比如说下图。
或者说是下面这种数据分布
而神经网络的出现主要是引入了非线性计算,也就是这里的max()函数。神经网络中的非线性函数被称之为激活函数activation function用于决定神经元是否有被激活。
有了神经网络以后数据分布的比较复杂的情况就能够用“曲线”去很好的分类了。
根据上图给出的三个非线性激活函数,上面例子中所使用的非线性激活函数用的就是ReLU函数。
我理解的是单从公式上看隐含层也像是在打分?但只不过是打分的结果不是按照总的种类个数来打分,是按照人为给定的神经元的数目来来打分。就比如说上面分黄点和蓝点的例子,如果是原有的线性分类器,最终的Score向量应该只有两个元素,一个保存黄点的分数另一个保存蓝点的分数。但神经网络中的这个隐含层更像是先分了n类,这n类是n个neural,输入数据针对这n个neural先打个中间得分。然后,这一层的分数和W2结合后才能得到最终的两个元素的打分结果。
隐含层是由许多个神经元构成的,是学习后提取的“高级/复杂特征”,这些特征随着W的变化而变化,而W又随着L的减少而不断地修正。最终,当L减少到很小以后,我们就找到了最能fit这组数据的复杂特征。
比如说,当只有两个两个神经元的时候,通过学习只找到了两个特征,不足以代表数据的特征。
随着神经元的增加,系统所能表征的特征也越丰富。(4个神经元)
当神经元的数量增加到6个的时候,就足以表征所有的高级特征了。
而且这也是深度学习要高于机器学习的地方,我们不再需要人为的去定义一些特征然后让机器去学习,取而代之的是让电脑自己去学习/去找一些他认为重要特征,而这些特征就是神经网络中的神经元。
神经网络可以是单层也可以是多层,它决定了网络的深度。深度神经网络通常具有更多的隐藏层,这意味着它们可以学习更复杂的函数关系。
貌似每一层的神经元个数也和隐含层的层数设置的多少的意义差不多,比如说:
和线性分类器一样,神经网络也有Loss function,也要用梯度下降法去优化权重函数W。所不同的是,由于神经网络中的层数较多,且嵌套了很多非线性函数,因此损失函数L就变得很复杂,不太容易直接求出L关于W的梯度。
解决这一计算梯度的难题的方式就叫反向传播,其实,我觉得反向传播只不过是个“新词”。既要求梯度,也要调整W,只不过多了个链式法则+computational graphs。
这是computational graph他有助于计算局部导数local gradiant。
他把复合函数的导数拆分成一连串偏导数的乘法,每个乘法的乘数分别来自于上游导数和局部导数。
以下图为例:
函数f(x,y,z)的梯度是:
对于其中的x方向和y方向的是符合函数需要进行复合函数的求导:
代入图中的local grad和upstream grad,得到:
在一般的深度学习中我们所要求的梯度一般都是要求损失函数L关于权重矩阵W的梯度,因为就是要通过最小化L去调整权重矩阵W 。
(全文完)
--- 作者,松下J27
参考文献(鸣谢):
1,Stanford University CS231n: Deep Learning for Computer Vision
2,https://zh.wikipedia.org/wiki/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D%E6%B3%95
(配图与本文无关)
版权声明:所有的笔记,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。