公元七世纪,在车臣州国家气象局组织的一场寻雨活动中,三大神仙湖里,露里和杨里三人成功地祈求甘霖从火和水中救出利民。尽管老国王不知道该去哪里,但他还是把他们当作国教和道教来尊重。在本世纪,算法工程师的情况是相似的:早些年,信奉野蛮主义的大佬们觉得自己整天吃饱了,没用,没有工作,不得不与学校的医生混在一起,依靠对数据视而不见的把戏。但是,去年AlphaGo打破了李石时,这两个大兄弟在心中大喊“我他妈的”,并将各种劫持和外卖业务恐慌化为人工智能,并邀请了一些了解算法部门祝福的国家。尽管他们不了解州教师的智商,但他们衷心希望他们会尽快下雨。结果,算法工程师的价值也增加了。无论过去是否实践过Java,PHP或Excel,来自各个学校的工程师都放弃了关于最佳语言的争论,复制了深度学习,并发誓要重新训练成为算法工程师。几天前,有些人在知道的基础上问我:年薪20万,50万和100万的算法工程师有什么区别?这种充满铜味的问题使我感到非常高兴。尽管在北京,几乎不可能招募20万名可靠的算法工程师,但让我们以上述数字为参考并讨论算法工程师的三个级别。 (此处提到的算法不是计算机系本科课程“算法和数据结构”中的算法。该课程是有关排序和搜索“确定性算法”的;这里我们谈论的是统计。方法“概率算法”用于下面将提到一些算法和模型,但是它们只是说明概念的示例。无需深入研究。有兴趣学习的朋友可以自己查询信息。此级别的工程师熟悉常用的模型。无论如何,在获得数据之后,他们可以选择合适的运行。达到此级别,阈值实际上并不高。在早期,只要您掌握了称为LDA(称为SVM)的内容,并且使用了libnear,mahout等多种开源工具,就可以获取数据并运行结果。在深度学习时代,这件事似乎更简单:无论出现什么问题,它都不会全都被神经网络堆积!最近,我经常遇到一些工程师,快乐地欢呼:我已经学习了深度学习,明天我将统治人类!这件事应该很简单,我是茄子。无论您对这18种开源工具有多么熟悉,都不可能想出击败Ke Jie的机器人。这是给所有人的凉水:进入该领域的人们必须首先理解“没有免费的午餐定理”,该定理的数学表达过于模糊,我们将其翻译为不太准确的文学和艺术语言:有两种模式参与多轮比赛,每轮使用的数据集是不同的,并且该数据集没有偏差,那么最终结果是双方都是平等的。无论您是普通模型,文学模型还是2B模型,都不要轻视任何人。考虑一个极端的情况:存在一个“随机猜测”模型,即,任意和任意给出答案。结果是什么?是的,还是打领带!因此,请不要提出诸如“什么算法可以很好地进行群集工作”之类的愚蠢问题。这很尴尬!因为我有很多模型并且可以运行,所以实际上没有使用鸡蛋。当然,实际问题的数据分配始终具有一定的特征。例如,人脸识别,图片中间一定有一个大馅饼。因此,提出“哪种模型对面部识别有好处”这一问题是有意义的。算法工程师的真正价值是了解问题的数据先验特征并在模型中表达它们,这需要更高层次的能力。我使用工具,但我只是算法工程师的入门级人员。解决这两个刷子的问题就像在杀死两只鸡后尝试进行腹部手术。这是非常不可靠的。如果不是互联网行业中工资上涨严重,我认为20万是一个相对合理的价格。此级别的工程师可以根据特定问题的数据特征来转换模型,并使用适当的优化算法来追求最佳结果。无论前任的模型多么出色,它都是根据当时观察到的数据的先验特征来设计的。例如,LDA将在语料库质量较低的情况下基于PLSA引入贝叶斯估计,以获得更可靠的主题。尽管使用LDA并不是一个大错误,但不可避免地要在您的特定问题上获得最佳结果,并根据数据的特征对模型进行精确的转换。 Internet数据的现象更加明显,因为没有两家公司拥有相似的数据。具有数十亿个功能,大规模自定义计算集群和独特的深度神经网络结构,您可以复制它吗?复制无用。教科书中的模型应保持不变,其结果只能是一把剑。转换模型的能力并不像使用多个开源工具那样简单。这需要扫盲的两个方面:首先,深入了解机器学习的原理和组成部分。在机器学习领域,有许多基本原理和组件似乎并不直接有用。例如,如何做正则化?我应该何时选择基本分布? (下表)如何设置贝叶斯先验?如何计算两个概率分布之间的距离?当您看到老年人将这些原料一起烹煮并将其转变成LDA,CNN和其他成品时,您必须考虑是否知道这些原料,以及是否在烹饪时选择和混合它们。我只吃几道菜,说出味道是什么,远不是一个好厨师。其次,掌握优化方法。机器学习从业者不了解优化,这相当于武术家在耍花招。这与雷公太极拳和严放大师一样。尽管您已经设计了一个功能更强大的模型,但是如果您在有限的计算资源下找不到最佳解决方案,那么它只是一个花瓶。优化是机器学习的最重要,最重要的基础。您需要知道如何在目标函数及其导数的各种情况下选择优化方法。每种方法的时空复杂度和收敛性;还知道如何构造目标函数,以便使用凸优化或其他框架来解决。在这些领域的培训比机器学习模型更为扎实。以每个人都认为正在“从一种转变为另一种”的深度学习为例。 RNN(请参见上文)是为神经网络处理语音识别和自然语言处理此类时间序列数据建模的自然选择。但是,在实践中,我们发现由于存在“渐变消失”现象,RNN很难对远程上下文相关性进行建模。在自然语言中,例如确定以下be动词是“是”还是“是”,可以向前移动许多单词以找到决定性的主语。怎么做?才华横溢的J。 Schmidhuber设计了具有门结构的LSTM模型(请参见下图),然后让数据决定保留哪些信息以及忘记什么信息。从那时起,自然语言的建模效果得到了极大的提高。面对从稀薄空气中冒出来的少量门结构,这可能会造成混淆。只有通过全面的方法论以及扎实的机器学习和优化基础,您才能逐渐理解和学习这一思想。当然,LSTM模型是一支神奇的笔,我不希望有它。但是,此示例中显示的关键能力:根据问题的特征调整模型并解决优化障碍是合格的算法工程师应追求的能力。找到这样一个年薪为50万的人是值得的。第三级“目标”:擅长定义问题级别的工程师(哦,看来工程师不适合),向他抛出一个新的实际问题,并且可以给出定量的目标函数。当时,福特要求某人对电动机进行大修,斯坦因兹(编者注:斯坦因兹,美国裔电气工程师Charles Proteus为交流系统的发展做出了巨大贡献。)在电动机外壳上划了一条线,以便在这里打开电机的人员迅速排除了故障。在结帐时,斯坦兹要价10,000美元,他还打开了一个清单:画一条线,1美元;知道在哪里画线,$ 9999。出于同样的原因,在算法领域,最困难的事情是知道在哪里画线。这是构造新问题的目标函数的过程。而且有明确的定量目标函数,这是科学方法不同于形而上学方法和神学方法的重要标志。目标函数有时可以以分析形式编写,有时不能。例如,网络搜索有两个目标功能:一个是nDCG,它可以在标记的数据集上清楚地计算出一个指标;另一个是人工的不良情况比率,显然这是不可能的,可以通过公式进行计算,但是结果也是定量的,也可以用作目标函数。首先,定义目标函数听起来并不那么困难,这是否意味着设置KPI?实际上,否则,在意识和技术方面要做到这一点的门槛很高。 1。必须树立“一切都是劣等的,只有目标是高的”的意识。无论是团队还是项目,只要建立了正确且可衡量的目标,实现此目标都只是时间和成本的问题。假设nDCG是搜索的正确目标函数,则Microsoft或Yahoo!不幸的是,nDCG的目标有点问题,因此后来两者被拉得越来越远。所谓“自立与道德”:项目启动时,首先应该做两件事:一是讨论明确定义的量化目标函数;二是讨论明确的量化目标函数。另一种是建立一个实验框架,可以对目标功能进行在线A / B测试。第二是收集什么数据和采用什么模型。其次,它可以构造准确(信任),可解决(向上)和优雅(优雅)的目标函数。目标函数应尽可能反映实际的业务目标,同时有一种可行的优化方法。一般而言,优化目标与评估目标不同。例如,在语音识别中,评估目标为“单词错误率”,但这是无指导性的,因此无法直接优化。因此,我们还需要找到一个“替代目标”,例如似然性或后验概率,以求解模型参数。评估目标的定义通常是直观的,但是需要大量的经验和技巧才能将其转化为高度相关且易于解决的优化目标。在语音建模中,即使似然值的计算也需要涉及更复杂的算法,例如Baum-Welch。明确定义并非一件容易的事。优雅是更高层次的要求;但是当遇到重大问题时,优雅通常是唯一的方法。因为,通常只有一个漂亮的框架才更接近问题的本质。在这一点上,我们必须提到近年来最鼓舞人心的杰作-生成对抗网络(GAN)。 GAN需要解决的是让机器学习创造性的问题,例如根据数据绘制和编写文章。如何设置机床图的目标函数?听起来很困惑。早年我们做类似的语音合成问题时,没有什么好办法。我们只能找人听和打分。令人惊讶的是,当伊恩·古德费洛(Ian GoodFellow)定义此问题时,他采用了下图的巧妙框架:由于按人而不是客观地进行评分既费时又费力,因此让机器简单地进行评分!幸运的是,让机器识别具有特定语义的图片,例如人脸,这在深度学习中已得到基本解决。好吧,假设我们已经拥有一台可以得分的机器D,现在我们需要训练一台可以进行绘图的机器G,然后即使G的工作在D上得分很高,即使被学习到了,也要让G继续进行绘图,D继续得分。同时,在此过程中,由于与模仿产品的大量接触,D也提高了他的欣赏能力。用这样的定性思考是不够的,这样巧妙设计的两人零和博弈过程也可以表示为以下数学问题:这样的目标,作为哲学问题是优雅的,但是可以追求。当我看到这个公式时,我立即觉得教机器绘图已经很长时间了。如果您对这种问题的描述感到轻松和快乐,则可以理解为什么这是最困难的步骤。团队的“鼎海深圳”是一个可以将问题转化为目标功能的人,即使他甚至没有使用开源工具也是如此。一百万人找到了这样的人,但这真是太便宜了。在机器学习领域,算法工程师的高级路径很清楚:掌握工具后,您可以转换模型,然后可以控制新问题的建模,并且可以成长为最优秀的人才。沿着这条脚踏实地走,一百万不是问题。什么?你说还有三百万?这不必很热,人们只需要花时间编写代码来切换工作。