深度学习与金融市场——为何无法复现训练结果
本篇文章来讨论一下很多机器学习和深度学习Hacker会碰到的一个问题,尤其是做量化的同学特别容易碰到的一个问题。模型训练出来准确率有70%,loss也非常漂亮。但是当用这个模型去做预测时,发现模型的准确率偏离的很厉害。有同学要说了,这不就是泛化能力不行吗?过拟合了嘛!好嘛,拿这个模型来测试一下你的训练数据集,然后就发现准确率只有50%。这就奇了个怪的吧,很明显不是过拟合的锅。最初的时候,作者本人也踩过这个坑,起初一直认为是泛化能力不行,直到心血来潮用训练数据和验证数据来跑了一下预测,才发现确实是丢了一个老程序员的裤衩子。这里我只是举了一个栗子,这个栗子并不典型,但是让我发现了自己没穿内裤。从而引发了一系列的思考,发现也许我训练的结果不能重现,也就是我前面所说的多个收敛点。事实上,多个收敛点,理论上是不应该的,这并不利于我们来解决和分析问题。
那么我们本文要讨论的问题就来了,如何让训练结果可以复现,也就是说这次我训练得到了63%的准确率,隔天我又训练一次,我希望仍然是63%的准确率,当然我说的前提是没有去改变你的超参数。但是往往你发现你并不能得到同样的结果,即便你得到了相近的结果,你会发现预测出来的买入卖出持有线完全不一样!所有的这些的原因就是因为“随机”。“随机”这两个字发生在神经网络的各个部分,为什么呢?随机其实是最高效的算法!比如我们的神经网络的weights,最初会被随机的初始化,有同学要问了,为什么不初始化为零?如果初始化为零,那么所有的weights的变化都是一样的。除了weights最初会随机初始化,还有什么是随机的呢?还有正则化、优化器都会使用随机,可以说随机充斥在神经网络训练的每个神经元。不仅是神经网络,而且你自己也许也会生成一些随机数,比如你用random search来自动调参。这些都会让你无法复现你的某一次训练。
那么如何能够获得一模一样的训练结果呢?答案其实很简单,设置随机数种子。而你可能发现设置了numpy.random.seed(seed_number)之后,得到得仍然是不同的结果,这就尴尬了,其实这只是numpy的随机函数,深度学习框架后端可能用的是其他的随机数发生器。这也很简单,设置backend的随机数种子即可。
有同学要问了,既然神经网络设计了随机的机制来获得更高效的训练速度,那么为什么要去获得可以复现的结果呢?去掉了随机机制,训练出来的结果是否不是最优解呢?复现训练结果在金融量化上是非常有用的,首先,我们可以用来确定我们的模型和系统,不被复杂的各不相同的结果所左右!其次,我们并非始终使用同一种子,我们可以随机来生成种子,然后我们程序记录下每一次训练使用的种子,也就是说,我们会把种子作为我们的一个超参数。但其目的仅仅是当我们获得最优解的时候,我们希望它是可以被复现的,这样我们就可以进行进一步的实验,并且当我们使用多个模型混合的时候,这是尤其重要的。假设你训练好了一个模型,而你将它和另外一个模型混合起来的时候,你发现你的训练结果不尽如人意,而其原因是因为你原来的模型回到了原点,看似你拥有所有调好的超参数,但你却忽略了随机种子,导致你的训练进度大大变慢,或者你开始不确定混合模型是否能工作。
总而言之,能复现训练结果在金融量化工作中的重要性犹如戴着大金链子吃烧烤对于东北爷们的重要性。
新专题顺便在此预告一下,后面会有一个零基础学Python和深度学习应用的专题文章,专门针对入门者或者没有相关经验者。其实一直有这么一个想法,自己做机器学习和深度学习这么多年,到现在发现深度学习其实已然到了落地的阶段,其实并没有大家想象的那么复杂,需要数学博士来做。而目前的深度学习培训大部分都是一开始就上数学,而深度学习的应用关键并不在数学上,而在于行业。
对一个行业的深入理解,会催生出深度学习的落地的想法和思路,至于数据,其实没有大家想象的那么重要。这是为什么目前的人工智能公司大部分停留在讲故事、发论文和参加比赛上,因为他们大部分是没有行业工作经验的学院派,既不懂行业,也不愿意去懂行业,并且很多博士停留在Matlab算法建模,程序还得找程序员来写,中间的Gap巨大,更重要的是资本催生了懒惰、高傲和不接地气。最终要把深度学习落地,还是需要产品能力强,工程能力强,并且懂行业还懂深度学习的人。这也是我为什么一直不看好商汤的原因,产品能力太差!
之所以想做这个专题,也希望能够以热门平台的流量,让更多的人敢于进入到深度学习和人工智能的领域,并和自己原来的领域结合。我更希望能有在原本行业很专的同学,可以进到深度学习应用的领域来。把深度学习和工程能力、产品能力结合起来,就能催生出更多的优秀的产品。有同学说,我们应该还是去研究深度学习和神经网络的基础原理,这样中国才能领先!事实上人工智能也好,机器学习也好,深度学习也好,都没有大家想象的那么难,千里之行,始于足下。创造一个属于你自己的CapsuleNet,并不是不可能的事情。也许强人工智能的基础模型,就会产生在中国!
了解更多技巧,请移步我的星球:AI量化(https://t.zsxq.com/RvfY37y) 星球限时免费,如需加入,请私信我获得免费邀请码!
零基础学习Python与深度学习应用请关注星球:Python与深度学习 https://t.zsxq.com/bUFayZ3
微信公众号:QTechAI