当前位置: 首页 > news >正文

神经网络 | CNN 与 RNN——深度学习主力军

Hi,大家好,我是半亩花海。本文主要将卷积神经网络(CNN)循环神经网络(RNN)这两个深度学习主力军进行对比。我们知道,从应用方面上来看,CNN 用于图像识别较多,而 RNN 用于语言处理较多。CNN 如同眼睛一样,正是目前机器用来识别对象的图像处理器。相应地,RNN 犹如耳朵和嘴巴,用于解析语言模式的数学引擎。


目录

一、卷积神经网络

1. 特征

2. 结构

二、循环神经网络

1. 网络结构

2. 应对梯度消失问题

三、CNN 与 RNN 的异同点

1. 相同点

2. 不同点

四、CNN+RNN 的组合方式


我们可以通过形象的假设来理解这俩个神经网络模型:

  • CNN 的假设——人类的视觉总是会关注视线内特征最明显的点。
  • RNN 的假设——事物的发展是按照时间序列展开的(前一刻发生的事物会对未来的事情的发展产生影响)。

卷积神经网络:通常用于计算机视觉中,可以用来图像识别图像分类。CNN 用于提取图像的空间特征,通过不断的卷积和池化操作实现特征提取和降维。

循环神经网络:通常用于自然语言处理语音识别中,可以用来处理间序列数据。RNN 的主要思想是把前面的信息传递到后面,这样网络就可以利用之前的信息做出预测,能够处理序列中每个时间步的数据。


一、卷积神经网络

卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有局部连接、权重共享等特性的深层前馈神经网络。

1. 特征

  • 局部连接:在卷积层(假设是第 𝑙 层)中的每一个神经元都只和前一层(第 𝑙 − 1 层)中某个局部窗口内的神经元相连,构成一个局部连接网络。
  • 权重共享:一个卷积核只捕捉输入数据中的一种特定的局部特征(因此,如果要提取多种特征就需要使用多个不同的卷积核)。
  • 空间或时间上的次采样。

2. 结构

一个卷积神经网络主要由以下 5 层组成:

  • 输入层(Input layer)
  • 卷积(CONV layer,包含激活函数,比如 ReLU、sigmoid、tanh 等)
  • 池化层(Pooling layer)
  • 全连接层(FC layer)
  • 输出层(Ouput layer)


二、循环神经网络

循环神经网络(RNN,Recurrent Neural Network)是一类用于处理序列数据的神经网络。

1. 网络结构

RNN 不是刚性地记忆所有固定长度的序列,而是通过隐藏状态来存储之前时间步的信息。

可以看出,典型的 RNN 是有环结构。一个典型的 RNN 网络架构包含一个输入,一个输出和一个神经网络单元 。和普通的前馈神经网络的区别在于:RNN 的神经网络单元不但与输入和输出存在联系,而且自身也存在一个循环 / 回路 / 环路 / 回环 (loop)。这种回路允许信息从网络中的一步传递到下一步。

同时,RNN 还能按时间序列展开循环 (unroll the loop) 为如下形式:

由上图可知,上一个时刻的网络状态将会作用于到下一个时刻的网络状态,还表明 RNN 和序列数据密切相关。同时,RNN 要求每一个时刻都有一个输入,但是不一定每个时刻都需要有输出。

进一步地,公式化 RNN 的结构。单个展开的 RNN 结构如下:

RNN 的计算结构如下:

由上述表示,RNN 的经典的计算结构如下:

在图中有一条单向流动的信息流从输入单元到达隐藏单元的,与此同时另一条单向流动的信息流从隐藏单元到达输出单元。在某些情况下,RNNs 会打破后者的限制,引导信息从输出单元返回隐藏单元,这些被称为 “Back Projections”,并且隐藏层的输入还包括上一隐藏层的状态,即隐藏层内的节点可以自连也可以互连(这实际上就是 LSTM)。

