本
文
摘
要
最近迷上了用AI绘画,每次都像开盲盒,不知道打开的是惊喜还是惊吓。当然,对于喜欢刨根问底的我,是不会仅仅满足于使用AI,而是要弄明白AI到底是如何学会画画的。在经过初步研究后发现,AI的训练及输出涉及到机器深度学习,而其中使用到的方法又有很多,当下被最多讨论的包括卷积神经网络、CLIP、Diffusion等模型。那么这篇文章就让勤奋狗子担当主角,用大白话的方式完整梳理一遍AI学习和输出的过程。
人工智能(Artificial Intelligence, AI)
AI是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。简单来说,就是让机器拥有类似人的智慧,让它做出类似人能做出的事、甚至超越人能做出的事。
深度学习(Deep Learning, DL)
要想让一个普通的机器变成智能的机器,就要先让它学习,从一个啥都不懂的小婴儿变成博学多识又直言不讳的小可爱。机器学习按照学习方式可以分为监督学习、无监督学习、强化学习。按照研究方向主要分为决策树、随机森林、人工神经网络、贝叶斯学习等等。而深度学习(Deep Learning, DL)是以人工神经网络为基础而发展起来的一个新的研究方向,卷积神经网络(Convolutional Neural Network, CNN)是深度学习中最具代表性的模型之一。
监督下的狗子
监督学习是一种目标明确的训练方法。比如你的目标是训练你家狗子辨别出世界上所有品种的猫咪,那么你先收集了100张不同品种猫咪的图片,天天教狗子分辨哪只猫咪是什么品种。你会按照毛发颜色、体型大小、面部结构等众多方面的特征一样一样的告诉狗子,然后狗子就慢慢的总结出其中的规律,比如说如果猫咪的毛发只有黑白两种颜色,那狗子就识别出那是一只奶牛猫。但是你并不放心,于是,就重新找了20张猫咪的照片测试狗子,看看狗子是不是能判断准确,如果错误很多,就说明你之前分类特征的方法或是给狗子描述的语言不那么精确,那就再优化调整,直到狗子能通过你的测试。这个时候,狗子已经掌握了一套完整的识别方法,你就可以把狗子带到广场上摆个摊,专门用来识别猫咪品种。
使用Stable Diffusion画出的勤奋狗子得到卷积神经网络(CNN)秘笈的狗子开始无监督学习
无监督学习并没有什么明确的目标,学习的过程也不需要人类的指导。比如你觉得天天给狗子分类特征太累了,打算放养让它自己学习。于是你平时只是给狗子看大量的图片,有猫咪的,有鹦鹉的,有香蕉的,狗子不知道这些图片上画的是什么,你只告诉狗子要好好观察,其他就不管了。于是,聪明的狗子就开始研究它的主人是怎么学习的。它发现人类在识别物体时经过了三个步骤:
第一步,先识别出图片上一些明显的线条特征,比如边缘、方向;
第二步,识别出由这些线条组成的局部特征,比如猫咪的眼睛、耳朵;
第三步,将这些局部特征关联起来,就识别出了整个猫咪的形象特征。于是,狗子受到启发,发明了一套学习的算法——卷积神经网络(Convolutional Neural Network, CNN),它由3部分组成——卷积层、池化层、全连接层。简单来说,卷积层就是为了提取图像特征,池化层是为了简化、降低数据维度,全连接层对卷积层和池化层的结果进行分类运算,得出结果。可以简单理解成,先把一张图片打成稀碎,再局部识别,最后拼凑出整体形象的过程。那狗子具体是怎么学习的呢?
Image Source: Developers Breach第一步,狗子将一张图片切分成非常多小块,然后使用一个叫“卷积核”的小工具,给每一块算出一个特征值,这个计算的方法就叫做卷积,可以简单理解成乘积再求和,得出的结果就是一个数字格式的特征值。通过这个骚操作,狗子就用卷积小块的方式将图片阅读了一遍,写了一摞读书笔记,每一张笔记上都记录了图片的一些最基础的特征信息。在实际操作中,狗子会使用多个卷积核,以便做出更加全面准确的读书笔记;第二步,狗子觉得读书笔记太多太琐碎了,不好记啊,怎么办?于是它决定简化一下,将这些笔记再次分成若干块,只保留每一块当中最大的一个特征值。这样操作下来,狗子就得到了一系列更加简化的笔记,虽然会丢失了一些信息,但仍然保留了最重要的特征信息,可以区分不同物体。通常,狗子为了进一步简化笔记,会多次进行第一步和第二步操作;第三步,狗子将得出的一摞笔记都摆出来,开始逐一连接理解这些笔记,这些笔记有些告诉它颜色,有些告诉它形状,有些告诉它光泽度。于是,狗子就根据这些不同的特性画了一个多维的坐标系统,在这个坐标系统中为每一张图片上的物体找到它的坐标。比如一只香蕉的坐标,就会落在颜色——黄色、形状——半弧形、光泽度——20%的位置上,那所有香蕉的坐标都会在这个区域范围内,形成它的坐标集群。而所有猫咪的坐标,则会落在另外一个区域中。这两个区域会有部分产生交集,比如说一只橘猫如果正把身体弯成一个C形,那它的坐标则会非常接近香蕉的坐标集群。Image Source: Vox通过这种方法,狗子成功对所有物体的图片进行了学习,最终将它们归类到特定的区域。这时候,你再拿着一张它从没见过的猫咪的照片,问它这是什么,狗子就能通过上述过程,为这张新的猫咪照片生成一个坐标。狗子一看,这个坐标正好落在猫咪这个坐标集群中,于是狗子自信地告诉你:这他喵是个喵 !
进击的狗子!用CLIP模型学会了人类语言!
3年后,狗子看尽了世界上所有的图片,能够识别出任何一种物体,但是,他还有一个烦恼,那就是不能将这些物体与人类使用的语言一一对应起来,比如它知道猫是猫,香蕉是香蕉,但是并不能将猫的图片与“猫”这个文字对应起来。于是,勤奋的狗子开始积极进修人类语言,具体怎么进修呢?它使用了一种叫做CLIP(Contrastive Language-Image Pre-training)的模型来训练自己:
狗子发现,在网上的很多图片中,有很多本身就带有人类语言的描述,比如一张飞机场的照片,下面往往会配有文字:XX airport。于是狗子就把飞机这个形象与airport这个文字关联起来。在看过无数张带有飞机场和文字描述的图片后,狗子就明确的知道了,airport就等于飞机场。通过这种方法,狗子很快学会了人类的语言,将每一个词汇都能与它认得的图片对应起来。被Diffusion打通了任督二脉的狗子,终于成为了绘画大师
这个时候,狗子已经很无敌了,你随便告诉它一个词汇,它都能从自己的多维坐标系统里给你找出对应的图片。但狗子仍不满足于只是找图片,它还想要自己创作图片。于是狗子采用了一种叫做扩散(Diffusion)的方法,结合之前的CLIP模型,开始训练自己画画。Diffusion是当下最热门、最受欢迎的模型,市面上的AI绘画工具四巨头——Stable Diffusion, Disco Diffusion, Midjourney, DALL·E2都是使用的这个方法。具体怎么训练呢?
Image Source: NVIDIA Developer比如说你想让狗子创作一只猫,这个时候,狗子先找到了一些猫咪的图片,然后逐渐往图片上增加噪点,直到完全噪点化,这个过程叫做扩散;然后,狗子再从这些噪点反向操作,一步一步降噪还原猫咪的样子,这个过程叫做逆向扩散。就好像狗子先用一堆五颜六色的便利贴把猫咪的图像遮挡起来,然后再一笔一笔地画出每一块被便利贴盖住的部分。当然,狗子经过了非常多次的尝试,画了非常多的版本,直到它画出的猫咪的坐标位于猫咪的坐标集群中了,就认为它学会了创作一只以假乱真的猫咪了。经过这一系列训练,狗子的任督二脉彻底打通了。它不仅会创造一些人类已知的比较明确的图像,比如一个白胡子老头、圣诞驯鹿或是骑车子的小孩,还会天马行空地创造出许多世界上根本不存在的图像。比如一只正在钓鱼的金光闪闪的胡萝卜。狗子可不是简单的找了几张相关的图片然后用ps拼接在一起,而是从一堆噪点中逐渐清晰化,直到画出的结果能同时通过胡萝卜、金光闪闪、正在钓鱼这些特征坐标集群的验证,则认为它创作出了一张符合描述的图像。
至此,勤奋的狗子已经通过深度学习掌握了海量的图像和文字信息,并能够融汇贯通,创造出任何作品了。
一代狗子绘画大师就此诞生!撒花✿✿ヽ(°▽°)ノ✿!狗子现在还是一只年轻的狗子,还有更大的梦想要追寻,想知道狗子如何继续升级,让我们持续关注!