生成式對抗網路即gan由生成器和判別器組成。原**中,關於生成器和判別器的損失函式是寫成以下形式:
首先,第乙個式子我們不看梯度符號的話即為判別器的損失函式,logd(xi)為判別器將真實資料判定為真實資料的概率,log(1-d(g(zi)))為判別器將生成器生成的虛假資料判定為真實資料的對立面即將虛假資料仍判定為虛假資料的概率。判別器就相當於警察,在鑑別真偽時,必須要保證鑑別的結果真的就是真的,假的就是假的,所以判別器的總損失即為二者之和,應當最大化該損失。由於判別器(警察)鑑別真偽的能力隨著訓練次數的增加越來越高,生成器就要與之「對抗」,生成器就要相應地提高「造假」技術,來迷惑判別器。第二個式子為第乙個式子的第二項,含義相同,只不過對於生成器應當最小化該項,生成器當然希望辨別器將虛假資料仍判定為虛假資料的概率越低越好,即將虛假資料誤判定為真實資料的概率越大越好,即最大化log(d(g(zi)))損失函式。所以二者相互提高或者減小自身的損失,以不斷互相對抗。
github上的deep convolutional generative adversarial networks(dcgan)的損失函式是用nn.bceloss()
來寫的,具體如下:
import torch
from torch.autograd import variable
batch_size =
10adversarial_loss = nn.bceloss(
)valid = variable(torch.tensor(batch_size,1)
.fill_(
1.0)
, requires_grad=
false
)fake = variable(torch.tensor(batch_size,1)
.fill_(
0.0)
, requires_grad=
false
)# dis:鑑別器
# gen_imgs:生成器生成影象
# real_imgs:真實影象
g_loss = adversarial_loss(dis(gen_imgs)
, valid)
real_loss = adversarial_loss(dis(real_imgs)
, valid)
fake_loss = adversarial_loss(dis(gen_imgs)
, fake)
d_loss = real_loss + fake_loss
nn.bceloss
的計算公式這裡不再贅述,可以檢視官方文件,我手寫一下**中的g_loss
和d_loss
:
torch
中都是最小化損失函式,所以d_loss
能理解,而g_loss
只不過對原**中的寫法換了一種表述,即最大化d(g(z))
的概率:使得鑑別器將生成器生成的影象鑑別為真的概率越大越好。
我用pytorch搭建了乙個簡易的gan,沒用卷積層,只是單純的全連線層,利用mnist影象作為真實資料,隨機生成100維的隨機雜訊作為生成器的輸入,20次迭代的最終結果如上圖,可以看出gan多多少少能有些真實影象的大概輪廓。
深度學習 GAN生成式對抗網路
生成式對抗網路 gan,generative adversarial network 的簡單理解就是,想想一名偽造者試圖偽造一幅畢卡索的畫作。一開始,偽造者非常不擅長這項任務,他隨便畫了幅與畢卡索真跡放在一起,請鑑定商進行評估,鑑定商鑑定後,將結果反饋給偽造者,並告訴他怎樣可以讓 看起來更像畢卡索的...
生成式對抗網路
generative adversarial nets,生成式對抗網路 gan框架 生成器 generator 欺騙判別器。生成虛假資料,使得判別器d能夠盡可能給出高的評分1 隨機雜訊z 從乙個先驗分布 人為定義,一般是均勻分布或者正態分佈 中隨機取樣的向量 輸入的向量維度越高,其生成影象的種類越多...
生成式對抗網路GAN
判別式模型和生成是模型的區別 假設研究物件為變數為x,類別變數為y,則 判別式模型 只是對給定的樣本進行分類,不關心資料如何生成。按照一定的判別準則,從資料中直接學習決策函式y f x 或者條件概率分布p y x a 作為 的模型 典型的判別模型包括 k近鄰法,決策樹,最大熵模型,支援向量機等 生成...