揭秘AI和量化投资中的唬人词汇:机器学习、神经网络、深度学习

本文以一个女儿出生成长买房结婚为线索讲解相关概念。

读完本文,你应该能够对以下概念有一个直观了解,至少可以唬唬人:

机器学习,人工神经网络、深度学习、训练集、测试集、分类任务、回归任务、梯度下降、非线性模型、过度拟合。




这几年在AI中使用最多的词汇是机器学习、神经网络、深度学习,而这些词汇又常常被用到量化投资中,使得刚弄清楚多因子是啥的投资者又陷入到新的沉思。





这些词儿到底啥意思呢?




机器学习

先说一下我们人类是怎么学习事物的。

我记得几年前有一次陪女儿看识物卡片,我问她为什么这张卡片上面是小猫,她说因为它有“尖尖的耳朵”。我印象中并未带她看过真的猫咪长什么样(也许别人教过她),她的认知大概率来自小猪佩奇里面的小猫凯迪或者黑猫警长。

后来我们在小区里玩,跑过来一只尖尖耳朵的小狗,但是2岁的女儿毫不犹豫的就认出了这是一只小狗,而不是小猫。而真正的小猫,她也一样能认得出来。

其实,在女儿认识小猫的过程中,她接收到的信息远不止尖尖耳朵这一项,包括长胡须,有毛,长尾巴,走路的样子、叫声、甚至于气味等等,所有的这些信息经过一定的处理,最终她学会了识别一只猫。




从照片中认出一只猫,这对三岁小孩来说是非常简单的事情,但是如果我们想让计算机去完成这一任务,可能会非常复杂(谷歌的猫脸识别很有名)。如何让机器像人类一样获得学习能力,完成某项任务,就叫机器学习。

 

这个学习过程可能会是怎样的呢?我女儿第一次看到一只小猫,她记住了它是白色的,有尖尖耳朵,长长尾巴。后来他看了动画片黑猫警长,发现猫也可以是黑色的(发现颜色好像不那么重要),除了尖尖耳朵、长长尾巴,还有长长的胡须。过几天她又看见了一直黑色的小狗,也有尖尖耳朵、长长尾巴、长长胡须,还会汪汪叫。我告诉她这是小狗,她又记住了,汪汪叫的是小狗,喵喵叫的是小猫。如此反复多次,在潜移默化中,她拥有了分辨小狗和小猫的能力。

如果让机器来模拟这个过程,可以这样。我们人为提取一下判断小猫的特点:胡须有多长、耳朵是否尖尖、尾巴有多长、颜色是什么样、叫声是什么样。这些属性就叫做特征,他们组成的一个数组就叫做特征向量。

 

现在我们手上有100张会发声的小动物的卡片,30只小猫,30只小狗,40只小猪。每张卡片我们都按照这一组特征向量提取了相关信息。我们把这100张卡片的特征向量一个一个丢给计算机,第一个丢过来我告诉计算机这是小猫,第二个丢过来我告诉他这不是小猫,如此往复,让它像小孩儿一样一遍一遍的去学习接受这些信息。

这100张卡片就叫做训练集。我每次帮她判定“是否是小猫”,这种判定就是我加上去的一个标签向量。

假如计算机通过100次学习形成了某个判断小猫的模型,然后呢我们想看看这个模型靠不靠谱,于是又找来了50张各种动物的卡片,把他们的特征向量丢给这个模型让它去判断,看看准确率有多高,这50张卡片就被叫做测试集。

 




什么样的模型最简单呢。我们最先想到的就是加权打分这种办法,如果某张卡片的得分大于b,那就判断它是小猫。比如动物叫声这个特征,我们就给他一个较大的权重,长尾巴这个特征,赋予一个中等的权重,颜色这个特征就赋予一个很小的权重。这些权重用W来表示,这种模型就是一个有参数的模型。

 

虽然我们对权重W有了一个大致排序,但是各个特征值的W到底多少才准确呢?那这样吧,我们先拍脑袋给一个。就这样,我们带着一组拍脑袋出来的(W,b),开始了模型训练之路:输入第一张小猫卡片的特征,我们告诉他判断正确,于是(W,b)不变(说明我们拍脑袋蒙对了),输入第二张小狗卡片特征,结果模型仍旧告诉我这是小猫,我们告诉他这次错了,于是回去修改(W,b),这就是一次参数优化,输入第三张卡片。。。如此往复,不断优化。

 

这种学习方式,每次向模型输入特征,我们都会告诉他对应的标签是什么,即每次的判断是对了还是错了,监督它进行调整。这就叫做有监督的机器学习。

如果这100张卡片上没有任何文字标出动物的名称,只有图像呢?我们也可以把这100张卡片的特征向量丢入到模型中去挖掘一些规律,这就叫做无监督的机器学习。比如我女儿他每天看这些卡片,时间久了,她就会把小猫和老虎分成一组,哈士奇和狼分成一组,在这个过程中我从来没有干扰过他提示过她小哈和狼是一类的。

 

