docs/si/gan/wasserstein/index.html
[View code on Github](https://github.com/labmlai/annotated_deep_learning_paper_implementations/tree/master/labml_nn/gan/wasserstein/ init.py)
මෙය වොසර්ස්ටයින් GANක්රියාත්මක කිරීමයි.
මුල්GAN අලාභය පදනම් වී ඇත්තේ සැබෑ බෙදා හැරීම Pr සහ ජනනය කරන ලද බෙදා හැරීම අතර ජෙන්සන්-ෂැනන් (JS) අපසරනය මත Pgය. වොසර්ස්ටයින් GAN පදනම් වී ඇත්තේ මෙම බෙදාහැරීම් අතර පෘථිවි මූවර් දුර මත ය.
W(Pr,Pg)=γ∈Π(Pr,Pg)infE(x,y)∼γ∥x−y∥
Π(Pr,Pg) යනු සියළුම ඒකාබද්ධ බෙදාහැරීම් වල කට්ටලය වන අතර ඒවායේ ආන්තික සම්භාවිතාවන් වේ γ(x,y).
E(x,y)∼γ∥x−y∥ දී ඇති ඒකාබද්ධ ව්යාප්තියක් සඳහා පෘථිවි චලනය දුර වේ (x සහ y සම්භාවිතාවන් වේ).
සැබෑබෙදා හැරීම Pr සහ ජනනය කරන ලද බෙදා හැරීම අතර ඕනෑම ඒකාබද්ධ බෙදාහැරීමක් සඳහා අවම වශයෙන් පෘථිවි මන්තීට දුරට සමාන Pgවේ. W(Pr,Pg)
කඩදාසිපෙන්වන්නේ ජෙන්සන්-ෂැනන් (ජේඑස්) අපසරනය සහ සම්භාවිතා බෙදාහැරීම් දෙකක් අතර වෙනස සඳහා වෙනත් ක්රියාමාර්ග සුමට නොවන බවයි. එබැවින් අපි එක් සම්භාවිතා බෙදාහැරීමක් මත (පරාමිතිකරණය කර ඇති) ශ්රේණියේ සම්භවයක් කරන්නේ නම් එය අභිසාරී නොවනු ඇත.
කන්තෝරෝවිච්-රුබින්ස්ටයින්ද්විත්ව භාවය මත පදනම්ව, W(Pr,Pg)=∥f∥L≤1supEx∼Pr[f(x)]−Ex∼Pg[f(x)]
∥f∥L≤1 සියලු 1-Lipschitz කාර්යයන් කොහෙද.
එනම්, එය සියලු 1-Lipschitz කාර්යයන් Ex∼Pr[f(x)]−Ex∼Pg[f(x)] අතර විශාලතම වෙනසට සමාන වේ.
K-ලිප්ස්චිට්ස් කාර්යයන් සඳහා, W(Pr,Pg)=∥f∥L≤KsupEx∼Pr[K1f(x)]−Ex∼Pg[K1f(x)]
සියලු K-Lipschitz ශ්රිතයන් පරාමිතිකරණය කර f ඇති fw ස්ථානය ලෙස නිරූපණය කළ හැකි නම් w∈W,
K⋅W(Pr,Pg)=w∈WmaxEx∼Pr[fw(x)]−Ex∼Pg[fw(x)]
උත්පාදකයන්ත්රයකින් නිරූපණය (Pg) වන්නේ නම් gθ(z) සහ z දන්නා බෙදාහැරීමක් නම් z∼p(z),
K cdotW(Pr,Pθ)=w∈WmaxEx∼Pr[fw(x)]−Ez∼p(z)[fw(gθ(z))]
දැන් gθ සමඟ අභිසාරී වීමට ඉහත සූත්රය අවම කිරීම θ සඳහා Pr අපට අනුක්රමික සම්භවය ලබා ගත හැකිය.
ඒහා සමානව අපට නැගී maxw∈W සිටීමෙන් සොයාගත K හැකිය. w K මායිම් තබා ගත හැකි එක් ක්රමයක් නම් පරාසයක් තුළ ක්ලිප් කර ඇති නිර්වචනය කරන ස්නායුක ජාලයේ සියලුම බර f ක්ලිප් කිරීමයි.
සරල MNIST පරම්පරාවේ අත්හදා බැලීමකදී මෙය අත්හදා බැලීමටකේතය මෙන්න.
87importtorch.utils.data88fromtorch.nnimportfunctionalasF8990fromlabml\_helpers.moduleimportModule
අපිඋපරිම කිරීමට සොයා w ගැනීමට අවශ්ය Ex∼Pr[fw(x)]−Ez∼p(z)[fw(gθ(z))], ඒ නිසා අපි අවම, −m1i=1∑mfw(x(i))+m1i=1∑mfw(gθ(z(i)))
93classDiscriminatorLoss(Module):
f_real වේ fw(x)
f_fake වේ fw(gθ(z))
මෙයපාඩු සහිත ටියුපල් නැවත ලබා දෙන fw(x) අතර fw(gθ(z))ඒවා පසුව එකතු කරනු ලැබේ. ඒවා ලොග් වීම සඳහා වෙනම තබා ඇත.
104defforward(self,f\_real:torch.Tensor,f\_fake:torch.Tensor):
f∈[−1,+1] පරාසය තබා ගැනීම සඳහා අලාභය ක්ලිප් කිරීමට අපි RelUs භාවිතා කරමු.
115returnF.relu(1-f\_real).mean(),F.relu(1+f\_fake).mean()
අවමකිරීම Ex∼Pr[fw(x)]−Ez∼p(z)[fw(gθ(z))] සඳහා අපට සොයා θ ගැනීමට අවශ්යයි පළමු සංරචකය ස්වාධීන වේ θ, එබැවින් අපි අවම කරමු, −m1i=1∑mfw(gθ(z(i)))
118classGeneratorLoss(Module):
f_fake වේ fw(gθ(z))130defforward(self,f\_fake:torch.Tensor):
134return-f\_fake.mean()