一、损失函数:focal loss
在机器学习领域,损失函数是评估模型性能的关键指标,不同场景下需要针对性地调整损失函数以优化模型表现。以分类问题为例,常用的损失函数如交叉熵损失等已能满足基本需求,但面对样本分布严重不平衡等问题时,需引入更精细的损失函数。其中,Focal Loss是针对目标检测中正负样本比例不均衡问题的一种改进损失函数,旨在提升模型对困难样本的敏感度,减少对简单样本的依赖。
Focal Loss的理论基础在于对标准交叉熵损失进行改进。在实际应用中,当目标检测问题中正负样本比例极度不均衡时,模型学习过程往往受到大量简单样本的主导,尽管这些样本的损失较小,但数量众多,对模型的收敛和分类效果有负面影响。Focal Loss通过引入一个调节权重的系数因子,实现了对样本损失贡献程度的自适应调整。其计算方式如式(1)所示,其中$\alpha$为预测概率,$g$为调节权重因子的超参数。
具体而言,Focal Loss通过系数因子$\alpha' = \alpha^{(1-\gamma)}$来调整样本权重,其中$\gamma$是调节参数,控制了损失函数对容易样本与困难样本的关注程度。当预测概率$\alpha$接近1时,即预测结果与真实标签高度一致时,系数$\alpha'$减小,相应地,样本对损失的贡献降低,反之,当预测概率$\alpha$较小,即预测结果与真实标签差异较大时,系数$\alpha'$增大,样本对损失的贡献增加。通过这样的设计,Focal Loss强化了对分类困难样本的学习,同时弱化了对简单样本的依赖,提高了模型在不平衡样本集上的分类性能。
Focal Loss的有效性思考集中在梯度更新的机制上。损失函数通过影响参数更新的方向和幅度,间接影响模型学习效果。Focal Loss通过调整样本权重,旨在使参数更新更聚焦于提升模型对困难样本的分类能力。具体而言,参数$w$的更新与损失函数的导数紧密相关,Focal Loss通过调整样本的权重,使得困难样本对参数更新的贡献大于简单样本。通过式(3)和式(4)的计算,可以观察到,当预测概率$p$接近1时,梯度更新的幅度减小,这符合Focal Loss的设计意图,即提高模型对预测困难样本的专注度。
在应用层面,Focal Loss的引入为解决不平衡样本问题提供了有效策略,使得模型在分类和回归任务中,能够更高效地学习和调整。通过调整样本的权重,Focal Loss能够实现对模型学习过程的优化,提高模型在实际应用中的表现。这一方法不仅在目标检测任务中展现出显著效果,在其他分类和回归任务中也具有广泛的应用前景。
总之,Focal Loss作为改进损失函数的一种方法,通过引入调节系数因子,实现了对样本损失贡献程度的自适应调整,提高了模型对困难样本的敏感度,减少了对简单样本的依赖。这一方法的有效性体现在对梯度更新的优化上,通过调整样本权重,使得参数更新更加聚焦于提升模型对困难样本的分类能力。Focal Loss的引入为解决不平衡样本问题提供了有力的工具,是机器学习领域中损失函数改进的重要进展之一。
二、Bagging与Boosting最大的不同在哪里
【机器学习】boosting和bagging的差别
boosting和bagging的差别:
bagging中的模型是强模型,偏差低,方差高。目标是降低方差。在bagging中,每个模型的bias和variance近似相同,但是互相相关性不太高,因此一般不能降低bias,而一定程度上能降低variance。典型的bagging是random forest。
boosting中每个模型是弱模型,偏差高,方差低。目标是通过平均降低偏差。boosting的基本思想就是用贪心法最小化损失函数,显然能降低偏差,但是通常模型的相关性很强,因此不能显著降低variance。典型的boosting是adaboost,另外一个常用的并行boosting算法是gbdt(gradient boosting decision tree)。这一类算法通常不容易出现过拟合。
过拟合的模型,通常variance比较大,这时应该用bagging对其进行修正。
欠拟合的模型,通常bias比较大,这时应该可以用boosting进行修正。使用boosting时, 每一个模型可以简单一些。
金融常见的问题,是只用linear regression,这样一般来讲是欠拟合的,因此需要引入一些非线性的特征,欠拟合的模型可以先使用boosting尝试一下,如果效果不好,再使用其他的方法。过拟合的方法,通常使用bagging是会有一定的作用的。
三、梯度上升算法与梯度下降算法求解回归系数怎么理解
如果grad为梯度阵mean(mean(grad))就是所有点灰度梯度的平均值。
其实是一回事了。最小化损失函数,就用梯度下降,最大化似然函数,就用梯度上升。
本质上都是一样的。
四、排序学习中优化损失函数与优化排序准则相比有哪些优势
1、ORDER BY的索引优化。如果一个SQL语句形如:
SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort];
在[sort]这个栏位上建立索引就可以实现利用索引进行order by 优化。
2、WHERE + ORDER BY的索引优化,形如:
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort];
建立一个联合索引(columnX,sort)来实现order by 优化。
注意:如果columnX对应多个值,如下面语句就无法利用索引来实现order by的优化
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] IN ([value1],[value2],…) ORDER BY[sort];
3、WHERE+ 多个字段ORDER BY
SELECT * FROM [table] WHERE uid=1 ORDER x,y LIMIT 0,10;
建立索引(uid,x,y)实现order by的优化,比建立(x,y,uid)索引效果要好得多。
MySQL Order By不能使用索引来优化排序的情况
* 对不同的索引键做 ORDER BY :(key1,key2分别建立索引)
SELECT * FROM t1 ORDER BY key1, key2;
* 在非连续的索引键部分上做 ORDER BY:(key_part1,key_part2建立联合索引;key2建立索引)
SELECT * FROM t1 WHERE key2=constant ORDER BY key_part2;
* 同时使用了 ASC 和 DESC:(key_part1,key_part2建立联合索引)
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
* 用于搜索记录的索引键和做 ORDER BY 的不是同一个:(key1,key2分别建立索引)
SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
* 如果在WHERE和ORDER BY的栏位上应用表达式(函数)时,则无法利用索引来实现order by的优化
SELECT * FROM t1 ORDER BY YEAR(logindate) LIMIT 0,10;