国科大高级人工智能6-GAN

可紊 提交于 2020-01-28 03:12:46


https://blog.csdn.net/suyebiubiu/category_9372769.html

生成式模型的基础:极大似然估计

  • θ=argmaxθEx pdatalogPmodel(xθ)\theta^*=argmax_\theta E_{x~p_{data}}logP_{model}(x|\theta)

在这里插入图片描述

  • 生成式模型都源于极大似然估计

    • 显示概率分布
      • 马尔科夫链/BM
    • 隐式概率分布
      • GSN
      • GAN—唯一一个从数据观测一步到位的模型
        在这里插入图片描述
        以前比较强大的模型都源于HMM模型
  • 人工智能两个阶段

    • 感知阶段
    • 认知阶段
  • GAN(生成式模型

    • 生成数据样本的能力
    • 反应了他的理解(不能产生就没有理解)

GANs

  • 和以前模型的的区别

    • 使用了 latent code(缺省编码)
    • 数据会逐渐统一 (unlike variational methods)
    • 不需要马尔可夫链
    • 被认为可以生成最好的样本
      • (没有办法评价No good way to quantify this
  • 核心思想:博弈论的纳什均衡——对抗达到平衡(共同进步)

    • 生成器:尽量生成真实的分布——努力让判别器认不出来
      • 输入向量,输出图或序列。。。
      • 不同的向量表示不同的特征
      • 想要发现数据的分布Pdata(x)P_{data}(x)
        • 假设一个分布Pdata(x;θ),θP_{data}(x;\theta),用极大似然去找\theta
    • 判别器:区分是生成的还是真实的(努力让他能认出生成器生成的数据)
      • 输入:图片
      • 输出:标量评分
        • 分越大,越真实–1
        • 分小则假–0.1
  • 算法

    1. 固定生成器G,从真假图中采样,来更新(训练)判别器D–>D1

      • 版本1:$对V(G_0,D)找到D_0^* $===>D1
      • 版本2:实际使用最小化交叉熵来进行二分类
        • V(G,D)=Ex Pdata[log(D(x))]+Ex PG[log(1D(x))](G原来:V(G,D)=E_{x~P_{data}}[log(D(x))]+E_{x~P_{G}}[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))——均值代替期望
          • 原来是对概率求和–>期望–>均值(Σi=1mlogPG(xi;θ)\Sigma_{i=1}^mlog P_G(x^i;\theta)
        • 多迭代几次:$\theta_d<–\theta_d+\eta d \tilde{V} $
    2. 固定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}===>找到G1
      • v2:假设D0D1GD_0^*\approx D_1^*---也就是G变化很小(更新不能太频繁
        • V~=1mΣi=1mlog(D(G(zi))),zPprior(z)\tilde{V}=\frac{1}{m}\Sigma_{i=1}^{m}log(D(G(z^i))),z来自P_{prior}(z)–目标函数是一样的
          • 1mΣi=1mlog(D(xi))\frac{1}{m}\Sigma_{i=1}^{m}log(D(x^i))与生成器无关,可以不考虑
        • $\theta_G<–\theta_G- \eta d \tilde{V} $
    3. 重复到平衡

  • 生成器

    • 极大似然估计L=Πi=1mPG(xi;θ),L=\Pi_{i=1}^mP_G(x^i;\theta),
      • θ=argmaxθΠi=1mPG(xi;θ)\theta^*=argmax_\theta \Pi_{i=1}^mP_G(x^i;\theta)
      • θ=argmaxθΣi=1mlogPG(xi;θ)\theta^*=argmax_\theta \Sigma_{i=1}^mlog P_G(x^i;\theta)
      • θ=argmaxθEx Pdata(logPG(xi;θ))\theta^*=argmax_\theta E_{x~Pdata}(log P_G(x^i;\theta) )—求和近似于期望
      • =argmaxθxPdata(x)logPG(x;θ)dxxPdata(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—后面的只与真实数据有关
      • =argminθKL(PdataPG)=argmin_\theta KL(P_{data}||P_G)----=最小化KL散度(就是最小化他俩的差别KL=Div
    • 如何产生通用的PGP_G?(通过神经网络
      • G=argminθKL(PdataPG)G^* =argmin_\theta KL(P_{data}||P_G)
      • Pdata,PGP_{data}(从真实数据中),P_G(生成的采样)未知--通过采样得到
      • $D^*=-2log2+2JSD(P_{data}||P_G) $
      • G=argminGKL(PdataPG)=argminGmaxDV(G,D)G^*=argmin_G KL(P_{data}||P_G)=argmin_G max_D V(G,D)
  • 判别器

    • 希望判别器通过区分,以Pdata和以PG采样得到的数据
    • 目标函数:V(G,D)=Ex Pdata[log(D(x))]+Ex PG[log(1D(x))](GV(G,D)=E_{x~P_{data}}[log(D(x))]+E_{x~P_{G}}[log(1-D(x))] (G固定)真实的+虚假的
      • =xPdata(x)logD(x)dx+xPG(x)log(1D(x))dx=\displaystyle \int_x P_{data}(x)log D(x) dx +\displaystyle \int_x P_{G}(x)log (1-D(x)) dx
      • =x(Pdata(x)logD(x)+PG(x)log(1D(x)))dx=\displaystyle \int_x (P_{data}(x)log D(x)+ P_{G}(x)log (1-D(x))) dx
        • 假设D(x)能够是任何函数–
        • 所以D要足够强–深度神经网络
        • 最大化(Pdata(x)logD(x)dx+PG(x)log(1D(x)))(P_{data}(x)log D(x) dx + P_{G}(x)log (1-D(x)))
          • 求导:
            • d(f(D))dD=a1D+b11D(1)=0\frac{d(f(D))}{dD}=a*\frac{1}{D}+b*\frac{1}{1-D}*(-1)=0
            • a1D=b11Da*\frac{1}{D^*}=b*\frac{1}{1-D^*}
            • Dx=aa+b=Pdata(x)Pdata(x)+PG(x)D^*(x)=\frac{a}{a+b}=\frac{P_{data}(x)}{P_{data}(x)+P_{G}(x)}(在(0,1)之间
        • 带入$G^* $
          • D=maxDV(G,D)=V(G,D)=Ex Pdata[log(Pdata(x)Pdata(x)+PG(x))]+Ex PG[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)})]
          • =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+KL(PdataPdata(x)+PG(x)2)+KL(PGPdata(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+2JSD(PdataPG)=-2log2+2JSD(P_{data}||P_G)
          • JSD(PdataPG)=12D(PM)+12D(QM),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)
    • 训练:D=argmaxDV(D,G)D^*=argmax_DV(D,G)
      在这里插入图片描述

      在这里插入图片描述

最终版本

  • 训练:SGD,同时训练两组数据——深度神经网络
    • 真实的
    • 生成的
  • 优化
    • 可以一组训练跑一次时,另一组跑k次
      在这里插入图片描述

问题

  • 在开始的时候,训练较慢
    在这里插入图片描述

非饱和博弈

在这里插入图片描述

  • 更换后,极值点不变
  • 原来D=1/2时,就无法训练了,而这个里面,D=1/2时仍然可以对生成器进行训练

DCGAN

  • 反卷积生成图像
    在这里插入图片描述

不同类型的GAN

  1. 传统GAN–
    • 没有任何条件的,
    • 给定一个图片,生成类似的图片
  2. 有条件的GAN
    • 给定图片+图片里的信息(条件)
    • 传统的神经网络,容易输出一个图片的平均(不对)–用GAN
  3. 无监督有条件的GAN
    • 给定两个领域的图片
    • 由一个领域的图片可以生成另外一个领域的图片
    • 真实图片–》漫画风?

conditional GAN

  • 生成器
    • 不仅要生成火车,还要满足条件
  • 判别器
    • 判别是不是真实图片
    • 判别是不是满足条件
    • 对于真实的图片,不满足条件也输出0
      在这里插入图片描述

无监督条件GAN–cycle GAN

在这里插入图片描述

  • 直接使用会趋向于直接拿过来一个梵高的画
    1. 需要用一个网络,使得XYX \approx Y
    2. 也可以用生成器的逆过程反过来生成X’,XXX \approx X'

在这里插入图片描述

对抗学习

  • 区别
    • 一般机器学习只有一个机制点
    • 对抗学习基于博弈论
      • 有两个player
      • 一个取极大一个取极小—求个鞍点
  • 用于
    • 白天–>黑天
      • 没有真实对应的信息,只能通过对抗GAN网络生成—视频
    • 加噪音–让图片不可识别–安全(攻击分类器)
    • 通过将对抗的x’加入分类其中,提高分类器的能力(稳定性)
  • 损失函数
    • 分类器loss(θ)=C(y0,ytrue),y0=fθ(x)loss(\theta)=C(y0,y_{true})小,y0=f_{\theta}(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‘)–优化x’
    • 约束:d(x0,x)<=ϵd(x0,x')<=\epsilon看着原图没啥变化
    • 得到一个x’
      在这里插入图片描述
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!