障眼法修行指南:GAN是怎样一步步学会“骗人”的?

2023-12-14 06:50

本文主要是介绍障眼法修行指南:GAN是怎样一步步学会“骗人”的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=gif 640?wx_fmt=jpeg

算法,就像是武林绝学中的“内功”,是计算机领域最重要的基石。不过,算法多了也很麻烦。不断推陈出新的算法是否更新更快更好,大厂各执一词,评价褒贬不一。


没有“内功”,不可能成为高手;“内功”多了,难免走火入魔。


或许搞清楚一种算法是在何时以何种方式何种面貌进化的,能更清晰地理解它的现在和未来。


今天的算法简史,就从火遍整个AI圈的机器学习模型GAN说起。


640?wx_fmt=png


从传统模型到逼真的GAN2.0,

生成算法经历了哪些变化?


生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,作为在无监督学习上最具前景的算法之一,最早是在2014年由学者Ian J. Goodfellow等人提出的。


在GAN所代表的深度学习之前,已经有很多生成模型。但这种模型是从概率统计角度出发的,指的是用于随机生成可观测数据的模型,很难直接描述和建模。让科研人员在遇到了不少挑战。


比如说传统的图像生成模型,将图像表示为一个随机向量,其中每一维都代表一个像素值,然后假设自然场景中的图像都服从一个未知的分布规则,再通过一些观测样本来估计其分布。


显然,这种难以描述和直接建模的生成模型,让科研人员遇到了不少挑战。最为重要的一点是,系统无从判断预测结果的质量。


640?wx_fmt=png


而原始版GAN(我们称之为GAN1.0),就在深度学习的浪潮下应运而生。


GAN1.0不仅可以利用深层神经网络模拟任意函数的能力,让复杂的分布判断得以被建模,而且增加了判别器。


于是“生成器网络”和“判别器网络”互相博弈,一个不停地捕捉数据产生新样本,一个不停提出质疑和挑战来判断所生成的样本是否真实。通过自我对抗不断改进,最终达到很好的输出结果。


640?wx_fmt=png

生成高分辨率名人相,作者Karras et. Al


可以说,GAN开启了生成算法的“实用时代”。当然,它并非是十全十美的,针对GAN1.0一些尚未解决的问题,还产生了不少变种算法。


比如Alec Radford et. Al对GAN做了一些架构上的优化,使用超参数和优化器改进之后,可以得到足以乱真的卧室图片。


640?wx_fmt=png


如果说GAN1.0的生成能力已经令人五体投地,那么最近英伟达研究人员推出的升级版GAN(我们称之为GAN2.0),更是足够让人献上一年份的膝盖。


GAN2.0采用了基于风格的生成器新结构,可以将面部细节分离出来,通过模型进行单独调整,生成的面部图像结果大幅度超越了GAN1.0和其他模型。


之所以如此牛叉,一是因为GAN2.0可以更好地感知图像之间有意义的变化,并对其进行引导,让生成的人脸更逼真,而且还能用于汽车、动物、风景图像的生成。


640?wx_fmt=png


历史脉络梳理清楚了之后,不难看出,深度学习为更高拟真度的生成算法奠定了基础和可能。而GAN的对抗性及其应用价值,又让图像生成算法成为了一门人人趋之若鹜的神器。


GAN的一小步,

图像生成的一大步


那么,GAN模型发展到现在,到底经历了什么样的变化,又从无到有地获得了哪些能力呢?


主要集中在以下几个方面:


1.找重点。GAN2.0采用的生成器架构,提取的图像风格不再是笔划或颜色空间这种僵硬的数据,而是图像的组成和脸部物理特征等泛属性,因此可以感知到图像之间哪些变化是有意义的(耳朵的形状),哪些特征无需重点关注(衬衫的颜色),因此比例的控制更细腻,生成的效果自然也就越逼真。


2.排除法。图像中很多随机且不起重要影响的细节,比如毛发、雀斑的具体位置等等,只要符合基本的规则分布,GAN2.0可以自主将一些随机变化剔除。


3.省资源。GAN2.0可以将完整的特征图像进行缩放,这意味着,在没有明确指导的自主学习环境下,系统能够自行判断使用全局或本地通道,从而大大提高了整体效率。


640?wx_fmt=png

GAN可以改变图像中的季节


这背后隐藏着的,正是算法的本源价值——那就是将严谨的科学求证思维,与务实的工程方法相结合,解决问题的一种最佳方案。


而具体到生成任务上时,算法的“优越性”往往体现在三点:一是能够更准确地判断和预测刺激的位置;二是可以进行更小粒度地调整,让结果更自然;最后是更具想象力和创造力,让算法发挥的空间更大。


显然,GAN的发展正符合人类接近生成任务所面临的问题时,应该遵循的基本规则。


GAN身上映射的算法进化论


GAN这一算法的进化,带来了很多热辣新鲜的想象力。


除了我们熟悉的仿真人脸、语义分割、声音处理等常规应用之外,还有一些因模糊而具有庞大想象空间的炫酷应用。


比如,谷歌大脑用GAN让神经网络学会联想。系统可以在完全不相关的图像中,发现一些与狗、房子、鱼等物体的相似之处,然后凭借自己的“想象力”将其呈现出来。这些奇幻的画作,既是一种机器创作的“先锋艺术”,更代表着很多人类思维也无法企及的奇幻世界正在被机器路径打开。


640?wx_fmt=png


另外,在GAN的作用下,能自主模仿人类动作的智能体正在成为可能。以往的算法总是需要海量规模的数据集和大量训练才能够有比较优秀的表现。但在模仿学习中,智能体无需奖励机制就可以自主进行学习。


