99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)類(lèi)別不均衡問(wèn)題的分類(lèi)及解決方式

深度學(xué)習(xí)自然語(yǔ)言處理 ? 來(lái)源:PaperWeekly ? 作者:PaperWeekly ? 2022-07-08 14:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

所有的 Loss 實(shí)踐代碼在這里:

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

數(shù)據(jù)不均衡問(wèn)題也可以說(shuō)是一個(gè)長(zhǎng)尾問(wèn)題,但長(zhǎng)尾那部分?jǐn)?shù)據(jù)往往是重要且不能被忽略的,它不僅僅是分類(lèi)標(biāo)簽下樣本數(shù)量的不平衡,實(shí)質(zhì)上也是難易樣本的不平衡。

解決不均衡問(wèn)題一般從兩方面入手:

數(shù)據(jù)層面:重采樣,使得參與迭代計(jì)算的數(shù)據(jù)是均衡的;

模型層面:重加權(quán),修改模型的 loss,在 loss 計(jì)算上,加大對(duì)少樣本的 loss 獎(jiǎng)勵(lì)。

1. 數(shù)據(jù)層面的重采樣

關(guān)于數(shù)據(jù)層面的重采樣,方式都是通過(guò)采樣,重新構(gòu)造數(shù)據(jù)分布,使得數(shù)據(jù)平衡。一般常用的有三種:

欠采樣;

過(guò)采樣;

SMOTE。

1. 欠采樣:指某類(lèi)別下數(shù)據(jù)較多,則只采取部分?jǐn)?shù)據(jù),直接拋棄一些數(shù)據(jù),這種方式太簡(jiǎn)單粗暴,擬合出來(lái)的模型的偏差大,泛化性能較差;

2. 過(guò)采樣:這種方式與欠采樣相反,某類(lèi)別下數(shù)據(jù)較少,進(jìn)行重復(fù)采樣,達(dá)到數(shù)據(jù)平衡。因?yàn)檫@些少的數(shù)據(jù)反復(fù)迭代計(jì)算,會(huì)使得模型產(chǎn)生過(guò)擬合的現(xiàn)象。

3. SMOTE:一種近鄰插值,可以降低過(guò)擬合風(fēng)險(xiǎn),但它是適用于回歸預(yù)測(cè)場(chǎng)景下,而 NLP 任務(wù)一般是離散的情況。

這幾種方法單獨(dú)使用會(huì)或多或少造成數(shù)據(jù)的浪費(fèi)或重,一般會(huì)與 ensemble 方式結(jié)合使用,sample 多份數(shù)據(jù),訓(xùn)練出多個(gè)模型,最后綜合。

但以上幾種方式在工程實(shí)踐中往往是少用的,一是因?yàn)閿?shù)真實(shí)據(jù)珍貴,二也是 ensemble 的方式部署中資源消耗大,沒(méi)法接受。因此,就集中看下重加權(quán) loss 改進(jìn)的部分。

2. 模型層面的重加權(quán)

重加權(quán)主要指的是在 loss 計(jì)算階段,通過(guò)設(shè)計(jì) loss,調(diào)整類(lèi)別的權(quán)值對(duì) loss 的貢獻(xiàn)。比較經(jīng)典的 loss 改進(jìn)應(yīng)該是 Focal Loss, GHM Loss, Dice Loss。

2.1 Focal Loss

Focal Loss 是一種解決不平衡問(wèn)題的經(jīng)典 loss,基本思想就是把注意力集中于那些預(yù)測(cè)不準(zhǔn)的樣本上。

何為預(yù)測(cè)不準(zhǔn)的樣本?比如正樣本的預(yù)測(cè)值小于 0.5 的,或者負(fù)樣本的預(yù)測(cè)值大于 0.5 的樣本。再簡(jiǎn)單點(diǎn),就是當(dāng)正樣本預(yù)測(cè)值》0.5 時(shí),在計(jì)算該樣本的 loss 時(shí),給它一個(gè)小的權(quán)值,反之,正樣本預(yù)測(cè)值《0.5 時(shí),給它一個(gè)大的權(quán)值。同理,對(duì)負(fù)樣本時(shí)也是如此。

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

其中 是真實(shí)標(biāo)簽, 是預(yù)測(cè)值,在此基礎(chǔ)又出來(lái)了一個(gè)權(quán)重交叉熵,即用一個(gè)超參去緩解上述這種影響,也就是下式。

