前言
机器通过分析大量数据来进行学习。比如说,不需要通过编程来识别猫或人脸,它们可以通过使用图片来进行训练,从而归纳和识别特定的目标。
机器学习(Machine Learning),它指的是这样一种计算过程:对于给定的训练数据(Training samples),选择一种先验的数据分布模型(Models),然后借助优化算法(Learning Algorithms)自动地持续调整模型参数(Model Weights / Parameters),从而让模型不断逼近训练数据的原始分布。这个持续调整模型参数的过程称为“模型训练”(Model Training)。模型的训练依赖于优化算法,基于过往的计算误差(Loss),优化算法以不断迭代的方式,自动地对模型参数进行调整。由于模型训练是一个持续不断的过程,那么自然就需要一个收敛条件(Convergence Conditions),来终结模型的训练过程。一旦收敛条件触发,即宣告模型训练完毕。模型训练完成之后,我们往往会用一份新的数据集(Testing samples),去测试模型的预测能力,从而验证模型的训练效果,这个过程,我们把它叫作“模型测试”(Model Testing)。测试数据用于考察模型的泛化能力(Generalization),也就是说,对于一份模型从来没有“看见过”的数据,我们需要知道,模型的预测能力与它在训练数据上的表现是否一致。
学习路线与材料
现在学习 AI,特别是上手深度学习,已经清楚的出现了两条路子。
- 以理论为中心,扎扎实实从数学基础开始,把数据科学、机器学习大基础夯实,然后顺势向上学习Deep Learning,再往前既可以做研究,也可以做应用创新。
- 以工具为中心,直接从Tensorflow、Caffe、MXNET、PyTorch 这些主流的工具着手,以用促练,以练促学。
一般来说,第一条路子适合于还在学校里、离毕业还有两年以上光景的青年学生,而第二条路子适合于已经工作,具有一定开发经验的人,也适合时间有限的转型开发者,这条路见效快,能很快出成果,受到更多人的青睐。但是它也同样需要一个健康的框架,如果自己瞎撞,表面上看很快也能重复别人已经做出来的成果,但是外强中干,并不具备解决新问题的能力,而且一般来说在知识和技能体系里会存在重大的缺陷。
斯坦福大学今年上半年开了一门课程,叫做 CS20SI: Tensorflow for Deep Learning Research。可以说这门课程为上面所说的第二条路径规划了一个非常漂亮的框架。学习斯家的课程,你很容易找到一种文武双修、理论与实践生命大和谐的感觉。特别是斯家课程的课件之细致完备、练习之精到舒适,处处体现一种“生怕你学不会、学不懂”的关怀。stanford-tensorflow-tutorials
王天一:人工智能的价值在于落地,它的优势则是几乎所有领域都有用武之地。与其星辰大海,不如近水楼台。将自身专业的领域知识和人工智能的方法结合,以解决实际问题,才是搭上人工智能这趟快列的正确方法。
三百多页ppt,就说比较好的学习材料李宏毅一天搞懂深度學習
吴恩达给你的人工智能第一课 这是笔者实际的入门课程
才云内部的课程资料适合传统软件工程师的 Machine Learning 学习路径
2017 斯坦福李飞飞视觉识别课程 虽然说得是视觉识别,但一些机器学习的基本原理也值得一看。CS231n课程笔记翻译:神经网络笔记1(上) 未读
李宏毅2020机器学习深度学习(完整版)国语 也非常的不错。
《李沐的深度学习课》 有一点非常好,就是针对线性回归/softmax回归/感知机 都提供了一个 基于numpy 的实现以及pytorch 的简单实现。
AI 的范畴
机器学习下面应该是表示学习(Representation Learning),即概括了所有使用机器学习挖掘表示本身的方法。相比传统 ML 需要手动设计数据特征,这类方法能自己学习好用的数据特征。整个深度学习也是一种表示学习,通过一层层模型从简单表示构建复杂表示。
机器学习的主要目的是把人类归纳经验的过程,转化为由计算机自己来归纳总结的过程。深度学习起源于机器学习中的人工神经网络,所以从工作机制上讲机器学习与深度学习是完全一致的,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。
经典的机器学习模型包含 线性回归、Logistic回归、决策树、支持向量机、贝叶斯模型、随机森林、集成模型、神经网络。
传统的机器学习模型的一个主要瓶颈在于特征工程环节(特征工程是把任务的原始数据转化为模型输入数据的过程),特征工程环节主要依靠手工设计,需要大量的领域专门知识,尤其针对非结构化数据(语言、文本、图像等),设计有效的特征成为大多数机器学习任务的主要瓶颈。深度学习是机器学习中一种对数据进行表征学习的方法,可以直接学习低级感知层数据(如图像像素和语音信号),且特征学习与分类模型一起训练(端到端的学习),节约精力也更通用化。
图解机器学习:人人都能懂的算法原理深度学习都是神经网络吗?明显并不一定是,例如周志华老师的深度森林,它就是第一个基于不可微构件的深度学习模型。
三大应用场景
- 分类,在机器学习的场景中,分类算法解决分类问题也是利用相似的原理,可用的算法非常多,常见的有逻辑回归、朴素贝叶斯、决策树、随机森林、K 近邻、支持向量机,以及神经网络等等。
- 二分类:预测结果只有两个离散的值,如是否、1/0
- 多分类:预测结果是多个离散的值,如A/B/C
- 回归,预测结果是连续的值,如房价的预测、库存的预测
- 聚类,无监督学习,将相似的样本归类在一起,如细分用户、新闻聚类。假设,你现在是一个客服系统负责人,为了减轻人工客服的压力,想把一部分常见的问题交给机器人来回复。解决这件事情的前提,就是我们要对用户咨询的商品问题先进行分组,找到用户最关心的那些问题。这种需要根据用户的特点或行为数据,对用户进行分组,让组内数据尽可能相似的的问题,就属于聚类问题,用一个词概括它的特点就是 “物以类聚”。常见的聚类算法有层次聚类、原型聚类(K-means)、密度聚类(DBSCAN)。其实,聚类算法的原理很简单,就是根据样本之间的距离把距离相近的聚在一起,在实际应用场景里,衡量样本之间距离关系的方法会更复杂,可能会用语义相似度、情感相似度等等。聚类分析较为重要的一个应用就是用户画像。
机器学习的数学基础
利用机器学习,我们至少能解决两个大类的问题:
- 分类(Classification)
- 回归(Regression)。
为了解决这些问题,机器学习就像一个工具箱,为我们提供了很多现成的的算法框架,比如:LR, 决策树,随机森林,Gradient boosting等等,还有近两年大热的深度学习的各种算法,但要想做到深入的话呢,只是会使用这些现成的算法库还不够,还需要在底层的数学原理上有所把握。比如
- 研究优化理论,才能够有更好的思路去设计和优化目标函数;
- 研究统计学,才能够理解机器学习本质的由来,理解为什么机器学习的方法能够使得模型一步步地逼近真实的数据分布;
- 研究线性代数,才能够更灵活地使用矩阵这一数学工具,提高了性能且表达简洁,才能够更好地理解机器学习中涉及到的维数灾难及降维问题;
- 研究信息论,才能够准确地度量不同概率分布之间的差异。
王天一:人工智能虽然复杂,但并不神秘。它建立在数学基础上,通过简单模型的组合实现复杂功能。在工程上,深度神经网络通常以其恒河沙数般的参数让人望而却步;可在理论上,各种机器学习方法的数学原理却具有更优的可解释性。从事高端研究工作固然需要非凡的头脑,但理解人工智能的基本原理绝非普通人的遥不可及的梦想。
实践
实践说的是:选择入门的编程语言(基本是python)以及编程语言在机器学习方面的库
CS231n课程笔记翻译:Python Numpy教程 未读
基本原理搞懂之后,可以先找个实际问题+dataset 实操一下 Kaggle入门,看这一篇就够了Kaggle成立于2010年,是一个进行数据发掘和预测竞赛的在线平台。入门级的三个经典练习题目:
初学者如何从零开始征战Kaggle竞赛 从技术到科学,中国AI向何处去?
《Approaching (Almost) Any Machine Learning Problem》未读
深度学习框架
《深入浅出Pytorch》一个深度学习框架首先需要支持的功能是张量的定义。张量的运算是深度学习的核心,比如,一个迷你批次大小的图片可以看成四维的张量,一个迷你批次的文本可以看成二维张量等。基本上所有深度学习模型的神经网络层(包括线性变换层和激活函数层等)都可以表示为张量的操作,梯度和反向传播算法也可以表示成张量和张量的运算。
有了张量的定义和运算还不够,我们需要让一个深度学习框架支持反向传播计算和梯度计算。为了能够计算权重梯度和数据梯度,一般来说,神经网络需要记录运算的过程,并构建出计算图。计算图的最后输出是一个损失函数的标量值,从标量值反推计算图权重张量的梯度(导数),这个过程被称为自动求导。动态计算图和静态计算图的求导方式不同。
综上,深度学习对于张量计算性能、算子灵活性、 自动微分能力、分布式训练、可视化和端侧部署都有很强的诉求。
学习路径
- 知道原理
- 可以进行矩阵推导
- 对的上工程代码 tf/pytorch
- 知道tf原理
- 知道分布式架构,ps/allreduce
- 知道推荐系统模型的特性,可以进行针对性的优化
工程/平台化
海量数据标注 + 大规模计算(训练和推理) + 工程化(python或c++)=AI系统
- 数据侧:数据整理、数据标注系统
- 训练侧:集群管理、分布式训练,更快、利用率高更高
- 推理侧:对训练得到的模型剪枝、蒸馏、量化、压缩,更换算子等 携程AI推理性能的自动化优化实践
最终目标就是,缩短算法工程师训练一个模型的时间。