这一篇可能会讲的具体一些,也许你觉得没有用,不过20年以前在中国也没几个人觉得计算机跟自己有关系,可如今就连抢火车票都不得不用计算机。我在上篇文章说过,真正的人工智能还很远,至少这一波热潮中应该还无法实现,不过基于数据的机器学习就像统计分析一样,越发实用起来。也许做计算机研发的人是少数,但是懂点计算机知识能让你玩游戏、买电脑、买车票之类的都更方便些。什么都不懂当然也可以炒股,但你懂了多一些之后会发现,还是有些用处的。其实我下面讲的这些,也就是最接近常识的部分了,了解一下,有助于调教即将普及的各种智能产品和服务,并且能够知道它们的能力范围是什么,不要做愚民。熟练安装英雄联盟也是一项技能呢,最起码,它不是你去超市买一盒英雄联盟钉到你的电脑上。
-
机器学习的算法主要分2大类,分类和聚类。
在分类算法里,有个比较简单的分类方法,叫逻辑回归。一开始听好像不知道什么东西,回归貌似都听过,而前面的“逻辑”是英文单词Logistic,它究竟指的是什么呢?
先从回归讲起,线性回归是我们中学就学过的知识吧。怎么算的我们可能都不记得了,也不需要记得。不过它的功能就是拟合出一条直线,使这条线尽可能的离数据点近,从而近似的表示数据的走向。只需要知道这些就够了,我们的分类器也是以这个为基础,假设我们的平面上有两种点,我们就需要拟合出一条直线去把这2种点尽可能分开。机器学习分类的目的,就是去找这条线。当然,在3维的话,就是平面了,在高维,就是超平面。把直线或者平面的等式写成向量形式,就是WX+b=0这种形式,那么预测分类的公式就是:
X就是点的坐标向量,W就是参数的向量,b也是参数,最后得的y就可以用来分类啦。y>0就说明点在直线上方,y<0就说明点在直线下方。
这就是回归的含义了,而逻辑回归,就是在这个结果y上,再作用一个函数,这个函数是sigmoid函数,它还有一个名字叫logistic函数,所以这个方法就被称为逻辑回归了。为什么要作用一个函数呢,因为想把结果变换到(0,1)之间,就是这样。
之所以选它,还因为求W过程需要求导,而sigmoid函数的导数也比较好算。
只要把原先的结果做个减法和乘法就可以了。
-
剩下的问题就是怎么求这个W和b的过程了, 这就是训练的过程了。可能大家在大学里都学过数值分析或者最优化理论?那下面这个图可能不陌生,我们可以先为逻辑回归定义一个与W相关的损失函数,用来表示预测的结果和真实结果的差距,然后我们求这个损失函数的极小值,此时W的取值就是我们所要的了。下面这个图可能不陌生吧:
这就是梯度下降法了, 在W的空间上,朝着梯度方向去走,下降的最快,一步一步的就能找到极小值点了。
说是最快,其实也挺慢的,后来还有许多改进的版本,不过感觉并没有质的飞越。
总之,我们给定标记好的数据,就能够训练出权重W了,然后就能够做分类了,这就是机器学习分类的基本思路的一种了。
-
逻辑回归告一段落了。
有些人可能会说,拿直线去分类多傻啊,要是直线分不开不就完蛋了吗。所以我们在中学除了听过线性回归可能还听过二次回归。到了大学可能还学过插值什么的。忘了也没关系,总之,人们发明了各种各样的图形去做拟合,分类也是一样,我们可以用各种各样的图形去做分类。像SVM算法就依靠其不同的核函数来打到不同的分类能力,但是这么多函数图形,到底用什么,也是个很难的问题。我们希望能够有一种智能一些的方法。然而计算机向来都是勤能补拙,用50个直线去围出你想要的图形还不行吗?如果不够,那就100个,1000个,总是可以近似完成这个任务的。这样,我们只要设定一个n条直线的模型就行了,再也不用关心到底用什么函数了。
所以。。。。
-
接下来看一下这张图:
这张图的第一行就是前面所说的逻辑回归分类器,而下面一行,就是一个两层的神经网络。
原来神经网络的每一层就是WX+b啊! 怪不得人工智能没有实现!
细心的读者一定会发现,除了两个WX+b之外,连接神经网络两层之间的,有一个不明觉厉的ReLU。
为什么要有它,如果没它的话,就相当于第一个WX+b的结果直接当做第二个的X,就成了W2*(W1*X+b1)+b2。我们都知道,WX+b相当于一个线性变换,多个线性变换组合在一起,相当于一个,也就是说, W2*(W1*X+b1)+b2 = (W2*W1)*X + (W2*b1+b2),这样的话就算你求出两组W,也相当于只求出一组W来,那我们的deeper就没意义了嘛。
有了中间的函数,结果就会变成 W2 * f(W1*X+b1) + b2 ,如果函数f不是线性变换的函数,那就达到我们的目的了。在神经网络中,把这个函数叫做激活函数。它决定了受多大刺激的时候,产生多大反应。ReLU是目前比较常用的激活函数之一,它的函数形状就像图上画的那样,计算真的是很快很简单。
又会有细心的读者发现,那ReLU的纸片右上角还有个H呢,好像表示纸片的张数。它的确就表示纸片的张数。实际上图里描述的只是神经网络中的一条路径,既然叫做网络,那肯定不能是一条链。所以在第一层里,像W1和b1这样的纸片其实还有很多个,每一个都会产生一个ReLU的纸片,所以ReLU才会有H个,这H个结果又作为输入,与W2相乘再加上b2,得到后面的结果y。
我们可以这样类比,每一对W1和b1的纸片都像是一个数据分析人员,它们通过对数据X作分析,得到结果放到ReLU里;而W2和b2这一对纸片,相当于做决策的高层,它根据员工给出的意见加上每个员工的可信程度,综合分析给出答案y。
在神经网络里,越接近输入端的层,往往都是一些基础特征的提取工作,越接近输出端的层,往往都是对高级特征的一些分析。
网络足够宽足够深了之后, 真的是能表达一些复杂的关系,从而不用我们费力去探寻输入数据之间的关系。它的厉害之处并不在于它效果多么好,而在于它能适应复杂的关系,把人从提取特征的劳动中一定程度的解放出来,增强了机器学习算法的通用性。
神经网络就像乐高一样,我们通常不再需要去单独发明新算法去解决问题,而只是拼装我们的神经网络结构就行了。
深度学习和神经网络这两个词在形容这个领域的时候是一个意思的。所以其实深度学习在计算方法上没什么难的,甚至比大多数机器学习的方法要简(L)单(O)易(W)懂(!),不过,从用什么就要设计什么,发展到标准化、模块化、可定制化的方法,不得不说是一种进步。
-
最后,就算是神经网络像乐高一样,但乐高可不止有方块。方块的确可以造出许多漂亮的房子,但在造车的时候你还是需要轮子的。所以神经网络的每一层一定都是WX+b吗?答案当然是否定的了。
-
-
-
最后的最后,祝大家新年快乐!