在上面这个判断小猫的例子中,标签是“是否是小猫”这个判断,“是”与“否”是两个离散的类别,所以这种任务也叫分类任务。如果标签不是小动物的名称,而是小动物尾巴的长度(长度是一个连续值),那这个预测尾巴长度的任务就是一个回归任务。

大部分的机器学习,不是分类任务,就是回归任务。

人脸识别是分类任务,预测GDP增长就可能是一个回归任务。

 

下面烧脑的来了。

我们如何才能通过训练找到最优的参数(W,b),使得模型的预测最准确呢?

啥叫预测最准?说白了就是模型的预测值和真实值之间的差距最小,有100组数据,那就是这100组差距的和最小。如果要准确定义,可能要用到交叉熵的概念了,先不管他。我们就管这个差值叫做损失函数,Loss(W,b),没错,它是(w,b)的函数,不过这个函数大概率是没有规则表达式的。

找到最优的(W,b)最简单的办法就是暴力穷举法,把所有可能的(W,b)的值都试一遍,谁的Loss最小,谁就是最优呗。但实际上,(W,b)的组合可能是无穷的,怎么办?

 

如果你是高中生,你第一个想到的办法就是求导啊。可是求导你得是连续可导的数据才行,实际中的数据大多是离散的,不!可!导!不过这里我们可以投个机取个巧,我们先找一组(W,b),然后一点一点往周围摸索,每摸到一个地方,就会有一个Loss值,直到有一天我们摸到了一个点,从它出发往周围怎么摸,Loss值都比这个点的Loss值大,ok,这个点就是一个局部最优的(W,b)了。这套流程就叫梯度下降。每一次摸索更改的距离步长,就叫做学习速率。

 

 

我们相信图片有时候更具说服力。如果您对我们搜集和制作的图片感兴趣,可以关注我们另外一个专门用来发图的公众号“韭菜说图”,广告完毕。




时光荏苒,一转眼我女儿到了找对象的年纪。为了让她在婚恋市场上更具有竞争力,我准备给她在市区买一套房子。这要考虑的因素可就多了,学区,户型、物业、面积、朝向、楼层、价格、工作单位距离等等,到底怎样选才能够做到最好的保值增值呢(未来一年能涨价)?正好我有个朋友是当地房屋中介的经理,我从他那里要了一份过去三年该地区房屋交易的所有数据,真是如获至宝啊。




这里我仍旧可以用之前的加权打分的方式来做模型,不过我仔细看了看数据,发现似乎学区越好的房子,距离女儿的工作单位越远,这可真让人头痛。所以在构造特征向量的时候,我还要把这两个特征之间的相关关系考虑进去,除了学区等特征之外,又增加了一个“学区×工作单位距离”这个因素。这样一来,这个模型就成为了一个非线性的模型,它比原来的模型增加了一个维度,变成二维的了(回想中学的二次方程)。以前那种纯粹每个特征加权打分相加的模型,其实是线性模型(一维的)。

维度增加有啥好处呢?有时候,非线性模型可以帮助我们训练出更好的模拟效果。

不过在实际中,我们经常发现,虽然当维度增加,模型的拟合效果更好,训练集的成绩越来越好,但是很有可能测试集的效果反而会越差。也就是说测试集在训练出来的模型上很不适应,这就叫做过度拟合或者过度优化。

这不难解释,我是拿过去三年的数据训练出来的模型,很有可能近期政府出台了一个限购政策,对房地产市场的买卖行为都产生了深远的影响,我再拿现在的数据去出最佳的购房方案,很可能不准确。

这也就是为什么很多量化投资团队会出现“回测美如画,实盘稀里哗”的原因。

比如曾经大肆炒作的百度百发100指数,宣传的时候是这样的。红色那个,牛不牛?

实际运行当中是这样的:蓝色的基金净值远远跑输沪深300和同类型基金。

训练集很优秀,测试集很垃圾。




当然,解决过度拟合的方法有很多,比如引入学习曲线。无论用什么方法,最终都是在训练集和测试集的效果之间平衡,过度拟合和欠拟合之间平衡。这个世界上,不存在完美的量化模型。

 

现在可以稍微总结一下,刚才我用来举例识别小猫,预测房价涨跌的模型,都是逻辑分类模型,它只是是机器学习的算法之一。再给他加一些定语的话,可以说是有监督的线性分类模型(识别小猫),有监督的非线性分类模型(预测房价涨跌)。

 

除此之外,还有什么KNN最小距离算法,决策树算法,聚类算法、神经网络算法等等,不同的算法在处理不同问题的时候会有各自的优势。

 

终于,你看到了神经网络这个时髦的词汇。

下面我们进入本文的高潮。

 

房子买好了,我就坐下来和女儿聊天,分析她到底要喜欢什么样的男生。她说要高大帅气、有知识、有内涵、名校毕业、收入不能比她低的。在她的要求基础上,我和她妈也加了几条,要求对方家庭稳定、虽然自己有房但是对方家里也要有房,还有就是最好是本地人,这样将来不用两地奔波,女儿表示同意。




