GAN是一种特殊的损失函数?

数据科学家Jeremy Howard在fast.ai的《生成对抗网络(GAN)》课程中曾经讲过这样一句话:安全

“从本质上来讲,生成对抗网络(GAN)是一种特殊的损失函数。”网络

你是否可以理解这句话的意思?读完本文,你会更好的理解这句话的含义。架构

神经网络的函数逼近理论app

在数学中,咱们能够将函数看作一个“机器”或“黑匣子”,咱们为这个“机器”或“黑匣子”提供了一个或多个数字做为输入,则会输出一个或多个数字,以下图所示:函数

将函数能够比喻成一个“机器”或“黑匣子”性能

通常来讲,咱们能够用一个数学表达式来表示咱们想要的函数。可是,在一些特殊的状况下,咱们就没办法将函数写成一堆加法和乘法的明确组合,好比:咱们但愿拥有这样一个函数,即可以判断输入图像的类别是猫仍是狗。学习

若是不能用明确的用数学表达式来表达这个函数,那么,咱们能够用某种方法近似表示吗?编码

这个近似方法就是神经网络。通用近似定理代表,若是一个前馈神经网络具备线性输出层和至少一层隐藏层,只要给予网络足够数量的神经元,即可以表示任何一个函数。设计

具备4个隐藏单元的简单神经网络逼近函数视频

做为损失函数的神经网络

如今,咱们但愿设计一个猫和狗的分类器。但咱们没办法设计一个特别明确的分类函数,因此咱们另辟蹊径,构建一个神经网络,而后一步一步逐渐实现这一目标。

为了更好的逼近,神经网络须要知道距离目标到底还有多远。咱们使用损失函数表示偏差。

如今,存在不少种类型的损失函数,使用哪一种损失函数则取决于手头上的任务。而且,他们有一个共同的属性,即这些损失函数必须可以用精确的数学表达式来表示,如:

1.L1损失函数(绝对偏差):用于回归任务。

2.L2损失函数(均方偏差):和L1损失函数相似,但对异常值更加敏感。

3.交叉熵损失函数:一般用于分类任务。

4.Dice系数损失函数:用于分割任务。

5.相对熵:又称KL散度,用于测量两个分布之间的差别。

在构建一个性能良好的神经网络时,损失函数很是有用。正确深刻的理解损失函数,并适时使用损失函数实现目标,是开发人员必备的技能之一。

如何设计一个好的损失函数,也是一个异常活跃的研究领域。好比:《密度对象检测的焦点损失函数(Focal Loss)》中就设计了一种新的损失函数,称为焦点损失函数,能够处理人脸检测模型中的差别。

可明确表示损失函数的一些限制

上文提到的损失函数适用于分类、回归、分割等任务,可是若是模型的输出具备多模态分布,这些损失函数就派不上用场了。好比,对黑白图像进行着色处理。

如上图所示:

1.输入图像是个黑白鸟类图像,真实图像的颜色是蓝色。

2.使用L2损失函数计算模型输出的彩色图像和蓝色真实图像之间的差别。

3.接下来,咱们有一张很是相似的黑白鸟类图像,其真实图像的颜色是红色。

4.L2损失函数如今尝试着将模型输出的颜色和红色的差别最小化。

5.根据L2损失函数的反馈,模型学习到:对于相似的鸟类,其输出能够接近红色,也能够接近蓝色,那么,到底应该怎么作呢?

6.最后,模型输出鸟类的颜色为黄色,这就是处于红色和蓝色中间的颜色,而且是差别最小化的安全选择,即使是模型之前从未见过黄色的鸟,它也会这样作。

7.可是,天然界中没有黄色的鸟类,因此模型的输出并不真实。

使用MSE预测的下一帧图像很是模糊

在不少状况下,这种平均效果并不理想。举个例子来讲,若是须要模型预测视频中下一个帧图像,下一个帧有不少种可能,你确定但愿模型输出其中一种可能,然若是使用L1或L2损失函数,模型会将全部可能性平均化,输出一个特别模型的平均图像,这就和咱们的目标相悖。

生成对抗网络——一种新的损失函数

若是咱们没办法用明确的数学表达式来表示这个损失函数,那么,咱们就可使用神经网络进行逼近,好比,函数接收一组数字,并输出狗的真实图像。

神经网络须要使用损失函数来反馈当前结果如何,可是并无哪一个损失函数能够很好的实现这一目标。

会不会有这样一种方法?可以直接逼近神经网络的损失函数,可是咱们不必知道其数学表达式是什么,这就像一个“机器”或“黑匣子”,就跟神经网络同样。也就是说,若是使用一个神经网络模型替换这个损失函数,这样能够吗?

对,这就是生成对抗网络(GAN)。

Vanilla-GAN架构

Alpha-GAN架构

咱们来看上面两个图,就能够更好的理解损失函数。在上图中,白色框表示输入,粉色和绿色框表示咱们要构建的神经网络,蓝色表示损失函数。

在vanilla GAN中,只有一个损失函数,即判别器D,这自己就是一个特殊的神经网络。

而在Alpha-GAN中,有3个损失函数,即输入数据的判别器D,编码潜在变量的潜在判别器C和传统的像素级L1损失函数。其中,D和C不是明确的损失函数,而是一种逼近,即一个神经网络。

梯度

若是使用损失函数训练生成网络(和Alpha-GAN网络中的编码器),那么,应该使用哪一种损失函数来训练判别器呢?

判别器的任务是区分实际数据分布和生成数据分布,使用监督的方式训练判别器比较容易,如二元交叉熵。因为判别器是生成器的损失韩式,这就意味着,判别器的二进制交叉熵损失函数产生的梯度也能够用来更新生成器。

结论

考虑到神经网络能够代替传统的损失函数,生成对抗网络就实现了这一目标。两个网络之间的相互做用,可让神经网络执行一些之前没法实现的任务,好比生成逼真的图像等任务。

原文连接

相关文章
相关标签/搜索