样本分类控制
样本分类控制
前面说了一个很重要的点:可以调控损失来控制网络训练。
接下来详细看看在分类过程中的运用。
Focal Loss
基础的交叉熵
首先,得记住一点:网络通过损失函数进行参数的更新,以迭代减少损失值。
也就是说:损失越大,越会更新大幅度更新参数,以取得更大的进步,使损失更小。
损失本身是单一的,只是一个数值,但是网络的参数是繁杂的,它可以通过参数的互补,在不减少一方面的结果的同时,更好的拟合另一个方面的数据。
以下的办法都是基于此。
考虑两种情况
- 预测准确和预测失败的,是否以相同的权重去更新网络
- 训练样本不均衡,现实场景下,不足的样本是否也应该较少
综合下来,不难得出如下结论
- 预测错误的,为了更好的拟合,应该更多的增加损失
- 少量的样本,应该以质来弥补量的缺失,应该增大权值,更好模拟真实情况
不能忘记的是,大致方向如此,但是权值不能是等同的,应该是每个样本自适应的,取决于它本身的损失程度。
于是,出现了这样的损失定义
- : 样本占比
- : 预测难易
对于预测的较准的正样本或者较准的负样本P,两者都是不大的数,乘方以后会急速衰减,从而达到减少正确预测的损失更新。
相反,如果是那种模棱两可的,或者预测很失败的,就能够保留极大的权值,刺激网络更新拟合。
很有意思的一点,逻辑回归的时候,把两类样本都甩到两边,为了更明晰的分类。
现在,从损失函数上,也可以通过标记来拉开两者的分类距离,这里强调的是异类距离的拉开。
Center Loss
分类只在乎不同类别之间的距离?不对,被归为一类的事物之间,也必然要有一定的相似度,也就是说,分类也是包含聚类的。
之前做过一个分类,结果不太好,因为训练集中包含的数据并不多样。
换了个底色,或者有些地方掉色,它就归类错误了。
一方面是学习的特征的数据缺乏,同时,也让我感受到了:单一类型判断缺乏可变换。
这也说明,分类如果只是排除法:不归为此类,是不行的。
它必须有明确的:它之所以是此类,这种正向的归类理由。也就是聚类能力。
分类能力似乎不错,但是在中心处呢,不可为是分的清除。
肉眼看来,或许分开了,但还是上面所说,没有所谓的聚类的能力,没有就是这一类的肯定。
这种呢,哇,恍然大悟。
这次,我们的分类,不仅是它不是哪个类,而是真正的它就是哪个类.
归根结底,还是在损失上面做文章。
其中是害怕距离中心点的值太大,反而失去类分类的本意而添加的超参数。
中心点的定义
依据这个算法不停迭代,它就会去不停的更新参数,学习到让每次训练损失都小的参数,把每个点都转换到靠近的聚类位置。
思维发散
回顾以下损失函数的意义
- 衡量预测与真实之间的差距
因为训练的目标,就是去减少损失函数,也就是说,我们是的某方面的权重较大,它会极力的去拟合某方面的属性。
从而,我们以权重为主体,不同的检测结果,分配不同的权值配比,就可以如愿的在样本分布、拟合难度上去优化我们的训练方向。
另一方面,不单纯的去放缩原本的损失函数,在原来的基础之上,我们可以引入另一个新的判断依据来为损失函数扩充内容。
虽然损失只是单一的值,但是神经网络的学习能力还是超乎想象,通过甄别各参数的影响能力,最终去调整,使得损失最小。
不过目前来看,仅在分类上,损失函数有很大的变化空间,因为分类,是很明确的,且唯一标注的。
对于检测类的任务,并不那么明晰,好比人脸标记,它是纯粹的主观,而非刻板的分类。没有明确的对错关系。
不过,虽然神经网络是理论的法外之地,在损失的操作上还是可以融入一些既有的知识。
我们可以通过添加上额外的计算关系限定,额外附加到损失函数之上,顺便的,也能够得到学习。
正如,一个人的脸,总不能是一条直线或者竖线,它的宽高,我们可以设定一定的约束,来精炼我们的参数。
正如分类的效果一直不太好,我就让预测错误的权值增大,以提高拟合能力。
但是,我只是样本少,基本没错误的,实际情况下,这种办法也会拟合错误样本,而且过拟合之后缺乏泛化能力。
不过,训练初期,不妨进行这种大刀阔斧的参数调整,正如各种梯度优化方法,都是先大后小的,我们只是从源头的损失进行,而不是权值来改变。