更夸张的 是,机器不仅无需奖励,甚至可以凭借“好奇心”这一信号去主动探索,这使得机器的学习成本、探索范围、学习效率都要比其他方式要强得多。


总而言之,GAN的进化让我们清晰地感受到了机器学习的模式和成本都在发生颠覆式的改变。

 

这背后隐藏着两个算法进化的核心特点:


1.自主学习,“无监督”比有监督更有潜力。从GAN1.0初问世的火爆,到GAN2.0的逆天突破,可以看出,能够在无需任何监督信息的情况下自主完成训练,这样能够自我进化的算法,才是通用人工智能的基石。


2.效率至上,抛弃效率谈智力都是耍流氓。实验室里的算法未必能够满足商业应用的长期需要,在实践中,可能要经历成本昂贵的磨合及试错过程,必须解决效率问题。GAN的进化过程,就是一个从调用全栈资源,到懂得合理分配控制空间,懂得“过日子”的算法才适用于通用智能化的现实世界。


GAN3.0未来可能的样子


话题进行到这里,或许我们可以设想一下,如果未来还将出现GAN3.0,它会是什么样子?


这里不妨大开脑洞一下:


首先,GAN3.0一定是在2.0基础上各个维度的再升级,加上机器“想象力”的加持,效果将不再局限于高精度模拟人脸或者是模拟现实世界,创造出毫无违和感的全新物种,成为新“造物主”都是极有可能的。


另外,GAN3.0对样本规模和精度的要求更低,这就使少样本预测成为可能,这也意味着随着英伟达、谷歌等不断开发自己的数据集,很多小型公司也有可能掌握迭代和优化系统的能力。也许,GAN3.0的提出者,现在还在车库里默默写代码呢。


这一可能性也带来了竞争关键点的变化,未来研究者和使用者PK的重点,可能在创造力上。如何应用更强大的对抗生成网络解决更复杂的机器智能问题,考验的并不是算法本身的强弱,而是一种思维和方法论。


常有AI开发者感慨,每次都感觉用的是别人家的GAN,即便是相同的代码和数据集,自己也从来没有做出过相同的效果。你和别人之间是不是只差一个算法,自己心里没点数吗?


640?wx_fmt=png


殊途同归,如果真有GAN3.0,它也会回归“算法”的本质,那就是理解和演绎数字世界的逻辑思维和工程手段。


也因此,掌握了某一个先进的算法,并不意味着就能捧回世界冠军的冠冕,决定技术生命力的,是不断精进的“内功”。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=gif

640?wx_fmt=jpeg

这篇关于障眼法修行指南:GAN是怎样一步步学会“骗人”的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491551

相关文章

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

如何掌握面向对象编程的四大特性、Lambda 表达式及 I/O 流:全面指南

这里写目录标题 OOP语言的四大特性lambda输入/输出流(I/O流) OOP语言的四大特性 面向对象编程(OOP)是一种编程范式,它通过使用“对象”来组织代码。OOP 的四大特性是封装、继承、多态和抽象。这些特性帮助程序员更好地管理复杂的代码,使程序更易于理解和维护。 类-》实体的抽象类型 实体(属性,行为) -》 ADT(abstract data type) 属性-》成

为何我建议你学会抄代码?

文章目录 为何我建议你学会抄代码?一、引言二、抄代码的艺术1、理解抄代码的真正含义1.1、抄代码的好处 2、如何有效地抄代码2.1、发现问题2.2、整理需求2.3、造轮子标准流程 三、抄代码的实践案例1、发现问题2、整理需求3、设计重试机制4、实现重试工具类5、使用重试工具类6、优化和扩展 四、总结 为何我建议你学会抄代码? 一、引言 在编程的世界中,“抄代码” 常被视为一

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

LabVIEW程序员是怎样成长为大佬

成为一名LabVIEW编程领域的“大佬”需要时间、实践、学习和解决复杂问题的经验。尽管LabVIEW作为一种图形化编程语言在初期可能相对容易上手,但要真正成为精通者,需要在多个层面上深入理解。以下是LabVIEW程序员如何逐步成长为“大佬”的路径: 1. 打好基础 LabVIEW的大佬们通常在初期会打下非常坚实的基础,理解LabVIEW编程的核心概念,包括: 数据流编程模型:Lab

Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentLinkedDeque

文章目录 ConcurrentLinkedDeque特点构造方法常用方法使用示例注意事项 ConcurrentLinkedDeque ConcurrentLinkedDeque 是 Java 并发工具包(java.util.concurrent 包)中的一个线程安全的双端队列(Deque)实现,实现了 Deque 接口。它使用了链表结构,并且针对高并发环境进行了优化,非常适合

使用Nginx部署前端Vue项目的详细指南

在本文中,我们将详细介绍如何使用Nginx部署一个前端Vue项目。此过程涵盖Vue项目的构建、Nginx的安装与配置、以及最后的项目启动。下面是步骤的详细说明。 步骤 1: 准备你的Vue项目 确保你已经创建并构建了一个Vue项目。如果你尚未创建Vue项目,可以使用以下命令创建一个: # 安装Vue CLInpm install -g @vue/cli# 创建一个新的Vue项目vue c

入门指南 | Datavines 安装部署篇

摘要:本文主要介绍基于源码部署 Datavines 和执行检查作业,内容主要分为以下几个部分: 平台介绍快速部署运行数据质量检查作业 Datavines 的目标是成为更好的数据可观测性领域的开源项目,为更多的用户去解决元数据管理和数据质量管理中遇到的问题。在此我们真诚欢迎更多的贡献者参与到社区建设中来,和我们一起成长,携手共建更好的社区。 https://github.com/dat