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

简介: 从本质上来说,生成对抗网络(GAN)是一种特殊的损失函数,我们来深入探索下这句话的含义。

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

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

你是否能够理解这句话的意思?读完本文,你会更好的理解这句话的含义。

神经网络的函数逼近理论

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

650a7fe0033b56b54695f852846967b8dc84142b

将函数可以比喻成一个机器黑匣子

一般来说,我们可以用一个数学表达式来表示我们想要的函数。但是,在一些特殊的情况下,我们就没办法将函数写成一堆加法和乘法的明确组合,比如:我们希望拥有这样一个函数,即能够判断输入图像的类别是猫还是狗。

如果不能用明确的用数学表达式来表达这个函数,那么,我们可以用某种方法近似表示吗?

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

8672308eef83fa304a28e427d558e68de111b1b0

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

作为损失函数的神经网络

现在,我们希望设计一个猫和狗的分类器。但我们没办法设计一个特别明确的分类函数,所以我们另辟蹊径,构建一个神经网络,然后一步一步逐渐实现这一目标。

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

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

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

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

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

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

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

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

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

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

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

b0e299239c030c28222f51937768b32b23afb958

如上图所示:

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

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

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

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

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

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

7.但是,自然界中没有黄色的鸟类,所以模型的输出并不真实。

be092af331b96d13f56f4bf3f1d5b63b0fdad917

使用MSE预测的下一帧图像非常模糊

在很多情况下,这种平均效果并不理想。举个例子来说,如果需要模型预测视频中下一个帧图像,下一个帧有很多种可能,你肯定希望模型输出其中一种可能,然如果使用L1L2损失函数,模型会将所有可能性平均化,输出一个特别模型的平均图像,这就和我们的目标相悖。

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

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

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

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

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

2d2fc4ab8095f575e6fbf3be046f15941d177c04

Vanilla-GAN架构

027c919d21c01e5f472dabb3c6acc4d843815954

Alpha-GAN架构

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

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

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

梯度

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

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

结论

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


本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《GANs as a loss function

译者:Mags,审校:袁虎。

文章为简译,更为详细的内容,请查看原文


相关文章
|
Web App开发 缓存 移动开发
V8 JS AOT化的探索与实践
JS 语言的动态性非常优秀,其弱类型等语言特性也使得一线业务开发者更容易上手,但这也导致 JS 每一次运行前都要重复编译,使得 JS 的执行性能不理想;虽然之前 UC 内核有做过 Code Cache 方案,但支持的场景不够完整,与原生 Native 的技术方案比,尤其是首次启动场景(如各类大促活动等)还是有比较大的差距。为了能尽可能做到与 Native 对标,缩小性能差距,同时让业务开发者无感,我们开发了 JS AOT 功能。本分享将结合目前集团内自有业务形态,以及 JS 在 Web 中的执行过程,介绍JS AOT是如何设计和实现的,以及能给业务带来哪些收益。本篇分享来自阿里巴巴的喻世江在第
3000 0
V8 JS AOT化的探索与实践
|
4月前
|
Linux C++ iOS开发
C++ SDL库入门指南(从零开始学习SDL2图形与游戏开发)
本教程来源https://www.vpshk.cn/带你使用C++和SDL2从零开始创建图形窗口,涵盖环境搭建、代码解析与编译运行,适合入门游戏开发与多媒体应用,轻松掌握跨平台图形编程基础。
|
人工智能 安全 数据安全/隐私保护
克劳德/claude国内能用吗?回答是: 能用! 教你两种使用方法!
Claude AI 是一款强大的对话式 AI 工具 🤖,但由于网络限制等原因 🚧,国内用户访问 Claude 的官方网站或使用集成 Claude 的第三方应用可能会遇到困难
|
机器学习/深度学习 算法 数据挖掘
深度学习中常用损失函数介绍
选择正确的损失函数对于训练机器学习模型非常重要。不同的损失函数适用于不同类型的问题。本文将总结一些常见的损失函数,并附有易于理解的解释、用法和示例
1543 0
深度学习中常用损失函数介绍
|
开发者 图形学 前端开发
绝招放送:彻底解锁Unity UI系统奥秘,五大步骤教你如何缔造令人惊叹的沉浸式游戏体验,从Canvas到动画,一步一个脚印走向大师级UI设计
【8月更文挑战第31天】随着游戏开发技术的进步,UI成为提升游戏体验的关键。本文探讨如何利用Unity的UI系统创建美观且功能丰富的界面,包括Canvas、UI元素及Event System的使用,并通过具体示例代码展示按钮点击事件及淡入淡出动画的实现过程,助力开发者打造沉浸式的游戏体验。
898 0
|
域名解析 文件存储 数据安全/隐私保护
如何利用阿里云域名远程访问家中群辉NAS(Docker容器)上的calibre、halo博客?
如何利用阿里云域名远程访问家中群辉NAS(Docker容器)上的calibre、halo博客?最近我买了一个群辉的nas,也开始慢慢鼓捣这玩意了,真好玩(啥也不会的小白,要学可的真多)。我在nas上利用docker安装了halo(个人博客)和calibre(个人书架)这两个容器。在本地的话可以利用ip地址+端口打开,但是我想在外网远程访问,这样的话问题就产生了!
1625 0
如何利用阿里云域名远程访问家中群辉NAS(Docker容器)上的calibre、halo博客?
|
机器学习/深度学习 数据采集 人工智能
人工智能中噪声数据的产生与处理方法详解
人工智能中噪声数据的产生与处理方法详解
1963 0
|
机器学习/深度学习 自然语言处理 索引
【Transformer系列(4)】Transformer模型结构超详细解读
【Transformer系列(4)】Transformer模型结构超详细解读
2442 0
【Transformer系列(4)】Transformer模型结构超详细解读
|
数据挖掘
r语言数据分析画数据相关性图热力图
r语言数据分析画数据相关性图热力图
608 1
|
机器学习/深度学习 算法框架/工具 Python
循环生成网络 CycleGan 原理介绍(二)
循环生成网络 CycleGan 原理介绍(二)
1445 0
循环生成网络 CycleGan 原理介绍(二)