前言
这个系列算是科普文吧,尤其这第一篇可能会比较长,因为我这8年里一直在AI领域里做测试,涉及到的场景有些多, 我希望能尽量把我经历过的东西都介绍一下,算是给大家科普一下我们这些在AI领域内做测试的人,每天都在做什么事情。 当然AI领域很庞杂,我涉及到的可能也仅仅是一小部分,这篇帖子算是抛砖引玉,欢迎大家一起来讨论。
我打算先简单讲解一下人工智能的原理,毕竟后面要围绕这些去做测试, 并且包括了在测试大模型以及其他一些场景的时候,需要自己构建模型来辅助测试, 所以我觉得至少先讲明白迁移学习的原理,这样我们后面做模型微调定制自己的模型的时候才有据可依。
PS:由于是科普性质的,所以不会讲的特别深, 很多地方我都简化过并且翻译成大白话方便大家理解。 要是每一个点都很详细的深入的去讲,那估计都能写成本书了。
专家系统与机器学习
我们举一个信用卡反欺诈的例子, 以前的时候在银行里有一群业务专家, 他们的工作就是根据自己的知识和经验向系统中输入一些规则。例如某一张卡在一个城市有了一笔交易,之后 1 小时内在另一个城市又有了一笔交易。这些专家根据以前的经验判断这种情况是有盗刷的风险的。他们在系统中输入了 1 千多条这样的规则,组成了一个专家系统。 这个专家系统是建立在人类对过往的数据所总结出的经验下建立的。 我们可以把它就看成一个大脑,我们业务是受这个大脑控制的。但这个大脑是有极限的,我们要知道这种规则从 0 条建立到 1 条是很容易的,但是从几千条扩展到几千零一条是很难的。 因为你要保证新的规则有效,要保证它不会跟之前所有的规则冲突,所这很难,因为人的分析能力毕竟是有限的。 我听说过的最大的专家系统是百度凤巢的,好像是在 10 年的时候吧,广告系统里有 1W 条专家规则。但这是极限了,它们已经没办法往里再添加了。 所以说这是人脑的一个极限。 后来呢大家引入机器学习, 给机器学习算法中灌入大量的历史数据进行训练, 它跟人类行为很像的一点就是它可以从历史数据中找到规律,而且它的分析能力更强。 以前人类做分析的时候,可能说在反欺诈的例子里,一个小时之内的跨城市交易记录是一个规则,但如果机器学习来做的话,它可能划分的更细,例如 10 分钟之内有个权重,10 分钟到 20 分钟有个权重,1 小时 10 分钟也有个权重。 也就是说它把这些时间段拆的更细。 也可以跟其他的规则组合,例如虽然我是 1 小时内的交易记录跨越城市了,但是我再哪个城市发生了这类情况也有个权重,发生的时间也有个权重,交易数额也有权重。也就是说机器学习能帮助我们找个更多更细隐藏的更深的规则。 以前银行的专家系统有 1000 多条规则,引入了机器学习后我们生成了 8000W 条规则。 百度在引入机器学习后从 1w 条规则扩展到了几十亿还是几百亿条 (我记不清楚了)。 所以当时百度广告推荐的利润很轻易的提升了 4 倍。 我们可以把专家系统看成是一个比较小的大脑,而机器学习是更大的大脑。 所以说我们叫它机器学习,是因为它像人类一样可以从历史中库刻画出规律,只不过它比人类的分析能力更强。 所以在网上有个段子么,说机器学习就是学出来海量的 if else, 其实想想也有道理,套路都是 if 命中了这条规则,就怎么么样的,else if 命中了那个规则,就怎么怎么样的。 人类的分析能力有限么,专家系统里人类写 1 千,1w 个 if else 就到头了。 但是机器学习给你整出来几百个亿的 if else 出来。 我们就可以把机器学习想的 low 一点么,不要把它想的那么神秘。
那深度学习是什么呢, 深度学习就是机器学习的一个分支,他把基础的机器学习算法(逻辑回归),扩展成了神经网络:
上面是一个神经网络的结构图, 可以理解为这个神经网络里, 除了输入层外,每一个神经元(节点)都是一个逻辑回归, 这样我们的算法就更加的复杂,能够计算更加复杂的情况。 所以我们说传统的结构化数据比较少会用到深度学习, 因为结构化数据比较简单,不需要那么复杂的计算。 而为了能够计算图像和NLP领域内的复杂场景,才需要用到神经网络。 而深度学习就是一个拥有很多个隐藏层的神经网络,科学家们把这种情况命名为深度学习。
什么是模型
人类负责提供数据提取特征, 而算法负责学习这些特征对应的权重, 比如我们有下面这张表:
还是以信用卡反欺诈为例子,假设这张表中label列就是表明该用户是否是欺诈行为的列。 当我们告诉算法, 性别,年龄,职业和收入是有助于判断用户行为是否为欺诈行为的重要特征,那么算法就会去学习这些特征对预测最终结果的权重。 并把这些保存成一个模型。 我们可以理解为模型就是保存这些特征和权重的数据库。 比如可以简单理解为模型里保存的主要是:
当用户的一条数据过来后, 就要到模型里面去查询对应特征的权重了, 比如新来了一条数据,是男性,收入2300,年龄24,职业是程序员。那么算法的计算过程就是:y = 男性*0.1 + 程序员*0.22 + 2300*0.3 + 24 * 0.2 。 假设最终的结果是0.8,代表着这条数据有80%的概率是信用卡欺诈行为。 然后我们自己设定一个阈值, 或者叫置信度, 比如这个值是0.7,意思是如果模型预测这个数据是欺诈行为的概率是大于0.7的,那我们就让系统认为这个用户就是欺诈行为, 而如果模型预测的解雇欧式这个数据是欺诈行为的概率小于0.7,那我们就让系统判定它是非欺诈行为,这就是一个典型的二分类模型的原理 -- 算法输出的是概率,系统通过设定阈值来做最后判断。 所以算法本身的公式其实就是: y= w1*x1+ w2*x2 + w3*x3 ...... wn*xn +b 。 其中x是特征, w是特征对应的权重,b是偏移量。其实模型的原理换成大白话来说还是比较简单的。
而我们说机器学习, 它学习的就是w和b(因为我们特征值的已知的),算法要通过一种方式来学习什么的w和b的值能让最终的结果与真实的情况最接近, 而这个方法就叫梯度下降,但是我不打算在这里讲它的原理了, 因为毕竟我们这里是讲如何做测试的, 不懂这个梯度下降的原理也没关系。 感兴趣的同学可以查查我之前写的深度学习的帖子。
什么是迁移学习
还拿上面的例子来说明,我们已经训练好了一个模型,在这个模型中针对职业分别保存了程序员,测试人员和产品经理的特征和权重,它在当前场景下工作的很好。 我们想把这个模型放到另外一个公司里面使用,但是这个公司里除了这3种职业外,还有财务人员和行政人员,这样这个模型的效果就不能满足新公司的需要了。 这时候怎么办呢?再根据新公司的数据重新训练一个模型么?可以是可以, 但是这个成本可能太高了, 因为模型是要基于很大的数据进行训练的,这对数据质量和算力都有比较高的要求。 所以这时候我们可以换个思路,虽然旧的模型中没有财务人员和行政人员的记录,但是它里面的程序员,测试人员和产品经理在新公司里也有这些职位的,所以旧模型并不是完全没用,起码在这三个职位上我们还可以用旧模型工作起来。 那假如我们让算法去学习在财务和行政人员的权重后,再更新到旧的模型里,可不可以呢:
答案是可以的, 这就是迁移学习,也叫模型微调。 在已有的模型的基础上稍微进行调整来满足新的场景。打个比喻,就好像我们有一本练习题, 之前有位学霸已经写下了练习题的所有答案了, 后来这本练习题出了新的版本,但其实90%的题还是老的。 只有10%的题不一样,那么我们只需要把老的题的答案都照着抄下来, 我们自己去写剩下10%就可以了。
当然在模型微调的时候也可以修改旧模型中的特征, 比如我们觉得那位学霸在明朝历史方面的造诣不如我们自己, 那我们就可以选择在这方面更相信自己的判断,并不会全盘照抄(参数冻结,后面讲微调的时候我们会说)。
迁移学习对于人工智能的发展至关重要, 我们可以使用权威的模型(这些模型经过了时间和各个项目的考验)并进行微调以适应自己的场景。 这也为在某些场景下测试人员利用模型的能力来辅助测试场景带来了可能性(毕竟从头训练一个新模型的成本太高)
模型评估指标
接下来终于要说到如何测试模型了, 在这个领域里模型其实没有bug一说, 我们通过会说一个模型的效果好或者不好, 不会说这个模型有bug -- 因为世界上没有100%满足所有场景的模型。 那我们要如何评估模型呢。 下面以分类模型为主。分类模型就是需要模型帮我们判断这条数据属于哪些分类,比如是信用卡欺诈行为或者不是,这就是二分类。 也可以是判断目标是猫,还是狗,还是老鼠或者是人, 这种就是多分类。 一般要评估这种分类模型,我们需要统计一些标准的评估方法。 首先说一下为什么不能直接用模型预测的正确率。正确率越高说明模型效果越好, 这其实是一个普遍的误区。 举一个例子把,假设我们有一个预测癌症的场景,健康的人有 99 个 (y=0),得癌症的病人有 1 个 (y=1)。我们用一个特别糟糕的模型,永远都输出 y=0,就是让所有的病人都是健康的。这个时候我们的 “准确率” accuracy=99%,判断对了 99 个,判断错了 1 个,但是很明显地这个模型相当糟糕,在真实生活中我们大部分场景都是正/负向本相差十分悬殊的,一旦分布十分悬殊那么准确率这种简单粗暴的方法就难以表达模型真正的效果, 所以准确率往往是我们最不常用的评估方法。因此需要一种很好的评测方法,来把这些 “作弊的” 模型给揪出来。
混淆矩阵
混淆矩阵是一个用于描述分类模型性能的矩阵,它显示了模型对于每个类别的预测结果与实际结果的对比情况。
以分类模型中最简单的二分类为例,对于这种问题,我们的模型最终需要判断样本的结果是0还是1,或者说是positive还是negative。
我们通过样本的采集,能够直接知道真实情况下,哪些数据结果是positive,哪些结果是negative。同时,我们通过用样本数据跑出分类型模型的结果,也可以知道模型认为这些数据哪些是