91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數據類別不均衡問題的分類及解決方式

深度學習自然語言處理 ? 來源:PaperWeekly ? 作者:PaperWeekly ? 2022-07-08 14:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

數據類別不均衡問題應該是一個極常見又頭疼的的問題了。最近在工作中也是碰到這個問題,花了些時間梳理并實踐了類別不均衡問題的解決方式,主要實踐了“魔改”loss(focal loss, GHM loss, dice loss 等),整理如下。

所有的 Loss 實踐代碼在這里:

https://github.com/shuxinyin/NLP-Loss-Pytorch

數據不均衡問題也可以說是一個長尾問題,但長尾那部分數據往往是重要且不能被忽略的,它不僅僅是分類標簽下樣本數量的不平衡,實質上也是難易樣本的不平衡。

解決不均衡問題一般從兩方面入手:

數據層面:重采樣,使得參與迭代計算的數據是均衡的;

模型層面:重加權,修改模型的 loss,在 loss 計算上,加大對少樣本的 loss 獎勵。

1. 數據層面的重采樣

關于數據層面的重采樣,方式都是通過采樣,重新構造數據分布,使得數據平衡。一般常用的有三種:

欠采樣;

過采樣;

SMOTE。

1. 欠采樣:指某類別下數據較多,則只采取部分數據,直接拋棄一些數據,這種方式太簡單粗暴,擬合出來的模型的偏差大,泛化性能較差;

2. 過采樣:這種方式與欠采樣相反,某類別下數據較少,進行重復采樣,達到數據平衡。因為這些少的數據反復迭代計算,會使得模型產生過擬合的現象。

3. SMOTE:一種近鄰插值,可以降低過擬合風險,但它是適用于回歸預測場景下,而 NLP 任務一般是離散的情況。

這幾種方法單獨使用會或多或少造成數據的浪費或重,一般會與 ensemble 方式結合使用,sample 多份數據,訓練出多個模型,最后綜合。

但以上幾種方式在工程實踐中往往是少用的,一是因為數真實據珍貴,二也是 ensemble 的方式部署中資源消耗大,沒法接受。因此,就集中看下重加權 loss 改進的部分。

2. 模型層面的重加權

重加權主要指的是在 loss 計算階段,通過設計 loss,調整類別的權值對 loss 的貢獻。比較經典的 loss 改進應該是 Focal Loss, GHM Loss, Dice Loss。

2.1 Focal Loss

Focal Loss 是一種解決不平衡問題的經典 loss,基本思想就是把注意力集中于那些預測不準的樣本上。

何為預測不準的樣本?比如正樣本的預測值小于 0.5 的,或者負樣本的預測值大于 0.5 的樣本。再簡單點,就是當正樣本預測值》0.5 時,在計算該樣本的 loss 時,給它一個小的權值,反之,正樣本預測值《0.5 時,給它一個大的權值。同理,對負樣本時也是如此。

以二分類為例,一般采用交叉熵作為模型損失。

其中 是真實標簽, 是預測值,在此基礎又出來了一個權重交叉熵,即用一個超參去緩解上述這種影響,也就是下式。

接下來,看下 Focal Loss 是怎么做到集中關注預測不準的樣本?

在交叉熵 loss 基礎上,當正樣本預測值 大于 0.5 時,需要給它的 loss 一個小的權重值 ,使其對總 loss 影響小,反之正樣本預測值 小于 0.5,給它的 loss 一個大的權重值。為滿足以上要求,則 增大時, 應減小,故剛好 可滿足上述要求。

因此加上注意參數 ,得到 Focal Loss 的二分類情況:

加上調節系數 ,Focal Loss 推廣到多分類的情況:

其中 為第 t 類預測值,,試驗中效果最佳時,。

代碼的實現也是比較簡潔的。

def __init__(self, num_class, alpha=None, gamma=2, reduction=‘mean’): super(MultiFocalLoss, self).__init__() self.gamma = gamma 。..。..

def forward(self, logit, target): alpha = self.alpha.to(logit.device) prob = F.softmax(logit, dim=1)

ori_shp = target.shape target = target.view(-1, 1)

prob = prob.gather(1, target).view(-1) + self.smooth # avoid nan logpt = torch.log(prob)

alpha_weight = alpha[target.squeeze().long()] loss = -alpha_weight * torch.pow(torch.sub(1.0, prob), self.gamma) * logpt

if self.reduction == ‘mean’: loss = loss.mean()

