热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

din算法代码_从啥也不会的小白,如何成为合格的算法工程师?

作者|梁唐来源|TechFlow(ID:techflow2019)头图|CSDN下载自东方IC大家好,今天这篇文章同样来自于大家的提问。之前有一个小伙伴

165beda3ae297d6d8f2392e77357e23c.png

71397418405a9343a8186c80c91a7b90.png作者 | 梁唐来源 | TechFlow(ID:techflow2019)头图 |  CSDN 下载自东方IC大家好,今天这篇文章同样来自于大家的提问。之前有一个小伙伴在留言当中问我,说自己想要从事算法工程师的工作,但是不知道应该从哪里入手,请问我应该怎么办。这其实是一个老生常谈的话题,也是一个很大的概念。我很难用三言两语告诉你究竟应该如何做,但我可以告诉你一个合格的算法工程师应该至少需要具备什么样的能力,也许可以帮助你们找到前进的方向。

508ce4ec543369a0aa5083260a036fa0.png

基础

1、算法、数据结构

这俩是基础中的基础,作为一个合格的算法工程师,你可以写不出来红黑树,也可以不懂网络流,但是最基础的排序、递归、动态规划、树、堆栈、队列等算法和数据结构是一定要会的,并且还需要有一定的造诣。很多不明就里的人,会秉持着它们不重要的观点,并且以此宣扬不休。但是就我个人的经验以及观察而言,我发现无论大小互联网公司,一个算法工程师的表现,和他的算法、数据结构的水平是呈正相关的。而且这两块也是面试考察的重点,想要去比较好的公司锻炼学习,算法和数据结构作为基本功是一定要会的。另外,这两块的能力对于我们持续学习以及研究互联网行业的其他技术非常有帮助,像是分布式系统、机器学习当中的很多内容都和数据结构以及算法相关。你会发现算法大牛学习其他技术的速度和质量都非常可怕,这并不是没有道理的。对于普通的从业者而言,这两块的要求不是非常高,可以刷一下LeetCode前300题,基本上包含了所有常用的算法。也可以阅读一下本公众号的算法、数据结构专题,基本上也覆盖了所有基础的内容。

2、机器学习

既然是算法工程师,机器学习的相关知识也自然是不可或缺的。建议可以从Andrew NG的机器学习课程开始,他讲解得非常清楚,基本上该涵盖的知识点都涵盖了。如果是初学的话,会觉得吃力是非常正常的,这个时候可以找一本纸质书印证着一起看。听完Andrew的讲课内容之后,再去对比书上的描述,以及其他大牛的博客或者是相关内容。这样对比着学习的质量和效率都是最高的。对于机器学习的常用模型来说,使用Python实现的难度都不是很大,在理解了模型的相关原理之后,最好能亲自使用Python实现一下模型,体会一下其中的细节。另外,各种模型并不是机器学习的全部,其他的很多内容一样非常重要。比如过拟合的原因,比如正则项,比如损失函数的推导过程,以及AUC等指标的计算方法等等。说起来机器学习领域中的模型并不少,但是常用的,面试当中经常问到的并不多。说来说去,也就LR,逻辑回归,贝叶斯,决策树,随机森林,GBDT,XGboost、KNN、Kmeans等十余个。我们学习的时候可以只聚焦其中一些模型,把它们完全吃透,而不是贪多嚼不烂,每个都知道一点,但每个都不精通。

3、深度学习

深度学习需要区分领域,如果是推荐、广告、搜索等CTR预估等领域来说,要求相对要低一些,在面试的时候也不会太过深入。这也是因为这些领域的模型和做法比较固定,相比于模型对于特征、数据以及系统的要求更高。另外一个原因是深度学习相关的内容在面试的时候也不太好考察,举个例子来说,如果候选人之前没有做过相关业内的工作。他可能根本不知道推荐领域内使用哪些模型和哪些做法,我们去问他DIN或者是FM,也就无从问起了。而且深度学习目前的框架也分成两派,如果他刚好没有深入用过同样的框架,所谓框架的细节也没办法多问。并且这块也不是重点,框架不会学起来也很快,基础扎实几天就可以有模有样。所以作为初学者,如果决心做推荐、广告等领域的算法工程师的话,甚至可以连卷积神经网络都不用了解(我甚至没在工作中见过卷积)。把时间省下来去读一些业内的paper,以及做一些比赛练练手,得到的效果会更好。

4、数据处理

很多人在介绍算法工程师入门的时候不会提到这块,但其实这块非常重要,也一样是算法工程师的基础技能。数据处理主要包含两块,一块是模型训练之前的数据处理流程。比如特征加工、采样、异常值过滤、特征分布的分析等等,这些可以通过学习numpy、pandas来搞定。可以看一看kaggle大牛的一些kernel或者是文章了解学习一下,这块比较简单,一般来说做过kaggle的多少都会一些。第二块是基于hadoop集群的大数据处理平台,比如MapReduce、spark、flink、hive等平台和工具的使用。这些内容除了业内人士一般也很少了解,就更不用说有这个意识去学习了,但是又是实际工作当中实实在在会用到的东西。现在纯MapReduce的做法有些过时了,一般业内常用得比较多的是spark、hive和flink。这些技能我们也没有必要什么都学,能够对其中一个有所了解和掌握就可以了。因为不同公司的做法一般都不太一样,入职的时候都是要重新学过的,面试的时候一般也不会要求刚好完全对口。

5、开发能力

