买域名建网站,郑州做网站优化运营商,销售渠道及方式,网站编辑适不适合男生做数据科学家Jeremy Howard在fast.ai的《生成对抗网络#xff08;GAN#xff09;》课程中曾经讲过这样一句话#xff1a;
“从本质上来说#xff0c;生成对抗网络#xff08;GAN#xff09;是一种特殊的损失函数。”
你是否能够理解这句话的意思#xff1f;读完本文GAN》课程中曾经讲过这样一句话
“从本质上来说生成对抗网络GAN是一种特殊的损失函数。”
你是否能够理解这句话的意思读完本文你会更好的理解这句话的含义。
神经网络的函数逼近理论
在数学中我们可以将函数看做一个“机器”或“黑匣子”我们为这个“机器”或“黑匣子”提供了一个或多个数字作为输入则会输出一个或多个数字如下图所示 一般来说我们可以用一个数学表达式来表示我们想要的函数。但是在一些特殊的情况下我们就没办法将函数写成一堆加法和乘法的明确组合比如我们希望拥有这样一个函数即能够判断输入图像的类别是猫还是狗。
如果不能用明确的用数学表达式来表达这个函数那么我们可以用某种方法近似表示吗
这个近似方法就是神经网络。通用近似定理表明如果一个前馈神经网络具有线性输出层和至少一层隐藏层只要给予网络足够数量的神经元便可以表示任何一个函数。 作为损失函数的神经网络
现在我们希望设计一个猫和狗的分类器。但我们没办法设计一个特别明确的分类函数所以我们另辟蹊径构建一个神经网络然后一步一步逐渐实现这一目标。
为了更好的逼近神经网络需要知道距离目标到底还有多远。我们使用损失函数表示误差。
现在存在很多种类型的损失函数使用哪种损失函数则取决于手头上的任务。并且他们有一个共同的属性即这些损失函数必须能够用精确的数学表达式来表示如
1.L1损失函数绝对误差用于回归任务。
2.L2损失函数均方误差和L1损失函数类似但对异常值更加敏感。
3.交叉熵损失函数通常用于分类任务。
4.Dice系数损失函数用于分割任务。
5.相对熵又称KL散度用于测量两个分布之间的差异。
在构建一个性能良好的神经网络时损失函数非常有用。正确深入的理解损失函数并适时使用损失函数实现目标是开发人员必备的技能之一。
如何设计一个好的损失函数也是一个异常活跃的研究领域。比如《密度对象检测的焦点损失函数Focal Loss》中就设计了一种新的损失函数称为焦点损失函数可以处理人脸检测模型中的差异。
可明确表示损失函数的一些限制
上文提到的损失函数适用于分类、回归、分割等任务但是如果模型的输出具有多模态分布这些损失函数就派不上用场了。比如对黑白图像进行着色处理。 如上图所示
1.输入图像是个黑白鸟类图像真实图像的颜色是蓝色。
2.使用L2损失函数计算模型输出的彩色图像和蓝色真实图像之间的差异。
3.接下来我们有一张非常类似的黑白鸟类图像其真实图像的颜色是红色。
4.L2损失函数现在尝试着将模型输出的颜色和红色的差异最小化。
5.根据L2损失函数的反馈模型学习到对于类似的鸟类其输出可以接近红色也可以接近蓝色那么到底应该怎么做呢
6.最后模型输出鸟类的颜色为黄色这就是处于红色和蓝色中间的颜色并且是差异最小化的安全选择即便是模型以前从未见过黄色的鸟它也会这样做。
7.但是自然界中没有黄色的鸟类所以模型的输出并不真实。 在很多情况下这种平均效果并不理想。举个例子来说如果需要模型预测视频中下一个帧图像下一个帧有很多种可能你肯定希望模型输出其中一种可能然如果使用L1或L2损失函数模型会将所有可能性平均化输出一个特别模型的平均图像这就和我们的目标相悖。
生成对抗网络——一种新的损失函数
如果我们没办法用明确的数学表达式来表示这个损失函数那么我们就可以使用神经网络进行逼近比如函数接收一组数字并输出狗的真实图像。
神经网络需要使用损失函数来反馈当前结果如何但是并没有哪个损失函数可以很好的实现这一目标。
会不会有这样一种方法能够直接逼近神经网络的损失函数但是我们没必要知道其数学表达式是什么这就像一个“机器”或“黑匣子”就跟神经网络一样。也就是说如果使用一个神经网络模型替换这个损失函数这样可以吗
对这就是生成对抗网络GAN。 我们来看上面两个图就可以更好的理解损失函数。在上图中白色框表示输入粉色和绿色框表示我们要构建的神经网络蓝色表示损失函数。
在vanilla GAN中只有一个损失函数即判别器D这本身就是一个特殊的神经网络。
而在Alpha-GAN中有3个损失函数即输入数据的判别器D编码潜在变量的潜在判别器C和传统的像素级L1损失函数。其中D和C不是明确的损失函数而是一种逼近即一个神经网络。
梯度
如果使用损失函数训练生成网络和Alpha-GAN网络中的编码器那么应该使用哪种损失函数来训练判别器呢
判别器的任务是区分实际数据分布和生成数据分布使用监督的方式训练判别器比较容易如二元交叉熵。由于判别器是生成器的损失韩式这就意味着判别器的二进制交叉熵损失函数产生的梯度也可以用来更新生成器。
结论
考虑到神经网络可以代替传统的损失函数生成对抗网络就实现了这一目标。两个网络之间的相互作用可以让神经网络执行一些以前无法实现的任务比如生成逼真的图像等任务。 原文链接 本文为云栖社区原创内容未经允许不得转载。