精华内容
下载资源
问答
  • 1、计算中算法的角色(The Role of Algorithms in Computing) 2、 函数的增长率(Growth of Functions) 3、 递归(Recurrences) 4、 随机化算法( Randomized Algorithms) 二、 排序与顺序统计(Sorting and...

    一、 基础(Foundations)

    1、计算中算法的角色(The Role of Algorithms in Computing)

    2、 函数的增长率(Growth of Functions)

    3、 递归(Recurrences)

    4、 随机化算法( Randomized Algorithms)

    二、 排序与顺序统计(Sorting and Order Statistics)

    5、 堆排序(Heapsort)

    6、 快速排序(Quicksort)

    7、 线性时间中的排序(Sorting in Linear Time)

    8、 中值与顺序统计(Medians and Order Statistics)

    三、 数据结构(Data Structures)

    9、 基本的数据结构(Elementary Data Structures)

    10、 散列表(Hash Tables)

    11、二叉查找树(Binary Search Trees)

    12、 红-黑树(Red-Black Trees)

    13、扩充的数据结构(Augmenting Data Structures)

    四、高级的设计与分析技术(Advanced Design and Analysis Techniques)

    14、动态规划(Dynamic Programming)

    15、 贪婪算法(Greedy Algorithms)

    16、 分摊分析(Amortized Analysis)

    五、 高级的数据结构(Advanced Data Structures)

    17、 B-树(B-Trees)

    18、 二项式堆(Binomial Heaps)

    19、 斐波纳契堆(Fibonacci Heaps)

    20、不相交集的数据结构(Data Structures for Disjoint Sets)

    六、 图算法(Graph Algorithms)

    21、基本的图算法(Elementary Graph Algorithms)

    22、 最小生成树(Minimum Spanning Trees)

    23、单元最短路径(Single-Source Shortest Paths)

    24、 全对的最短路径(All-Pairs Shortest Paths)

    25、 最大流(Maximum Flow)

    七、 精选的主题(Selected Topics)

    26、 排序网络(Sorting Networks)

    27、矩阵运算运算(Matrix Operations)

    28、 线性规划(Linear Programming)

    29、 多项式与快速傅里叶变换(Polynomials and the FFT)

    30、 数论算法(Number-Theoretic Algorithms)

    31、 字符串匹配(String Matching)

    32、计算几何学(Computational Geometry)

    33、NP-完备性(NP-Completeness)

    34、 近似算法(Approximation Algorithms)

     

    展开全文
  • 成为算法工程师——张相於

    千次阅读 2018-10-18 18:33:39
    成为一名合格的开发工程师不是一件简单的事情,需要掌握从开发到调试优化等一系列能力,而掌握这些能力中的任一项,都需要付出足够的努力,以及足够多的经验。

    作者:张相於,现任 Growing IO 机器学习总监,毕业于中国人民大学,曾担任多家著名电商公司推荐系统和机器学习系统技术负责人,在机器学习和推荐系统相关领域有丰富经验和深厚积累。

    引言

    成为一名合格的开发工程师不是一件简单的事情,需要掌握从开发到调试优化等一系列能力,而掌握这些能力中的任一项,都需要付出足够的努力,以及足够多的经验。要成为一名合格的机器学习算法工程师(以下简称算法工程师)更是难上加难。

    因为,在掌握工程师的通用技能之外,还需掌握一张不算小的机器学习算法知识网络。下面我们就将这些技能进行拆分,一起来看究竟要掌握什么才能成为一名合格的算法工程师。

    基础开发能力

    所谓算法工程师,前提得是一名工程师。那么,开发工程师会的技能你都要掌握。有些同学对于这点存在误解,认为所谓算法工程师就只需要思考和设计算法,不用在乎算法怎样实现,况且,还会有人帮你来实现你提出的算法方案。这种思想是错误的,在大多数企业的大多数职位中,算法工程师需要负责从算法设计——实现——上线的整个流程工作。

    我曾经见过一些企业实行设计与实现相分离的组织架构,在这种架构下,说不清楚谁应该为算法效果负责,设计者和开发者都有一肚子的苦水。所以大家要记住,基础开发是所有算法工程师都要掌握的技能。我建议所有打算从事该行业的同学,对于基础开发能力和算法知识要给予同等的重视程度,这样能让你走得更稳,更远。

    去年谷歌发布的 Rule of ML 中也提到过,机器学习应用中的问题很大一部分是工程问题,所以没有足够扎实的工程基础,是啃不动真正的硬骨头的。除了一些硬性代码技能,一些代码软技能也是不可或缺,推荐《代码整洁之道》(Clean Code)这本书给大家。

    基础开发所涉及到的技能非常的多,这里挑选两个比较重要的点来做阐述。

    一、单元测试

    在企业应用中,一个问题的完整解决方案通常包括很多的流程,这其中每个环节都需要反复的迭代优化调试。如何能够将复杂任务进行模块划分,并且保证整体流程的正确性?最实用的方法就是单元测试。

    单元测试并不只是简单的一种测试技能,它首先是一种设计能力,并不是每份代码都可以做单元测试,能做单元测试的前提是代码可以划分为多个单元——也就是模块。在把项目拆解成可独立开发和测试的模块之后,再加上对每个模块独立的、可重复的单元测试,就可以保证每个模块的正确性,如果每个模块的正确性都可以保证,那么整体流程的正确性就可以得到保证。

    对于算法开发这种流程变动频繁的开发活动来讲,做好模块设计和单元测试是不给自己和他人挖坑的重要保证。也是能让自己放心地对代码做各种改动优化的重要前提。

    二、逻辑抽象复用

    逻辑的抽象复用可以说是所有软件开发活动中最为重要的一条原则,衡量一个程序员代码水平的重要原则之一就是看他代码中重复代码和相似代码的比例。大量重复代码或相似代码背后反映的是工程师思维的懒惰, 因为他觉得复制粘贴或者直接照着抄是最省事的做法。这样做不仅看上去非常丑陋,而且也非常容易出错,更不用说维护的难度。

    算法开发的项目中经常会有很多类似逻辑出现,例如,对多个特征使用类似的处理方法,还有原始数据 ETL 中的很多类似处理方法。如果不对重复逻辑做好抽象,全是一行行的重复代码,无论是阅读还是维护都会非常麻烦。

    三、概率和统计基础

    概率和统计可以说是机器学习领域的基石之一,从某个角度来看,机器学习可以看做是建立在概率思维之上的一种对不确定世界的系统性思考和认知方式。学会用概率的视角看待问题,用概率的语言描述问题,是深入理解和熟练运用机器学习技术的最重要基础之一。

    概率论内容很多,但都是以一个个分布为具体表现载体体现出来的,所以学好常用的概率分布及其各种性质对于学好概率非常重要。对于离散数据,伯努利分布、二项分布、多项分布、Beta 分布、狄里克莱分布以及泊松分布都是需要理解掌握的内容;对于离线数据,高斯分布和指数分布族是比较重要的分布。这些分布贯穿着机器学习的各种模型之中,也存在于互联网和真实世界的各种数据之中,理解了数据的分布,才能知道该对它们做什么样的处理。

    此外,假设检验和置信区间等相关理论也需要掌握,这样才能具备分辨数据结论真伪的能力。例如两组数据是否真的存在差异,上线一个策略之后指标是否真的有提升等。这种问题在实际工作中非常常见,不掌握相关能力的话相当于大数据时代的睁眼瞎。

    在统计方面,一些常用的参数估计方法也需要掌握,典型的比如,最大似然估计、最大后验估计、EM 算法等。这些理论和最优化理论一样,都是可以应用于所有模型的理论,是基础中的基础。概率统计方面我推荐 All of Statistics,这本书简明扼要地介绍了概率统计中常用的概念,适合入门看,也适合作为参考手册经常翻阅。

    四、开发语言和开发工具

    掌握了足够的理论知识,还需要足够的工具来将这些理论落地,这部分我们介绍一些常用的语言和工具。

    1. 开发语言

    近年来 Python 可以说是数据科学和算法领域最火的语言,主要原因是它使用门槛低,上手容易,同时具有着完备的工具生态圈,各种平台对其支持也比较好。所以 Python 方面我就不再赘述。但是在学习 Python 以外,我建议大家可以再学习一下 R 语言,主要原因有以下几点:

    R 语言具有最完备的统计学工具链。 我们在上面介绍了概率和统计的重要性,R 语言在这方面提供的支持是最全面的,日常的一些统计方面的需求,用 R 来做可能要比用 Python 来做还要更快。Python 的统计科学工具虽然也在不断完善,但是 R 仍然是统计科学最大最活跃的社区。

    向量化、矩阵化和表格化思维的培养。 R 中的所有数据类型都是向量化的,一个整形的变量本质上是一个长度为一的一维向量。在此基础上 R 语言构建了高效的矩阵和(DataFrame)数据类型,并且在上面支持了非常复杂而又直观的操作方法。这套数据类型和思考方式也被很多更加现代化的语言和工具所采纳,例如 Numpy 中的 ndarray,以及 Spark 最新版本中引入的 DataFrame,可以说都是直接或间接从 R 语言得到的灵感,定义在上面的数据操作也和 R 中对 DataFrame 和向量的操作如出一辙。就像学编程都要从 C 语言学起一样,学数据科学和算法开发我建议大家都学一下 R,学的既是它的语言本身,更是它的内涵思想,对大家掌握和理解现代化工具都大有裨益。

    除了 R 以外,Scala 也是一门值得学习的语言。 原因在于它是目前将面向对象和函数式两种编程范式结合得比较好的一种语言,因为它不强求你一定要用函数式去写代码,同时还可以在能够利用函数式的地方给予足够的支持。这使得它的使用门槛并不高,但是随着经验和知识的不断积累,你可以用它写出越来越高级、优雅的代码。

    2. 开发工具

    开发工具方面,Python 系的工具无疑是实用性最高的,具体来说,Numpy、Scipy、Sklearn、Pandas、Matplotlib 组成的套件可以满足单机上绝大多数的分析和训练工作。但是在模型训练方面,有一些更加专注的工具可以给出更好的训练精度和性能,典型的如 LIBSVM、LIBLINEAR、XGBoost 等。

    大数据工具方面,目前离线计算的主流工具仍然是 Hadoop 和 Spark,实时计算方面 Spark Streaming 和 Storm 也是比较主流的选择。近年来兴起的新平台也比较多,例如 Flink 和 Tensorflow 都是值得关注的。值得一提的是,对于 Hadoop 和 Spark 的掌握,不仅要掌握其编码技术,同时还要对其运行原理有一定理解,例如 Map-Reduce 的流程在 Hadoop 上是如何实现的,Spark 上什么操作比较耗时,AggregateByKey 和 GroupByKey 在运行原理上有什么差异等。只有掌握了这些,才能对这些大数据平台运用自如,否则很容易出现程序耗时过长、跑不动、内存爆掉等问题。

    五、架构设计

    最后,谈一下机器学习系统的架构设计。所谓机器学习系统的架构,指的是一套能够支持机器学习训练、预测、服务稳定高效运行的整体系统以及他们之间的关系。在业务规模和复杂度发展到一定程度的时候,机器学习一定会走向系统化、平台化这个方向。 这个时候就需要根据业务特点以及机器学习本身的特点来设计一套整体架构,这里面包括上游数据仓库和数据流的架构设计,以及模型训练的架构,还有线上服务的架构等等。

    这一套架构的学习就不像前面的内容那么简单了,没有太多现成教材可以学习,更多的是在大量实践的基础上进行抽象总结,对当前系统不断进行演化和改进。但这无疑是算法工程师职业道路上最值得为之奋斗的工作。在这里的建议就是 多实践,多总结,多抽象,多迭代。

    六、机器学习算法工程师领域现状

    现在就是机器学习算法工程师最好的时代,各行各业对这类人才的需求都非常旺盛。我们列举一些典型的细分行业:

    推荐系统。 推荐系统解决的是海量数据场景下信息高效匹配分发的问题,在这个过程中,无论是候选集召回,还是结果排序,以及用户画像等方面,机器学习都起着重要的作用。

    广告系统。 广告系统和推荐系统有很多类似的地方,但也有着很显著的差异,需要在考虑平台和用户之外同时考虑广告主的利益,两方变成了三方,使得一些问题变复杂了很多。它在对机器学习的利用方面也和推荐类似。

    搜索系统。 搜索系统的很多基础建设和上层排序方面都大量使用了机器学习技术,而且在很多网站和 App 中,搜索都是非常重要的流量入口,机器学习对搜索系统的优化会直接影响到整个网站的效率。

    风控系统。 风控,尤其是互联网金融风控是近年来兴起的机器学习的又一重要战场。不夸张地说,运用机器学习的能力可以很大程度上决定一家互联网金融企业的风控能力,而风控能力本身又是这些企业业务保障的核心竞争力,这其中的关系大家可以感受一下。

    但是所谓“工资越高,责任越大”,企业对于算法工程师的要求也在逐渐提高。整体来说,一名高级别的算法工程师应该能够处理“数据获取 -> 数据分析 -> 模型训练调优 -> 模型上线”这一完整流程,并不断对流程中的各种环节做优化。一名工程师入门时可能会从上面流程中的某一个环节做起,不断扩大自己的能力范围。

    除了上面列出的领域以外,还有很多传统行业也在不断尝试和挖掘用机器学习来解决问题。长远来看,机器学习的未来发展空间可谓潜力巨大。

    alt text

    展开全文
  • 人工智能有很多方向,比如NLP、语音识别、计算机视觉等等,生命有限,必须得选一个方向深入的专研下去,这样才能成为人工智能领域的大牛,有所成就。 再回答第二个问题,人工智能到底是不是一项技术? 根据...

    人工智能?

    感觉这个词很广泛,我之前想把人工智能当成某一项技术来学,但是并没有找到我满意的答案,还是说人工智能本就不是某一项技术?

    首先回答一下人工智能到底学什么

    1、学习并掌握一些数学知识

    高等数学是基础中的基础,一切理工科都需要这个打底,数据挖掘、人工智能、模式识别此类跟数据打交道的又尤其需要多元微积分运算基础

    线性代数很重要,一般来说线性模型是你最先要考虑的模型,加上很可能要处理多维数据,你需要用线性代数来简洁清晰的描述问题,为分析求解奠定基础
    概率论、数理统计、随机过程更是少不了,涉及数据的问题,不确定性几乎是不可避免的,引入随机变量顺理成章,相关理论、方法、模型非常丰富。很多机器学习的算法都是建立在概率论和统计学的基础上的,比如贝叶斯分类器、高斯隐马尔可夫链。

    再就是优化理论与算法,除非你的问题是像二元一次方程求根那样有现成的公式,否则你将不得不面对各种看起来无解但是要解的问题,优化将是你的GPS为你指路

    有以上这些知识打底,就可以开拔了,针对具体应用再补充相关的知识与理论,比如说一些我觉得有帮助的是数值计算、图论、拓扑,更理论一点的还有实/复分析、测度论,偏工程类一点的还有信号处理、数据结构。

    2、掌握经典机器学习理论和算法

    如果有时间可以为自己建立一个机器学习的知识图谱,并争取掌握每一个经典的机器学习理论和算法,我简单地总结如下:

    1) 回归算法: 常见的回归算法包括最小二乘法(OrdinaryLeast

    Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise

    Regression),多元自适应回归样条(MultivariateAdaptive Regression

    Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing);

    2) 基于实例的算法: 常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map , SOM);

    3) 基于正则化方法: 常见的算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator(LASSO),以及弹性网络(Elastic Net);

    4) 决策树学习: 常见的算法包括:分类及回归树(ClassificationAnd

    Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5,

    Chi-squared Automatic Interaction Detection(CHAID), Decision Stump,

    随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine,

    GBM);

    5) 基于贝叶斯方法: 常见算法包括:朴素贝叶斯算法,平均单依赖估计(AveragedOne-Dependence Estimators, AODE),以及Bayesian Belief Network(BBN);

    6) 基于核的算法: 常见的算法包括支持向量机(SupportVector Machine, SVM), 径向基函数(Radial Basis Function ,RBF), 以及线性判别分析(Linear Discriminate Analysis ,LDA)等;

    7) 聚类算法: 常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM);

    8) 基于关联规则学习: 常见算法包括 Apriori算法和Eclat算法等;

    9) 人工神经网络: 重要的人工神经网络算法包括:感知器神经网络(PerceptronNeural

    Network), 反向传递(Back Propagation), Hopfield网络,自组织映射(Self-OrganizingMap,

    SOM)。学习矢量量化(Learning Vector Quantization, LVQ);

    10) 深度学习: 常见的深度学习算法包括:受限波尔兹曼机(RestrictedBoltzmann

    Machine, RBN), Deep Belief Networks(DBN),卷积网络(Convolutional Network),

    堆栈式自动编码器(Stacked Auto-encoders);

    11) 降低维度的算法: 常见的算法包括主成份分析(PrincipleComponent

    Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS),

    Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(ProjectionPursuit)等;

    12) 集成算法: 常见的算法包括:Boosting,

    Bootstrapped Aggregation(Bagging),AdaBoost,堆叠泛化(Stacked

    Generalization, Blending),梯度推进机(GradientBoosting Machine,

    GBM),随机森林(Random Forest)。

    3、掌握一种编程工具,比如Python

    一方面Python是脚本语言,简便,拿个记事本就能写,写完拿控制台就能跑;另外,Python非常高效,效率比java、r、matlab高。matlab虽然包也多,但是效率是这四个里面最低的。

    4、了解行业最新动态和研究成果, 比如各大牛的经典论文、博客、读书笔记、微博微信等媒体资讯。

    5、买一个GPU,找一个开源框架,自己多动手训练深度神经网络,多动手写写代码,多做一些与人工智能相关的项目。

    6、选择自己感兴趣或者工作相关的一个领域深入下去

    人工智能有很多方向,比如NLP、语音识别、计算机视觉等等,生命有限,必须得选一个方向深入的专研下去,这样才能成为人工智能领域的大牛,有所成就。

    再回答第二个问题,人工智能到底是不是一项技术?

    根据百度百科给的定义,人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的还能的理论、方法、技术及应用系统的一门新的技术科学。

    人工智能是一项技术。希望能帮到你,还整理了针对于想学习人工智能这一板块的学习资料。

    展开全文
  • 怎样成为一名优秀的算法工程师

    万次阅读 多人点赞 2018-07-12 10:54:25
    其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,...怎样成为一名优秀的算法工程师?这是很多从事人工智能学术研究和产品研发的同学都关心的一个问题。面对市场对人才的大量需求...

    其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

    原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。

    怎样成为一名优秀的算法工程师?这是很多从事人工智能学术研究和产品研发的同学都关心的一个问题。面对市场对人才的大量需求与供给的严重不足,以及高薪水的诱惑,越来越多的人开始学习这个方向的技术,或者打算向人工智能转型。市面上各种鱼龙混杂的培训班以及误导人的文章会把很多初学者带入歧途,浮躁的跟风将会让你最后收获甚微,根本达不到企业的用人要求。为了更好的帮助大家学习和成长,少走弯路,在今天的文章里,SIGAI的作者以自己的亲身经历和思考,为大家写下对这一问题的理解与答案。

    首先来看一个高度相关的问题:一个优秀的算法工程师必须具备哪些素质?我们给出的答案是这样的:

    数学知识

    编程能力

    机器学习与深度学习的知识

    应用方向的知识

    对自己所做的问题的思考和经验

    除去教育背景,逻辑思维,学习能力,沟通能力等其他方面的因素,大多数公司在考察算法工程师的技术水平时都会考虑上面这几个因素。接下来我们将按照这几个方面进行展开,详细的说明如何学习这些方面的知识以及积累经验。

     

    数学知识

    与其他工作方向如app、服务器开发相比,以及与计算机科学的其他方向如网络,数据库,分布式计算等相比,人工智能尤其是机器学习属于数学知识密集的方向。在各种书籍,论文,算法中都充斥着大量的数学公式,这让很多打算入门的人或者开始学习的人感到明显的压力。首先我们考虑一个最核心的问题:机器学习和深度学习究竟需要哪些数学知识?在SIGAI之前的公众号文章“学好机器学习需要哪些数学知识”里,我们已经给出了答案。先看下面这张表:

    算法或理论 用到的数学知识点
    贝叶斯分类器

    随机变量,贝叶斯公式,随机变量独立性,正态分布,最大似然估计

     

    决策树 概率,熵,Gini系数
    KNN算法 距离函数
    主成分分析 协方差矩阵,散布矩阵,拉格朗日乘数法,特征值与特征向量
    流形学习 流形,最优化,测地线,测地距离,图,特征值与特征向量

    线性判别分析

    散度矩阵,逆矩阵,拉格朗日乘数法,特征值与特征向量
    支持向量机 点到平面的距离,Slater条件,强对偶,拉格朗日对偶,KKT条件,凸优化,核函数,Mercer条件
    logistic回归 概率,随机变量,最大似然估计,梯度下降法,凸优化,牛顿法
    随机森林 抽样,方差
    AdaBoost算法 概率,随机变量,极值定理,数学期望,牛顿法
    隐马尔可夫模型 概率,离散型随机变量,条件概率,随机变量独立性,拉格朗日乘数法,最大似然估计
    条件随机场 条件概率,数学期望,最大似然估计
    高斯混合模型 正态分布,最大似然估计,Jensen不等式
    人工神经网络 梯度下降法,链式法则
    卷积神经网络 梯度下降法,链式法则
    循环神经网络 梯度下降法,链式法则
    生成对抗网络 梯度下降法,链式法则,极值定理,Kullback-Leibler散度,Jensen-Shannon散度,测地距离,条件分布,互信息
    K-means算法 距离函数
    强化学习 数学期望,贝尔曼方程
    贝叶斯网络 条件概率,贝叶斯公式,图
    VC维 Hoeffding不等式

                                                 更多算法工程师的必读文章,请关注SIGAICN公众号

    上面的表给出了各种典型的机器学习算法所用到的数学知识点。我们之前已经总结过,理解绝大多数算法和理论,有微积分/高等数学,线性代数,概率论,最优化方法的知识就够了。除流形学习需要简单的微分几何概念之外,深层次的数学知识如实变函数,泛函分析等主要用在一些基础理论结果的证明上,即使不能看懂证明过程,也不影响我们使用具体的机器学习算法。概率图模型、流形学习中基于图的模型会用到图论的一些基本知识,如果学习过离散数学或者数据结构,这些概念很容易理解。除此之外,某些算法会用到离散数学中的树的概念,但很容易理解。

    如果你已经学过这些大学数学课,只要把所需的知识点复习一遍就够了。对于微积分,通俗易懂而又被广为采用的是同济版的高等数学:

     

     

    在机器学习中主要用到了微分部分,积分用的非常少。具体的,用到了下面的概念:

    导数和偏导数的定义与计算方法,与函数性质的关系

    梯度向量的定义

    极值定理,可导函数在极值点处导数或梯度必须为0

    雅克比矩阵,这是向量到向量映射函数的偏导数构成的矩阵,在求导推导中会用到

    Hessian矩阵,这是2阶导数对多元函数的推广,与函数的极值有密切的联系

    凸函数的定义与判断方法泰勒展开公式

    拉格朗日乘数法,用于求解带等式约束的极值问题

    其中最核心的是多元函数的泰勒展开公式,根据它我们可以推导出梯度下降法,牛顿法,拟牛顿法等一系列最优化方法。如果你想要深入的学习微积分,可以阅读数学系的教程,称为数学分析:

     

    与工科的高等数学偏重计算不同,它里面有大量的理论证明,对于锻炼数学思维非常有帮助。北大张筑生先生所著的数学分析可谓是国内这方面教材的精品。

    下面来看线性代数,同样是同济版的教材:

    如果想更全面系统的学习线性代数,可以看这本书:

    相比之下,线性代数用的更多。具体用到的知识点有:

    向量和它的各种运算,包括加法,减法,数乘,转置,内积

    向量和矩阵的范数,L1范数和L2范数

    矩阵和它的各种运算,包括加法,减法,乘法,数乘

    逆矩阵的定义与性质

    行列式的定义与计算方法

    二次型的定义

    矩阵的正定性

    特征值与特征向量

    奇异值分解

    线性方程组的数值解

    机器学习算法处理的数据一般都是向量、矩阵或者张量。经典的机器学习算法输入的数据都是特征向量,深度学习算法在处理图像时输入的2维的矩阵或者3维的张量。掌握这些概念是你理解机器学习和深度学习算法的基础。

    概率论国内理工科专业使用最多的是浙大版的教材:

    如果把机器学习所处理的样本数据看作随机变量/向量,就可以用概率论的方法对问题进行建模,这代表了机器学习中很大一类方法。在机器学习里用到的概率论知识点有:

    随机事件的概念,概率的定义与计算方法

    随机变量与概率分布,尤其是连续型随机变量的概率密度函数和分布函数

    条件概率与贝叶斯公式

    常用的概率分布,包括正态分布,伯努利二项分布,均匀分布

    随机变量的均值与方差,协方差

    随机变量的独立性

    最大似然估计

    这些知识不超出普通理工科概率论教材的范围。

    最后来说最优化,几乎所有机器学习算法归根到底都是在求解最优化问题。求解最优化问题的指导思想是在极值点出函数的导数/梯度必须为0。因此你必须理解梯度下降法,牛顿法这两种常用的算法,它们的迭代公式都可以从泰勒展开公式而得到。

    凸优化是机器学习中经常会提及的一个概念,这是一类特殊的优化问题,它的优化变量的可行域是凸集,目标函数是凸函数。凸优化最好的性质是它的所有局部最优解就是全局最优解,因此求解时不会陷入局部最优解。如果一个问题被证明为是凸优化问题,基本上已经宣告此问题得到了解决。在机器学习中,线性回归、岭回归、支持向量机、logistic回归等很多算法求解的都是凸优化问题。

    拉格朗日对偶为带等式和不等式约束条件的优化问题构造拉格朗日函数,将其变为原问题,这两个问题是等价的。通过这一步变换,将带约束条件的问题转换成不带约束条件的问题。通过变换原始优化变量和拉格朗日乘子的优化次序,进一步将原问题转换为对偶问题,如果满足某种条件,原问题和对偶问题是等价的。这种方法的意义在于可以将一个不易于求解的问题转换成更容易求解的问题。在支持向量机中有拉格朗日对偶的应用。

    KKT条件是拉格朗日乘数法对带不等式约束问题的推广,它给出了带等式和不等式约束的优化问题在极值点处所必须满足的条件。在支持向量机中也有它的应用。

    如果你没有学过最优化方法这门课也不用担心,这些方法根据微积分和线性代数的基础知识可以很容易推导出来。如果需要系统的学习这方面的知识,可以阅读《凸优化》,《非线性规划》两本经典教材。

     

    编程能力

    编程能力是学好机器学习和深度学习的又一大基础。对于计算机类专业的学生,由于本科已经学了c语言,c++,数据结构与算法,因此这方面一般不存在问题。对于非计算机专业的人来说,要真正学好机器学习和深度学习,这些知识是绕不开的。

    虽然现在大家热衷于学习python,但要作为一名真正的算法工程师,还是应该好好学习一下c++,至少,机器学习和深度学习的很多底层开源库都是用它写的;很多公司线上的产品,无论是运行在服务器端,还是嵌入式端,都是用c++写的。此外,如果你是应届生,在校园招聘时不少公司都会面试你c++的知识。

    C++最经典的教材无疑是c++ primer:

    对做算法的人来说,这本书其实不用全部看,把常用的点学完就够了。对于进阶,Effective c++是很好的选择,不少公司的面试题就直接出自这本书的知识点:

    接下来说python,相比c++来说,学习的门槛要低很多,找一本通俗易懂的入门教程学习一遍即可。

    数据结构和算法是编写很多程序的基础,对于机器学习和深度学习程序也不例外。很多算法的实现都依赖于数组,链表,数,排序,查找之类的数据结构和基础算法。如果有时间和精力,把算法导论啃一遍,你会有不一样的感受:

    对于应届生来说,学完它对于你通过大互联网和人工智能公司校园招聘的技术面试也非常有用。

    上面说的只是编程语言的程序设计的理论知识,我们还要考虑实际动手能力。对于开发环境如gcc/g++,visual studio之类的工具,以及gdb之类的调试工具需要做到熟练使用。如果是在linux上开发,对linux的常用命令也要熟记于心。这方面的知识看各种具体的知识点和教程即可。另外,对于编程的一些常识,如进程,线程,虚拟内存,文件系统等,你最好也要进行了解。

     

    机器学习与深度学习

    在说完了数学和编程基础之后,下面我来看核心的内容,机器学习和深度学习知识。机器学习是现阶段解决很多人工智能问题的核心方法,尤其是深度学习,因此它们是算法工程师的核心知识。在这里有一个问题:是否需要先学机器学习,还是直接学深度学习?如果是一个专业的算法工程师,我的建议是先学机器学习。至少,你要知道机器学习中的基本概念,过拟合,生成模型,ROC曲线等,上来就看深度学习,如没有背景知识你将不知所云。另外,神经网络只是机器学习中的一类方法,对于很多问题,其他机器学习算法如logistic回归,随机森林,GBDT,决策树等还在被大规模使用,因此你不要把自己局限在神经网络的小圈子里。

    首先来看机器学习,这方面的教材很多,周志华老师的机器学习,李航老师的统计学习方法是国内的经典。这里我们介绍国外的经典教材,首先是PRML:

    此书深厚,内容全面,涵盖了有监督学习,无监督学习的主要方法,理论推导和证明详细深入,是机器学习的经典。此外还有模式分类这本书,在这里不详细介绍。

    深度学习目前最权威的教程是下面这本书:

    它涵盖了深度学习的方方面面,从理论到工程,但美中不足的是对应于介绍的相对较少。

    强化学习是机器学习很独特的一个分支,大多数人对它不太了解,这方面的教程非常少,我们推荐下面这本书:

    美中不足的是这本书对深度强化学习没有介绍,因为出版的较早。不知最新的版本有没有加上这方面的内容。

    在这里需要强调的是,你的知识要系统化,有整体感。很多同学都感觉到自己学的机器学习太零散,缺乏整体感。这需要你多思考算法之间的关系,演化历史之类的问题,这样你就做到胸中有图-机器学习算法地图。其实,SIGAI在之前的公众号文章“机器学习算法地图”里已经给你总结出来了。

     

    开源库

    上面介绍了机器学习和深度学习的理论教材,下面来说实践问题。我们无需重复造车轮子,熟练的使用主流的开源库是需要掌握的一项技能。对于经典的机器学习,常用的库的有:

    libsvm

    liblinear

    XGBoost

    OpenCV

    HTK

    Weka

    在这里我们不一一列举。借助于这些库,我们可以方便的完成自己的实验,或是研发自己的产品。对于深度学习,目前常用的有:

    Caffe

    TensorFlow

    MXNet

    除此之外,还有其他的。对于你要用到的开源库,一定要理解它的原理,以及使用中的一些细节问题。例如很多算法要求输入的数据先做归一化,否则效果会非常差,而且面临浮点数溢出的问题,这些实际经验需要你在使用中摸索。如果有精力把这些库的核心代码分析一遍,你对实现机器学习算法将会更有底气。以深度学习为例,最核心的代码无非是实现:

    各种层,包括它们的正向传播和反向传播

    激活函数的实现

    损失函数的实现

    输入数据的处理

    求解器,实现各种梯度下降法

    这些代码的量并不大,沉下心来,我相信一周之内肯定能分析完。看完之后你会有一种豁然开朗的感觉。

     

    应用方向的知识

    接下来是各个方向的知识,与机器学习有关的应用方向当前主要有:

    机器视觉

    语音识别

    自然语言处理

    数据挖掘

    知识图谱

    推荐系统

    除此之外,还有其他一些特定小方向,在这里不一一列举。这些具体的应用方向一般都有自己的教材,如果你以后要从事此方向的研究,系统的学习一遍是必须的。

     

    实践经验与思考

    在说完理论与实践知识之后,最后我们来说经验与思考。在你确定要做某一个方向之后,对这个方向的方法要有一个全面系统的认识,很多方法是一脉相承的,如果只追求时髦看最新的算法,你很难做出学术上的创新,以及工程上的优化。对于本问题所有的经典论文,都应该化时间细度,清楚的理解它们解决了什么问题,是怎么解决的,还有哪些问题没有解决。例如:

    机器视觉目标检测中的遮挡问题

    推荐系统中的冷启动问题

    自然语言处理中文分词中的歧义切分问题

    只有经过大量的编程和实验训练,以及持续的思考,你才能算得上对这个方向深刻理解,以至于有自己的理解。很多同学对自己实现轮上的算法没有底气,解决这个问题最快的途径就是看论文算法的开源代码,在github上有丰富的资源,选择一些合适的,研究一下别人是怎么实现的,你就能明白怎么实现自己的网络结构和损失函数,照葫芦画瓢即可。

    计算机以及人工智能是一个偏实践的学科,它的方法和理论既需要我们有扎实的理论功底,又需要有丰富的实践能力与经验。这两个方面构成了算法工程师最主要的素质。科学的学习路径能够让你取得好的学习效果,同时也缩短学习时间。错误和浮躁的做法则会让你最后事倍功半。这是SIGAI对想进入这个领域,或者刚进入这个领域的每个人要说的!

     

    推荐阅读

    [1] 机器学习-波澜壮阔40年 SIGAI 2018.4.13.

    [2] 学好机器学习需要哪些数学知识?SIGAI 2018.4.17.

    [3] 人脸识别算法演化史 SIGAI 2018.4.20.

    [4] 基于深度学习的目标检测算法综述 SIGAI 2018.4.24.

    [5] 卷积神经网络为什么能够称霸计算机视觉领域? SIGAI 2018.4.26.

    [6] 用一张图理解SVM的脉络 SIGAI 2018.4.28.

    [7] 人脸检测算法综述 SIGAI 2018.5.3.

    [8] 理解神经网络的激活函数 SIGAI 2018.5.5.

    [9] 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读 SIGAI 2018.5.8.

    [10] 理解梯度下降法 SIGAI 2018.5.11.

    [11] 循环神经网络综述—语音识别与自然语言处理的利器 SIGAI 2018.5.15

    [12] 理解凸优化 SIGAI 2018.5.18

    [13] 【实验】理解SVM的核函数和参数 SIGAI 2018.5.22

    [14] 【SIGAI综述】行人检测算法 SIGAI 2018.5.25

    [15] 机器学习在自动驾驶中的应用—以百度阿波罗平台为例(上) SIGAI 2018.5.29

    [16] 理解牛顿法 SIGAI 2018.5.31

    [17] 【群话题精华】5月集锦—机器学习和深度学习中一些值得思考的问题 SIGAI 2018.6.1

    [18] 大话Adaboost算法 SIGAI 2018.6.2

    [19] FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法 SIGAI 2018.6.4

    [20] 理解主成分分析(PCA) SIGAI 2018.6.6

    [21] 人体骨骼关键点检测综述 SIGAI 2018.6.8

    [22] 理解决策树 SIGAI 2018.6.11

    [23] 用一句话总结常用的机器学习算法 SIGAI 2018.6.13

    [24] 目标检测算法之YOLO SIGAI 2018.6.15

    [25] 理解过拟合 SIGAI 2018.6.18

    [26] 理解计算:从√2到AlphaGo ——第1季 从√2谈起 SIGAI 2018.6.20

    [27] 场景文本检测——CTPN算法介绍 SIGAI 2018.6.22

    [28] 卷积神经网络的压缩和加速 SIGAI 2018.6.25

    [29] k近邻算法 SIGAI 2018.6.27

    [30] 自然场景文本检测识别技术综述 SIGAI 2018.6.27

    [31] 理解计算:从√2到AlphaGo ——第2季 神经计算的历史背景 SIGAI 2018.7.4

    [32] 机器学习算法地图 SIGAI2018.7.6

    [33] 反向传播算法推导-全连接神经网络 SIGAI2018.7.9

    [34] 生成式对抗网络模型综述 SIGAI2018.7.11

     

     

    原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。

     

     

    展开全文
  • 算法工程师面试

    千次阅读 2017-09-17 13:59:18
    成为算法工程师,应该学习哪些东西 首先说算法工程师有几个方向:NLP,推荐,CV,深度学习,然后结合公司业务做得内容各不相同 传统机器学习算法:感知机,SVM,LR,softmax,Kmeans,DBSCAN,决策树(CART,ID3...
  • 算法工程师

    2019-12-28 12:30:19
    由于现在开源技术的普及,Sklearn、Tensorflow 和 Spark ML 基本已经成为大部分算法工程师标配的工具库了,因此,熟练的调包能力也是决定了一名算法工程师能否快速实现需求。 其次,在真实的生产环境中,算法的落地...
  • 如何成为一名AI人工智能算法工程师

    万次阅读 多人点赞 2019-06-30 12:25:21
    经常有朋友私信问,如何学python呀,如何敲代码呀...来看看你距离成为一名AI工程师还有多远吧~ ⭐具体内容: 我是因为什么开始接触敲代码 人工智能/机器学习/深度学习 自学如何寻找学习资料 如何选择编...
  • 如何成为一名合格的运筹优化算法工程师

    千次阅读 多人点赞 2019-07-23 18:30:35
    作为算法工程师里的一小撮,相比机器学习...所以在这里和自己探讨下,看看如何成为一名更好的、合格的运筹优化算法工程师,给自己一个方向。如果有人不怕被坑,欢迎参考。当然更欢迎拍砖和补充。 引言 运筹学(o...
  • 算法工程师面试必备

    2018-09-05 17:50:06
    成为算法工程师,应该学习哪些东西 首先说算法工程师有几个方向:NLP,推荐,CV,深度学习,然后结合公司业务做得内容各不相同 传统机器学习算法:感知机,SVM,LR,softmax,Kmeans,DBSCAN,决策树(CART,ID3...
  • 随着大数据场景和人工智能技术的普及,机器学习算法工程师已经成为求职市场上最炙手可热的职位——可能都没有之一。但是机器学习技术对于缺乏一定基础的同学来讲还是不太容易入门和上手。具体来说,很多同学对于需要...
  • 控制算法工程师是怎样炼成的

    千次阅读 多人点赞 2019-04-10 20:05:31
    成为算法工程师该怎么修炼? 能问出这些问题的人,多半不是搞算法的同行。不过下文会解答这些疑问,以帮助更多的人理解算法工作,特别是有雄心的老板,负责的HR职员,专业的猎头,以及有志于算法的工程师。 ...
  • 如何成为当下一个合格的算法工程师

    万次阅读 多人点赞 2017-12-29 22:11:50
    如何成为当下一个合格的算法工程师 知乎上看了SimonS大神的一个live做了一些笔记 一,Q&A部分: 1.一个特征分析的例子。。。(听不懂) 2. 还是一个机器学习的例子,(听不懂)大致,降低复杂度。 3....
  • 而要成为一名合格的机器学习算法工程师(以下简称算法工程师)更是难上加难,因为在掌握工程师的通用技能以外,还需要掌握一张不算小的机器学习算法知识网络。下面我们就将成为一名合格的算法工程师所需的技能进行...
  • 而要成为一名合格的机器学习算法工程师(以下简称算法工程师)更是难上加难,因为在掌握工程师的通用技能以外,还需要掌握一张不算小的机器学习算法知识网络。 下面我们就将成为一名合格的算法工程师所需的技能进行
  • 如何成为当下合格的算法工程师

    千次阅读 2017-09-06 21:35:04
    前一段时间听了一个知乎 live,觉得讲的还不错,放在这里提醒自己吧! 出自:知乎Live-如何成为当下合格的算法工程师
  • 一个公式告诉你为什么程序员要转算法工程师

    万次阅读 多人点赞 2017-06-11 18:20:23
    今天(2017年6月11日)爬了某招聘网站的十大城市的算法工程师职位。算法工程师这里的算法工程师包括比较广泛。有做数据科学的,有做图形的,有做信号处理的。之后会统计更细分的领域。十大城市以下按照算法工程师的...
  • 成为一名 AI 算法工程师,你需要具备哪些能力? 这是一篇关于如何成为一名 AI 算法工程师的长文~ 经常有朋友私信问,如何学 python 呀,如何敲代码呀,如何进入 AI 行业呀? 这里总结了成为AI算法工程师所需要掌握...
  • 这是一篇关于如何成为一名AI算法工程师的长文

    千次阅读 多人点赞 2019-06-25 09:08:00
    点击上方“Datawhale”,选择“星标”公众号第一时间获取价值内容这是一篇关于如何成为一名AI算法工程师的长文~经常有朋友私信问,如何学python呀,如何敲代码呀,...
  • 算法工程师面试题

    2018-07-30 10:09:15
    八九月份就要开始找工作了,一直期待能够成为一名算法工程师,所以在这里总结一下算法工程师常见问题。期待9月秋招时能有一个好的结果。本篇博客会一直更新下去。   编程语言 基本算法 传统机器学习 常见...
  • 算法工程师面试常见问题

    万次阅读 多人点赞 2018-03-11 11:45:53
    八九月份就要开始找工作了,一直期待能够成为一名算法工程师,所以在这里总结一下算法工程师常见问题。期待9月秋招时能有一个好的结果。本篇博客会一直更新下去。 编程语言 基本算法 传统机器学习 常见机器学习...
  • 算法工程师之劝退檄文

    千次阅读 2017-12-12 22:01:03
    算法工程师通常要求硕士学历,而攻读硕士的三年时间就成为了成本。互联网圈有一万小时理论,任何技术要精通,需三年的积累。如果本科毕业之后从事一个岗位三年,那么三年后已经成为行业专家了,而有些人才硕士毕业。...
  • 来自公众号:大数据挖掘DT数据分析本文共7500字,建议阅读10+分钟。本文将算法工程师所需的技能进行拆分,带你了解掌握哪些技能才能算是一名合格的算法工程师成为一名合格...
  • 解优人才网记者风精分享:一名算法工程师的职业规划自从硕士毕业后,一直从事算法方面(视频编解码,深度学习,全景VR)的工作,目前人到中年,感觉有点在十字路口,不知道未来规划是什么样的,因为最近搜索了网上...
  • 今天在《推荐系统开发实战》的读者群里聊天,在探讨技术问题的时候发现也有朋友对一些非...推荐算法工程师算法工程师的待遇基本差不多,不过不同地方、不同级别的推荐算法工程师待遇肯定是不一样,比如一线的北上广深

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,898
精华内容 36,759
关键字:

怎么成为算法工程师