卷积神经网络的Python实现
上QQ阅读APP看书,第一时间看更新

1.3 重要概念

为了使读者深入理解机器学习,这里需要补充说明几个重要概念。读者应该反复研读,并结合后面的知识与实际项目进行理解。

1.相关属性和无关属性

西瓜的属性有很多,我们为什么选择根蒂、敲声、触感和纹理进行判断,不选大小、外形等属性进行判断呢?这是因为根蒂、敲声、触感和纹理属性与西瓜好坏密切相关,是相关属性,大小、外形等属性与西瓜好坏无关,是无关属性。无关属性对于判断西瓜好坏不能提供任何有价值的信息,所以不需要这些无关属性。

那么,怎么知道属性是相关属性还是无关属性呢?这是在无数次挑选西瓜时总结出来的知识,属于领域知识。在一个具体的机器学习任务中,必须充分利用领域知识,挑选出相关属性,剔除无关属性。如果没有领域知识,则只能采用大量属性,这会极大地增加机器学习的难度并且降低机器学习的效果。

2.有效学习

模型对新样本的泛化性能必须大于随机猜测,才能说明模型进行了有效学习。对于二分类问题,如果准确率是50%,则说明机器没有进行任何学习,只有大于50%,才能说明机器进行了学习。一般来说,准确率不可能达到100%,只能接近,因为现实世界中的样本无穷无尽,特征取值也各不相同,很难完全掌握,总会存在误判。

大家可能会设想,随着掌握的领域知识不断增长,总有一天能完全准确判断西瓜好坏,准确率达到100%,完美地建立起西瓜好坏的模型。如果真有这么一天,判断西瓜好坏就不应该是机器学习研究的领域,因为我们已经有了判断西瓜好坏的确定模型,直接根据模型就能判断,没有必要采用机器学习了。是否存在一个确定模型能准确判断西瓜好坏,这是一个终极难题,既不能肯定,也不能否定。

3.从数据中学习

机器仅能从数据中获得分类的能力,根据指令一步一步地对样本进行分类,人类不能显式编程告诉它。举个数据排序的例子,人类开发了很多排序算法,如冒泡、快排等,如果把这些排序算法进行显式编程,计算机获得了排序能力,而且准确率100%,但这不是机器学习。如果只是提供给计算机很多无序和有序的数据对,计算机仅根据这些数据对进行学习,获得了排序能力,则是机器学习,但准确率一般达不到100%。学习到的排序知识存储在模型参数w中。

4.映射

对于不同的机器学习方法,映射 f的函数形式是不同的,如线性模型、SVM和神经网络的映射f是不同的。在同一机器学习方法中,映射 f的函数形式是相同的,不同的只是参数 w。本书后面会详细介绍线性模型和神经网络模型,对于SVM模型,读者可查阅相关的资料。

5.机器学习中的优化难题

如何获得最优参数 w,使模型 f的泛化性能最好?这是数学中的参数优化问题。读者如果对高中数学和高等数学印象深刻的话,应该做过很多求函数极值的题目,机器学习中的参数优化问题和数学求极值题目没有本质差别,只是难度更大。根据连续函数的极值定理,连续函数的极值条件是偏导数为0。以上知识点,读者如果不熟悉,强烈建议读者学习。机器学习中求最优参数完全是数学中的参数优化问题吗?如果这样认为,就错了,下面将通过3点来解释求最优参数不仅仅是数学参数优化问题。

第一,模型 f的泛化性能跟训练数据集密切相关,针对不同的训练集,其泛化性能的差别可能很大。因此,建立高质量的训练集是机器学习的重要任务,占整个工作量的60%以上。如何建立高质量的训练集呢?还是以西瓜任务为例。首先,训练集应该尽可能包含各种各样的西瓜(如品种、产地、栽培土壤和施肥浇水等),这就是所谓的见多识广。其次,应该尽可能多地提取与任务相关的属性。这样的训练集很容易训练出效果好的模型,即使使用的机器学习算法很普通。建立高质量的训练集需要大量的人力、物力和领域知识,一般的研究者很难建立高质量的训练集,而没有好的训练集,就难以开发好的机器学习算法。为了使广大研究者能专心进行机器学习算法研究,机器学习界有许多著名的公开数据集。读者学习机器学习算法时,最好使用这些数据集。最后强调,不同的学习算法必须在同一个测试集进行比较,才能区分优劣。

第二,模型 f的函数形式虽然是统一规范的,但不同的机器学习方法采用不同的函数形式,如神经网络和支持向量机就不同,这导致学习效果也不同。如何选择好的函数形式,一直是机器学习领域最核心和最富创新性的课题。本书讲的卷积神经网络之所以在图像分类中获得空前胜利,就是因为卷积运算巧妙地把视觉神经领域知识融入到函数形式中。VGGNet、GoogLeNet和ResNet等著名的卷积网络模型就是映射 f采用的函数形式稍微不同,使这些模型的效果各不相同。如何设计更好的f将一直是机器学习研究的核心课题。

