神经网络发展历程:DNN、CNN、RNN

系列文章目录

李沐《动手学深度学习》多层感知机 模型概念和代码实现
李沐《动手学深度学习》卷积神经网络 相关基础概念
李沐《动手学深度学习》卷积神经网络 经典网络模型
李沐《动手学深度学习》循环神经网络 相关基础概念
李沐《动手学深度学习》循环神经网络 经典网络模型

文章目录

  • 系列文章目录
  • 一、感知机
    • (一)多层感知机的结构
    • (二)多层感知机的创新之处:
    • (三)多层感知机带来的问题:
  • 二、DNN 深度神经网络
    • (一)梯度消失和梯度爆炸
    • (二)过拟合与欠拟合
  • 三、CNN 卷积神经网络
    • (一)CNN的提出原因
    • (二)CNN的结构
    • (三)CNN的两大特点:局部连接和权值共享
    • (四)CNN的应用
    • (五)经典CNN模型
  • 四、RNN 循环神经网络
    • (一)RNN的核心思想
    • (二)RNN的架构
    • (三)RNN的BP(BPTT)
    • (四)RNN的不足
    • (五)常见的RNN示例


一、感知机

第一代神经网络又称为感知机,在1950年左右被提出来,它的算法只有两层,输入层输出层,主要是线性结构。它不能解决线性不可分的问题,对稍微复杂一些的函数都无能为力,如异或操作。

(一)多层感知机的结构

多层感知机是有多个隐含层的感知机。
在这里插入图片描述

(二)多层感知机的创新之处:

  • 摆脱了早期离散传输函数的束缚,使用sigmoid或tanh等连续函数模拟神经元对激励的响应,在训练算法上则使用Werbos发明的反向传播BP算法。
  • 解决了之前无法模拟异或逻辑的缺陷,同时更多的层数也让网络更能够刻画现实世界中的复杂情形。

(三)多层感知机带来的问题:

  • 随着神经网络层数的加深,优化函数越来越容易陷入局部最优解,并且这个“陷阱”越来越偏离真正的全局最优。利用有限数据训练的深层网络,性能还不如较浅层网络。
  • 随着网络层数增加,“梯度消失”现象更加严重。具体来说,我们常常使用 sigmoid 作为神经元的输入输出函数。对于幅度为1的信号,在BP反向传播梯度时,每传递一层,梯度衰减为原来的0.25。层数一多,梯度指数衰减后低层基本上接受不到有效的训练信号。

二、DNN 深度神经网络

为了克服梯度消失,ReLU、maxout等传输函数代替了sigmoid,形成了如今 DNN 的基本形式。单从结构上来说,全连接的DNN和多层感知机是没有任何区别的。高速公路网络(highwaynetwork)和深度残差学习(deep residual learning)进一步避免了梯度弥散问题,网络层数达到了前所未有的一百多层。
在这里插入图片描述

(一)梯度消失和梯度爆炸

梯度消失: 网络结构很深的时候,每层反向传播都会乘上激活函数的梯度,而sigmoid函数的梯度最大值是1/4<1,多次乘一个小于1的数会趋向0,所以梯度消失。

梯度消失的解决方法:

  • 使用Relu作为激活函数
  • 人工增加数据量 (叠加噪声)
  • 随机初始化参数 (随机正交矩阵,高斯截断正态分布)
  • 使用预训练

梯度爆炸 在RNN中常会出现,因为反向传播过程中,state会共用W,所以会导致W会随着时间而连乘,如果W的值都大于1,则会梯度爆炸,如果小于1,则会梯度消失,解决梯度爆炸的方法是梯度裁剪,即,当梯度大于某一个阈值的时候,就强行将其限制在这个范围之内。RNN解决梯度消失的问题是采用LSTM作为基本单元。

(二)过拟合与欠拟合

过拟合的解决方法:

  • 及时停止训练
  • 增加数据
  • 添加正则化项(L1和L2)
  • dropout

欠拟合的解决方法:

  • 增强数据

三、CNN 卷积神经网络

(一)CNN的提出原因

  • 全连接DNN的结构里下层神经元和所有上层神经元都能够形成连接,带来了参数数量膨胀的问题。过多的参数不仅容易导致过拟合,还容易陷入局部最优。
  • 图像中固有的局部模式(比如轮廓、边界,人的眼睛、鼻子、嘴等)值得利用,显然应该将图像处理中的概念和神经网络技术相结合。

(二)CNN的结构