接下來(lái),看下 Focal Loss 是怎么做到集中關(guān)注預(yù)測(cè)不準(zhǔn)的樣本?

在交叉熵 loss 基礎(chǔ)上,當(dāng)正樣本預(yù)測(cè)值 大于 0.5 時(shí),需要給它的 loss 一個(gè)小的權(quán)重值 ,使其對(duì)總 loss 影響小,反之正樣本預(yù)測(cè)值 小于 0.5,給它的 loss 一個(gè)大的權(quán)重值。為滿(mǎn)足以上要求,則 增大時(shí), 應(yīng)減小,故剛好 可滿(mǎn)足上述要求。

因此加上注意參數(shù) ,得到 Focal Loss 的二分類(lèi)情況:

加上調(diào)節(jié)系數(shù) ,F(xiàn)ocal Loss 推廣到多分類(lèi)的情況:

其中 為第 t 類(lèi)預(yù)測(cè)值,,試驗(yàn)中效果最佳時(shí),。

代碼的實(shí)現(xiàn)也是比較簡(jiǎn)潔的。

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 注重了對(duì) hard example 的學(xué)習(xí),但不是所有的 hard example 都值得關(guān)注,有一些 hard example 很可能是離群點(diǎn),這種離群點(diǎn)當(dāng)然是不應(yīng)該讓模型關(guān)注的。

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

Focal Loss 中通過(guò)調(diào)節(jié)置信度 ,當(dāng)正樣本中模型的預(yù)測(cè)值 較小時(shí),則乘上(1-p),給一個(gè)大的 loss 值使得模型關(guān)注這種樣本。于是 GHM Loss 在此基礎(chǔ)上,規(guī)定了一個(gè)置信度范圍 ,具體一點(diǎn),就是當(dāng)正樣本中模型的預(yù)測(cè)值為 較小時(shí),要看這個(gè) 多小,若是 ,這種樣本可能就是離群點(diǎn),就不注意它了。

于是 GHM Loss 首先規(guī)定了一個(gè)梯度模長(zhǎng) :

其中, 是模型預(yù)測(cè)概率值, 是 ground-truth 的標(biāo)簽值,這里以二分類(lèi)為例,取值為 0 或 1??砂l(fā)現(xiàn), 表示檢測(cè)的難易程度, 越大則檢測(cè)難度越大。

GHM Loss 的思想是,不要關(guān)注那些容易學(xué)的樣本,也不要關(guān)注那些離群點(diǎn)特別難分的樣本。所以問(wèn)題就轉(zhuǎn)為我們需要尋找一個(gè)變量去衡量這個(gè)樣本是不是這兩種,這個(gè)變量需滿(mǎn)足當(dāng) 值大時(shí),它要小,從而進(jìn)行抑制,當(dāng) 值小時(shí),它也要小,進(jìn)行抑制。于是文中就引入了梯度密度:

表明了樣本 1~N 中,梯度模長(zhǎng)分布在 范圍內(nèi)的樣本個(gè)數(shù), 代表了 區(qū)間的長(zhǎng)度,因此梯度密度 GD(g) 的物理含義是:?jiǎn)挝惶荻饶iL(zhǎng) 部分的樣本個(gè)數(shù)。

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

此時(shí),對(duì)于每個(gè)樣本,把交叉熵 CE×該樣本梯度密度的倒數(shù),就得到 GHM Loss。

這里附上邏輯的代碼,完整的可以上文章首尾倉(cāng)庫(kù)查看。

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): # 計(jì)算落入bins的梯度模長(zhǎng)數(shù)量 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 # 計(jì)算好樣本的gd值

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

2.3 Dice Loss & DSC Loss

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

按照上面的邏輯,看一下 Dice Loss 是怎么演變過(guò)來(lái)的。Dice Loss 主要來(lái)自于 dice coefficient,dice coefficient 是一種用于評(píng)估兩個(gè)樣本的相似性的度量函數(shù)。

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

同時(shí),結(jié)合 F1 的指標(biāo)計(jì)算公式推一下,可得:

可以動(dòng)手推一下,就能得到 dice coefficient 是等同 F1 score 的,因此本質(zhì)上 dice loss 是直接優(yōu)化 F1 指標(biāo)的。

上述表達(dá)式是離散的,需要把上述 DSC 表達(dá)式轉(zhuǎn)化為連續(xù)的版本,需要進(jìn)行軟化處理。對(duì)單個(gè)樣本 x,可以直接定義它的 DSC:

