尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

一文理清全连接、前馈、卷积与循环神经网络的关系与选型

一文理清全连接、前馈、卷积与循环神经网络的关系与选型 很多朋友第一次接触神经网络时看到全连接神经网络、前馈神经网络、卷积神经网络、循环神经网络这一排名词第一反应多半是打开文档逐个背定义。我当年也是这么干的结果背完第三天就混成了一锅粥。后来真正把思路捋顺了才发现这四个词压根不在一个维度上——它们的关系不是四个并列的同学而是两个家族加两条技术路线。这篇文章我想站在从业者的角度把这四种主流神经网络的结构逻辑、适用场景和选型经验一次性讲透。如果你是刚入门深度学习的初学者或者在数学建模、项目开发里被这些概念绕晕过这篇文章能帮你把碎片化的知识串成一张完整的脑图。文章里不堆公式重点讲清楚为什么这么设计以及实际项目里怎么选看完你至少能回答三个问题它们各自解决什么问题它们之间是什么关系拿到一个真实任务时该用哪一个1. 先理清几个概念的真实血缘关系1.1 一个被很多人忽略的维度差异先问一个问题全连接神经网络和前馈神经网络是并列关系吗答案可能会让不少人意外不是。前馈神经网络描述的不是一种具体的网络结构而是一个类别——只要信息在网络里从输入到输出单向流动、没有环状反馈不管中间有几层、层内怎么连接都可以叫前馈神经网络。全连接神经网络也就是常说的多层感知机满足这个条件卷积神经网络也满足这个条件所以它们俩都是前馈家族的成员。那循环神经网络呢它走了另一条路。循环网络内部存在环状的连接上一时刻的信息会传递到下一时刻也就是说网络本身记住了过去的状态。按信息流向这个维度来分循环神经网络和前馈神经网络才是真正的一对反义词。我把这层关系画成一句大白话前馈是家族名全连接和卷积是家族里的两种具体结构循环是另一个家族的名字。很多教程把四个词并列排成一排这种呈现方式本身就容易让人误解。你只要把维度搞清楚后面所有细节都能顺着这个框架往里装。1.2 区分神经网络的三个关键维度既然要建立坐标系我把平时判断一种网络属于什么类型时最常用的三个维度列出来信息流向前馈单向还是循环有环、有记忆。这是最根本的维度决定网络能否处理序列依赖。连接方式层间是全部神经元互相连接全连接还是局部区域连接并共享参数卷积。这个维度决定了参数的规模和对空间结构的利用效率。数据形态网络天然适合处理的是向量表格、网格图像还是序列文本、语音、时间序列。数据形态往往直接决定了网络类型的选择。这三个维度组合起来就能解释绝大多数为什么用这个不用那个的问题。比如最常见的追问图像处理为什么用CNN不用前馈神经网络答案在第二个维度里——全连接处理图像会导致参数爆炸而CNN用局部连接和权值共享把参数量压缩了几个数量级。这个具体过程我在第四章详细拆。1.3 理清关系之后的学习路径我见过很多朋友学神经网络上来就背LeNet、VGG、ResNet的结构图背完一头雾水。我的建议是反过来先把这几类网络的血缘关系刻在脑子里再去看具体模型先用全连接网络理解神经网络的共性前向传播、反向传播、激活函数是怎么工作的。再通过卷积神经网络理解如何利用数据的空间结构来减少参数。最后通过循环神经网络理解如何利用数据的时间结构来建立记忆。这套顺序走下来你对任何一个新模型的接受速度都会快很多因为新模型无非是在这三个维度上做组合与变形。2. 全连接神经网络所有复杂网络的地基2.1 从感知机说起为什么一层不够全连接神经网络的历史起点是1958年的感知机。感知机只有一个神经元做的事情非常朴素把输入向量的每个分量乘一个权重再求和加上偏置经过一个阶跃函数输出0或1。它能解决线性可分的问题比如判断一封邮件是正常还是垃圾假设两类能用一条直线分开但它对经典的异或问题无能为力——因为异或问题在二维平面上压根不可能用一条直线划分。这个缺陷在当年一度让神经网络研究陷入低潮直到后来人们发现在输入和输出之间加上一层隐藏层并用非线性的激活函数sigmoid、tanh替换阶跃函数网络就能拟合复杂的非线性决策边界。这就是多层感知机也就是今天说的全连接神经网络。它的核心能力可以概括为一句话理论上只要隐藏层神经元足够多全连接网络可以以任意精度逼近任何一个连续函数——这就是著名的万能逼近定理。我经常跟朋友打一个比方全连接网络就像一台万能搅拌机。你把一堆数字倒进去它通过层层加权、偏置、激活函数的组合总能给你搅出一个想要的结果。至于这个结果好不好取决于你给它的数据够不够、结构设计得合不合理。2.2 一次前向传播到底做了什么运算假设输入是一个三维向量 x [x1, x2, x3]第一层有4个神经元那么这一层会维护一个形状为 (3, 4) 的权重矩阵 W 和一个形状为 (4,) 的偏置向量 b。前向传播做的事情就是h activation(x · W b)得到的 h 是一个4维向量它作为下一层的输入继续传下去直到输出层。整个过程里每一层做的事情可以被拆成两步线性变换x · W b本质是对输入做了一次旋转和缩放。这一步步数学上还是线性的。非线性激活activation 函数ReLU、sigmoid、tanh等把线性变换的结果做一次非线性扭曲。这里有个关键点值得多说一句激活函数必须是非线性的。如果去掉激活函数无论网络叠多少层最终都等价于一次线性变换因为线性变换的复合还是线性变换。那就完全丧失了拟合复杂函数的能力。这也是很多初学者最容易忽略的原理。全连接网络里还有一个绕不开的核心概念是反向传播BP。很多人觉得BP高深其实它的本质就是高数里的链式法则从损失函数出发往前一层一层求梯度然后用梯度下降更新每一层的权重。我当年在MATLAB里拿BP神经网络做曲线拟合时就深刻体会到这套机制就像一个责任追溯系统——预测错了就从输出层往前追溯看每一层该为这个错误分担多少责任梯度再按比例调整权重。基金热词里提到bp神经网络拟合曲线matlab那正是BP网络最常见的应用场景之一给一堆散点数据网络自己学出一个函数去拟合它们。2.3 全连接网络的优势与边界全连接网络的优势很明确结构简单实现门槛低从零手写一个能跑起来的版本不难。万能逼近能力强对表格类数据、中小规模特征向量的分类回归问题非常可靠。是所有复杂网络的基本组成模块现在大模型里的注意力机制、分类头底层都离不开全连接层。但它的缺点同样明显参数冗余严重。输入维度稍微一高参数量就会爆炸。不利用数据的空间结构。给它一张图片它只会把像素一维展开完全忽略相邻像素往往相关这个重要先验。没有记忆能力。处理序列数据时它根本不知道谁是第一个词、谁是第二个词。这也是为什么实际工程里很少看到一个纯粹由全连接层堆起来的深度网络去做图像和文本任务——不是因为全连接不好而是因为它不识时务浪费了数据里的结构信息。3. 前馈神经网络一条划开家族边界的线3.1 前馈的严格含义信息不准回头前馈英文叫feedforward字面意思是向前馈送。它的数学定义非常苛刻网络可以被划分成若干层第 l 层的输出只作为第 l1 层的输入第 l1 层的计算绝不依赖第 l 层之后的信息也不依赖自身的循环输出。换句话说数据从输入层进入经过一层层变换从输出层离开全程没有回头路也没有横向的跨层反馈。这就好比一条单行道车只能从起点开到终点不允许中途掉头回到已经过的地方。而循环神经网络则是建了一个大环岛车可以在里面绕圈当前时刻的行驶状态会影响下一时刻。这个概念之所以重要是因为它划定了能并行训练和不能并行训练的边界。前馈网络的每一层只依赖上一层的输出所以天然可以按层做并行计算训练效率高循环网络存在时间维度的依赖当前时刻要等上一时刻计算完串行程度高训练起来就慢得多。3.2 为什么说全连接和卷积都属于前馈家族你可能会想全连接和卷积这两类网络在结构上差异那么大怎么能放在同一个家族里其实判断标准很简单只看信息流向不看连接方式。全连接网络里每一层接受上一层的输出处理后传给下一层没有环所以是前馈。卷积网络里数据经过卷积层、池化层、全连接层一路向前流动也没有环所以同样是前馈。也就是说前馈这个家族名下至少住了两个主要成员全连接前馈网络多层感知机和卷积前馈网络CNN。还有一些更细分的变体比如脉冲神经网络在特定设定下也属于广义前馈的范畴但在日常讨论里你只要记住这两个核心成员就够了。3.3 教科书里为什么要单独强调前馈很多人在看邱锡鹏老师那本《神经网络与深度学习》或者李航老师的统计学习方法时会看到前馈神经网络被单列一章。为啥一个家族名值得单独拿出来讲因为在数学上前馈神经网络被定义为一个关于输入的复合函数F(x) f_L(f_{L-1}(...f_1(x)...))。这个复合函数结构清晰可以用链式法则严格做梯度推导是理解所有深度学习模型的起点。只要你理解了前馈过程是怎么把数据一步步编码进隐藏层表示里的后面再学CNN、Transformer本质上都是在理解如何设计更高效的f。所以不要把前馈神经网络理解成一种具体的网络它更像一条中轴线左边串着全连接右边串着卷积再往远处延伸还能串到Transformer。理解了这条中轴线你再看各种论文里的模型结构图会发现它们都是在这条中轴线上做文章。4. 卷积神经网络把看图像这件事翻译给机器4.1 图像处理为什么不能用全连接网络先算一笔账。一张 256×256 的彩色图片展开成一维向量后是 256×256×3 196608 个像素值。如果第一层用1024个神经元做全连接那么这一层的权重数量就是 196608 × 1024 ≈ 2亿。这还只是第一层。训练这么多参数不仅需要海量数据还极其容易过拟合当年早期的全连接网络在图像任务上基本跑不动。更本质的问题在于全连接网络把图片当成了一个没有空间关系的长向量它根本不知道像素A和像素B挨在一起意味着什么。而图像的数据结构里最值钱的恰恰是局部性——相邻像素往往属于同一个物体、同一条边缘、同一种纹理。全连接网络把这个先验信息扔掉了。卷积神经网络的设计哲学就是利用图像的局部相关性和位置无关性用三个关键机制把参数量从亿级压到几千局部感受野、权值共享、池化。4.2 三大核心机制CNN的立身之本第一个机制局部感受野。生物视觉皮层里的神经元就是这样工作的——每个神经元只对视野里的一小块区域有反应而不是看整幅图。CNN模仿了这一点每个卷积核只覆盖输入的一小片窗口比如3×3或5×5对局部区域做加权求和。卷积核扫过整张图时不同位置的像素共享同一套权重这就是权值共享。权值共享是CNN参数少的核心原因。一个3×3的卷积核只有9个权重加上偏置就是10个参数它像一把模板尺子在整个图像上滑动检测同一种局部特征——比如竖直边缘、水平边缘、某个角点。用K个卷积核就能检测K种局部特征。这非常符合图像的规律一只猫的边缘特征在图片左上角和右下角是相似的没必要在不同位置用不同的权重。第二个机制池化。池化的作用是降采样。一个2×2的最大池化把窗口里最大的那个值取出来其他丢掉。这样做的好处有两点一是把特征图的尺寸缩小计算量直接减半以上二是让特征对微小的平移更鲁棒——猫往左挪了两个像素最大池化之后的值可能压根不变。第三个隐藏机制多层堆叠。浅层卷积核学到的是边缘、纹理等底层特征中层卷积核把这些边缘组合成局部形状深层卷积核则学到完整的目标部件。这个从局部到全局、从边缘到语义的层级结构和人类看图的方式高度一致——我们都是先看到线条和色块再认出这是眼睛、鼻子、整张脸。4.3 一个经典结构拆解开LeNet-5热词榜里出现了LeNet-5这是1998年Yann LeCun等人提出的手写数字识别网络也是CNN历史上最有名的开山之作。我把它每层的作用和输出尺寸列一张表你就能直观感受到卷积网络如何一步步把图像压缩成分类结果。层名类型输出尺寸作用输入层图像32×32×1手写数字的灰度图C1卷积层28×28×6用6个5×5卷积核提取底层特征S2池化层14×14×62×2平均池化降低分辨率C3卷积层10×10×16用16个5×5卷积核提取更高层特征S4池化层5×5×16继续降采样C5卷积层1×1×120卷积核尺寸等于输入展开成120维特征F6全连接层84将特征映射到84维输出层全连接10输出10个类别的得分注意一个细节LeNet里卷积核是5×5输入32×32所以第一层卷积后尺寸变成28×28。这个尺寸关系有个公式输出尺寸 (输入尺寸 - 核尺寸 2×填充) / 步长 1。后面你看任何CNN结构图都可以用这个公式自己验算一遍这是读懂各种网络结构最重要的基本功。4.4 CNN不是万能的它的偏见与边界CNN靠局部性先验赢了图像任务但这个先验在某些场景下也会变成限制。比如全局特征特别重要的任务像整幅图的布局判断或者图像尺寸、物体尺度变化极大的时候CNN的感受野可能不够就得靠加深网络、空洞卷积、特征金字塔这些手段去弥补。这几年Vision Transformer直接用全局自注意力机制屠榜了不少图像任务也说明只看局部不一定是图像的终极答案。但这并不影响CNN在工程界的地位。它对算力要求低、可解释性强、部署生态成熟在移动端和边缘设备上依旧是图像任务的首选。我自己的经验是除非你有充足的理由和算力去上Transformer否则图像任务用CNN起步一定不会错。5. 循环神经网络让网络拥有记忆的时间折叠5.1 序列数据带来的新难题前面讲的网络处理的数据都是一整块——一张图、一个特征向量所有维度同时喂进去顺序无所谓。但现实里有大量数据是有前后顺序的一句话里的词序决定语义我不喜欢吃苹果和苹果不喜欢吃我、股票价格的历史走势、语音信号的时间帧。这类数据统称为序列数据它们有一个共同点当前时刻的输出依赖过去时刻的信息。让前馈网络处理序列数据会有两个致命问题。第一它把输入当成无序的集合直接丢失时序关系第二输入长度一变网络的参数量也跟着变没法处理不定长的序列。你总不能给每个句子长度都重新训练一个网络。循环神经网络RNN的解法很直接给网络加一个内部状态用向量表示这个状态会随时间步不断更新携带过去的信息往前走。5.2 RNN的计算逻辑同一套权重在不同时刻复用RNN的计算公式看起来比前馈网络多了一项h_t tanh(W_hh · h_{t-1} W_xh · x_t b)其中 h_t 是当前时刻的隐藏状态h_{t-1} 是上一时刻的隐藏状态x_t 是当前时刻的输入。把每个时间步的公式展开你会发现一个关键设计所有时间步共用同一套权重 W_hh 和 W_xh。为什么权重要共享因为序列不同位置的规律往往是一样的。比如在中文里不管猫出现在第1个词还是第10个词它作为名词的语法属性不变。共享权重让模型能够把在一个位置学到的规律迁移到其他位置同时也大幅减少参数量。这正是RNN处理变长序列的核心能力。我给你一个具体的场景做一个根据前几个字预测下一个字的语言模型。输入的词是今天天气真网络依次吃进今天天气真每吃一个字都会更新一次隐藏状态。第一时刻的隐藏状态携带了今的信息第二时刻同时看到今和天……到了第五时刻隐藏状态里已经浓缩了前面所有词的信息再通过一个全连接输出层映射到词表上得到下一个最可能的字比如好。这就是一个最简RNN语言模型的完整推理过程。这种链式结构让我想起人读一句话时的体验——你不是把每个字单独看的而是边读边在脑子里积累到目前为止说了什么。RNN就是把这个积累过程显式建模了。5.3 RNN的阿克琉斯之踵梯度消失RNN看起来很美但真正大规模使用时很快就暴露了问题长序列上它学不动。原因在于RNN沿时间维度展开后是一个很深的网络反向传播时梯度要从最后一个时刻一路传回第一个时刻。这个过程中梯度要么指数级缩小梯度消失要么指数级爆炸梯度爆炸。梯度消失意味着早期的信息根本传不到后期网络实际上记不住太久以前的事。这就是学术界常说的长期依赖问题。LSTM长短时记忆网络就是来治这个病的。它的关键改动是引入了门控机制遗忘门决定要丢弃哪些旧信息输入门决定要写入哪些新信息输出门控制此刻要输出什么。更重要的是LSTM内部有一条贯穿所有时间步的记忆单元传送带信息可以在这条传送带上近乎无损地流动梯度也能顺着它传回很远。我第一次看LSTM的门控结构也觉得绕后来用一个生活比喻就通了好比你要写一本很长的日记每天你会选择性遗忘一些不重要的事遗忘门记下一些重要的事输入门然后在写当天总结时只翻出和当天主题最相关的记忆输出门。这样过去的重要事情即便隔了很久也可能还留在你的长期记忆里。5.4 从RNN到Transformer记忆还在但路径变了进入2020年代后Transformer基本接管了NLP领域RNN家族的出镜率下降了不少。Transformer不再按时间步循环而是通过自注意力机制让任意两个位置直接互相看见解决了长距离依赖问题也天然支持并行计算。但RNN的思路没有真正消失。门控机制、隐藏状态、时序建模这些思想渗透在很多新模型里在处理直线式的时间序列预测比如股票价格、传感器数据时LSTM和GRU依旧是性价比很高的选择。学RNN学的其实是一套如何给网络加时间维度的记忆的方法论这套方法论在任何涉及序列的领域都有用武之地。6. 实战选型拿到一个任务我到底该用哪个6.1 四种网络的适用场景对比把这四类网络放在一张表里对比选型的时候对着看会非常方便网络类型核心特点最擅长的任务典型应用场景常见误区全连接神经网络层间全连接万能逼近结构简单表格型数据的分类回归、特征向量处理房价预测、客户流失预测、BP曲线拟合拿它直接处理原始图像或长文本前馈神经网络信息单向流动无反馈概念维度一切前馈家族网络的基础作为CNN、Transformer的组成部分把它当成一种具体网络来学卷积神经网络局部感知权值共享池化图像、视频、空间网格数据图像分类、目标检测、OCR、医学影像处理时间序列时忽略时序依赖循环神经网络状态记忆时间维度权值共享序列数据、变长数据文本生成、语音识别、时间序列预测期望它记住无限久远的信息梯度消失6.2 我自己的选型决策流程如果你现在手上有一个真实的项目需求不知道选什么网络可以按下面这个流程走我这些年带项目基本都按这套逻辑来先看数据类型。如果你是处理表格数据用户画像、数值特征全连接网络直接起步又快又稳。如果是图像或视频直接上卷积网络。如果是文本、语音、时间序列那么第一选择是LSTM/GRU这类循环网络或者考虑到生态更成熟直接用Transformer系列。再看数据规模。数据量小几千条的时候深而大的网络很容易过拟合优先选简单模型必要时加正则化。数据量大百万级才有资格谈更深、更大。再看算力约束。如果模型最终要部署到手机或嵌入式设备上卷积网络的轻量变体MobileNet、ShuffleNet这类优势非常大如果你在服务器上有充足的GPU可以放开手脚尝试更大结构。6.3 工程实践里最容易被忽视的几个细节最后分享几个我在实际项目里踩过的坑希望能帮你少走弯路第一模型往往是组合的不是单一的。很多实际系统不会只用一个网络。比如经典的图像识别流程是CNN提特征 全连接层做分类语音识别流程是CNN处理声学特征 循环网络建模时序 全连接输出。学的时候分开学用的时候要组合着用。第二别一开始就追最新模型。我见过不少同学刚学完基础网络就直接去啃大模型源码结果被各种技术名词淹没。我的建议是先用全连接网络在MNIST上做一次手写数字识别再用CNN做同样的任务感受参数量从几十万降到几万、效果却更好的对比然后再拿一段文本用LSTM预测下一个词。这套对比做完你对四种网络的理解深度会超过很多人。第三前馈是默认配置循环是特殊需求。设计网络结构时先用前馈思路搭一个基准模型如果数据确实存在时序依赖再引入循环结构。先有基准再谈改进是工程里最重要的工作方法它也适用于框架搭建。写在最后的实践建议如果让我给刚入门的你一个最朴素的建议我会说先别急着把四种网络的开源代码各跑一遍而是先动手把一个三层全连接网络从零实现一遍理解前向传播和反向传播的完整过程然后打开一张真实图片用CNN跑一次分类感受参数量的对比再拿一段文本用LSTM预测下一个词。这样一轮实操下来你对神经网络这个词的体感会和背十遍教科书完全不一样。我自己带过的朋友里凡是觉得神经网络玄学的十有八九都是倒在了没有动手这一步。
返回列表