卷积神经网络主要是模拟人的视觉神经系统提出来的。卷积神经网络的结构依旧包括输入层、隐藏层和输出层,其中卷积神经网络的隐含层包含卷积层、池化层和全联接层 3类常见构筑。

  • 卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,一个卷积核覆盖的原始图像的范围叫做感受野(权值共享)。一次卷积运算(哪怕是多个卷积核)提取的特征往往是局部的,难以提取出比较全局的特征,因此需要在一层卷积基础上继续做卷积计算,这就是多层卷积。
  • 经过卷积层处理的特征维度很大,需要经过池化,也就是对卷积层的输出做下采样。它通过减少特征图的空间尺寸来降低模型的复杂度,同时保留关键的特征信息。这种操作有助于减少计算量,提高网络的泛化能力,并使模型对输入图像的平移、旋转和缩放更加鲁棒。
  • 全连接层的作用是将卷积层和池化层提取的特征进行整合,并进行最终的分类或回归任务。全连接层的特点是每个神经元与前一层的所有神经元相连,形成一个密集的连接网络。
    在这里插入图片描述

(三)CNN的两大特点:局部连接和权值共享

下图左边是全连接,右边是局部连接。对于一个1000 × 1000的输入图像而言,如果下一个隐藏层的神经元数目为10^6个,采用全连接则有1000 × 1000 × 10^6 = 10^12个权值参数,如此数目巨大的参数几乎难以训练;而采用局部连接,隐藏层的每个神经元仅与图像中10 × 10的局部图像相连接,那么此时的权值参数数量为10 × 10 × 10^6 = 10^8,将直接减少4个数量级。
在这里插入图片描述

权值共享 能够进一步减少参数的数量。具体做法是,在局部连接中隐藏层的每一个神经元连接的是一个10 × 10的局部图像,因此有10 × 10个权值参数,将这10 × 10个权值参数共享给剩下的神经元,也就是说隐藏层中10^6个神经元的权值参数相同,那么此时不管隐藏层神经元的数目是多少,需要训练的参数就是这 10 × 10个权值参数(也就是卷积核(也称滤波器)的大小),如下图。
在这里插入图片描述

(四)CNN的应用

  • CNN 主要用于处理具有网格结构的数据,如图像数据。它通过卷积层、池化层和全连接层等组件来逐步提取图像中的特征,并用于分类、检测或分割等任务。
  • CNN 在图像处理领域取得了巨大成功,如图像分类、目标检测、语义分割等任务。它能够利用局部连接性和权值共享的特性有效地捕获图像中的空间局部特征,同时减少模型参数量。

(五)经典CNN模型

  • 这一部分在李沐的《动手学深度学习》一书中讲解的很透彻。
  • 李沐《动手学深度学习》卷积神经网络 经典网络模型
  • LeNet-5:由 Yann LeCun 在 1998 年提出,是最早的用于手写数字识别的卷积神经网络。它包含卷积层、池化层和全连接层,被广泛应用于数字识别任务。
    在这里插入图片描述

  • AlexNet:由 Alex Krizhevsky 等人在 2012 年的 ImageNet 比赛中首次提出,引领了深度学习在计算机视觉领域的新浪潮。AlexNet 包含了 5 个卷积层和 3 个全连接层,并采用了 ReLU 激活函数和 Dropout 正则化技术。
    在这里插入图片描述

  • VGGNet:由 Simonyan 和 Zisserman 在 2014 年提出,VGGNet 的特点是简洁而深层的架构。它包含了 16 层或 19 层的卷积层,所有卷积层都是 3x3 的卷积核和 2x2 的池化核,通过多个小尺寸的卷积核来提高特征的表达能力。
    在这里插入图片描述

  • GoogLeNet(Inception):由 Google 在 2014 年提出,是一个具有高效性和高性能的深度卷积神经网络。GoogLeNet 使用了一种被称为 Inception 模块的结构,在不同尺度上并行地进行卷积操作,并且通过 1x1 的卷积核来减少参数数量。
    在这里插入图片描述

  • ResNet:由 Microsoft Research 在 2015 年提出,ResNet 是一个非常深的卷积神经网络,其主要贡献是通过残差连接(Residual Connection)来解决深度网络的梯度消失和梯度爆炸问题。ResNet 的核心思想是在网络中添加跳跃连接,使得梯度能够更好地传播,从而允许构建非常深的网络。

在这里插入图片描述

四、RNN 循环神经网络

(一)RNN的核心思想

全连接的DNN还存在着另一个问题——无法对时间序列上的变化进行建模。RNN正是通过存储记忆的方式来解决序列到序列的问题。

在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward Neural Networks)。而在RNN中,神经元的输出可以在下一个时间段直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出。

(二)RNN的架构

RNN层级结构较之于CNN来说比较简单, 它主要有输入层,Hidden Layer, 输出层组成,并且会发现在Hidden Layer 有一个箭头表示数据的循环更新, 这个就是实现时间记忆功能的方法。

在这里插入图片描述
RNN单层展开指,横向展开通常称为按时间序列展开,序列数据预测问题中,预测一个序列中的下一个词,最好能知道哪些词在它前面。
在这里插入图片描述

