上个月的时候,我借着ChatGPT的风头,写了一篇《从ChatGPT开始说起》,其中简单回顾了一下我对AI的认识,其中没有谈到很多技术的东西,特别是机器学习的基本算法。在这篇文章里,我想结合我目前还能想得起来的在大学/研究生(大概是30年前)时学到的一些知识,简单说说机器学习的算法。

一、实际问题引入
假定有如下的表格,显示了一名学生在一个学期中某个科目的四个评分标准中各5次的成绩。
| 评分标准 | 第一次 | 第二次 | 第三次 | 第四次 | 第五次 | 最终成绩 |
|---|---|---|---|---|---|---|
| A | 4 | 6 | 5 | 6 | 6 | ? |
| B | 2 | 3 | 4 | 5 | 6 | ? |
| C | 4 | 5 | 6 | 5 | 6 | ? |
| D | 2 | 2 | 4 | 5 | 5 | ? |
我们需要得到这些学生的期末成绩(1最低,8最高)。
二、解决问题
一种很粗暴的方式,自然是用平均权重,也就是每次成绩都有20%的权重,得到平均成绩后四舍五入。这样得到的表格如下:
| 评分标准 | 第一次 | 第二次 | 第三次 | 第四次 | 第五次 | 最终成绩(四舍五入后的平均成绩) |
|---|---|---|---|---|---|---|
| A | 4 | 6 | 5 | 6 | 6 | 5 |
| B | 2 | 3 | 4 | 5 | 6 | 4 |
| C | 4 | 5 | 6 | 5 | 6 | 5 |
| D | 2 | 2 | 4 | 5 | 5 | 4 |
这位同学在这个科目上的最终得分是18分,大致可以换算到IB 7分制的4分。
直觉告诉我们,这张表格中,
- A标准的评分略偏低,可以考虑6分。
- C标准的成绩比较“正确”,但也可以考虑6分。
- B/D标准的成绩有点“不公平”。这位同学在学期初无论出于什么原因,这两个评分标准的成绩不理想。但是他进步非常明显,简单的平均法没能充分考虑该生在这学期在该科目上的进步。
三、有经验的IB老师给出的分数
我们来看下一位有经验的IB老师面对这张成绩单,会给这位同学给出怎样的分数:
| 评分标准 | 第一次 | 第二次 | 第三次 | 第四次 | 第五次 | 最终成绩(经验评分) |
|---|---|---|---|---|---|---|
| A | 4 | 6 | 5 | 6 | 6 | 6 |
| B | 2 | 3 | 4 | 5 | 6 | 5 |
| C | 4 | 5 | 6 | 5 | 6 | 6 |
| D | 2 | 2 | 4 | 5 | 5 | 5 |
这样,这位同学的总分就是22分。可以得到IB成绩中的5分(接近上限的5分)。如果最后得分要到6分,那么总分最低需要到24分。而从上面的评分可以看出,即使我们给这位同学的B项得分再加1分,也只有23分,到不了6分的最低要求。所以,这位学生该科目的最后得分在5分是非常合理的。
四、让机器来打分
有了之前的讨论,我们可以来考虑是不是可以用机器来打分。
简单的一个模型可以是:
也就是我们用线性方程,对5个成绩授予不同的权重,然后得到最后的分数。如果我们简单地从最开始(二)中提到的平均主义出发,我们就可以先为每个a_i赋值0.2,得到了一个值,然后和(三)中比较“正确”的数值进行比较。两者的差异就是我们的模型和“正确”结果之间的差异:
| 平均法 | “正确”结果 | 差异 |
|---|---|---|
| 5.4 | 6 | 0.36 |
所以,平均法和“正确”结果之间的差异是0.36。这个差异还是太大了一些。
注意:为了避免数值相减出现正负值,在计算差异时,我们会将数值差异进行平方,然后再加总。
五、罚函数
在我读书的时候,我学过所谓的“罚函数”法。它的简单原理是:
- 我们有一个目标。在本例中,就是根据算法得到的成绩要和“正确”结果一致;再进一步翻译成数学语言,就是这两个成绩的差异要最小。(因为我们对实际差异进行了平方,所以这个差异的最小值应该是0)。换句话说,算法得到的结果和我们的“正确”结果的差异,就是这个算法带给我们的“惩罚”。
- 通过一些算法,我们不断调整a_i的数值,直到差异能降低到我们能接受的一个比较小的数值。也就是我们要把“惩罚”降低,最好是没有。
比如,如果我们针对上述成绩,人肉进行几次测试,我们可能可以得到这样的过程:
| 尝试 | a_1 | a_2 | a_3 | a_4 | a_5 | 预测结果 | “正确”结果 | 差异 |
|---|---|---|---|---|---|---|---|---|
| 1 | 0.2 | 0.2 | 0.2 | 0.2 | 0.2 | 5.4 | 6 | 0.36 |
| 2 | 0.1 | 0.1 | 0.1 | 0.2 | 0.5 | 5.7 | 6 | 0.09 |
| 3 | 0.0 | 0.0 | 0.2 | 0.3 | 0.5 | 5.8 | 6 | 0.04 |
| 4 | 0.0 | 0.0 | 0.1 | 0.2 | 0.7 | 5.9 | 6 | 0.01 |
如果我们满足于0.01这个差异(或者说精度),那么用人肉测试的方式,我们可以很快得到结果。于是,我们可以说现在的权重分配(0.0, 0.0, 0.1, 0.2, 0.7)就已经满足了我们的要求。
但有两个问题,限制了我们不能采用人肉的方式继续这么做下去。
首先,这个权重分配对于上表中的B行就不适用。对于某一个科目来说,虽然可以有4个不同的考核指标,但是得到最后分数的“公式”应该是一致的。
其次,随着数据量的增加,用人工的方式来进行这个操作的话,我们很快就累死了,而且容易出错,效率极低。
六、AI来帮忙
如果我们把上面的过程与现在的机器学习加以对照,会发现有很多共通的地方:
- 都有一个目标,以及对应的“惩罚”。
- 都可以建立一个数学模型。
- 都有一些供训练的数据。
- 都可以通过数学方法,根据训练数据求解最优,也就是把“惩罚”降到最低。
机器学习的好处就是,可以预存各种不同的模型:线性的、二元的、高元的;预存各种不同的优化方法,并快速地进行计算;没有感情,不会抱怨。
这只是一个有关机器学习(Machine Learning)很粗略的讨论,目的一是做些小小的科普;目的二是做些reflection,回忆一些过往学到的东西——人老了,毕竟是怀旧的。

Leave a Reply