return loss

2.2 GHM Loss

上面的 Focal Loss 注重了對 hard example 的學習,但不是所有的 hard example 都值得關注,有一些 hard example 很可能是離群點,這種離群點當然是不應該讓模型關注的。

GHM (gradient harmonizing mechanism) 是一種梯度調和機制,GHM Loss 的改進思想有兩點:1)就是在使模型繼續保持對 hard example 關注的基礎上,使模型不去關注這些離群樣本;2)另外 Focal Loss 中, 的值分別由實驗經驗得出,而一般情況下超參 是互相影響的,應當共同進行實驗得到。

Focal Loss 中通過調節置信度 ,當正樣本中模型的預測值 較小時,則乘上(1-p),給一個大的 loss 值使得模型關注這種樣本。于是 GHM Loss 在此基礎上,規定了一個置信度范圍 ,具體一點,就是當正樣本中模型的預測值為 較小時,要看這個 多小,若是 ,這種樣本可能就是離群點,就不注意它了。

于是 GHM Loss 首先規定了一個梯度模長 :

其中, 是模型預測概率值, 是 ground-truth 的標簽值,這里以二分類為例,取值為 0 或 1??砂l現, 表示檢測的難易程度, 越大則檢測難度越大。

GHM Loss 的思想是,不要關注那些容易學的樣本,也不要關注那些離群點特別難分的樣本。所以問題就轉為我們需要尋找一個變量去衡量這個樣本是不是這兩種,這個變量需滿足當 值大時,它要小,從而進行抑制,當 值小時,它也要小,進行抑制。于是文中就引入了梯度密度:

表明了樣本 1~N 中,梯度模長分布在 范圍內的樣本個數, 代表了 區間的長度,因此梯度密度 GD(g) 的物理含義是:單位梯度模長 部分的樣本個數。

在此基礎上,還需要一個前提,那就是處于 值小與大的樣本(也就是易分樣本與難分樣本)的數量遠多于中間值樣本,此時 GD 才可以滿足上述變量的要求。

此時,對于每個樣本,把交叉熵 CE×該樣本梯度密度的倒數,就得到 GHM Loss。

這里附上邏輯的代碼,完整的可以上文章首尾倉庫查看。

class GHM_Loss(nn.Module): def __init__(self, bins, alpha): super(GHM_Loss, self).__init__() self._bins = bins self._alpha = alpha self._last_bin_count = None

def _g2bin(self, g): # split to n bins return torch.floor(g * (self._bins - 0.0001)).long()

def forward(self, x, target): # compute value g g = torch.abs(self._custom_loss_grad(x, target)).detach()

bin_idx = self._g2bin(g)

bin_count = torch.zeros((self._bins)) for i in range(self._bins): # 計算落入bins的梯度模長數量 bin_count[i] = (bin_idx == i).sum().item()

N = (x.size(0) * x.size(1))

if self._last_bin_count is None: self._last_bin_count = bin_count else: bin_count = self._alpha * self._last_bin_count + (1 - self._alpha) * bin_count self._last_bin_count = bin_count

nonempty_bins = (bin_count 》 0).sum().item()

gd = bin_count * nonempty_bins gd = torch.clamp(gd, min=0.0001) beta = N / gd # 計算好樣本的gd值

# 借由binary_cross_entropy_with_logits,gd值當作參數傳入 return F.binary_cross_entropy_with_logits(x, target, weight=beta[bin_idx])

2.3 Dice Loss & DSC Loss

Dice Loss 是來自文章 V-Net 提出的,DSC Loss 是香儂科技的 Dice Loss for Data-imbalanced NLP Tasks。

按照上面的邏輯,看一下 Dice Loss 是怎么演變過來的。Dice Loss 主要來自于 dice coefficient,dice coefficient 是一種用于評估兩個樣本的相似性的度量函數。

定義是這樣的:取值范圍在 0 到 1 之間,值越大表示越相似。若令 X 是所有模型預測為正的樣本的集合,Y 為所有實際上為正類的樣本集合,dice coefficient 可重寫為:

同時,結合 F1 的指標計算公式推一下,可得:

可以動手推一下,就能得到 dice coefficient 是等同 F1 score 的,因此本質上 dice loss 是直接優化 F1 指標的。

上述表達式是離散的,需要把上述 DSC 表達式轉化為連續的版本,需要進行軟化處理。對單個樣本 x,可以直接定義它的 DSC:

