当前位置: 首页 > 科技观察

换个角度看GAN:另一种损失函数

时间:2023-03-18 20:37:27 科技观察

JeremyHowardf曾在GenerativeAdversarialNetwork(GAN)课程中说过:“……本质上,GAN是另一种损失函数”。本文将在适当的相关背景下讨论以上几点,为大家讲解GAN的“学习型”损失函数的简单与优美。首先介绍一下相关的背景知识:从函数逼近的角度看神经网络在数学中,我们可以把函数看成是机器,把一个或多个数输入机器,机器就会相应地生成一个或多个数。将功能比作“机器”或“黑匣子”。(来源:https://www.wikiwand.com/en/Function_%28mathematics%29)如果我们能用数学公式表示函数就好了。但是,如果您不能或没有想出如何将所需的函数编写为一系列加减乘除(例如区分输入是猫图像还是狗图像的函数)怎么办?如果不能用公式表达,我们至少可以近似函数吗?神经网络来拯救。通用逼近定理指出,具有足够隐藏单元的足够大的神经网络可以计算“任何函数”。具有4个隐藏单元的简单神经网络近似于塔函数。(来源:http://neuralnetworksanddeeplearning.com/chap4.html)神经网络的显式损失函数掌握了神经网络之后,我们可以搭建一个神经网络来逐渐逼近上面描述的猫狗分类函数,而不用表达分类明确地发挥作用。为了获得更好的函数逼近能力,神经网络首先需要知道它当前的性能有多糟糕。计算神经网络误差的方式称为损失函数。损失函数已经有很多了,损失函数的选择要看具体的任务。然而,所有损失函数都有一个共同点——必须能够用精确的数学表达式来表达损失函数。L1loss(绝对误差):用于回归任务L2loss(平方误差):类似于L1,但对离群值更敏感Crossentropyerror:通常用于分类任务Diceloss(IoU):用于分割任务KLdivergence:使用衡量两个分布之间的差异...损失函数在神经网络近似特性的质量中起着非常重要的作用。对于神经网络构建者来说,理解并为特定任务选择合适的损失函数是最重要的技能。目前,设计更好的损失函数也是一个非常活跃的研究领域。例如,论文《Focal Loss for Dense Object Detection》引入了一种名为“Focalloss”的新损失函数来解决单阶段目标检测模型的不平衡问题。显式损失函数的局限性上述损失函数在分类、回归和图像分割等任务中表现良好,但在输出具有多模态分布时表现不佳。以黑白图片着色任务为例。L2损失函数的思考过程。(来源:https://youtu.be/8881p8p3Guk?t=2971)输入是一只黑白鸟,和真实图像是同一只蓝色的鸟。L2损失函数用于计算模型输出颜色与真实图像的像素级差异。接下来,输入是一只和之前实验类似的黑白鸟;真实图像是同一只红色的鸟。L2损失函数试图最小化模型输出颜色与红色的差异。根据L2损失函数的反馈,模型学习到了一只类似的鸟,但模型应该输出一种接近红色和蓝色的颜色。模型会做什么?该模型将输出一只黄色的鸟,这是最小化红色和蓝色之间距离的最安全选择,即使该模型在训练期间从未观察到黄色的鸟。由于实际上没有黄色的鸟,您知道该模型不够逼真。基于均方误差预测的下一帧图像非常模糊。(来源:https://arxiv.org/pdf/1605.08104.pdf)这种平均效应在许多情况下会导致非常糟糕的结果。以预测视频下一帧的任务为例。下一帧有多种可能性。你想要的是一个可以输出“其中一帧”的模型。但是,如果使用L2或L1训练模型,模型将对所有可能的结果进行平均,从而产生非常模糊的平均图像。GAN作为一种新的损失函数首先,你不知道一个复杂函数(比如输入是一组数字,输出是狗的真实图像的函数)的精确数学表达式,所以你使用神经网络网络来近似这个函数。神经网络需要一个损失函数来告诉它当前的表现如何,但没有明确的损失函数可以很好地完成这项工作。好吧,如果有一种方法可以直接近似神经网络的损失函数而不需要明确的数学表达式,那就太好了。像神经网络?那么,如果我们用神经网络模型代替显式损失函数呢?恭喜,您发现了GAN。通过下面的GAN架构和Alpha-GAN架构,大家可以观察的更清楚。如图,白色方框代表输入,粉色和绿色方框代表你要构建的网络,蓝色方框代表损失函数。GAN架构Alpha-GAN架构在原始GAN中只有一个损失函数——判别器网络D,它本身就是另一个神经网络。然而,在Alpha-GAN中,该模型有3个损失函数:一个用于输入数据的鉴别器D,一个用于编码潜在变量的潜在代码鉴别器C,以及一个传统的像素级L1损失函数。其中,D和C并不是显式损失函数,而只是它们的近似——神经网络。梯度如果将判别器(也是神经网络)作为损失函数来训练生成器网络(以及Alpha-GAN的编码器),那么用什么损失函数来训练判别器呢?鉴别器的任务是区分真实数据分布和生成数据分布。当以监督方式训练判别器时,标签是可选的,因此用二元交叉熵等显式损失函数训练判别器是微不足道的。但由于判别器是生成器的损失函数,这意味着判别器的二元交叉熵损失函数的累积梯度也将用于更新生成器网络。查看GAN中的梯度变化,很容易发现改变其轨迹的新想法。如果一个显式损失函数的梯度不能在两个神经网络(判别器和生成器)之间回流,但可以在三个神经网络之间回流,那么它可以应用在哪里呢?如果梯度不能通过传统的损失函数回流,而是可以直接在这些神经网络之间来回?从第一性原理开始,很容易找到未探索的路径和未回答的问题。结论通过传统损失函数和神经网络的融合,GAN使得使用一个神经网络作为损失函数来训练另一个神经网络成为可能。两个神经网络之间的巧妙交互使深度神经网络能够解决一些以前不可能完成的任务(例如生成逼真的图像)。从本质上将GAN视为学习损失函数,我希望这篇文章能帮助您了解GAN的简单性和强大功能。原文链接:https://medium.com/vitalify-asia/gans-as-a-loss-function-72d994dde4fb:almosthuman2014)”]点此阅读更多本作者好文