可是接下来的事情出乎我的意料,我连续给女儿介绍了几个符合条件的小伙子,她见完以后立即表示不满意。我把她叫过来问她为什么不满意,她说“我也说不上来,反正就是没感觉”,后来再三追问下,又挤出了一句,“我觉得他们都不懂我”。

听完我就崩溃了,心说:“你这丫头是不是太作了,懂你这么虚头八脑的东西,你脑子到底怎么想的?”

是啊,面对择偶这个问题,女儿的脑子到底怎么想的呢?

一定是有些特征我们想到了,但是有些特征我们忽略了,所以用条件筛选(输入特征向量)这种方式来找到Mr Right,常常会碰到硬性条件都满足,但就是没感觉这种情况。是否可以有其他办法呢?

模仿人脑的工作方式是否可行?

大脑皮层的建筑材料是神经元细胞,每个神经元细胞有一个细胞体,和一个用来把信息从一个神经元传向下一个神经元的结构,叫突触。这些神经元在大脑皮层互相连接在一些,但是不同区域却承担着不同的功能。

当女儿跟一个小伙子聊了一下午天,她一部分皮层区域告诉她“嗯,这小伙子挺帅”,显然,这片区域是外貌协会。而另一层区域则告诉她“他说话看起来没什么教养”,这片区域是内涵识别区域,类似的皮层区域还有很多。

为什么接收到同样的信息,不同的皮层区域反应不一样呢?这是因为不同区域的神经元有着不同的响应函数。这跟前一段时间刷爆朋友圈的左脑右脑游戏是一个意思。

这个函数有什么特点呢?首先,它绝对不可能有一个规则的表达式,否则就不会存在“仁者见仁智者见智”了(不同人之间),也不会存在“向来回首萧瑟处,也无风雨也无晴”了(同一人不同时间)。其次,它绝对不是线性的,否则人们思考事物就变成了简单的矩阵乘法,就不可能会有思维的跳跃。

 

真是头痛,我女儿脑子里的对男生的响应函数到底是怎样的呢?既然永远无法获知,那只有一个办法,就是让她不断地见各种男生,有可能是的话,见上个百八十个(现实中可不能那么疯狂),这些男生的信息作为训练集不断地输入到她脑子的响应函数中,同时她的大脑也会告诉她“这个可以”,“那个不行”,“这个凑合”之类的督导。次数多了,她就会知道自己到底喜欢什么样的男生。正所谓,弱水三千、只取一瓢饮。

 

如果用计算机去模拟这一过程,怎么做呢?这时候就用的上神经网络算法了。

由于计算机对线性运算速度更快,所以我们在设计模型的时候,先对输入数据进行线性计算,然后再用一个非线性函数把它激活,赋予它非线性特性。这样就有了个单层的神经网络。




同时呢,数学书还有一个非常牛逼的原理,叫做普遍逼近性原理universal approximation theorem,它指出如果给定足够的容量,一个具有单层的前馈网络足以表示任何函数。




也就是说,我们在输入层和输出层之间加一层,叫做隐藏层。这样一来,无论什么样的函数,我们这个模型都可以进行模拟了。我不需要知道这个函数的具体样子是什么,总之你给它输入输出,它在中间这个黑箱中就可以训练所有的参数,“函数是什么我不管,反正我能算!”

加了隐藏层,就是一个多层的神经网络。




 

这时候我们又面临一个问题,我要向隐藏层中加入更多神经元以增强模型能力,是应该全部加到一层中使其更宽,还是加入更多的隐藏层,使其更深呢?

从实践中,科学家们发现,深层模型训练参数更快,预测效果也更好。

于是,便有了深度学习!




用于深度学习的神经网络类型也有很多,比如我们把其中的线性运算设计成权重相乘,这就是DNN,如果是卷积运算,这就是CNN,如果设计成运算单元模拟记忆,这就是RNN。

 

神经网络算法并不是新鲜事物,上世纪60年代就被提出来了,只是这种算法虽然听起来很美妙,但是它巨大的运算量对硬件的要求特别高,同时又需要大量的数据去灌溉它让他学习。这在当时是不可行的。但是现在条件好多了,硬件也便宜了,据说阿尔法狗使用了在与李世石的比赛中,动用了1000个中央处理器(CPU)和200个图形处理器(GPU),每分钟的电费就高达300美元。同时由于互联网的快速发展,大数据的获得成为了可能。现在获取10000张小猫图片的成本,可比40年前小多了。

 

如果我们要更加形象的去描述深度学习的话,可以这么说:我们希望计算机能够像成长中的孩子一样,通过不断地观察世界、和世界交流来获得经验、总结规律,成为具备学习能力的学霸。女儿看到小猫的时候,不需要去挨个分析他的耳朵、胡须、叫声来判断,而是一看到就知道那是小猫。而当她看到心上人的时候,也不需要去想那么多苛刻条件是否符合,正所谓众里寻他千百度,蓦然回首,那人就在灯火阑珊处。
 

0 个评论

要回复文章请先登录注册