知道了W是什么之后的问题是怎样选出W:先用损失函数衡量W的好坏,然后用优化方法选出最好的W
目录
损失函数和优化
这是损失函数的一般表达式
1. Hinge Loss 表达式
是正确类的分数(横轴),是其他类的分数,它们组成线性分类器的结果
这里正确类分数需要比其他类分数高出的分数1是可以随意选择的,因为这个分数的绝对值并不需要多关心,只关心分数间的相对差值,讲义里有详细证明。
这里是损失函数随错误分类分数增大而增加是线性的,如果改为平方,那么意味着对于分类很错误的情况会带来非常大的损失,也就是这样设计会避免分类很错的情况出现,但是如果分类错误不明显就只做微小修正。
所以选择哪种损失函数要根据具体应用更关心哪种分类错误。
二元SVM或叫二分类SVM的推导(待写)
二分类SVM的情况下,只有两个类,每个样本要么为正要么为负
2. 加正则的目的
当损失函数结果为0的时候,W是不唯一的,加入正则是为了防止过拟合
与多项式回归问题类比
如果想要使用更高项的多项式拟合,需要克服增加的正则项的惩罚(换句话说就是因为这个正则项的惩罚使得计算结果会避免使用更高项,因为得不偿失)
所以会得到比较接近的拟合结果但不会使项数太高,也就是在不过拟合的同时也不会使模型太复杂。
正则只和W有关,和图片输入没有关系,引入正则惩罚项还能带来一些好的特性,比如SVM里的max margin
正则项有很多种类型:
L2正则是W的欧式范数,平方范数或二次范数 ,二次范数会使推导变成现实更好一点
L1有时有更好的性质,比如鼓励稀疏
正则项做的各种操作,目的都是为了减小模型的复杂度,而不是去拟合数据
比如这个例子,两个W和x点乘得到相同的分数,但是W2有更小的L2正则惩罚,所以W2更好一点
L2正则项就是用一种比较粗糙的方式度量分类器的复杂性
加入L2正则项更多的使输入图片的每个元素都参与分数决策,而不是某个非常突出的像素更多地决定分数
L1正则项会得到相反的解释,因为L1对模型的复杂性有不同的解释
3. Softmax 与交叉熵损失公式
softmax
数学上找log的最大值相对简单,所以选择log
这是一个具体的计算例子,而softmax的loss值实际上不会达到0,因为如果想要loss为0,需要分数非常极端,正确分类分数趋于无穷,而错误分类分数趋于0
softmax如何在编程计算的时候稳定
因为指数,分母求出来的和可能会很大,除一个很大的数在计算机里可能会带来问题,所以采取下面的方法来优化
常见的方式是选取
f = np.array([123, 456, 789]) # example with 3 classes and each having large scores
p = np.exp(f) / np.sum(np.exp(f)) # Bad: Numeric problem, potential blowup
# instead: first shift the values of f so that the highest number is 0:
f -= np.max(f) # f becomes [-666, -333, 0]
p = np.exp(f) / np.sum(np.exp(f)) # safe to do, gives the correct answer
交叉熵
当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。
横轴为概率,纵轴为信息量,这个函数是
交叉熵的公式:
把对数里面那个分布理解为真实的随机变量分布,而将对数外面那个理解为观察到的频率,那么这就是最大似然估计(最大可能性)
因此可以看出,交叉熵最小实质上就是似然值最大。因此在有模型约束的条件下求交叉熵最小值,也就是让模型输出的分布尽量能接近训练数据的分布。
交叉熵损失的最大值与最小值(待写)
softmax 求导(待写)
4. Hinge loss与Softmax的区别
hinge并没有关注分数的意义,而softmax会根据分数计算概率分布
hinge在正确分类分数超过错误分类分数一定阈值后就不再管了,softmax会希望正确分类的分数越高越好同时错误分类分数越低越好
5.梯度下降作为优化方法
计算机上计算梯度的方法的一种简单方法使有限差分法,就是按照斜率公式一点一点计算
这里是算了两步,但是这个方法太慢了,于是改用微积分求梯度,但是有限差分可以用来当作调试时候检查梯度计算有没有bug,想要快点可以减少需要计算的数据的维度。
梯度下降的过程就是先初始化W,然后迭代计算W的梯度dW,向梯度下降的方向更新W -= dW*(learning rate)
这个学习率是需要首先确定的超参数
各种其他优化方法(待写)
随机(stochastic)梯度下降
N作为样本数可能非常大,所以可以不迭代整个训练数据集,使用随机(stochastic)梯度下降。就是每次选一部分minibatch,把它的计算结果当成实际loss和实际梯度进行迭代更新,可以看作是一种蒙特卡洛算法。
还有带动量的梯度下降(gradient descent with momentum)
Adam optimizer
图像特征作为线性分类器的输入
不是将raw pixels输入,而是提取特征放到一起即feature representation of the image
相当于把线性不可分的输入,通过一种转换方式,把它们变得线性可分
那么提取特征的方式就是这种转换方式,正确的转换可以得到线性可分的输入,从而获得比输入原始图像更好的分类结果
现在把特征提取部分也放入分类器,也就是CNN前面的几层
来源:CSDN
作者:就叫荣吧
链接:https://blog.csdn.net/qq_29843303/article/details/103453290