一、損失函數: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;