从数学建模到数据科学

Mars  linxi509  2021-04-01
  • 经历了金九银十与金三银四的洗礼后,终于尘埃落定,我顺利拿到了算法工程师的offer。一步步走上算法工程师这条职场之路的历程真的感触很多,希望能对渴望走上算法相关岗位的同学有一些启发。
  • 我就读于江苏省某高校模式识别与智能系统专业,2021年即将研究生毕业。学校算是211,但和南大、东大、河海比,实力、名气要矮上一截。这个专业和人工智能、机器学习、数据挖掘、云计算、大数据分析等都有关系,是我在本科阶段参加数学建模、算法竞赛期间经过深入的思考后选择的专业,我的研究方向是CV,跟着导师做过两三个横向的项目,也经常参加竞赛拿过几个名次。这些项目和竞赛名次为我毕业能够顺利拿到算法offer提供了很重要的助力。
  • 但其实我从大二到大三,这两年对个人方向和职业岗位其实一直是比较迷茫的,大一虽然也有紧迫感,但感受还没有那么深刻。是参加数学建模竞赛和数据科学竞赛期间的经历和感悟让我确立了个人发展的明确方向。我这个人天赋一般,理科成绩一直还算可以吧,但谈不上优秀,在本科阶段倒没有想过自己有一天会去做计算机视觉和算法相关的工作。回顾这一路来的历程,其实是充满了探索、试错和艰辛。
  • 我本科读的是一个江苏二流高校的信息与计算科学专业,我们学校这个专业属于数理学院,其实和计算机关系不大,培养计划还是比较重视数学能力的。但由于我们学校名气不大,教学也偏理论,在就业市场上并不吃香,往届毕业的师兄师姐就业情况也都不容乐观。到这所学校就读其实是逼不得已,因为高考小失误,又不想复读。在学校里我一直想着如何弥补学校的劣势,寻找适合自己的发展方向,好在数理学院的学习氛围比较浓厚,当时很多同学参加数学建模协会,为数学建模竞赛做准备,于是我有了学习目标和方向。
  • 大一寒假,我就选择留校参加数学建模协会的集体培训,我们20多个同学一起制定学习计划,每天一起学习模型算法和编程,相互督促,一个寒假算是对数学建模相关知识有了一个初步的入门。开学后每周末协会会安排往届参赛的师兄师姐们做知识分享,制定学习任务,一直持续到五一赛前。但还是由于大一的知识储备还不够,在2015年5月份第一次参加五一赛的时候并没有取得很好的名次,我继续按照原来的学习计划不断地提高自己,也正是因为自己这样的连续不断的学习使得我在大二参加五一赛时顺利拿到一等奖的比赛名次。在这里真的非常感谢建模协会里无私奉献的师兄师姐们。在参加五一赛的过程中,我锻炼了逻辑思维,把现实中问题抽象为数学问题,发现数学完全可以解决很多现实问题,当时很有成就感。在数学建模协会中认识的同学,也成为了朋友。
  • 这里说一下我们的参赛情况,数学建模比赛一般由三人组一队,我们会找优势互补的队友,比如有擅长建模的,擅长编程的,擅长写作的。组队最重要的是三个人一定要互相配合。每个角色都有自己的职务,建模的人一般应该有比较扎实的数理基础,思维活跃,负责编程的同学软件编程能力要过硬,写作的人应该思维缜密,语言逻辑性强,要能看懂所建立的模型,在理解模型的基础上进行写作。我是属于建模的角色,主要负责问题的抽象、模型的构建。正式比赛的三天三夜怎么去分配非常有讲究,一定要合理分配自己的时间。
  • 给不熟悉数学建模的同学大致介绍一下,数学建模中常用的算法大致有六大类:规划类、评价类、预测类、物理类、分类与判别、现代启发式算法。其中规划类、评价类和预测类是最常考的,出现的频率极其高。数学建模的步骤也是有规律可循的,一般是第一步提出问题,将题目进行假设转化成数学问题;第二步是选择合适的方法;第三步建立模型,对建立的问题进行变形,推导,转化为可以运行标准方法解答的形式。第四步求解模型,如果是数据和统计类的,我们一般用Excel,SPSS,Stata等实现,如果是编程类的,我们一般用MATLAB,Python等软件实现。第五步总结,整理论文,图表。比赛前只要是对这些常用的算法适用的场景和步骤熟练于心,相信大家都能在比赛中取得不错的成绩。
  • 获得了五一赛不错成绩之后,为了参加全国数学建模大赛,大二暑假我继续选择留校参加集训,相较于之前提到寒假的培训,暑假的培训正式很多,协会每天都会安排固定的学习任务,并且要求我们每周对自己的学习内容进行输出,每两个星期会进行一次校内模拟赛,赛后每组对自己的论文思路进行分享讲解,通过这种方式对自己的建模思路进行深入的剖析,找到自己思路上的不足。努力没有白费,2016年9月中旬参加全国数学建模大赛,我们组拿到了江苏省区一等奖的成绩,协会里也有同学很厉害,拿到国一国二,这很大得益于学校的传统氛围吧,比较重视数学建模。在这里我不仅收获了学习成果,也结识了一群一起学习一起考研的伙伴。
  • 大三参加完国赛拿到奖后很多同学都离开了协会,我选择继续留在协会,一是帮助新来的学弟学妹的学习,二是为了自己的学习和提升。通过一些参考文献和资料的查询与深入学习,我逐渐接触了遗传算法、蚁群算法、模拟退火算法、神经网络、支持向量机等算法模型。我尝试着利用这些算法对很多问题进行优化并把这些成果发表到期刊论文上,又跟着本科的老师做了一个神经网络的小项目,这些事情逐步引发了我对机器学习算法、深度学习算法的兴趣。
  • 那时候,机器学习和深度学习已经非常火热,从自己的兴趣出发,接触的各种渠道很自然的让我了解到算法工程师这个就业方向,也通过学长学姐详细了解了就业门槛。我当时仔细思考了一段时间,觉得算法工程师是个高大上的岗位,把数据科学/算法树立为自己的就业方向。但我大三再发力已经来不及了,于是为了丰富自己的简历,提高自己的专业知识和背景,我选择了参加数据科学算法竞赛和考研这两条道路并行来走。
  • 下面说说机器学习算法学习的经验,首先我是找了很多人推荐的比较适合新手学习的吴恩达机器学习教程,主要讲机器学习的基础理论,包括逻辑回归、决策树算法、神经网络、梯度下降等等这些非常基础的知识点;然后就是B站上的台湾林轩田的机器学习基石/技法、李宏毅的机器学习,都是中文视频,对英语基础一般的同学帮助还是挺大的。另外还有一些经典的书籍,比如周志华的西瓜书很全面,但推导过程简略,有时候会看得云里雾里,经常需要结合一些技术博客帮助理解,还有李航的《统计学习方法》,这本书比较偏理论,但是如果你数学好的话,应该不是难事。
  • 学习机器学习算法,掌握python语言是必须的,在大一学习数学建模的过程中,我开始接触到python编程,几个月时间就能熟练掌握了,其实很简单,主要是多实践。我觉得理科生学习python还是很简单的,如果你是零基础,一开始跟着吴恩达的视频练习一些示例代码,熟悉以后,多练习多实践。在参加数据科学算法比赛中,python不仅可以进行算法运算,还可以处理数据集。这些算法比赛提供的数据集很多是基于真实场景的,如果自学过程闭门造车,面对的是理想的或者已经被处理过的脱离实际的数据,不利于对数据的理解,算法技能的提升。
  • 至于计算机视觉技术、模式识别等,水还是比较深的。我是怎么对计算机视觉领域感兴趣的,研究生专业、课题方向的选择,计算机视觉竞赛等,有时间我在另外的文章里分享。
  • 参加算法竞赛,我们不仅可以接触到一些在校很难接触到的真实应用场景,还可以拿到奖金(当然你得足够投入)。去年,我参加了Mars平台的机器视觉人工智能大赛,当时就是被一等奖50万的奖金吸引的,它的主要任务是工业场景下的无监督瑕疵分割检测任务,当时官网论坛中并没有太多的分享,所以只能参照老一套方法,无监督自编码器走一遍,效果居然还可以,虽然名次不靠前,但也顺利进入了复赛。复赛任务更加复杂,初赛的那一套也不再管用了,再继续研究尝试。在竞赛平台上的论坛和比赛QQ群里面,有很多厉害的选手,大家互相交流,使我快速的拓展了这方面的知识,接下来的时间里,我不断尝试新的方法,最后也获得了一个自己比较满意的名次,离拿奖金并不是很遥远。所以这里十分建议大家在开始学习的时候可以多到一些竞赛平台上参加竞赛,这样不仅可以巩固学习成果,还能给自己的简历加分。
  • 整个参赛过程贯穿我的考研和读研期间,一直没有松懈的在这条路上走着,至于学习探索的细节不用多说肯定是辛苦而又充实,这样一路走到了研究生的秋招。秋招期间即使和985硕士相比,我也没有处于明显劣势。竞赛名次、实践项目和论文,不仅证明了我的实力,也说明我对机器视觉、算法领域的热情,最后我拿到了几家公司的算法offer,最终选择留在南京一家汽车企业,做智能驾驶相关的算法工作,虽然和那些去阿里、百度这些大厂的同学不能比,但也算是自己这几年努力的较好回报了。
  • 一路从参加数学建模竞赛,到接触数据科学/机器学习算法,然后参加数据科学算法竞赛,再对计算机视觉方向感兴趣,最后走上算法工程师这条路,我有太多的心得和体会。比较起来,相对于大家熟悉的数学建模,数据科学是将统计、数据分析及其相关方法统一起来,以数据来“理解和分析实际现象”。数学建模与数据科学的核心都是算法,最终的目标都是为了解决实际落地问题。相较于数学建模,数据科学更注重工程落地能力且它是以数学建模为基础的。数学建模比赛锻炼了我的数学思维,数学思维对算法的学习非常重要,总结起来就是一句话:数学建模底子好的话,进入数据科学领域就具备了天然的优势。
  • 最后,我想说的是,即使本科是双非,但只要坚定信心努力的学习数学和算法,就会有很大收获。至于择业、考研等道路选择,要看自己的实际情况。我接下来迎接的是全新的职场旅途,我把自己最深刻的感受再总结一下:
  • 1)参加竞赛对于学习提升非常有帮助,每天凌晨提交作品刷榜的时候,既紧张又有激情,因为能及时看到自己的进步。
  • 2)有志同道合的选手陪着一起努力打比赛,和在学校闭门做项目真的不一样,更能坚持下来,更有干劲。
  • 3)关于本科生能不能拿到算法岗offer的问题,我觉得是可以的,但是必须从大二开始准备,合理安排时间。如果学校名气还可以又有全国大赛的好名次,是可以获得面试机会的。
  • 4)除了算法工程师,数据分析/挖掘相关岗位的机会还是非常多的,尤其是非互联网行业,像汽车制造行业、金融等。如果应聘互联网公司的算法岗那就是千军万马走独木桥。
  • 5)数学建模训练,对我成长和就业帮助极大。数学能力使我能够理解算法模型的原理,真正从事算法研发,在众多“调包侠”中脱颖而出。

对数学建模感兴趣的你,在数字化岗位方向上有很多选择,Mars平台期待与你一起努力解决数字化人才需求~