RNN按时间展开后, W i n p u t W_{input} Winput W h i d d e n W_{hidden} Whidden W o u t p u t W_{output} Woutput都是保持一样,并不是多个,这也是为什么RNN会出现梯度爆炸的原因。
在这里插入图片描述

(三)RNN的BP(BPTT)

RNN的反向传播是按时间序列展开的,和普通的BP算法不一样,叫随时间反向传播(BackPropagation Through Time,BPTT)。它是前馈网络标准反向传播算法的扩展。BPTT 随时间推移展开 RNN,将其视为一个深度神经网络,在时间步长中具有共享权重。梯度是通过将误差传播回展开的网络来计算的。因此,RNN 可以更新其权重并从顺序数据中学习。

(四)RNN的不足

  • 当展开一定步数后,开始输入的数据的记忆经过几次展开传递后,记忆力会衰弱。
  • 当RNN深度和时间序列长度过高时,很容易同时出现梯度消失于梯度爆炸。

(五)常见的RNN示例

  • Elman 网络:Elman 网络是最早的 RNN 变体之一,由 Jeffrey Elman 在 1990 年提出。它包含一个隐藏层,隐藏层的输出被作为下一个时间步的输入,用于建模序列数据的时间依赖关系。
    在这里插入图片描述

  • Jordan 网络:Jordan 网络是另一种经典的 RNN 结构,它也由一个隐藏层组成,但与Elman Network不同的是Jordan Network是将网络的输出层的输出保存在memory中传给下一个时间点。这样同Elman Network比起来我们更清楚memory中保存了什么。
    在这里插入图片描述

  • Long Short-Term Memory(LSTM):LSTM 是一种经典的 RNN 变体,由 Hochreiter 和 Schmidhuber 在 1997 年提出。LSTM 具有特殊的内部结构,包括输入门、遗忘门、输出门等,能够更有效地捕捉长期依赖关系,并解决梯度消失问题。
    在这里插入图片描述

  • Gated Recurrent Unit(GRU):GRU 是另一种常见的 RNN 变体,由 Cho 等人在 2014 年提出。与 LSTM 类似,GRU 也具有门控机制,但参数更少,结构更简单。
    在这里插入图片描述

  • Bidirectional RNN(BRNN):BRNN 是一种特殊的 RNN 结构,它包含两个方向的隐藏层,分别从前向和后向读取输入序列,并将它们的输出连接在一起。这使得模型能够捕捉到序列数据中的双向依赖关系。

在这里插入图片描述

参考:
CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)概念区分理解
深度学习之DNN、CNN和RNN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/509122.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入探究Shiro反序列化漏洞

Shiro反序列化漏洞 什么是shiro反序列化漏洞环境搭建漏洞判断rememberMe解密流程代码分析第一层解密第二层解密2.1层解密2.2层解密 exp 什么是shiro反序列化漏洞 Shiro是Apache的一个强大且易用的Java安全框架,用于执行身份验证、授权、密码和会话管理。使用 Shiro 易于理解的…

docker-compse安装es(包括IK分词器扩展)、kibana、libreoffice

Kibana是一个开源的分析与可视化平台&#xff0c;设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。 Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等&#xff0c;直观的展示数据&#xff0c;从而达到高级的数据…

Redis的配置与优化

一、关系型数据库和非关系型数据库 1.1 关系型数据库 一个结构化的数据库创建在关系模型基础上&#xff0c;一般面向于记录&#xff0c;包括&#xff1a;Oracle、MySQL、SQLServer、Microsoft Access、DB2等 1.2 非关系型数据库 除了主流的关系型数据库外的数据库&#xff0c;都…

JimuReport积木报表 v1.7.4 正式版本发布,免费的JAVA报表工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

python高校学生兼职雇佣信息网站vue+django

而随着经济的发展&#xff0c;企业的人力成本也越来越高&#xff0c;而有些工作却存在工作时间不稳定&#xff0c;工作量不确定的特点&#xff0c;不少企业便经常雇佣兼职人员来完成其某些工作而对于另外一-些商家来&#xff0c;有不少产品需要推向校园&#xff0c;因此校园传 …

SSM框架学习——SqlSession以及Spring与MyBatis整合

SqlSession以及Spring与MyBatis整合 准备所需要的JAR包 要实现MyBatis与Spring的整合&#xff0c;很明显需要这两个框架的JAR包&#xff0c;但是只是使用这两个框架中所提供的JAR包是不够的&#xff0c;还需要配合其他包使用&#xff1a; Spring的JAR包MyBatis的JAR包Spring…

CV论文--2024.4.2