这一点提的不多,但是也很重要。毕竟算法工程师也是工程师,也是需要写代码的。在日常工作当中,算法工程师的开发领域主要有三块,分别是模型、脚本以及系统。模型这个好理解,比如复现paper当中的做法,或者是复现某一个经典模型之类的。但是我们实现模型,也并不是就仅仅实现模型本身,往往也需要实现很多额外的内容。比如拆分训练以及验证数据,比如记录模型训练的日志,再比如读取数据,转化格式等等。脚本主要指的是特征以及数据处理的脚本,这个依赖于公司使用的数据处理平台。比如spark需要写scala,比如hive需要写SQL等等。这些脚本往往都会涉及到非常复杂的特征生成,以及数据关联的逻辑,非常麻烦,稍不小心就会搞错。最后是系统,算法工程师同样也需要参与一些系统的开发。比如说,像是线上的排序系统,线上调用模型的打分系统等等。这些系统的细节往往和模型以及算法挂钩,普通的开发往往不了解这些细节,所以还是需要算法工程师参与开发,那么最基本的开发能力也就必不可少了。

e2654fc8de0b78221c922deefcbde021.png

框架

框架指的是深度学习模型的框架,市面上现在已有的框架其实不少,除了常用的TensorFlow、Pytorch之外,还有像是Keras、MXNet、Caffe等等。一般来说在TensorFlow和Pytorch当中任选一个进行深入学习即可,掌握了一个之后再去学另外一个会容易得多。我前面也说过了,框架并不是技术的核心重点,使用什么框架并不重要。就我个人而言的话,如果你从来没有学过任何框架的话,我更加建议你去学Pytorch。因为Pytorch的学习曲线更加平缓,并且它对于面向对象的支持更加友好,语法也更加简洁。你会发现学习Pytorch的体验要比TensorFlow好非常多,学起来也会更快。对于面试的问题也不用过多担心,因为一般来说岗位对候选人的要求写的都是TensorFlow、Pytorch、Keras等常用框架熟悉其中的一个即可。如果问到TensorFlow相关的问题,你大可以直接告诉面试官,我用Pytorch比较多,TensorFlow我不熟。

2dd468247dc06c9102ecb8917281ec2e.png

实战

我们学习了一堆理论知识之后,肯定还是需要实际使用一下,才能检验我们学习的效果,并且也才可以理解更加到位。机器学习相关应用的实战渠道有很多,比如著名的kaggle以及阿里举办的天池大数据等等。除了这两家之外,其实很多公司也都在举办各自的算法竞赛,对于小白来说,这些都是非常珍贵的练手的机会。kaggle当中的比赛非常多,并不是每一个都有意义,我们可以找到和我们应聘的方向比较紧密的。比如你要面搜索、广告,那你就去做做CTR预估,如果你做NLP,也可以去找找文本处理的问题。kaggle当中的比赛实在是太全了,只有你想不到,几乎没有找不到。相比之下天池大数据的题目要少一些,但是它可以使用阿里巴巴真实的平台以及脱敏之后的数据,这些相比kaggle我个人感觉更加逼真。我们亲自做一下,基本上就了解了阿里这样的大公司做模型的整个流程,还能体验一下阿里云的强大计算能力。最后说一点,当我们做某一个比赛或者是题目的时候,我们的目标并不仅仅是做出一个比较好的成绩。而是要尽量去思考问题的场景,以及模型在这样场景当中的作用和原理。也就是说我们不能干做,我们做了还得要思考,思考过后还需要总结。只有这样,我们才能获得真正的成长。怎么样,看到这些要求是不是觉得算法岗位的门槛还是挺高的,要学的东西也不少?实际上也的确如此,算法工程师是一个很特殊的岗位,模型、数据、算法、系统,各个方面都需要有所涉猎。不过,我们也并不需要各个领域都面面俱到,抓大放小,从这几个核心领域入手才可以做到事半功倍。f73ec02c59af823ecc688e3583f4ed53.pngda33034f72c5a3c33b2ee2aab88acad1.png

更多精彩推荐

☞1024程序员节重要议程曝光,开源技术英雄会聊开源“真心话”

☞“国产操作系统最大难题在于解决「生产关系」” | 人物志

☞“我们的目标是取代物联网中的安卓” | 人物志

☞对话阿里云:开源与自研如何共处?

☞AI 还原康乾盛世三代皇帝的样貌,简直太太太好玩了!

☞观点 | 回顾以太坊近期及中期扩容路线图,展望 rollup 作为中心的以太坊路线图

点分享点点赞点在看



推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 读手语图像识别论文笔记2
    文章目录一、前言二、笔记1.名词解释2.流程分析上一篇快速门:读手语图像识别论文笔记1(手语识别背景和方法)一、前言一句:“做完了&#x ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • 1.组合最优化问题定义:是通过数学方法的研究去寻找离散事件的最优编排、分组、次序或筛选等。描述:最优化问题的数学模型的一般描述是,x为决策 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • 安装Tensorflow-GPU文档第一步:通过Anaconda安装python从这个链接https:www.anaconda.comdownload#window ... [详细]
  • 2017亚马逊人工智能奖公布:他们的AI有什么不同?
    事实上,在我们周围,“人工智能”让一切都变得更“智能”极具讽刺意味。随着人类与机器智能之间的界限变得模糊,我们的世界正在变成一个机器 ... [详细]
  • 程度|也就是_论文精读:Neural Architecture Search without Training
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文精读:NeuralArchitectureSearchwithoutTraining相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Two Sigma人均22万英镑~
    近期原创文章: ... [详细]
author-avatar
runyuantezhong773
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有