前言
机器学习学科的发展大体经历了规则学习、统计学习、深度学习这三大阶段。从最早的结构化的人机赛棋,到广泛领域的知识问答,再到当下红极一时的自动驾驶等工业领域,机器学习已经被成功应用到模式识别、数据挖掘、自然语言处理、人工智能、语音识别、图像识别等各个领域,并且被综合应用到信息检索、生物信息技术、自动驾驶、无人机、AR/VR、医疗、教育等各个行业。
机器学习的很多方法在原理上是相通的,只不过适用的领域不同。机器学习的能力比较强大,应用范围广泛,要解决的问题多且繁杂,因此并不存在一个适用于所有问题的结构化方法。这就要求机器学习工程师具备较高的素质,除了掌握计算机科学基础的三个方面的知识(系统、软件、理论),还要对机器学习算法有深入的了解,只有这样才可以搭建出一个适用于工业界应用的好框架。
基础决定深度。一般来讲,机器学习由模型(建模)、策略(学习方法)、算法(实现)三部分组成,叫作机器学习三要素。这三部分层层递进,推理的难度逐渐增加,对人的要求也不一样:在建模过程中需要有理解能力,在设计学习方法时需要有数学推理能力,最终将学习方法实现为算法时需要有转化能力。当然,一些资深的程序员或者ACM(Association for Computing Machinery)竞赛的参赛者,本身有非常强的代码理解能力,这些能力能帮助他们理解算法,并进一步理解机器学习的过程。
要想成为一名优秀的机器学习工程师,必须有良好的数学基础。在本科阶段学习的数值分析、线性代数、概率与统计、离散数学等课程知识,对于理解大多数模型来说已经足够了。概率与统计及离散数学是理解模型的基础,线性代数决定了你实现算法的能力,数值分析决定了推衍过程。然而,如果希望更深入地理解模型算法的实现原理、掌握和学习更多的模型,还需要学习矩阵论、优化论、泛函分析、贝叶斯统计、模糊数学等方面的知识。
在工业界,很多时候大家只是使用模型,最低的要求就是理解模型的输入、中间过程和输出。要快速掌握并使用模型,关键在于理解模型的适用条件,这样才能构造出符合模型要求的特征。客观地讲,并没有不好的模型,只有没有构造好的特征。这也牵扯到模型的适用性问题,有些任务可能非常难以转化成模型最适用的问题,因为有时候如果强制使用某种模型,可能需要对于任务与特征本身有深刻的理解,以及长时间的浸淫。
很多时候,我们并不一定要选择最合适的模型,究其原因:一是我们所选择的模型可能并不需要特别复杂的转化就可以用于此种问题;二是机器学习工程师不一定有时间对某个行业进行深入的分析和研究,提取出适用于模型的各种特征;三是强制使用某种模型可能会导致转化问题本身就是一个复杂的问题,需要对结构进行大量修改以及在工程上提供支持。由于业界竞争激烈,有时候我们需要的是快速迭代,因此这时更关键的是选择一个基本适用的模型,先验证得到问题的可解性和baseline,然后再不断优化。
本书适合那些从其他编程领域转入机器学习领域的工程师阅读,帮助他们快速掌握模型及其应用。本书假设读者已掌握微积分、概率论、线性代数以及离散数学的基础知识。书中简单介绍了机器学习的基本概念及其背后的数学原理,以机器学习在业务安全领域的应用为线,详细讲解如何将机器学习应用到业务安全工作中,对一些模型的策略和算法进行了深入介绍。
本书第2章、第3章中的一些数学基础知识(定义、原理等),引用自国内外名校采用的本科与研究生教材,笔者按照自己学习机器学习的路线对这些知识进行了编排,并统一了数学符号,方便大家快速了解或查询。
限于篇幅,本书只列出必需的数学基础知识,仅对某些定理给出了证明,并加入笔者的解释,帮助大家理解。机器学习是一门与数学联系十分紧密的学科,因此笔者更愿意用符号、公式和算法语言来介绍相应的内容,希望大家能通过定义理解函数,通过算法语言理解算法本身,培养看公式比看文字更高效的能力。希望大家能够理解算法的原理,了解如何恰当地将机器学习应用到实际场景中,既抛出问题,又给出笔者积累的解决问题的思路。最后还要强调,数学是基础,数学概念字字珠玑,请大家认真理解,在此基础上你甚至能创造属于自己的算法。
鉴于写作时间仓促以及篇幅有限,书中有些地方的讲解可能比较晦涩或者不够全面,尽管笔者竭尽所能,有些疏漏也在所难免,希望大家能够在发现问题后第一时间联系笔者,笔者会在再版时更正,在此先表示感谢。下图所示为机器学习算法工程师需要具备的技能树。