2.2 数据集与损失函数
一般来说,在面对机器学习问题的时候,会假设有一组标注好的数据,叫做训练数据集(training set)。一个训练数据集通常包含大量的数据点,有时候是几十万、几百万,甚至几亿。将数据点的个数记为N,并将数据点记为x1,y1,…,xN,yN。其中X=(x1,x2,…,xN),称为输入数据(input data),Y=(y1,y2,…,yN),称为输出数据(output data),它们一起构成了训练数据集(X,Y)。在图片识别里y也称为标签(label)。
从上一节的介绍,我们知道监督学习的任务是通过数据集学习出目标函数f。不过,如何判断所学的目标函数好还是不好呢?要回答这个问题,首先需要制定一个评价机制。简单来说,根据数据给出的xi,yi的组合,我们希望所学的函数f尽可能满足f(xi)=yi,或者至少f(xi)≈yi。根据这一原则,可以定义一个距离函数,用以表示f(X)和Y的距离有多远。在机器学习领域,这样的距离函数叫做损失函数(loss function)。
根据问题的不同,距离函数可以有多种定义。对于分类问题,即yi表示某种类别,例如猫、狗、猪、鸡,或者正面、负面,或者0,1,2,…,9,等等,一个比较直观的距离函数可以这么定义:
假如f(xi)≠yi,l(f,xi,yi)=1
假如f(xi)=yi,l(f,xi,yi)=0
这里的1和0都是相对的数值,具体大小并不重要。重要的是我们对判断目标函数的正确与否给出了明确的判定准则。尽管这样的距离函数非常直观,但由于它不可导,很难在现代机器学习中被当做损失函数来用,因为难以对其使用优化算法。具体的细节会在后面章节详述。对于一般的回归问题,yi是一个实数,因此距离函数的选择就更为简单。最常用的选择就是平方距离(square loss),即l(f,xi,yi)=(f(xi)-yi)2。
定义了距离函数之后,我们对整个训练集定义一个损失函数,其为所有损失函数的平均值,即)。举个简单的例子,比如,我们考虑有5个点,对应5个不同的y:x1=(1,0),x2=(0,0),x3=(0,1),x4=(-1,0),x5=(0,-1),y1=3,y2=3,y3=5,y4=-2,y5=5。如果我们考虑一个简单的线性函数,f(x)=ax1+bx2,并且使用平方距离作为损失函数,则最后的总的损失函数的定义为
接下来,对目标函数f的学习可以具体表示为求。如何找到这样的f函数的过程叫做优化(optimization),下一章中将会简单提及。这里要强调的是,仅仅进行优化其实是远远不够的,还需要保证所学函数的泛化能力。这一点将在2.3节进行详细介绍。