數(shù)據(jù)來(lái)源于網(wǎng)站需如何做腳注小紅書(shū)關(guān)鍵詞優(yōu)化
文章目錄
- 引言
- 正文
- 生成器損失函數(shù)
- 最小二乘損失函數(shù)
- 梅爾頻譜圖損失函數(shù)
- 特征匹配損失函數(shù)
- 生成器最終損失函數(shù)loss
- 生成器loss對(duì)應(yīng)代碼
- 鑒定器損失函數(shù)
- 鑒定器損失函數(shù)代碼
- 總結(jié)
- 引用
引言
- 這里翻譯了HiFi-GAN這篇論文的具體內(nèi)容,具體鏈接。
- 這篇文章還是學(xué)到了很多東西,從整體上說(shuō),學(xué)到了生成對(duì)抗網(wǎng)絡(luò)的構(gòu)建思路,包括生成器和鑒定器。細(xì)化到具體實(shí)現(xiàn)的細(xì)節(jié),如何 實(shí)現(xiàn)對(duì)于特定周期的數(shù)據(jù)處理?在細(xì)化,膨脹卷積是如何實(shí)現(xiàn)的?這些通過(guò)文章,僅僅是了解大概的實(shí)現(xiàn)原理,但是對(duì)于代碼的實(shí)現(xiàn)細(xì)節(jié)并不是很了解。如果要加深印象,還是要結(jié)合代碼來(lái)具體看一下實(shí)現(xiàn)的細(xì)節(jié)。
- 本文主要圍繞具體的代碼實(shí)現(xiàn)細(xì)節(jié)展開(kāi),對(duì)于相關(guān)原理,只會(huì)簡(jiǎn)單引用和講解。因?yàn)楣俜酱a使用的是pytorch,所以是通過(guò)pytorch展開(kāi)的。
- 關(guān)于模型其他部分的介紹,鏈接如下
- 論文代碼學(xué)習(xí)(1)—HiFi-GAN——生成器generator代碼
- 論文代碼學(xué)習(xí)—HiFi-GAN(2)——鑒別器discriminator代碼
正文
- 關(guān)于模型的損失函數(shù),這里總共有兩部分損失函數(shù),分別是生成器損失函數(shù)和鑒定器損失函數(shù)。其中生成器的損失函數(shù),有分為三部分,分別是常規(guī)的對(duì)抗生成損失、針對(duì)特征匹配的損失函數(shù)和針對(duì)梅爾頻譜圖的損失函數(shù),后兩者是作者自己的加上去的。
生成器損失函數(shù)
- 對(duì)于生成器損失函數(shù),作者分成了三個(gè)部分,分別是基本損失函數(shù)、針對(duì)特征匹配的損失函數(shù)以及梅爾損失函數(shù)。
最小二乘損失函數(shù)
-
不同于一般的GAN網(wǎng)絡(luò)使用交叉熵?fù)p失函數(shù),這里使用的是最小二乘損失函數(shù),借此來(lái)避免梯度丟失的現(xiàn)象。
-
最小二乘損失函數(shù)
- 用于衡量模型預(yù)測(cè)值和真實(shí)值的差異,具體特點(diǎn)如下
- 平方項(xiàng):通過(guò)平方差異,擴(kuò)大誤差,模型更加關(guān)注于難以擬合的樣本
- 連續(xù)可微:連續(xù)可微,可以有效找到最小值
- 非負(fù):損失函數(shù)的值始終非負(fù)
- 用于衡量模型預(yù)測(cè)值和真實(shí)值的差異,具體特點(diǎn)如下
- 生成器的損失函數(shù)的目的是為了使得生成的數(shù)據(jù),經(jīng)過(guò)鑒定器判定,和真的差不多。
- 具體的公式如下
- s s s是梅爾頻譜圖,輸入的條件變量
- x x x是真實(shí)數(shù)據(jù)
- D ( x ) D(x) D(x)是鑒定器對(duì)于輸入結(jié)果的評(píng)分,越逼真越接近1
- G ( s ) G(s) G(s)是生成器根據(jù)梅爾頻譜圖生成的結(jié)果
- 在上式子中,損失函數(shù)越小越好,生成器的效果越好,鑒定器,會(huì)將其分辨為1,做差,越靠近零,效果越好。
梅爾頻譜圖損失函數(shù)
- 除了考慮基本的損失函數(shù),這里還增加梅爾頻譜圖損失函數(shù),用來(lái)提高訓(xùn)練效果和生成音頻的分辨率,主要是抓住了梅爾頻譜圖對(duì)于感知能力的重視。
- 定義
- 計(jì)算合成的波形圖和實(shí)際波形圖的對(duì)應(yīng)采樣點(diǎn)的L1距離
- 參數(shù)說(shuō)明
- ? \varnothing ?表示將波形圖轉(zhuǎn)為mel頻譜圖
- 效果:
- 幫助生成器生成和輸入相關(guān)的實(shí)際波形
- 是的對(duì)抗訓(xùn)練階段能夠快速穩(wěn)定下來(lái)
特征匹配損失函數(shù)
-
特征匹配損失函數(shù)是用來(lái)衡量真實(shí)樣本和生成樣本在鑒定器上提取出來(lái)的特征的差異程度。不同于上一個(gè)mel頻譜圖的特征衡量,這里是直接衡量鑒定器生成的中間特征的差異程度。
-
定義
- 計(jì)算真實(shí)樣本和生成樣本分別在鑒定器上生成的中間特征的L1距離
-
參數(shù)說(shuō)明
- T T T表示為鑒定器的層數(shù)
- D i D^i Di和 N i N_i Ni?分別表示第i層的特征值和特征的數(shù)量。
-
效果
- 從鑒定器特征角度使得生成器的樣本更加逼真
- 從鑒定器特征角度使得生成器的樣本更加逼真
-
注意
- 這里并不是單單一個(gè)層的特征,是鑒定器上每一層的輸出特征的L1距離累加和的平均值。
生成器最終損失函數(shù)loss
- 生成器最終的損失函數(shù),是上述三個(gè)損失函數(shù)之和,并且特征匹配損失函數(shù)和mel頻譜圖損失函數(shù),加上對(duì)應(yīng)的權(quán)重,具體如下
- λ f m = 2 \lambda_{fm} = 2 λfm?=2和 λ m e l = 45 \lambda_{mel} = 45 λmel?=45
- λ f m = 2 \lambda_{fm} = 2 λfm?=2和 λ m e l = 45 \lambda_{mel} = 45 λmel?=45
生成器loss對(duì)應(yīng)代碼
def feature_loss(fmap_r, fmap_g):# 特征損失函數(shù)# fmap_r是真實(shí)音頻信號(hào)的特征圖,fmap_g是生成音頻信號(hào)的特征圖loss = 0for dr, dg in zip(fmap_r, fmap_g):for rl, gl in zip(dr, dg):# 遍歷每一層特征圖,計(jì)算特征損失,做差,求絕對(duì)值,求均值loss += torch.mean(torch.abs(rl - gl))# 根據(jù)經(jīng)驗(yàn),特征損失函數(shù)的權(quán)重為10return loss*2def generator_loss(disc_outputs):# 生成器的損失函數(shù)# disc_outputs是鑒定器的輸出loss = 0gen_losses = []for dg in disc_outputs:l = torch.mean((1-dg)**2)gen_losses.append(l)loss += l# loss是生成器的總損失,用于反向傳播來(lái)更新生成器的參數(shù)# gen_losses是生成器的損失列表,用于記錄鑒定器中每一個(gè)元素對(duì)應(yīng)的損失,可以用于調(diào)試設(shè)備return loss, gen_losses
- 結(jié)合代碼來(lái)看,并沒(méi)有將mel頻譜圖損失記錄在內(nèi),這里僅僅包含了兩個(gè)損失函數(shù),generator_loss實(shí)現(xiàn)了最小二乘損失函數(shù),feature_loss計(jì)算了鑒定器每一層的匹配的損失函數(shù)。
- 她是把mel頻譜圖損失定義在訓(xùn)練過(guò)程中了.
鑒定器損失函數(shù)
- 我們鑒定器的訓(xùn)練目標(biāo):
- 能夠?qū)⒄鎸?shí)數(shù)據(jù)鑒定為真,標(biāo)記為1
- 能夠?qū)⑸善魃傻臄?shù)據(jù)鑒定為假,標(biāo)記為0
- 所以,鑒定器的損失函數(shù)應(yīng)該從兩方面進(jìn)行考慮,分別是鑒定生成數(shù)據(jù)和鑒定真實(shí)數(shù)據(jù)。
- 具體的公式如下
- s s s是梅爾頻譜圖,輸入的條件變量
- x x x是真實(shí)數(shù)據(jù)
- D ( x ) D(x) D(x)是鑒定器對(duì)于輸入結(jié)果的評(píng)分,越逼真越接近1
- G ( s ) G(s) G(s)是生成器根據(jù)梅爾頻譜圖生成的結(jié)果
鑒定器損失函數(shù)代碼
def discriminator_loss(disc_real_outputs, disc_generated_outputs):# 鑒定器的損失函數(shù)# disc_real_outputs是真實(shí)音頻信號(hào)的鑒定器的輸出# disc_generated_outputs是生成音頻信號(hào)的鑒定器的輸出loss = 0r_losses = []g_losses = []for dr, dg in zip(disc_real_outputs, disc_generated_outputs):# 計(jì)算真實(shí)音頻信號(hào)的損失r_loss = torch.mean((1-dr)**2)# 計(jì)算生成音頻信號(hào)的損失g_loss = torch.mean(dg**2)# 將兩個(gè)損失相加loss += (r_loss + g_loss)# 記錄各個(gè)鑒定器的損失r_losses.append(r_loss.item())g_losses.append(g_loss.item())return loss, r_losses, g_losses
- 這個(gè)損失函數(shù)實(shí)現(xiàn)起來(lái)還是比較容易的,只需要分別計(jì)算兩種數(shù)據(jù)的損失,然后累加求和即可
總結(jié)
- 總的來(lái)說(shuō),這是第一次接觸對(duì)抗生成學(xué)習(xí),知道了對(duì)于鑒定器和生成器要分別定義,損失函數(shù)也是分別定義的。除此之外,他們的損失函數(shù)也是相互調(diào)用的。值得學(xué)習(xí)。
- 下部分將講述關(guān)于train文件具體內(nèi)容,這個(gè)是模型的具體訓(xùn)練文件,定義了模型的前向傳播和反向傳播的過(guò)程。
引用
- chatGPT-plus
- HiFi-GAN demo
- HiFi-GAN: Generative Adversarial Networks for Efficient and High Fidelity Speech Synthesis