但是當樣本為負樣本時,y1=0,loss 就為 0 了,需要加一個平滑項。

上面有說到 dice coefficient 是一種兩個樣本的相似性的度量函數,上式中,假設正樣本 p 越大,dice 值越大,說明模型預測的越準,則應該 loss 值越小,因此 dice loss 的就變成了下式這也就是最終 dice loss 的樣子。

為了能得到 focal loss 同樣的功能,讓 dice loss 集中關注預測不準的樣本,可以與 focal loss 一樣加上一個調節系數 ,就得到了香儂提出的適用于 NLP 任務的自調節 DSC-Loss。

弄明白了原理,看下代碼的實現。

class DSCLoss(torch.nn.Module):

def __init__(self, alpha: float = 1.0, smooth: float = 1.0, reduction: str = “mean”): super().__init__() self.alpha = alpha self.smooth = smooth self.reduction = reduction

def forward(self, logits, targets): probs = torch.softmax(logits, dim=1) probs = torch.gather(probs, dim=1, index=targets.unsqueeze(1))

probs_with_factor = ((1 - probs) ** self.alpha) * probs loss = 1 - (2 * probs_with_factor + self.smooth) / (probs_with_factor + 1 + self.smooth)

if self.reduction == “mean”: return loss.mean()

總結

本文主要討論了類別不均衡問題的解決辦法,可分為數據層面的重采樣及模型 loss 方面的改進,如 focal loss, dice loss 等。最后說一下實踐下來的經驗,由于不同數據集的數據分布特點各有不同,dice loss 以及 GHM loss 會出現些抖動、不穩定的情況。當不想挨個實踐的時候,首推 focal loss,dice loss。

以上所有 Loss 的代碼僅為邏輯參考,完整的代碼及相關參考論文都在:

https://github.com/shuxinyin/NLP-Loss-Pytorch

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7255

    瀏覽量

    91818
  • 代碼
    +關注

    關注

    30

    文章

    4900

    瀏覽量

    70694

