先说下最优化是什么:最优化是寻找能使损失函数值最小化的参数 W W 的过程。
铺垫:之后会把映射部分拓展成比线性函数更加复杂的函数(例如神经网络),但是损失函数和最优化过程这两个部分不会有很大改动,所以这两个部分的基础一定要打好。
损失函数可视化
因为我们现在的损失函数通常定义在高维空间里面,比较难可视化,所以要在1或者2个维度上对高维空间进行切片来可视化。例如随机生成一个权重矩阵 ,这个矩阵对应高维空间里面的一个点,然后随机生成一个方向矩阵 W1 W 1 (记住,矩阵在某种程度上就是向量),再沿着这个生成的方向来计算出这个方向上的损失值(就是计算 L(W+a@1) L ( W + a @ 1 ) 的值)来生成图表。图标x轴是 a a ,y轴是损失函数值。如果是两个唯独的话就是计算 ,然后在给出的二维图像里面用红到蓝的颜色来表示损失值大小(和热度图差不多)。例子:
一个无正则化的多类SVM的损失函数的图示。左边和中间只有一个样本数据,右边是CIFAR-10中的100个数据。左:a值变化在某个维度方向上对应的的损失值变化。中和右:两个维度方向上的损失值切片图,蓝色部分是低损失值区域,红色部分是高损失值区域。注意损失函数的分段线性结构。多个样本的损失值是总体的平均值(不记得的话看回公式就知道了),所以右边的碗状结构是很多的分段线性结构的平均(比如中间这个就是其中之一)。
上面图左边的分段结构可以用损失函数的计算公式来解释,因为对于单个数据来说,损失函数的计算方法是:
说白了就是计算在错误的类别上模型的评分和正确分类上的应有的评分进行相减(并加上边界值1,这是为了保证在错误类别上的评分比正确类别上的评分小边界值1),如果大于0那么就是不理想的,也就是说要把相减之后的结果加到最终损失值里面去。下面就是例子:
假设一个简单的数据集,其中包含3个只有1个维度的点,数据集数据点有3个类别,那么SVM的损失至计算如下: