近 6000 字长文梳理深度神经网络结构。
先来一个省流版回答:卷积神经网络(CNN)只是深度神经网络(DNN)家族中的一员,其处理数据(如图像)的核心方式是卷积操作,因此而得名。而深度神经网络不是某一种网络,而是一个统称,它可以是任何结构的神经网络,自然CNN也包含其中。原则上,只要神经网络层数达到一定数量(当然也不是固定的)都可以称作DNN。
好了,解释完了,下面进入找茬时间,请快速从下图中找到卷积神经网络。
图片来源:https://www.asimovinstitute.org/neural-network-zoo/
是不是看起来似乎都一个样,因为这些不同的神经网络本质上都是由基本的计算单元(神经元)构成的,差别主要体现在神经元之间的链接模式,神经层的安排,权重共享和局部感知域,以及数据流向等方面。
想深入了解的请往下看。
理解神经网络中的基本概念
神经元
神经元(Neuron)是人工神经网络(ANN)的基本运算单元,它模拟通过模拟生物神经元的工作方式来处理数据。下面是一个人工神经元的基本构成和工作原理:
- 输入。输入是一组原始数据(比如图像的像素值)或前一层神经元的输出,即图中的x;
- 权重和偏置。每一个输入信号都对应着一个权重(w),它的意义是觉得哪一路信号更重要(高权值),所谓的训练模型就是不断更新这些权值。偏置(b)则是传递函数中一个独立于输入值的参数。
- 传递函数。简单说就是把所有的输入信号组合称为一个输输出值,计算方式是加权之和,再加上偏置b,即图中的net_i。
- 激活函数。传递函数计算出来的输出值,还要经过一个激活函数才能成为神经元最终的输出。它的作用是引入非线性关系,使得神经网络能模拟和学习复杂的数据模式。常见的激活函数包括Sigmoid、ReLU、Tanh等
- 输出。经过激活函数处理后的值就是该神经元的输出,它将作为输入被传递给下一个神经层的神经元。
现在已经有了一个神经元,把多个这样的神经元堆叠在一起就构成了一层神经层,而多个神经层沿着纵向继续堆叠下去,就形成了深度神经网络。所谓的“深”其实就是表达神经网络的层数的规模和每层的复杂程度。
一点最典型的神经网络由输入层(1个)、隐藏层(1个或多个)和输出层构成。比如下面这个网络就包含两个隐藏层。
不同的神经网络结构就是如何设计这些神经元的运算、连接方式,不同神经层的安排,以及数据流向等等,以达到处理各种结构数据的目的。
深度神经网络DNN——MLP
一个最基本、最典型的DNN就是多层感知机(MLP),上图中这个共4层的全连接网络就是一个多层感知机。从数据流的角度看,它是一种前馈神经网络。
- 基本结构。多层感知机包含一个输入层和一个输出层,中间则是多个隐藏层,每一层由一系列神经元组成。运算方式也如同上面讲解神经元的基础运算方式相同。除此之外,它没有更特殊的结构。
- 用途。尽管结构简单,多层感知机还是可以学习输入数据和输出数据之间的复杂关系,用于分类、回归等机器学习任务。
- 局限。它在处理高维数据(如图像)或序列数据(如时间序列数据、文本等)时,相较于专门的设计的网络结构,在效率和效果上都有很大的局限。
卷积神经网络CNN
卷积神经网络是专门被设计为用来处理“网格状”结构数据的,比如图像(2D像素网格)和时序数据(时间网格)。
- 基本结构。一个典型的CNN由卷积层、池化层和全连接层组成。
图片来源:https://sites.google.com/view/cs502project/deep-learning-for-biology-a-tutorial/deep-learning-models-dnns-cnns-rnns-autoencoders
卷积层
卷积层是CNN最核心,也是让它区别于其他NNs的地方。顾名思义,卷积层是完成卷积操作。
以图像为例,其数据是2维网格状结构,卷积计算通过卷积核(kernels或filters)在2维平面上遍历来完成。
图片来源:https://towardsdatascience.com/convolutional-neural-network-1368ee2998d3
卷积核中的数值就是神经网络的权重,也就是要学习的参数,将权重与对应输入位置的值(如果是输入层就是像素值,如果是中间层就是中间层神经元的激活值)相乘,再与偏置相加,经过激活函数,便得到了对应的输出。可以看出,其实本质上跟上面介绍的神经元的计算方式相类似,也是求加权和。
相比于传统的MLP,不同之处在于:
- 局部连接。卷积操作中相邻层的神经元是局部连接的,下一层神经元的值只取决于卷积核覆盖的窗口上的值;
- 权重共享。在一个卷积层中,使用同一个卷积核对不同区域的数据进行处理。
这两个主要差别使得卷积网络具有更少的参数数量。同时因为局部连接性,CNN能有效提取图像数据中的边缘、角点等局部特征,而随着层级的深入,学到的特征则进一步反应图像的全局模式,这种逐层建立从低级到高级的特征表示使得CNN在计算机视觉任务中表现非常好。
池化层
池化层是紧跟在卷积层之后的,它是一种降采样操作,可有效降低数据维度,进而降低模型参数量;同时保证特征的空间不变性。常见的池化操作有最大池化,平均池化。如下图演示的是最大池化,即选取窗口中的最大值最为输出。池化操作是无参数化操作。
全连接层
全连接层是CNN最后的部分,经过多层的卷积+池化层,输入数据(图像)被处理为特征图(feature maps),特征图需要被flatten(展开)为一维向量,以输入给全连接层完成接下来的具体任务(如分类)。
以上就是卷积神经网络的基本结构和工作流程。简单说,它的基本思想是使用卷积操作处理局部数据,这使得它在处理具有空间结构(如图像)的数据时具有很大的优势,能从数据中有效地学习复杂的模式,具有很好的表征能力,所以在图像分类、图像检索和目标识别和检测等CV任务上表现很好。
上一轮人工智能热潮就是以2012年的AlexNet为代表的CNN引爆的,接下来几年,各种类型的CNN层出不穷,比如GoogleNet,VGG,ResNet等等。
CNN学习资源
希望深入学习卷积神经网络的,这是几个比较好的博文和课程:
- https://cs231n.github.io/convolutional-networks/
- https://towardsdatascience.com/convolutional-neural-network-1368ee2998d3
- https://d2l.ai/chapter_convolutional-neural-networks/index.html
Transformer(以及AI大模型)
如果说卷积神经网络(AlexNet为代表)引爆了上一次人工智能的发展,那么本轮(2023年开始)人工智能变革则是由Transformer引领的。
现在我们用到的GPT等最强的AI工具都是基于大语言模型的(LLM),比如GPT-4、Llama等,这些大语言模型内部的基本结构就是Transformer。
即使你不是人工智能领域的,去年这一年也一定听说过“AI大模型”这个词。这主要是因为基于AI大模型的聊天机器人(以GPT为代表)出现之后,一下子刷新了人们对AI的认知。这东西居然能这么像人,最重要的是它可以这么好用。聊天、写文章、写代码、回答各种问题、办公、搞科研、以及作图等等,很多任务都能完成,而且完成得还很好。所以过去这一年chatbot类工具已经成为最收欢迎的AI产品,而且是各行各业都受到影响。
有的时候AI大模型比网上搜索东西更好用,因为它可以定制化的生成回答,只要把自己的情况和需求描述清楚即可。就比如对于题目这个问题,如果你没有深度学习方面的专业知识,那么向ChatGPT(以及同类AI工具)提问的时候,就可以说明自己的情况,让它讲得通俗一些。下面是它的回答:
讲得还是非常清楚的。而且你可以多轮对话的方式逐步的学习更多概念,从而把问题搞清楚。当然这是非常基础的用法,现在支持图像、语音多模态的AI大模型能做的事情远远不止于此,简单来说,对于一个任务,它很擅长做0到60%的那部分,然后你去专注做剩下的它不能完成的那部分就好。如果用的好,是可以极大提升工作和学习效率的。
Transformer基本思想
说回Transformer本身,它擅长自然语言处理,在它出现之前,RNNs,LTSM等网络模型是NLP领域的常用深度学习模型。
Transformer很关键一个技术是自注意力机制,它能够有效捕捉序列信息中长距离依赖关系,相比于以往的RNNs,在处理长序列时的表现更好。
自注意力机制的另一个特点是并行计算,因此Transformer结构让模型的计算效率更高,加速训练和推理速度。
Transformer最开始应用于NLP领域的机器翻译任务,但是它的通用性很好,除了NLP领域的其他任务,经过变体,还可以用于视觉领域,如ViT(Vision Transformer)。
Transformer学习资源
深入了解Transformer,可以参考的一些资料:
- https://blog.research.google/2017/08/transformer-novel-neural-network.html,谷歌官方团队在Transformer刚出来时的一篇博客,重点关注Transformer在机器翻译领域的应用。
- https://jalammar.github.io/illustrated-transformer/,用最直观的方式可视化讲解Transformer的原理。
- https://lilianweng.github.io/posts/2020-04-07-the-transformer-family/,系统讲述Transformer家族模型。
- https://bbycroft.net/llm,一个非常牛的可视化大模型工作原理的网站,主要是感受一下什么是“大”模型。
下图可视化的是参数数量为85584的Nano-GPT模型的工作过程。
而它跟参数数量为1750亿的GPT-3比起来,画风是这样的。
上面已经提到了MLP、CNN和Transformer三种神经网络结构,当然神经网络结构远不止这些。除此之外,常见的深度神经网络结构还有AE,VAE,RNN,GAN,GNN等等。
自编码器AE
- 基本结构。自编码器是一种用于无监督学习的神经网络结构,包括编码器(Encoder)和解码器(Decoder)两个部分。目标是通过网络学习数据的压缩表示,然后再重建数据。
- 应用场景。降维,数据去噪,特征提取等。
- AE变体。自编码器有很多形式的变体,比如变分自编码器(VAE)是自编码器的一种生成式变体,它不仅学习数据表示的编码,还学习编码的分布,使其能生成新的、类似于训练数据的实例。
- 学习资料。https://www.datacamp.com/tutorial/introduction-to-autoencoders
递归神经网络RNN
递归神经网络(Recurrent Neural Network,RNN)是一种专门用来来处理序列数据的神经网络,它在nlp、时间序列分析等领域中非常有效。
- 基本结构。RNN基本思想是利用序列的时间动态性,通过维护一个隐藏状态,也就是被称为“记忆”的机制,使得新型可以在不同时间步之间进行传递,从而捕获目前为止的所有数据的信息。RNN的基本结构包括输入层、隐藏层和输出层。核心是隐藏层,每个step的隐藏层都接收当前输入和前一时间步的隐藏层输出。
- RNN变体。为了客服计算效率和长距离依赖关系等问题,RNN发展出来很多变体,如长短期记忆网络(LSTM)、门控循环单元(GRU)等。
- 应用场景。RNN应用在NLP领域较多,用于机器翻译、文本生成等,其他领域还包括时序相关的数据分析(如股票价格预测、天气预测)、视频分析以及音乐生成等。
- 学习资料。https://dennybritz.com/posts/wildml/recurrent-neural-networks-tutorial-part-1/
生成对抗网络GAN
生成对抗网络(Generative Adversarial Networks,GANs)也是引起一番浪潮的深度学习模型。GAN 是一种生成模型,通过一种“对抗”的结构学习数据模式,进而生成全新的合成数据。
- 基本结构。GAN有两个主要部分组成:生成器(Generator)和判别器(Discriminator),这两个网络在学习过程中相互对抗,从而提高各自的性能。生成器的任务是创建数据;判别器的任务是区分生成器产生的数据和真实数据。一个类比,相当于一个人生产假币,而另一个人负责鉴别假币,他们二人在不断的“学习”过程中提高各自的能力,生成器学习如何产生越来越逼真的数据,而判别器学习如何更好地区分真伪。
- 应用场景。生成对抗网络的应用非常广泛,比如图像领域用于生成风格化照片、人脸合成等;也可用于数据增强领域,对于数据有限的情况,通过生成新的数据来扩充数据集,比如医学影像;艺术创作领域,音乐合成,以及帮助艺术家创作绘画作品等。
- 学习资料。https://machinelearningmastery.com/what-are-generative-adversarial-networks-gans/
比如,还拿学习CNN来举例。假如你刚学CNN,然后看到一个卷积神经网络的参数表,不太看得懂列出参数的都代表什么意思,那么你可以直接截图上传给ChatGPT,让它帮你讲解:
当然,有的人可能说这种简单的问题还用得着问ChatGPT,那么再假设一个场景,现在需要复现这个神经网络,你同样可以让它编写代码完成这个任务。
代码+注释一分钟就搞定了,反正比我自己写快多了。它还会在结尾提醒框架版本变化可能带来的问题。其实如果出现问题,就相关的bug向它提问,大多数情况下也能很快解决。
这个就是AI大模型工具在学习或工作过程中可能提供帮助的地方,它擅长于根据你的具体需求生成定制化的回答,就像有一个私人助手和老师在旁边,有啥问题都可以问。