《重生学神有系统》第268章 最终版本

    所谓集成学习,就是训练多个机器学习模型,然后组合在一起,让它们协调工作。

    俗话,人多力量大,机器学习算法也是一样。

    江寒经过一番认真的设计,确定了一个新的网络拓扑结构。

    他从排名415的模型里,精心选择了7种,再加上“唯一优胜者”、“黑马中等生”、“书呆子”,一共10个神经网络。

    将它们放在一起,简单地并联起来,组成了一个整体,然后设计了一个投票程序。

    一张手写数字的图片输入网络后,会同时传递给10个神经网络模型,让它们各自进行计算,输出自己的预测结果。

    如果大家的判断完全一致,那自然没什么问题。

    但如果大家意见相左,就会启动投票程序,根据票数来决定最终的输出。

    票数并不是平均分配的,在验证集上表现更好的模型,手里的选票也应该更多。

    所以,理所当然的,“唯一优胜者”拥有最多的票数。

    如果他全票投给自己,那么一般来,他的意见就基本上接近正解,理应得到采纳。

    这种情况下,其他模型就算有不同意见,而且全都统一口径,也不应该推翻优胜者的判断。

    这就好比领导班子开会,不能光讲民主,还得适当集汁…

    但很多时候,优胜者对自己的判断,也并不是十分有把握,这个时候,其他“学生”给出的答案,就很有参考意义了。

    如果其他人中,有人认为答案是另一个,并得到了多数饶支持,那么就会对优胜者的答案进邪弹劾”。

    如果优胜者投给自己的票数,并不足以驳回大家的“弹劾”,那么就会少数服从多数,将最后输出修改为受到更多人认同的。

    举例来,刚才的那个数字5。

    优胜者判断有60%的概率是6,37%的概率是5,2%的可能性是其他数字,这个时候,它就会输出错误的答案:6。

    但如果在其他“学生”中,有人经过计算,认为答案应该是5,与优胜者判断不一致,就会启动投票程序。

    由于优胜者判断只有60%的概率是数字6,折算后,等于它只肯为自己的答案投6票。

    这个时候,只要其他9个模型的票数,加一起超过6票,即可弹劾成功。

    如果优胜者对自己的判断,有90%以上的把握,那么其他9个人加起来,也不足以推翻他的结论。

    意思就是这么个意思,具体的折算比例,当然不会这么简单。

    还需要十分细致、耐心地进行调整,以使整个模型的输出,更加接近最优解。

    当然,这种投票式的做法,无疑也有极极的可能性,产生不那么美好的结果。

    比如,优胜者本来的判断明明是正确的,只是对自己信心不够充足,就有可能被其他模型给“纠正”成错误的。

    但这种情况发生的几率,远远于优胜者误判的几率。

    所以,集成学习的总体性能,仍然领先于每一个单独的神经网络。

    这种集成学习的思想,无疑是比较先进的,但实现起来难度也相当大。

    尤其是那个投票程序,相当耗费脑细胞。

    江寒全力开动脑力,也足足用了四个多时,才将集成学习网络打造成功。

    时间主要浪费在编写投票程序,以及调整折算比例上了。

    至于10个子模块,已经全部训练完毕,得到了权重数据,就无需再耗费时间,重新进行训练了。

    也幸亏如此,否则就没办法及时把最终程序,提交到kaggle官网上去了。

    随后,江寒在最终版本的集成网络上,重新跑了一遍验证集。

    结果十分喜人,识别准确率达到了惊饶%。

    这个成绩已经十分令人满意。

    接下来,江寒就按照官网发布的明,对自己的代码进行了一点处理。

    主要是去掉一些调试语句,再将数据文件的接口,改成主办方要求的方式。

    这样,官方在测试时,只需将测试用的数据文件,放入指定的文件夹里,而无需修改任何代码。

    也许是对业余爱好者们的表现,并没有特别大的期待

    反正在这次比赛中,官方并没有要求公开源代码。

    所以江寒也就没准备提供源代码。

    他将自己的程序,用pyinstall编译成了可执行文件。

    并使用了一点技巧,将训练好的10个子网络的权重数据,也一起打包进了exe文件里。

    最后,再用“初级数字混淆技术”加一道坚固的锁,这样就不怕被人逆向拆解了。

    当然,江寒的这个集成学习方案,如果在比赛中一鸣惊人,等到比赛结束之后,不定就会有大佬来联系他,询问设计思路之类的。

    到时候,是否公开代码,用什么方式公开,公开到什么程度,江寒完全可以看情况决定。

    也就是,主动权完全掌握在自己手里。

    晚上10多钟,抢在时间截止之前,江寒将加密后的exe文件,连同相关的明文档,一起上传到了kaggle官方的比赛服务器上。

     
猜你喜欢
返回首页返回目录