1、Unsolvable Problem Detection: Evaluating Trustworthiness of Vision Language Models 中文标题&#xff1a;无法解决的问题检测&#xff1a;评估视觉语言模型的可信度 简介&#xff1a;本文提出了一个新颖且重要的挑战&#xff0c;即视觉语言模型&#xff08;VLM&#x…

[yolox]ubuntu上部署yolox的ncnn模型

首先转换pytorch->onnx->param模型&#xff0c;这个过程可以查资料步骤有点多&#xff0c;参考blog.51cto.com/u_15660370/6408303&#xff0c;这里重点讲解转换后部署。 测试环境&#xff1a; ubuntu18.04 opencv3.4.4(编译过程省略&#xff0c;参考我其他博客) 安装…

BM25 二叉树的后序遍历(postOrder()返回值用void)

import java.util.*;/** public class TreeNode {* int val 0;* TreeNode left null;* TreeNode right null;* public TreeNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&a…

京东云明修“价格战”,暗渡“政企云”

文&#xff5c;白 鸽 编&#xff5c;王一粟 云计算行业越来越“卷”&#xff0c;一边卷大模型&#xff0c;一边卷价格。 2024 刚一开年&#xff0c;阿里云就宣布百余款产品大降价&#xff0c;最高降幅达55%。在阿里云宣布降价后&#xff0c;京东云紧随其后宣布&#xff0…

如何用Git来查看提交记录

2024年4月2日&#xff0c;周二上午 使用 git log 命令查看提交记录。这会列出所有的提交历史&#xff0c;按照时间顺序从最新的提交到最旧的提交显示。默认情况下&#xff0c;git log 会以一种格式化的方式显示提交信息&#xff0c;包括提交哈希值、作者、提交日期和提交信息等…

https安全性 带给im 消息加密的启发

大家好&#xff0c;我是蓝胖子&#xff0c;在之前# MYSQL 是如何保证binlog 和redo log同时提交的&#xff1f;这篇文章里&#xff0c;我们可以从mysql的设计中学会如何让两个服务的调用逻辑达到最终一致性&#xff0c;这也是分布式事务实现方式之一。今天来看看我们能够从http…

深入解析大数据体系中的ETL工作原理及常见组件

** 引言 关联阅读博客文章&#xff1a;探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章&#xff1a;深入理解HDFS工作原理&#xff1a;大数据存储和容错性机制解析 ** 在当今数字化时代&#xff0c;大数据处理已经成为了企业成功的重要组成部分。而在大数据处…

(C)1007 素数对猜想

1007 素数对猜想 问题描述 输入样例&#xff1a; 20 输出样例&#xff1a; 4 解决方案&#xff1a; #include<stdio.h> #include<string.h> #include<math.h> int main(){int n,d;int a[100000];int flag,jishu0;scanf("%d",&n);memset(a,-1,…

将 Three 带到 Vue 生态系统,TresJs 中文文档上线

将 Three 带到 Vue 生态系统&#xff0c;TresJs 中文文档上线 中文文档上线入门指南 ThreeJS 在创建 WebGL 3D 网站方面是一个奇妙的库&#xff0c;同时他也是一个保持不断更新的库&#xff0c;一些对其封装的维护者&#xff0c;如 TroisJS&#xff0c;往往很难跟上其所有的更…

docker容器添加新端口映射的步骤及`wsl$`目录的作用

在Docker容器已经创建后&#xff0c;需要添加新的端口映射&#xff0c;即对已经存在的Docker容器添加新的端口映射&#xff0c;可以通过以下步骤来添加&#xff0c;即通过修改配置文件的方法。 如何新增端口映射&#xff1f; 查找容器的hash值 docker inspect [容器id或名称…

体验OceanBase 的binlog service

OceanBase对MySQL具备很好的兼容性。目前&#xff0c;已经发布了开源版的binlog service工具&#xff0c;该工具能够将OceanBase特有的clog模式转换成binlog模式&#xff0c;以便下游工具如canal、flink cdc等使用。今天&#xff0c;我们就来简单体验一下这个binlog service的功…

ARM IHI0069F GIC architecture specification (5)

Ch2 中断分配与路由 2.1 The Distributor and Redistributors Distributor 为 SPI 提供路由配置&#xff0c;并保存所有关联的路由和优先级信息。 Redistributor 提供 PPI 和 SGI 的配置设置。 Redistributor总是在有限的时间内向 CPU 接口呈现具有最高优先级的待处理中断。 …

【QT】setContextMenuPolicy()函数用法

在Qt中&#xff0c;setContextMenuPolicy() 是一个相当通用的方法&#xff0c;几乎所有的继承自 QWidget 或其派生类的图形用户界面控件都可以使用该方法来设置它们的上下文菜单策略。这意味着&#xff0c;包括但不限于以下常见的Qt GUI控件都能使用 setContextMenuPolicy() 来…

软考高级架构师:进程和线程概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…