但是當(dāng)樣本為負(fù)樣本時(shí),y1=0,loss 就為 0 了,需要加一個(gè)平滑項(xiàng)。

上面有說(shuō)到 dice coefficient 是一種兩個(gè)樣本的相似性的度量函數(shù),上式中,假設(shè)正樣本 p 越大,dice 值越大,說(shuō)明模型預(yù)測(cè)的越準(zhǔn),則應(yīng)該 loss 值越小,因此 dice loss 的就變成了下式這也就是最終 dice loss 的樣子。

為了能得到 focal loss 同樣的功能,讓 dice loss 集中關(guān)注預(yù)測(cè)不準(zhǔn)的樣本,可以與 focal loss 一樣加上一個(gè)調(diào)節(jié)系數(shù) ,就得到了香儂提出的適用于 NLP 任務(wù)的自調(diào)節(jié) DSC-Loss。

弄明白了原理,看下代碼的實(shí)現(xiàn)。

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()

總結(jié)

本文主要討論了類(lèi)別不均衡問(wèn)題的解決辦法,可分為數(shù)據(jù)層面的重采樣及模型 loss 方面的改進(jìn),如 focal loss, dice loss 等。最后說(shuō)一下實(shí)踐下來(lái)的經(jīng)驗(yàn),由于不同數(shù)據(jù)集的數(shù)據(jù)分布特點(diǎn)各有不同,dice loss 以及 GHM loss 會(huì)出現(xiàn)些抖動(dòng)、不穩(wěn)定的情況。當(dāng)不想挨個(gè)實(shí)踐的時(shí)候,首推 focal loss,dice loss。

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

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

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7256

    瀏覽量

    91891
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70756

原文標(biāo)題:類(lèi)別不均衡問(wèn)題之loss大集合:focal loss, GHM loss, dice loss 等等