循环神经网络的输入是序列数据,每个训练样本是一个时间序列,包含多个相同维度的向量。网络的参数如何通过训练确定?这里就要使用解决 RNN 训练问题的 BPTT(Back Propagation Through Time)算法。

右侧为计算时便于理解记忆而产开的结构。简单说,x 为输入层,o 为输出层,s 为隐含层,而 t 指第几次的计算;V、W、U为权重(在 RNN 中,每一层都共享参数U、V、W,降低了网络中需要学习的参数,提高学习效率。)。 x_{t} 表示 t 时刻的输入,s_{t} 表示 t 时刻的隐状态,o_{t} 表示 t 时刻的输出。

输入单元(input units):{x_{0},\cdot \cdot \cdot, x_{t-1}, x_{t}, x_{t+1}, \cdot \cdot \cdot}

隐藏单元(hidden units):{s_{0},\cdot \cdot \cdot, s_{t-1}, s_{t}, s_{t+1}, \cdot \cdot \cdot}

输出单元(output units):{o_{0},\cdot \cdot \cdot, o_{t-1}, o_{t}, o_{t+1}, \cdot \cdot \cdot}

输入层x_{t} 表示时刻 t 的输入。

第 t 次的中间的隐含层状态为: 

s_{t}=f(U*x_{t}+W*s_{t-1})

f 是非线性激活函数,比如 tanh。 

输出层

o_{t}=softmax(Vs_{t})

softmax 函数是归一化的指数函数,使每个元素的范围都在 0 到 1 之间 ,并且所有元素的和为 1。

2. 应对梯度消失问题

在进行反向传播时,循环神经网络也面临梯度消失或者梯度爆炸问题,这种问题表现在时间轴上。如果输入序列的长度很长,人们很难进行有效的参数更新。通常来说梯度爆炸更容易处理一些。梯度爆炸时我们可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。

应对梯度消失问题:

  • 合理地初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。
  • 使用激活函数 ReLu,代替 sigmoid 和 tanh。
  • 使用其他结构的 RNNs,比如长短时记忆网络(LSTM)和 门控循环单元 (GRU),这是最流行的做法。

三、CNN 与 RNN 的异同点

1. 相同点

(1)神经网络结构: 两者都是深度神经网络,包含大量的神经元和层级结构。

(2)权重共享: 在训练过程中,两者都使用权重共享的概念。通过在不同的位置或时间步共享相同的权重参数,从而减少参数数量和提高模型的泛化能力。

(3)端到端学习: 两者都支持端到端的学习,即从原始输入数据到最终输出的直接学习。

2. 不同点

(1)数据类型

  • CNN: 主要用于处理网格结构的数据,如图像。它通过卷积操作有效地捕捉图像中的空间结构信息。
  • RNN: 专门设计用于处理序列数据,如时间序列数据或自然语言文本。RNN 具有记忆单元,可以在时间步之间传递信息。

(2)局部连接和权重共享

  • CNN: 通过卷积操作实现局部连接和权重共享,这有助于捕捉图像中的局部特征。
  • RNN: 通过循环结构实现权重共享,允许网络在处理序列数据时考虑先前的信息。

(3)结构设计

  • CNN: 主要包括卷积层、池化层和全连接层,用于提取和学习图像中的特征。
  • RNN: 包括循环层,每个时间步都会更新隐藏状态,以便处理序列数据的时序关系。

(4)适用任务

  • CNN: 适用于图像分类、目标检测等与空间结构相关的任务。
  • RNN: 适用于语言建模、机器翻译、时间序列预测等与时序关系相关的任务。

(5)并行性

  • CNN: 具有较好的并行性,因为卷积操作可以同时应用于不同的区域。
  • RNN: 由于时序依赖关系,循环操作通常难以实现高度的并行性。

总的来说,CNN 适用于处理空间结构的数据,而 RNN 适用于处理时序关系的数据。在某些任务中,这两者也可以结合使用,形成更复杂的神经网络结构,例如将 CNN 和 RNN 组合用于图像描述生成。


