损失函数告诉我们目前的分类器的表现有多好
整个数据的损失是每组数据的损失之和的平均值
sj 是其他类别的分数,syi是正确的类的分数
这里的1代表一个阈值,当正确的分数比不正确的大于一个阈值时,代表本次预测的损失函数正确的的确比不正确的要表现得好。
在这里的损失函数只是代表错误造成的损失是多少,因此并不在乎sj和syi具体的值是多少。因此,无论对Li进行如何的线性移动,对结果都不会造成影响。
然后,当损失函数变为 Li?=?∑j?≠?yimax?(0,sj?syi+1)2 时,会发现错误会被放大,越离谱的错误会被放的越大。在合页损失函数中,我们并不关心微小的错误。使用何种损失函数代表我们关心什么类型的错误,损失函数的意义在于告诉算法出现了什么类型的错误。平方形式会对错误更关心,不论是微小的还是很大的。
之前的损失函数旨在告诉我们模型应该和训练数据拟合,但事实上,更应该关心的是模型应该和测试数据拟合。
为了防止出现过拟合的现象,因此要加入一个正则项防止模型过拟合(奥卡姆剃刀),相当于一种软性惩罚。λ是超参数,regularization strength
采用L2 regularization 会让W的每个维度都相对平均。
有几种简单的正则项例子
采用L2 regularization 会让W的每个维度都相对平均。
SVM对于Scores的使用仅仅是求出损失函数。而softmax会将分数换算成概率分布。
对于softmax损失函数,区间是0到正无穷大。
当某个分数值发生微小改动时,相对于SVM可能不会发生变化,softmax损失函数必定会发生改变。
\(\frac{d f(x)}{d x}=\lim _{h \rightarrow 0} \frac{f(x+h)-f(x)}{h}\)
对每个维度的W加入很小的步长,通过对损失函数的增量除以步长,即是数值梯度。
为了让损失函数最小化,所以要找到数值梯度最小(负数)的位置。
要求的是损失函数减少的方向,损失函数减小的方向,只和W有关。所以要找到一个合适的W让损失函数最小。
但是,使用数值梯度太慢、需要的算力太多了,因此我们可以使用微积分来解决这个问题。
由数学公式推导,可以明白,梯度的方向正是loss函数增大的方向,因此,loss函数减小得最快的方向,就是梯度的反方向。
因此,我们会这样来优化W
while True: weights_grad = evaluate_gradient(loss_fun, data, weights) weights += - step_size * weights_grad
这里的step_size是步长,又叫学习率,是一个超参数。
由于在实际应用中,我们的数据量N会特别大,可能会有百万千万的数据量。如果一个一个去算梯度来优化的话,会特别慢。
因此,我们采用随机梯度下降法,使用minibatch(大概32,64,128个数据)
每次使用minibatch的数据来训练模型并优化W值
原文:https://www.cnblogs.com/QingYuAn-Wayne/p/14682859.html