一文祛魅AI核心概念(全)
在并不算漫长的AI(人工智能)发展史,各种行业背景的专家助力了AI极大的发展,也带来了很多专业术语、概念。术语对于专业研究者是比较清晰及严谨,但对于初学者可能就有理解层面的困扰。
特别的,很多概念、术语说来说去可能基本上就是一个意思,很多复杂的概念背后的思想也可以很朴素的!
「在此本文致力于对AI的核心概念的系统地祛魅,简化理解。」
一、基本概念
人工智能算法,现如今基本上指的就是【机器学习】,而机器学习基本也就是【归纳学习(也就是小学三年级学的归纳法)】或【统计学习】。
❝注:补充一句,机器学习与统计学习并不等同,但两者是很相似的。如Rob Tibshirani 教授曾总结统计学习、机器学习对应的“术语表”。
❞两者主要区别就是机器学习应用目的在于预测,而统计学习的主要目的在于分析及解释。
把机器学习不严谨地替换成归纳学习,想必大家对这个概念就清晰了很多——机器学习也就是学习归纳出数据规律,并加以应用规律预测的过程。
比如,收入的回归预测。如下图我们可以发现收入与教育程度的情况存在着某种线性规律,根据初中数学的基础,我们大概瞄一下,两者关系可能是 收入 约等于 3倍的受教育的年限(Y = 3X ),依据这条不严谨的规律我们可以预估不同教育程度的人相应的收入状况。
比如,好西瓜的分类预测。如下一大堆西瓜特征的数据中,我们稍加观察可能会发现西瓜纹理如果清晰,则它大概率是一个好瓜。
可见,人工智能的基本概念其实并不复杂, 人工智能、机器学习的核心就在于,「如何从数据中发现足够正确及适用的客观统计规律,并应用于实际工程中,对未知情况做出预判。」
这里,也给想从事人工智能的爱好者先提个醒,使用人工智能技术(即 调包--见文末)也挺容易的,但人工智能技术原理、工程实现确实 难 !实际场景中还需结合业务提供更准确及效率预测有各种考量,如教育程度-收入回归预测简单的例子中:
如何选择合适的回归模型?(线性回归、神经网络回归、树回归模型...) 如何高效地学习确认线性回归系数/模型权重?(最小二乘法、梯度下降..) 如何设定合适的学习目标,更好地减少模型预测与实际值的差异?(均方误差 ..) 是否可以引入其他数据变量更好地预测收入?(数据选择、特征工程..) 如何在一大堆数据中更快地学习及预测?(大数据,代码效率) 如何保证学习的规律在 未知数据是适用的?(过拟合、正则化、泛化原理..) 。。。等等
这些问题本文没有给答案,交给读者自己学习了解。在此软推本人的技术博客 github.com/aialgorithm,有相关项目代码/资料/技术原理等分享,可供学习了解。概念及原理,首推 李航老师的统计学习方法,周老师的西瓜书,深度学习的花书,非常建议有基本概念后就可以参照一些经典kaggle数据竞赛、sklearn、tensorflow的项目先练练手,实践先行,再钻研原理可以循序深入地掌握人工智能技术,具体可见【学习路线】
二、机器学习中各种学习的概念
机器学习按不同的学习场景可以划分出很多类别,但常见的学习概念其实也就几个大类,基本的关系是,机器学习是一个大大类,包含了深度学习。
机器学习:通过模型从数据中学习规律,用于处理任务。机器学习常见的任务有分类任务(如通过逻辑回归模型判断邮件是否为垃圾邮件类)、回归预测任务(如线性回归模型预测收入)等等。 深度学习:是机器学习的一个子方向,它通过深层的神经网络模型学习以处理任务。
而深度学习、机器学习下再按照学习数据经验的不同(即训练数据的标签信息的差异),还可以细分为监督学习(supervised learning)、非监督学习(unsupervised learning)、半监督学习(semi- supervised learning)和强化学习(reinforcement learning)
2.1 监督学习
监督学习是机器学习中应用最广泛及成熟的,它是从有标签的数据样本(x,y)中,学习如何关联x到正确的y。模型在给定特征x,参考着标签y学习,借助标签y的监督纠正,模型f( x; w )通过优化算法调整自身参数w,以降低模型预测值与目标值y的误差。
监督学习过程,就像上小学三年级的时候,老师给了几道练习题,并告知学生每一道题目都是独立的,也都是在课纲范围内,让学生从中学习相关知识。当老师给了题目的答案,学生参考着答案去反推得到解题的知识。
2.2 无监督学习(自监督学习)
非监督学习也是机器学习中应用较广泛的,是从无标注的数据(x)中,学习数据的内在规律。这个过程就像模型在没有人提供参考答案(y),完全通过自己琢磨题目的知识点,对知识点进行归纳、总结。按照应用场景,非监督学习可以分为聚类,特征降维和关联分析等方法。
非监督学习过程,就像上小学六年级的时候,老师没给题目答案,学生仅从题目本身可以分析题目考核的知识重点、题目的相似程度等知识点,并对知识点进行归纳。
2.3 半监督学习
半监督学习是介于传统监督学习和无监督学习之间,其思想是在有标签样本数量较少的情况下,以一定的假设前提在模型训练中引入无标签样本,以充分捕捉数据整体潜在分布,改善如传统无监督学习过程盲目性、监督学习在训练样本不足导致的学习效果不佳的问题。
2.4强化学习
强化学习从某种程度可以看作是有延迟标签信息的监督学习 ,其主要思想是基于智能体(Agent)和环境(Environment)的交互学习。智能体环环境中采取一种行为(action),环境将其转换为一次回报(reward)和一种状态表示(state),反馈给智能体。基于正确的行为会得到奖励,做出错误的行为就会受到惩罚的反馈机制,智能体优化行为的学习过程。
其他还有很多概念 各种场景的学习,对比学习、元学习、多任务学习、小样本学习以及不学习..,入行时间久都有机会接触的,在此就不展开了。
三、机器学习的组成
3.1 机器学习的大致过程
模型学习也可以称为拟合或训练或建模等,这个过程一般可以概括为:计算机程序基于给定的、有限的学习数据出发(常基于每条数据样本是独立同分布的假设),选择某个的模型方法(即假设要学习的模型属于某个函数的集合,也称为假设空间),通过算法更新模型的参数值(经验),以优化处理任务的指标表现,最终学习出较优的模型,并运用模型对数据进行分析与预测以完成任务。更为具体的建模方法及项目实践可以见:【机器学习建模】
由此可见,机器学习方法有四个要素:数据,模型,优化算法,学习目标。通过把机器学习拆分成这四个要素组成,我们可以发现复杂多样的机器学习方法的共性所在,从而加深系统的理解。如下展开介绍。
3.2 数据
数据(或称数据集)中隐含着经验知识,是机器学习方法的原料。它由一条条的样本(或称记录)组成,每条样本由描述其各个方面维度信息的特征及标签[ 仅有在监督学习中有目标值标签]组成。常见的数据集类型有三种:
记录数据集:样本的各个方面维度信息的特征间是无顺序之分的。如交易额度、次数及间隔时长的记录数据,可用于学习预测每笔交易记录是否有欺诈嫌疑; 序列数据集:样本的各个方面维度信息的特征间具有涉及时间或空间顺序的关系。如体育、经济类新闻的文本,其文字内容是存在顺序关系的,可用于学习预测每一条新闻应该归属的话题类型。 图片数据集:数据集组成的样本是图片的形式。如猫、狗的图片,可用于学习预测图片里面是否有小猫;
如图所示癌细胞分类任务的数据集:
3.3 模型
学习到“好”的模型是机器学习的直接目的。机器学习模型简单来说,即是学习数据特征与标签的关系或者学习数据特征内部的规律的一个函数。
机器学习模型可以看作是:首先选择某个的模型方法,再从数据样本(x,(y))中学习,优化模型参数w以调整各特征的有效表达,最终获得对应的决策函数f( x; w )。该函数将输入变量 x 在参数w作用下映射到输出预测Y,即Y= f(x; w)。
3.4 学习目标
学习到“好”的模型,“好”即是模型的学习目标。“好”对于模型也就是预测值与实际值之间的误差尽可能的低。具体衡量这种误差的函数称为代价函数 (Cost Function)或者损失函数(Loss Function),我们即通过以「极大化降低损失函数为目标」去学习模型。
对于不同的任务目标,往往也需要用不同损失函数衡量,经典的损失函数如:回归任务的均方误差损失函数(RMSE)及分类任务的交叉熵损失函数(CrossEntropy)等。
3.5 优化算法
有了极大化降低损失函数为目标去学习“好”模型,而如何达到这目标?我们第一反应可能是直接求解损失函数最小值的解析解,获得最优的模型参数。
遗憾的是,机器学习模型的损失函数通常较复杂,很难直接求最优解。幸运的是,我们可以通过优化算法(如梯度下降算法、牛顿法等)有限次迭代优化模型参数,以尽可能降低损失函数的值,得到较优的参数值(数值解)。
四、机器学习的实践--调包是什么?
前面原理概念说了很多,再说说技术上如何建模预测的。
这里就要先科普下什么叫调包?调包这个词,在软件开发的时候也很经常被提及。调包就是直接调用现成框架的工具包、算法包以完成开发应用,比如熟知的 import pandas as pd
。
通过调包进行项目开发,大致的过程怎么样的呢?
大概就是,利用导入的各种框架/工具包,把数据处理好(这个很很费时间),就可以扔进模型训练,训练完预测出结果。完。
不说废话的也就几句代码:
1、首先是熟练的导入需要的库,如pandas、numpy、sklearn、tensorflow、pytorch,如导入逻辑回归模型只要:from sklearn.linear_model import LogisticRegression 2、初始化下模型参数:model = LogisticRegression(超参数) 3、训练数据扔进模型学习训练:model.fit(已知数据) 4、模型预测新数据的结果:model.predit(未知数据)
寥寥几行代码就掌握了算法开发的精髓了hha..
❝文末注:本文注重通俗性,严谨性不足(如有错误、歧义,还请各位大佬文末评论指出)。我们江湖再见~
❞
-推荐阅读-
深度学习系列