四、CNN+RNN 的组合方式

  • CNN 特征提取,用于 RNN 语句生成图片标注
  • RNN 特征提取用于 CNN 进行内容分类、视频分类
  • CNN 特征提取用于对话问答、图片问答

相关文章:

神经网络 | CNN 与 RNN——深度学习主力军

Hi,大家好,我是半亩花海。本文主要将卷积神经网络(CNN)和循环神经网络(RNN)这两个深度学习主力军进行对比。我们知道,从应用方面上来看,CNN 用于图像识别较多,而 RNN 用于…...

thinkphp6入门(20)-- 如何上传图片、文件

1. 配置文件 设置上传的路径 对应文件夹 2. 前端 <div class"card-body"><h1 class"card-title">用户头像</h1><img src"../../../uploads/{$user.avatar_photo_path}" alt"avatar" height"100"/&g…...

【Linux技术宝典】深入理解Linux基本指令:命令行新手指南

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅Linux技术宝典 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 一、Linux下基本指令1. ls 指令2. pwd指令3. clear指令4. cd指令什么是家目录&#xf…...

C++:Level1阶段测试

总结。 只要你看过我的文章&#xff0c;哪怕只是一半&#xff0c;一定能够过关&#xff01; 准备好开始测试氻吗&#xff1f; 选择题&#xff0c;每题4分&#xff0c;共40分 1、 DevC的项目创建按钮是_____ A、文件[F]” → “新建[N]” → “项目[P]... B、工具[T]” → …...

autojs自动化刷视频脚本

视频展示 视频 //悬浮窗 // var window floaty.rawWindow( // <frame gravity"center" bg"#ff00ff"> // <button id"action" w"300dp" h"300dp"> // 按钮 // </button> // </fram…...

鲁南制药“健康幸福中国年”主题航班,开启探寻健康与幸福的旅程

“小年&#xff0c;小年&#xff0c;过了今天就是年。”提到过年&#xff0c;北方人的“过年”是从腊月二十三的“小年”开始的&#xff0c;而南方地区是在明天。虽然时间不同&#xff0c;但是浓浓的年味是一样的&#xff0c;红彤彤是主色调&#xff0c;喜洋洋是主乐曲&#xf…...

CISA知识点

审计流程21%&#xff1b;运营和业务恢复23%&#xff1b;保护资产27%&#xff1b;IT治理17%&#xff1b;开发12%。 领域1-信息系统审计流程 规划-现场工作-报告 &#xff08;1&#xff09;审计规划 了解业务使命、目标、目的和流程 找到相关规定 实施风险分析&#xff08;…...

C语言求解猴子分桃子

问题&#xff1a;海滩上有一堆桃子&#xff0c;五只猴子来分。第一只猴子把这堆桃子平均分为五份&#xff0c;多了一个&#xff0c;这只 猴子把多的一个扔入海中&#xff0c;拿走了一份。第二只猴子把剩下的桃子又平均分成五份&#xff0c;又多了 一个&#xff0c;它同样把多的…...

本地部署 Stable Cascade

本地部署 Stable Cascade 0. 引言1. 事前准备2. 本地部署 Stable Cascade3. 使用 Stable Cascade 生成图片4. Stable Cascade Github 地址 0. 引言 Stable Cascade 模型建立在 Wrstchen 架构之上&#xff0c;它与 Stable Diffusion 等其他模型的主要区别在于它的工作潜在空间要…...

LeetCode 二叉树/n叉树的解题思路

二叉树 二叉树特点是每个节点最多只能有两棵子树&#xff0c;且有左右之分二叉树的数据结构如下&#xff1a; public class TreeNode {//节点的值int val;//左子树TreeNode left;//右子树TreeNode right;TreeNode(int x) { val x; } }树节点的初始化&#xff1a; int val1;T…...