第三,评价模型的泛化性能时,必须使用测试集,但是训练过程中使用的是训练集,测试集是“不存在”的,这样可能存在一种情况:模型对训练集有很好的拟合效果,但对测试集拟合效果一般。这是机器学习特有的现象,称为过拟合。过拟合现象十分普遍,理论上讲,任何机器学习算法都有过拟合风险,只是强弱问题。过拟合表现为只要精心调整参数w或一直训练下去,模型在训练集上的性能就会越来越好,但测试集上的性能则不会,它存在拐点,拐点之后性能会逐渐变差。过拟合的通常解释是:因为模型的学习容量随着参数的精心调整和训练时间的增加而越来越大,训练集的规模却是固定的,导致模型把训练集学习得过分好,其中的一些噪声也学为样本的固有模式,因此泛化到新样本时就容易出错。过拟合是机器学习中一个难以克服的问题,因为其产生的本质原因在理论上还没有解释清楚,一般采用正则化来缓解过拟合。

上面这3点也是机器学习研究的核心内容,本书主要讲解基于梯度下降法的参数优化方法和神经网络模型,缓解过拟合也是重点之一。对于如何建立高质量的训练集,这和领域知识密切相关,本书暂不涉及,本书将采用公开数据集。

6.过拟合实例

为了使读者对过拟合有感性认识,这里有一个十分经典的例子:多项式数据拟合。假设数据点 (x, y) 的真实模型是二次曲线,由于噪声,每个采样点都会偏离理想值。为了减小训练误差,极端情况下,为使训练误差为0,即拟合曲线严格通过每个数据点,从理论上可证:对于有N点的数据,则拟合曲线必须是N - 1次曲线,如一次函数通过两点,二次函数通过三点等。一般情况下,拟合曲线是高次函数,N至少取10以上。高次函数拟合容易出现数值计算不稳定、曲线振荡等情况,对于真实模型是二次曲线的数据拟合任务,高次函数的泛化性能会远低于低次函数。这里所说的学习容量,就是拟合曲线的次数,其值越高,容量越大,越能拟合变化剧烈的数据。学习“过好”就是很好地拟合了训练数据,导致把噪声作为数据变化趋势,产生过拟合。怎么缓解过拟合呢?读者可能会说,用真实模型的二次曲线拟合。但在实际情况中很难通过数据变化趋势准确判断曲线次数,所以只能大概估计,采用3次或4次曲线进行拟合。为了缓解曲线振荡,对方程系数(即参数 w)进行约束,使系数的绝对值尽可能小,这就是正则化。但曲线次数又不能取得太低,这会使学习容量过低,难以拟合数据变化趋势。所以实际做法是:采用学习容量较大的模型,使学习过程相对容易,利用正则化缓解学习容量较大所引起的过拟合。

与过拟合相对的是欠拟合,欠拟合指模型的学习容量过低,不能学习到训练样本的一般性质。欠拟合很容易克服,只需增大模型容量即可。

7.训练集、验证集和测试集

如何正确评估模型的泛化性能?由于过拟合,要正确评估模型的泛化性能并不是一件简单的事情,往往会过于乐观,高估了模型的泛化性能。以多项式数据拟合为例,对于固定次数的曲线,利用训练集能学习到最优系数w。采用不同次数的曲线拟合时,其拟合效果一般是不同的,怎么确定曲线最优次数呢?只能用“测试集”测试不同次数曲线的拟合效果,我们一般把这个“测试集”叫作验证集,用于选取拟合效果最优的曲线作为最终模型。如果认为模型的泛化性能就是验证集的最优拟合效果,就高估了模型的泛化性能。因为存在过拟合,所以验证集最优的模型不一定在其他测试集会最优,还需要另一个测试集评估该最优模型的泛化性能。因此,完整的机器学习需要3个数据集:训练集、验证集和测试集。训练集寻找最优参数w,验证集决定最优曲线方程次数,测试集评估模型的泛化性能。

8.超参数和参数

机器学习一般包含两类参数:超参数和参数。超参数的数目通常不多,在10以内;参数的数目可能很多,如卷积神经网络中有近千万个参数(权重)。曲线拟合中,方程的次数就是超参数,多项式的系数就是参数。这两种参数的调参方式不同,超参数取值一般是人工设定的,参数值是根据参数优化算法自动寻优的。超参数的取值对模型泛化性能有重大的影响,验证集就是用来决定最优超参数取值的。目前,出现了很多超参数自动优化算法。

9.如何提高模型泛化性能

当模型的泛化性能不能满足要求时,可以从两个方面提高模型的泛化性能。其一是提高模型的学习容量,把训练误差降低到满意的程度,同时增大正则化强度,降低过拟合风险。其二是构造更好的数据集,这包括增大样本数量,调整样本以更加全面地覆盖样本分布空间,利用领域知识提取更好的特征。

10.模型输出

模型的输出,如果是回归问题,则直接输出实数。在多分类任务中,输出一般是向量,向量的维数等于类别数,元素值是实数。元素值表示对应类别的得分,得分越大表示该样本与对应的类别越相似,故最大元素值对应的类别就是最终预测的类别。二分类是多分类的特例,只需输出一个实数值,并与0比较,大于0预测为正类,小于0预测为负类。