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

【机器学习300问】118、循环神经网络(RNN)的基本结构是怎样的?

        将讲解循环神经网络RNN之前,我先抛出几个疑问:为什么发明循环神经网络?它的出现背景是怎样的?这些问题可以帮助我们更好的去理解RNN。下面我来逐一解答。

一、循环神经网络诞生的背景

        循环神经网络(RNN)的诞生主要是为了解决传统神经网络在处理序列数据时的局限性,尤其是它们无法有效捕获和利用时间序列或序列数据中的顺序依赖信息。

(1)传统神经网络的局限性

① 独立性假设

        前馈神经网络假设输入数据之间相互独立,这与实际情况下许多数据集的自然属性相悖。在自然语言和视频流等应用中,每个元素都与时间上下文紧密相关,网络需要捕捉到这些信息才能进行有效的特征提取和模式识别

② 信息传递的单向性

        前馈网络的信息传递是单向的,从输入层流向输出层,中间无环路。这使得信息只能按照一个方向流动,限制了信息反馈和动态更新,不利于处理序列数据中常见的长距离依赖问题。

③ 缺乏记忆能力

        前馈网络缺乏“记忆”能力,无法存储先前的输入信息,无法共享在不同时间学习到的特征,这对于时序数据的处理是一个重大缺陷。例如,当预测一句话中的下一个单词时,网络需要“记住”前面的语境。

(2)序列数据的需求增加

        随着自然语言处理、语音识别、音乐生成、视频分析等领域的发展,对能够理解和生成序列数据的模型需求日益增长。这些领域的任务往往需要模型能够理解和生成基于时间或位置依赖的输出。

① 自然语言处理

        语言是由词汇按特定顺序组成的,词序影响语义解析。自然语言处理任务,如机器翻译和情感分析,需要模型理解文本中词与词之间的时间先后关系。

② 语音识别与音乐生成

        语音信号具有明显的时间序列特性,识别或生成语音需要模型具备处理时序信息的能力。音乐生成亦是如此,音符的顺序直接影响旋律的流畅度和和谐度。

③ 视频分析

        视频数据可以看作是一系列连续的图像帧,各帧之间存在强时间关联。视频分析任务,如动作识别,需要网络能够处理这种时间序列信息。

二、循环神经网络的基本结构

        那么循环神经网络是如何通过结构设计来解决上述传统前馈神经网络遇到的问题呢?下面让我们看看单层RNN的结构设计

(1)单层RNN的结构设计

 ① 解释RNN处理时间序列

② 结构设计

 

        与前馈神经网络不同,RNN中的每个时间步的神经元不仅接受当前时间步的输入数据,还接受上一时间步的隐藏状态信息。这个隐藏状态可以视为网络对序列到目前为止所见信息的一种“记忆”。每次迭代都基于前一时间步的输出和当前的输入。

有时候也把RNN的网络结构折叠起来表示:

RNN循环结构的两种画法
RNN单元的解释

这种图太抽象,难以理解。可以借助动图来说明。

③ 符号解释

带符号的RNN循环结构

        上图中前一个时间步得到的激活值a会传递给下一个时间步。在RNN中想要预测\hat y^{<3>}不仅用到了x^{<3>}还用到了之前的x^{<1>},x^{<2>}。但如图所示RNN在预测\hat y^{<3>}没有用到其之后的x^{<4>},...,x^{<T_x>}这是它的局限性(可以通过双向循环神经网络解决,之后写文章介绍)。

a^{<1>} = g(W_{aa}a^{<0>}+W_{ax}x^{<1>}+b_a)

\hat y^{<1>} = g(W_{ya}a^{<1>}+b_y)

通常初始化激活值a^{<0>}设置成零向量。其他激活值a^{<t>}和预测值\hat y^{<t>}的公式如上所示。

(2)不同类型的循环神经网络

        循环神经网络(RNN)因其灵活性能够适应不同类型的任务,具体可以分为以下几种常见的模式。

① 一对多

        音乐生成是一个典型的一对多场景。这类任务中,网络通常从一个初始输入(如一个起始音符或音乐风格的编码)开始,然后生成一个序列输出(即后续的音符序列),形成完整的音乐作品。RNN在此过程中能够捕捉到序列内部的依赖关系,生成连贯的音乐流。

② 多对一

        情感分析是多对一任务的代表。在这样的任务里,网络接收一个序列输入(如一句话或一段文本),并通过整个序列的处理,最终产生单个输出值(例如,这段文本的情感分类标签,如正面、负面或中立)。网络学习在整个输入序列中提取特征,用于做出整体判断。

③ 多对多(T_x=T_y

        命名实体识别(NER)是多对多任务的实例。在命名实体识别中,输入是一个文本序列,输出是对文本中每个单词或标记的分类(如人名、地点、组织等)。

④ 多对多(T_x\neq T_y

        机器翻译是多对多任务的实例。在机器翻译任务中,输入是一个语言的句子序列,输出是另一个语言的等价翻译序列,两个序列通常长度不一,要求模型既能理解输入序列的结构和语义,又能生成相应长度和语义的输出序列。

相关文章:

  • FastAdmin后台开发框架 lang 任意文件读取漏洞复现
  • 如何衡量llm 数据集的多样性
  • Eigne库安装及使用教程
  • springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列
  • 证明 几何分布 的期望和方差
  • 实现锚点链接点击tab跳转到指定位置 并且滚动鼠标顶部锚点的样式也跟随变化
  • 了解 XML HttpRequest 及其在 Web 开发中的应用
  • 什么是模型轻量化?如何自动进行模型轻量化?
  • Linux命令的语法和帮助系统
  • 海豚调度异常处理: 使用 arthas 在内存中删除启动失败的工作流
  • AMS(ActivityManagerService)源码解析2,Android应用是如何被启动的
  • 【Android】安Android Studio环境搭建注意点
  • QT
  • 练习时长 1 年 2 个月的 Java 菜鸡练习生最近面经,期望25K
  • article:文章信息表
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • IDEA常用插件整理
  • IP路由与转发
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Python - 闭包Closure
  • 模型微调
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何选择开源的机器学习框架?
  • 试着探索高并发下的系统架构面貌
  • 我看到的前端
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 云大使推广中的常见热门问题
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • HanLP分词命名实体提取详解
  • Spring第一个helloWorld
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计大学生兼职系统
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (全注解开发)学习Spring-MVC的第三天
  • (轉)JSON.stringify 语法实例讲解
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .libPaths()设置包加载目录
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET NPOI导出Excel详解
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET基础篇——反射的奥妙
  • @Autowired多个相同类型bean装配问题
  • @private @protected @public
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ C++ ] 类和对象( 下 )
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [《百万宝贝》观后]To be or not to be?
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [AIGC] Spring Interceptor 拦截器详解
  • [C++]C++类基本语法
  • [CF]Codeforces Round #551 (Div. 2)
  • [CLR via C#]11. 事件
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images