opencv mat用法赋值克隆的操作和一些基本属性

//Mat基本结构 (头部 数据部分) //赋值的话 就是修改了指针位置 但还是指向了原来数据 并没创建数据 本质上并没有变 //只有克隆或者拷贝时 它才会真正复制一份数据 //代码实现 //创建方法 - 克隆 //Mat m1 src.clone(); //复制 //Mat m2; //src.copyTo(m2); //赋值法 …...

【使用IDEA总结】01——新增作者信息、方法参数返回值

[TOC](目录) 1.类新增作者信息 打开IDEA的Settings&#xff0c;Editor->Code Style->File and Code Templates->Includes->File Header&#xff0c;输入以下作者信息&#xff0c;作者名更换为自己的即可&#xff0c;操作如下图所示 /*** Author Linhaipeng* Date…...

ElasticSearch分词器和相关性详解

目录 ES分词器详解 基本概念 分词发生时期 分词器的组成 切词器&#xff1a;Tokenizer 词项过滤器&#xff1a;Token Filter 停用词 同义词 字符过滤器&#xff1a;Character Filter HTML 标签过滤器&#xff1a;HTML Strip Character Filter 字符映射过滤器&#x…...

DolphinScheduler安装与配置

DolphinScheduler概述 Apache DolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 DolphinScheduler的主要角色如下&#xff1a; MasterServer采用分布式无…...

Qt之条件变量QWaitCondition详解

QWaitCondition内部实现结构图&#xff1a; 相关系列文章 C之Pimpl惯用法 目录 1.简介 2.示例 2.1.全局配置 2.2.生产者Producer 2.3.消费者Consumer 2.4.测试例子 3.原理分析 3.1.辅助函数CreateEvent 3.2.辅助函数WaitForSingleObject 3.3.QWaitConditionEvent …...

作为国产大模型之光的智谱AI,究竟推出了多少模型?一篇文章带你详细了解!

虽然OpenAI发布了一系列基于GPT模型的产品&#xff0c;在不同领域取得了很高的成就。但是作为LLM领域绝对的领头羊&#xff0c;OpenAI没有按照其最初的Open初衷行事。无论是ChatGPT早期采用的GPT3&#xff0c;还是后来推出的GPT3.5和GPT4模型&#xff0c;OpenAI都因为担心被滥用…...

学习转置矩阵

转置矩阵 将矩阵的行列互换得到的新矩阵称为转置矩阵 输入描述&#xff1a; 第一行包含两个整数n和m&#xff0c;表示一个矩阵包含n行m列&#xff0c;用空格分隔。 (1≤n≤10,1≤m≤10) 从2到n1行&#xff0c;每行输入m个整数&#xff08;范围-231~231-1&#xff09;&#x…...

AJAX——常用请求方法

1 请求方法 请求方法&#xff1a;对服务器资源&#xff0c;要执行的操作 2 数据提交 场景&#xff1a;当数据需要在服务器上保存 3 axios请求配置 url&#xff1a;请求的URL网址 method&#xff1a;请求的方法&#xff0c;GET可以省略&#xff08;不区分大小写&#xff09; …...

sqlserver2012 解决日志大的问题

当SQL Server 2012的事务日志变得过大时&#xff0c;这通常意味着日志备份没有被定期执行&#xff0c;或者日志文件的自动增长设置被设置得太高&#xff0c;导致它不断增长以容纳所有未备份的事务。解决日志大的问题通常涉及以下几个步骤&#xff1a; 备份事务日志&#xff1a;…...

Vue3快速上手(三)Composition组合式API及setup用法

一、Vue2的API风格 Vue2的API风格是Options API,也叫配置式API。一个功能的数据&#xff0c;交互&#xff0c;计算&#xff0c;监听等都是分别配置在data, methods&#xff0c;computed, watch等模块里的。如下&#xff1a; <template><div class"person"…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

算法250609 高精度

加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...