ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

速通一些常见的神经网络

2026/9/20 12:22:59 拓冰建站 浏览量
速通一些常见的神经网络 intro本文章是笔者学习各种神经网络模型时候的一些记录希望能用最简洁的文字来描述各种神经网络的架构和特点如果还不了解全链接神经网络或者简单的卷积神经网络可以看看笔者之前写的这篇关于学习神经网络的一些感悟。有不正确的地方恳请各位大神不吝赐教万分感激VGG神经网络如果了解过alexnet会发现alexnet的前几层滤波器或者说卷积核大小是很大的这里解释一下一维的我们叫卷积核一次性用好几个卷积核叠加形成的类似一个三维的立体卷积核我们就叫滤波器这样的话提取到的特征是很粗糙的。所以我们就考虑采用小滤波器下图就能看到我们用的滤波器的大小都是3并且每次池化之后图像变小都会增加卷积核的个数变为原来二倍来维持信息总数这就是VGG的改进思想感受野不了解感受野的可以自行百度这里只说明其作用卷积核越大感受野越大但是在相同感受野下大卷积核需要的参数更多如果用小卷积核代替的话比如用三个3✖️3代替7✖️7并且激活函数层数也会减少这再一次说明了vgg的小卷积核的作用Resnet网络在我们设计网络的时候发现一个问题就是网络层数越深有时候反倒效果变差了这是为什么呢这是一个让人沮丧的事实一味增加网络层数并不能优化深度学习不存在了这说明在我们的网络中有一些层影响到了最终的结果。那么我们思考一种办法就是能够让我们的网络学习到哪些层不好我们主动去绕过不就可以了所以就有了残差网络其实就是把进入某个子网络之前的输入和之后的输出加起来然后之后如果我们这个子网络有点垃圾那么下面的网络就回把FX的参数调小或者变为0这样就实现的绕过那么我们不断的增加层数至少也不会比原来的效果差反正不行就绕过呗RNN网络在一些常规的机器学习或者深度学习任务中我们提到每个样本应该是独立同分布的但是思考一下所有样本都满足这个条件吗如果样本在时间轴上变化怎么办举个简单的栗子比如你要预测股票走势股票的每一步走势都是和之前密切相关的不能打乱的如果这时候再像之前那样shuffle样本或者随机取batch取训练数据是肯定不行的那么怎么让我们的网络框架在训练的时候也能考虑到之前的中间结果呢这就要用到RNN网络用递归或者循环在A这个子网络中A的输出又返回给他自己和下一步输入一起作为新的输入那么再考虑下一个样本的时候就会连带有上一个样本的信息反复来看第n个样本就会带有0.....n-1的信息这样就实现了让我们的框架学习到样本之间的前后关系LSTM网络在研究RNN网络的时候会发现一个问题我们知道在朴素RNN中第n个样本带有0.....n-1的信息如果这个n非常之大也就是我们的数据样本数量足够多就有可能会导致模型太过复杂信息界限就不够清晰了并且会有过拟合的风险。再试想在股票预测中我们目前的股票走势一定和很久之前的走势有关吗在之前的股票走势中会不会有一些比较特殊的样本点不具有参考价值还是被加了进来为了解决这个问题就有了LSTM这种网络架构实质上是RNN的一个改进在这种架构里会有选择性的舍弃掉一些之前的中间结果信息就是相当于我们预测股票走势的时候舍弃之前一个阶段的某些样本点这样就能很大程度上减轻的网络的参数负担并且可以使我们的预测变得更加精准GNNGNN也就是图神经网络。注意这里的图指的不是充满像素点的图像而是由点和边构成的抽象的图为什么要使用GNN回忆一下我们用全连接神经网络和卷积神经网络的时候接触到的文本数据或者图像数据的数据格式都非常固定比如一组图像输入我们最后都会resize一下变成相同的格式。但是对于一些比如化学分子结构道路交通预测这样的应用场景这样固定的数据格式是不能很好的解决问题的GNN可以处理三种级别的任务Graph级别点级别以及边级别分别对应了做预测时候的对象范围。GNN中每一层都干什么呢首先我们分析一下既然我们利用了图这种数据结构说明我们的模型在处理数据的时候要能够利用到点与点边与边之间的相关性所以我们需要让每一个点去整合它周围的点的特征。比如下图中这种方式我们最每个点的特征向量进行矩阵参数加权然后相加最后加一个非线性的激活函数这就完成了更新。当然在获取其他点的信息的时候也可以采用其他的方法这么看实际上GNN本质上就非常类似于全连接了即让每一个点与其他点进行整合变化。这个更新方法对于上面三种不同级别的任务都是有效的这只在于我们怎么使用这些得到的特征。比如最后我们得到了各个点的特征我们可以整合一下然后接一个全连接层做分类比如我们可以对每个点也可以进行分类诸如此类只是使用特征的方式发生了改变。其实在GNN中也有类似于感受野的概念就是一次更新这个点只能收取到它邻接点的信息那么下一次就会从他的邻接点收到它邻接点的邻接点的信息它的感受野会慢慢变大这就非常类似于CNN中感受野的慢慢变大的过程。GCNGCN也就是图卷积神经网络虽然叫做图卷积其实实质上和卷积操作没有什么关系。在GCN的每一层其实做的操作和GNN中类似。就是每个点要汇聚周围邻接点的信息而这个汇聚操作最后就可以映射到矩阵的的操作上。每个点汇聚完信息之后也可以进行激活或者接一个全连接模块进行空间向量的转换。如下图所示通过邻接矩阵与特征矩阵的相乘就可以实现简单的SUM聚合。如果想要实现平均值聚合怎么办呢可以使用这里D就是度矩阵的开方比如像这样当然这里因为既左乘又右乘所以其实是对行和列都进行平均为了避免冗余所以要开根号。GAN CycleGANGAN 也就是对抗神经网络有两个部分组成。一个是一个生成器一个是一个判别器。比如我们想要GAN给我们生成一个伪造的图片。生成器生成的结果会送给判别器去进行判断它想要骗过判别器然后生成器和判别器会为了降低自己的损失函数而对抗最后整个网络就会慢慢进化。就是这俩玩意内卷使得都变得越来越牛逼了。但是在构造数据集的时候我们会发现一件事比如我们想要训练判别器我们想要训练这个网络给我们的照片美颜就必须要有美颜之前与美颜之后的图片这样的话训练集里边的图片都必须得是一一对应的这其实是很难做到的。我们想用一堆不是分别对应的没美颜过的照片和美颜过的照片直接充当训练集那要怎么做呢CycleGan就能完成这么一个事可以看到我呢想要把马的图片转换为斑马。我们让判别器去判读我们生成的图片是否符合要求。但是如果我们的生成器就是随便生成了一个马判别器也可能会判断为真哪怕与原图像不对应。就是美颜软件给你美颜直接给你变成彭于晏了虽然很帅但是不是你本人啊。所以我们还要来一个反向操作给转换回去和原图片进行对比这样就又会产生一个损失函数就可以对这个目的进行优化。总之我们就会有四种损失生成器损失判别器损失Cycle损失转换回去对比得到的损失identity损失就是如果我们想要把马转换为斑马如果给的是一个斑马的图片生成的图片需要和原来一样。为了加强反向生成器和判别器可以设计一种循环的结构如下也就是正着做一次反着着做一次这样就对称了PatchGANPatchGAN就是判别器的一种实现它是基于感受野的。我们在以往的逻辑回归任务中最后的网络输出是一个概率值但是在PatchGAN中最后的输出仍然是一个矩阵。矩阵的每一个部分对应了感受野在原图像对应的一部分。最后的标签值也会是一个矩阵比如一个全一矩阵。TransformerTransformer实在是三言两语无法说明白希望大家能去看看详细的解析反正就是很牛逼。相比与CNN其信息收敛速度非常之快。它是一个Encode与Decode的结构。比如在机器翻译任务里边的Encode就是编码Decode就是解码他的核心是注意力机制注意力机制使用的是QKV三种矩阵。Q是查询矩阵用于查询器上下文向量的K而V就是这个token对应的向量的原始映射Q从K里边获取了信息找到了上下文之间的对应关系去修正V最终得到映射。(为什么要修正同一个Token在不同的上下文可能有不同的含义)。在整个网络架构中会有很多Tansformer层他们的连接模式有点类似于残差网络的感觉Decode中的注意力机制和Encode中有所不同它是交叉注意力机制就是会参考Encode中产生的信息而不仅仅是自己的上下文。