生成对抗网络 GAN

  • 定义与原理

    • 目标:GAN 可以通过自动生成数据之后进行监督学习,以自动生成虚假数据

    • 我们需要一个 判别网络 来判断图片是否是真的

      • 判别网络越强,最后 ai 生成的图片越来越能以假乱真,也就是说效果越好
    • 顺序及数学表达

      • 首先通过 ai 自动生成一张图片,其必然具有噪声 noice,获取的数据集是 G(x)G(x)

      • 事实上的数据集是 xx

      • 检测函数满足 D(x)1D(x)\to 1 也就是说要让标准的判断结果接近全对

      • 同时要满足相对于 GG 而言 D(G(x))1D(G(x))\to 1; 相对于 DD 而言 D(G(x))0D(G(x))\to 0

        • 注意两者目标不同,职能接近相反
        • 举例: 对于一个理想的生成网络,我们需要满足 D(x)=pdata(x)pdata(x)+pmodel(x)D(x) = \frac{p_{data}(x)}{p_{data}(x) + p_{model}(x)} ,当我们将结果无限理想化之后,投入的 pdata=pmodel=1p_{data} = p_{model} = 1 (这里 1 或者 0 表示逻辑真假,事实逻辑分布必然是真的,而且理想训练模型结果也应该是真) 所以最终的判断结果分布应该是 12\frac 1 2 也就是真假难辨
  • 损失函数

    • 定义公式: minGminDV(D,G)=Expdata(x)[logD(x)]+Ezp[log(1D(G(z)))]\min_G \min_D V(D,G) = \mathbb{E}_{x-p_{data}(x)}[\log D(x)] + \mathbb{E}_{z - p}[\log(1-D(G(z)))]

      • 顺序是先最大化 DD 的分辨能力然后最小化 GG 的误差损失

      • 判别模型: log(D1(x))+log(1D2(G(z)))\log(D_1(x))+\log(1 - D_2(G(z))) 其中 D1(x)1D_1(x)\to 1 因为事实判断逻辑真,D2(G(x))0D_2(G(x))\to 0 因为判别能力最大化下能看出 ai 产物的问题

        • 整个式子接近 0 会更好
      • 生成模型 log(D2(G(z)))\log (D_2(G(z))) 越接近 0 更好,或者说里面更加接近于 1 更好

    • 有这两个损失函数之后我们就可以使用梯度下降来解决问题