文章目录
- 生成式模型的基础:极大似然估计
- GANs
- 最终版本
- 问题
- 非饱和博弈
- DCGAN
- 不同类型的GAN
- conditional GAN
- 无监督条件GAN--cycle GAN
- 对抗学习
https://blog.csdn.net/suyebiubiu/category_9372769.html
生成式模型的基础:极大似然估计
- θ∗=argmaxθExpdatalogPmodel(x∣θ)\theta^*=argmax_\theta E_{x~p_{data}}logP_{model}(x|\theta)θ∗=argmaxθEx pdatalogPmodel(x∣θ)
-
生成式模型都源于极大似然估计
- 显示概率分布
- 马尔科夫链/BM
- 隐式概率分布
- GSN
- GAN—唯一一个从数据观测一步到位的模型
以前比较强大的模型都源于HMM模型
- 显示概率分布
-
人工智能两个阶段
- 感知阶段
- 认知阶段
-
GAN(生成式模型
- 生成数据样本的能力
- 反应了他的理解(不能产生就没有理解)
GANs
-
和以前模型的的区别
- 使用了 latent code(缺省编码)
- 数据会逐渐统一 (unlike variational methods)
- 不需要马尔可夫链
- 被认为可以生成最好的样本
- (没有办法评价No good way to quantify this
-
核心思想:博弈论的纳什均衡——对抗达到平衡(共同进步)
- 生成器:尽量生成真实的分布——努力让判别器认不出来
- 输入向量,输出图或序列。。。
- 不同的向量表示不同的特征
- 想要发现数据的分布Pdata(x)P_{data}(x)Pdata(x)
- 假设一个分布Pdata(x;θ),用极大似然去找θP_{data}(x;\theta),用极大似然去找\thetaPdata(x;θ),用极大似然去找θ
- 判别器:区分是生成的还是真实的(努力让他能认出生成器生成的数据)
- 输入:图片
- 输出:标量评分
- 分越大,越真实–1
- 分小则假–0.1
- 生成器:尽量生成真实的分布——努力让判别器认不出来
-
算法
-
固定生成器G,从真假图中采样,来更新(训练)判别器D–>D1
- 版本1:$对V(G_0,D)找到D_0^* $===>D1
- 版本2:实际使用最小化交叉熵来进行二分类
- 原来:V(G,D)=ExPdata[log(D(x))]+ExPG[log(1−D(x))](G固定)原来:V(G,D)=E_{x~P_{data}}[log(D(x))]+E_{x~P_{G}}[log(1-D(x))] (G固定)原来:V(G,D)=Ex Pdata[log(D(x))]+Ex PG[log(1−D(x))](G固定)
- 目标函数==》maxV~=1mΣi=1mlog(D(xi))+1mΣi=1mlog(D(x~i))\tilde{V}=\frac{1}{m}\Sigma_{i=1}^{m}log(D(x^i))+\frac{1}{m}\Sigma_{i=1}^{m}log(D(\tilde{x}^i))V~=m1Σi=1mlog(D(xi))+m1Σi=1mlog(D(x~i))——均值代替期望
- 原来是对概率求和–>期望–>均值(Σi=1mlogPG(xi;θ)\Sigma_{i=1}^mlog P_G(x^i;\theta)Σi=1mlogPG(xi;θ)
- 多迭代几次:$\theta_d<–\theta_d+\eta d \tilde{V} $
- 原来:V(G,D)=ExPdata[log(D(x))]+ExPG[log(1−D(x))](G固定)原来:V(G,D)=E_{x~P_{data}}[log(D(x))]+E_{x~P_{G}}[log(1-D(x))] (G固定)原来:V(G,D)=Ex Pdata[log(D(x))]+Ex PG[log(1−D(x))](G固定)
-
固定D1,训练生成器G–>G1
- v1:θG←θG−η∂V(G,D0∗)∂θG\theta_G \leftarrow \theta_G-\eta \frac{\partial V(G,D_0^*)}{\partial \theta_G}θG←θG−η∂θG∂V(G,D0∗)===>找到G1
- v2:假设D0∗≈D1∗−−−也就是G变化很小(更新不能太频繁D_0^*\approx D_1^*---也就是G变化很小(更新不能太频繁D0∗≈D1∗−−−也就是G变化很小(更新不能太频繁
- V~=1mΣi=1mlog(D(G(zi))),z来自Pprior(z)\tilde{V}=\frac{1}{m}\Sigma_{i=1}^{m}log(D(G(z^i))),z来自P_{prior}(z)V~=m1Σi=1mlog(D(G(zi))),z来自Pprior(z)–目标函数是一样的
- 1mΣi=1mlog(D(xi))\frac{1}{m}\Sigma_{i=1}^{m}log(D(x^i))m1Σi=1mlog(D(xi))与生成器无关,可以不考虑
- $\theta_G<–\theta_G- \eta d \tilde{V} $
- V~=1mΣi=1mlog(D(G(zi))),z来自Pprior(z)\tilde{V}=\frac{1}{m}\Sigma_{i=1}^{m}log(D(G(z^i))),z来自P_{prior}(z)V~=m1Σi=1mlog(D(G(zi))),z来自Pprior(z)–目标函数是一样的
-
重复到平衡
-
-
生成器
- 极大似然估计L=Πi=1mPG(xi;θ),L=\Pi_{i=1}^mP_G(x^i;\theta),L=Πi=1mPG(xi;θ),
- θ∗=argmaxθΠi=1mPG(xi;θ)\theta^*=argmax_\theta \Pi_{i=1}^mP_G(x^i;\theta)θ∗=argmaxθΠi=1mPG(xi;θ)
- θ∗=argmaxθΣi=1mlogPG(xi;θ)\theta^*=argmax_\theta \Sigma_{i=1}^mlog P_G(x^i;\theta)θ∗=argmaxθΣi=1mlogPG(xi;θ)
- θ∗=argmaxθExPdata(logPG(xi;θ))\theta^*=argmax_\theta E_{x~Pdata}(log P_G(x^i;\theta) )θ∗=argmaxθEx Pdata(logPG(xi;θ))—求和近似于期望
- =argmaxθ∫xPdata(x)logPG(x;θ)dx−∫xPdata(x)logPdata(xi)dx=argmax_\theta \displaystyle \int_x P_{data}(x)log P_G(x;\theta)dx-\displaystyle \int_x P_{data}(x)log P_{data}(x^i)dx=argmaxθ∫xPdata(x)logPG(x;θ)dx−∫xPdata(x)logPdata(xi)dx—后面的只与真实数据有关
- =argminθKL(Pdata∣∣PG)=argmin_\theta KL(P_{data}||P_G)=argminθKL(Pdata∣∣PG)----=最小化KL散度(就是最小化他俩的差别KL=Div
- 如何产生通用的PGP_GPG?(通过神经网络
- G∗=argminθKL(Pdata∣∣PG)G^* =argmin_\theta KL(P_{data}||P_G)G∗=argminθKL(Pdata∣∣PG)
- Pdata(从真实数据中),PG(生成的采样)未知−−通过采样得到P_{data}(从真实数据中),P_G(生成的采样)未知--通过采样得到Pdata(从真实数据中),PG(生成的采样)未知−−通过采样得到
- $D^*=-2log2+2JSD(P_{data}||P_G) $
- G∗=argminGKL(Pdata∣∣PG)=argminGmaxDV(G,D)G^*=argmin_G KL(P_{data}||P_G)=argmin_G max_D V(G,D)G∗=argminGKL(Pdata∣∣PG)=argminGmaxDV(G,D)
- 极大似然估计L=Πi=1mPG(xi;θ),L=\Pi_{i=1}^mP_G(x^i;\theta),L=Πi=1mPG(xi;θ),
-
判别器
- 希望判别器通过区分,以Pdata和以PG采样得到的数据
- 目标函数:V(G,D)=ExPdata[log(D(x))]+ExPG[log(1−D(x))](G固定)V(G,D)=E_{x~P_{data}}[log(D(x))]+E_{x~P_{G}}[log(1-D(x))] (G固定)V(G,D)=Ex Pdata[log(D(x))]+Ex PG[log(1−D(x))](G固定)真实的+虚假的
- =∫xPdata(x)logD(x)dx+∫xPG(x)log(1−D(x))dx=\displaystyle \int_x P_{data}(x)log D(x) dx +\displaystyle \int_x P_{G}(x)log (1-D(x)) dx=∫xPdata(x)logD(x)dx+∫xPG(x)log(1−D(x))dx
- =∫x(Pdata(x)logD(x)+PG(x)log(1−D(x)))dx=\displaystyle \int_x (P_{data}(x)log D(x)+ P_{G}(x)log (1-D(x))) dx=∫x(Pdata(x)logD(x)+PG(x)log(1−D(x)))dx
- 假设D(x)能够是任何函数–
- 所以D要足够强–深度神经网络
- 最大化(Pdata(x)logD(x)dx+PG(x)log(1−D(x)))(P_{data}(x)log D(x) dx + P_{G}(x)log (1-D(x)))(Pdata(x)logD(x)dx+PG(x)log(1−D(x)))
- 求导:
- d(f(D))dD=a∗1D+b∗11−D∗(−1)=0\frac{d(f(D))}{dD}=a*\frac{1}{D}+b*\frac{1}{1-D}*(-1)=0dDd(f(D))=a∗D1+b∗1−D1∗(−1)=0
- a∗1D∗=b∗11−D∗a*\frac{1}{D^*}=b*\frac{1}{1-D^*}a∗D∗1=b∗1−D∗1
- D∗(x)=aa+b=Pdata(x)Pdata(x)+PG(x)D^*(x)=\frac{a}{a+b}=\frac{P_{data}(x)}{P_{data}(x)+P_{G}(x)}D∗(x)=a+ba=Pdata(x)+PG(x)Pdata(x)(在(0,1)之间
- 求导:
- 带入$G^* $
- D∗=maxDV(G,D)=V(G,D∗)=ExPdata[log(Pdata(x)Pdata(x)+PG(x))]+ExPG[log(PG(x)Pdata(x)+PG(x))]D^*=max_DV(G,D)=V(G,D^*)=E_{x~P_{data}}[log(\frac{P_{data}(x)}{P_{data}(x)+P_{G}(x)})]+E_{x~P_{G}}[log(\frac{P_{G}(x)}{P_{data}(x)+P_{G}(x)})]D∗=maxDV(G,D)=V(G,D∗)=Ex Pdata[log(Pdata(x)+PG(x)Pdata(x))]+Ex PG[log(Pdata(x)+PG(x)PG(x))]
- =−2log2+∫x(Pdata(x)logPG(x)(Pdata(x)+PG(x))/2+PG(x)log(PG(x)(Pdata(x)+PG(x))/2))dx=-2log2+\displaystyle \int_x (P_{data}(x)log \frac{P_{G}(x)}{(P_{data}(x)+P_{G}(x))/2} + P_{G}(x)log (\frac{P_{G}(x)}{(P_{data}(x)+P_{G}(x))/2)}) dx=−2log2+∫x(Pdata(x)log(Pdata(x)+PG(x))/2PG(x)+PG(x)log((Pdata(x)+PG(x))/2)PG(x))dx
- =−2log2+KL(Pdata∣∣Pdata(x)+PG(x)2)+KL(PG∣∣Pdata(x)+PG(x)2)=-2log2+KL(P_{data}||\frac{P_{data}(x)+P_{G}(x)}{2})+KL(P_{G}||\frac{P_{data}(x)+P_{G}(x)}{2})=−2log2+KL(Pdata∣∣2Pdata(x)+PG(x))+KL(PG∣∣2Pdata(x)+PG(x))
- =−2log2+2JSD(Pdata∣∣PG)=-2log2+2JSD(P_{data}||P_G)=−2log2+2JSD(Pdata∣∣PG)
- JSD(Pdata∣∣PG)=12D(P∣∣M)+12D(Q∣∣M),M=12(P+Q)JSD(P_{data}||P_G)=\frac{1}{2}D(P||M)+\frac{1}{2}D(Q||M),M=\frac{1}{2}(P+Q)JSD(Pdata∣∣PG)=21D(P∣∣M)+21D(Q∣∣M),M=21(P+Q)
- 训练:D∗=argmaxDV(D,G)D^*=argmax_DV(D,G)D∗=argmaxDV(D,G)
最终版本
- 训练:SGD,同时训练两组数据——深度神经网络
- 真实的
- 生成的
- 优化
- 可以一组训练跑一次时,另一组跑k次
- 可以一组训练跑一次时,另一组跑k次
问题
- 在开始的时候,训练较慢
非饱和博弈
- 更换后,极值点不变
- 原来D=1/2时,就无法训练了,而这个里面,D=1/2时仍然可以对生成器进行训练
DCGAN
- 反卷积生成图像
不同类型的GAN
- 传统GAN–
- 没有任何条件的,
- 给定一个图片,生成类似的图片
- 有条件的GAN
- 给定图片+图片里的信息(条件)
- 传统的神经网络,容易输出一个图片的平均(不对)–用GAN
- 无监督有条件的GAN
- 给定两个领域的图片
- 由一个领域的图片可以生成另外一个领域的图片
- 真实图片–》漫画风?
conditional GAN
- 生成器
- 不仅要生成火车,还要满足条件
- 判别器
- 判别是不是真实图片
- 判别是不是满足条件
- 对于真实的图片,不满足条件也输出0
无监督条件GAN–cycle GAN
- 直接使用会趋向于直接拿过来一个梵高的画
- 需要用一个网络,使得X≈YX \approx YX≈Y
- 也可以用生成器的逆过程反过来生成X’,X≈X′X \approx X'X≈X′
对抗学习
- 区别
- 一般机器学习只有一个机制点
- 对抗学习基于博弈论
- 有两个player
- 一个取极大一个取极小—求个鞍点
- 用于
- 白天–>黑天
- 没有真实对应的信息,只能通过对抗GAN网络生成—视频
- 加噪音–让图片不可识别–安全(攻击分类器)
- 通过将对抗的x’加入分类其中,提高分类器的能力(稳定性)
- 白天–>黑天
- 损失函数
- 分类器loss(θ)=C(y0,ytrue)小,y0=fθ(x)loss(\theta)=C(y0,y_{true})小,y0=f_{\theta}(x)loss(θ)=C(y0,ytrue)小,y0=fθ(x)
- 对抗的就是loss(x′)=−C(y0,ytrue)+C(y′,yfalse,y0=fθ(x‘)loss(x')=-C(y0,y_{true})+C(y',y_{false},y0=f_{\theta}(x‘)loss(x′)=−C(y0,ytrue)+C(y′,yfalse,y0=fθ(x‘)–优化x’
- 约束:d(x0,x′)<=ϵd(x0,x')<=\epsilond(x0,x′)<=ϵ看着原图没啥变化
- 得到一个x’