原文標題:類別不均衡問題之loss大集合:focal loss, GHM loss, dice loss 等等

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    電子元器件的分類方式

    電子元器件可以按照不同的分類標準進行分類,以下是一些常見的分類方式
    的頭像 發表于 04-16 14:52 ?844次閱讀

    常見網絡負載均衡的幾種方式

    常見網絡負載均衡的幾種方式包括:DNS負載均衡、反向代理負載均衡、IP負載均衡、應用層負載均衡
    的頭像 發表于 03-06 11:14 ?522次閱讀

    電源盒的分類有哪些

    電源盒的類型多種多樣,具體可以分為多種分類方式下的不同類型 ?。 一種常見的分類方式是基于其結構和用途,但需要注意的是,這種分類
    的頭像 發表于 02-25 10:50 ?370次閱讀

    短波天線的工作原理和類別

    短波通信以其獨特的長距離傳輸能力而聞名,本文將詳細探討短波天線的工作原理和類別等,勾勒出短波天線的大致面貌。
    的頭像 發表于 02-07 17:33 ?1764次閱讀

    調制方式分類與比較

    調制是通信系統中的一個關鍵過程,它涉及將信息信號(如音頻、視頻或數據)轉換為適合在通信信道中傳輸的形式。調制方式可以根據不同的標準進行分類,例如調制信號的類型(模擬或數字)、調制信號的參數(幅度
    的頭像 發表于 01-21 09:16 ?1692次閱讀

    屏蔽雙絞線的絞合方式分類

    屏蔽雙絞線的絞合方式主要涉及到線芯的排列與絞合程度,以下是關于屏蔽雙絞線絞合方式的詳細解釋: 一、絞合方式分類 屏蔽雙絞線的絞合方式根據絞
    的頭像 發表于 01-08 10:34 ?588次閱讀

    了解圖形均衡器與參數均衡器的區別

    在音頻處理領域,均衡器(Equalizer)是一種用于調整音頻信號頻率響應的設備或軟件工具。它可以幫助我們增強或減弱特定頻率范圍的聲音,以達到改善音質、去除噪音或創造特定音效的目的。圖形均衡器和參數
    的頭像 發表于 12-26 09:35 ?2347次閱讀

    ddc與其他分類系統的比較

    )的比較: 一、與體系分類法的比較 立類原則 : DDC:以學科立類為主,強調體現類目的系統性。它按照一定的體系將各種不同的主題劃分為不同的類別,盡量細分,為每個已知的主題準備一個位置。 體系分類法:同樣堅持劃分的學科系統性原則
    的頭像 發表于 12-18 15:10 ?895次閱讀

    如何使用ddc進行數據分類

    不同的主題劃分為不同的類別。以下是如何使用DDC進行數據分類的步驟和注意事項: 一、了解DDC的基本原則 十進制分類 :DDC采用十進制法,將所有的知識領域分為10個大類,分別以0-9
    的頭像 發表于 12-18 15:05 ?1136次閱讀

    nginx負載均衡配置介紹

    目錄 nginx負載均衡 nginx負載均衡介紹 反向代理與負載均衡 nginx負載均衡配置 Keepalived高可用nginx負載均衡
    的頭像 發表于 11-10 13:39 ?751次閱讀
    nginx負載<b class='flag-5'>均衡</b>配置介紹

    負載均衡是什么意思?盤點常見的三種方式

    負載均衡是什么意思?負載均衡(LoadBalancing)是一種計算機技術,主要用于在多個計算資源(如服務器、虛擬機、容器等)中分配和管理負載,以達到優化資源使用、最大化吞吐率、最小化響應時間,并
    的頭像 發表于 09-29 14:30 ?690次閱讀

    信號繼電器如何分類

    信號繼電器作為電氣控制系統中的關鍵元件,其分類方式多種多樣,主要可以從觸發方式、利用方式、工作原理、電流類型以及接點結構等多個維度進行分類
    的頭像 發表于 09-27 16:33 ?1481次閱讀

    信道均衡的原理和分類介紹

    一、信道均衡的基本原理 信道均衡的基本目標是對信道或整個傳輸系統的頻率響應進行補償,以減輕或消除由多徑傳播引起的碼間串擾(ISI)。在數字通信中,ISI會嚴重影響接收端的信號質量,導致數據傳輸錯誤
    的頭像 發表于 09-10 10:49 ?3010次閱讀
    信道<b class='flag-5'>均衡</b>的原理和<b class='flag-5'>分類</b>介紹

    調速器的主要分類和運轉方式

    調速器作為一種用于控制發動機轉速的裝置,在機械設備中起著至關重要的作用。其分類和運轉方式多種多樣,以下是對調速器主要分類和運轉方式的詳細解析。
    的頭像 發表于 08-25 16:42 ?3498次閱讀

    DFE均衡的原理與應用

    在高速SerDes通信中,由于信號的衰減和畸變,接收到的信號往往變得微弱且難以識別。此時,需要采用均衡技術來恢復信號的原始形狀和質量。隨著數據速率的不斷提高,DFE均衡技術也在不斷發展和優化。多抽頭DFE技術也在逐步得到研究和應
    的頭像 發表于 07-22 11:17 ?4737次閱讀
    DFE<b class='flag-5'>均衡</b>的原理與應用
    主站蜘蛛池模板: 国产精品夜夜春夜夜爽久久 | 奇米影视亚洲狠狠色777不卡 | 色女孩网站 | ⅹxxxx68日本老师hd | 欧美伦理一区二区三区 | 欧色美| 久久香蕉国产线看观看亚洲片 | 色性综合 | 大量真实偷拍情侣视频野战 | h小视频在线观看网 | 欧美色图综合 | 四虎电影免费观看网站 | 日本黄色免费电影 | 六月综合| 福利视频一区二区牛牛 | 欧美黄色xxx | h网站亚洲 | 国产高清美女一级a毛片 | 黑色丝袜美女被网站 | 69ww免费视频播放器 | 国产在线一区二区三区四区 | 午夜影剧 | 欧美成人一区亚洲一区 | 亚洲午夜久久久精品影院视色 | 狠狠色丁香久久婷婷综合丁香 | 毛片8 | 啊用力太猛了啊好深视频免费 | 久久99精品久久久久久野外 | 久热精品在线视频 | 一本大道香蕉大vr在线吗视频 | 国产亚洲情侣久久精品 | 色免费视频 | 欧美人成绝费网站色www吃脚 | 亚洲欧美成人网 | 永久免费的啪啪免费的网址 | 亚洲国产午夜精品理论片的软件 | 又黄又爽又猛午夜性色播在线播放 | 在线免费观看视频你懂的 | 久久色婷婷 | 美女黄18以下禁止观看的网站 | 五月婷婷之综合激情 |