文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    電子元器件的分類(lèi)方式

    電子元器件可以按照不同的分類(lèi)標(biāo)準(zhǔn)進(jìn)行分類(lèi),以下是一些常見(jiàn)的分類(lèi)方式。
    的頭像 發(fā)表于 04-16 14:52 ?895次閱讀

    常見(jiàn)網(wǎng)絡(luò)負(fù)載均衡的幾種方式

    常見(jiàn)網(wǎng)絡(luò)負(fù)載均衡的幾種方式包括:DNS負(fù)載均衡、反向代理負(fù)載均衡、IP負(fù)載均衡、應(yīng)用層負(fù)載均衡、
    的頭像 發(fā)表于 03-06 11:14 ?538次閱讀

    電源盒的分類(lèi)有哪些

    電源盒的類(lèi)型多種多樣,具體可以分為多種分類(lèi)方式下的不同類(lèi)型 ?。 一種常見(jiàn)的分類(lèi)方式是基于其結(jié)構(gòu)和用途,但需要注意的是,這種分類(lèi)
    的頭像 發(fā)表于 02-25 10:50 ?379次閱讀

    短波天線的工作原理和類(lèi)別

    短波通信以其獨(dú)特的長(zhǎng)距離傳輸能力而聞名,本文將詳細(xì)探討短波天線的工作原理和類(lèi)別等,勾勒出短波天線的大致面貌。
    的頭像 發(fā)表于 02-07 17:33 ?1819次閱讀

    調(diào)制方式分類(lèi)與比較

    調(diào)制是通信系統(tǒng)中的一個(gè)關(guān)鍵過(guò)程,它涉及將信息信號(hào)(如音頻、視頻或數(shù)據(jù))轉(zhuǎn)換為適合在通信信道中傳輸?shù)男问?。調(diào)制方式可以根據(jù)不同的標(biāo)準(zhǔn)進(jìn)行分類(lèi),例如調(diào)制信號(hào)的類(lèi)型(模擬或數(shù)字)、調(diào)制信號(hào)的參數(shù)(幅度
    的頭像 發(fā)表于 01-21 09:16 ?1719次閱讀

    屏蔽雙絞線的絞合方式分類(lèi)

    屏蔽雙絞線的絞合方式主要涉及到線芯的排列與絞合程度,以下是關(guān)于屏蔽雙絞線絞合方式的詳細(xì)解釋?zhuān)?一、絞合方式分類(lèi) 屏蔽雙絞線的絞合方式根據(jù)絞
    的頭像 發(fā)表于 01-08 10:34 ?600次閱讀

    了解圖形均衡器與參數(shù)均衡器的區(qū)別

    在音頻處理領(lǐng)域,均衡器(Equalizer)是一種用于調(diào)整音頻信號(hào)頻率響應(yīng)的設(shè)備或軟件工具。它可以幫助我們?cè)鰪?qiáng)或減弱特定頻率范圍的聲音,以達(dá)到改善音質(zhì)、去除噪音或創(chuàng)造特定音效的目的。圖形均衡器和參數(shù)
    的頭像 發(fā)表于 12-26 09:35 ?2373次閱讀

    ddc與其他分類(lèi)系統(tǒng)的比較

    )的比較: 一、與體系分類(lèi)法的比較 立類(lèi)原則 : DDC:以學(xué)科立類(lèi)為主,強(qiáng)調(diào)體現(xiàn)類(lèi)目的系統(tǒng)性。它按照一定的體系將各種不同的主題劃分為不同的類(lèi)別,盡量細(xì)分,為每個(gè)已知的主題準(zhǔn)備一個(gè)位置。 體系分類(lèi)法:同樣堅(jiān)持劃分的學(xué)科系統(tǒng)性原則
    的頭像 發(fā)表于 12-18 15:10 ?905次閱讀

    如何使用ddc進(jìn)行數(shù)據(jù)分類(lèi)

    不同的主題劃分為不同的類(lèi)別。以下是如何使用DDC進(jìn)行數(shù)據(jù)分類(lèi)的步驟和注意事項(xiàng): 一、了解DDC的基本原則 十進(jìn)制分類(lèi) :DDC采用十進(jìn)制法,將所有的知識(shí)領(lǐng)域分為10個(gè)大類(lèi),分別以0-9
    的頭像 發(fā)表于 12-18 15:05 ?1150次閱讀

    nginx負(fù)載均衡配置介紹

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

    負(fù)載均衡是什么意思?盤(pán)點(diǎn)常見(jiàn)的三種方式

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

    信號(hào)繼電器如何分類(lèi)

    信號(hào)繼電器作為電氣控制系統(tǒng)中的關(guān)鍵元件,其分類(lèi)方式多種多樣,主要可以從觸發(fā)方式、利用方式、工作原理、電流類(lèi)型以及接點(diǎn)結(jié)構(gòu)等多個(gè)維度進(jìn)行分類(lèi)。
    的頭像 發(fā)表于 09-27 16:33 ?1493次閱讀

    信道均衡的原理和分類(lèi)介紹

    一、信道均衡的基本原理 信道均衡的基本目標(biāo)是對(duì)信道或整個(gè)傳輸系統(tǒng)的頻率響應(yīng)進(jìn)行補(bǔ)償,以減輕或消除由多徑傳播引起的碼間串?dāng)_(ISI)。在數(shù)字通信中,ISI會(huì)嚴(yán)重影響接收端的信號(hào)質(zhì)量,導(dǎo)致數(shù)據(jù)傳輸錯(cuò)誤
    的頭像 發(fā)表于 09-10 10:49 ?3022次閱讀
    信道<b class='flag-5'>均衡</b>的原理和<b class='flag-5'>分類(lèi)</b>介紹

    調(diào)速器的主要分類(lèi)和運(yùn)轉(zhuǎn)方式

    調(diào)速器作為一種用于控制發(fā)動(dòng)機(jī)轉(zhuǎn)速的裝置,在機(jī)械設(shè)備中起著至關(guān)重要的作用。其分類(lèi)和運(yùn)轉(zhuǎn)方式多種多樣,以下是對(duì)調(diào)速器主要分類(lèi)和運(yùn)轉(zhuǎn)方式的詳細(xì)解析。
    的頭像 發(fā)表于 08-25 16:42 ?3521次閱讀

    DFE均衡的原理與應(yīng)用

    在高速SerDes通信中,由于信號(hào)的衰減和畸變,接收到的信號(hào)往往變得微弱且難以識(shí)別。此時(shí),需要采用均衡技術(shù)來(lái)恢復(fù)信號(hào)的原始形狀和質(zhì)量。隨著數(shù)據(jù)速率的不斷提高,DFE均衡技術(shù)也在不斷發(fā)展和優(yōu)化。多抽頭DFE技術(shù)也在逐步得到研究和應(yīng)
    的頭像 發(fā)表于 07-22 11:17 ?4766次閱讀
    DFE<b class='flag-5'>均衡</b>的原理與應(yīng)用