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

【循环神经网络】RNN介绍

在人工神经网络中,”浅层网络”是指具有一个输入层、一个输出层和最多一个没有循环连接的隐藏层的网络。随着层数的增加,网络的复杂性也在增加。更多的层或循环连接通常会增加网络的深度,并使其能够提供不同级别的数据表示和特征提取,称为“深度学习”。循环神经网络(Recurrent Neural Network, RNN)是一类有监督的机器学习模型,由具有一个或多个反馈回路的人工神经元组成,反馈回路使得网络具备记忆能力,可以存储一部分之前的信息,适用构建时间序列分析、文本情感分析等模型。本文主要阐述简单人工神经网络存在的局限,并介绍 RNN 的基本结构。

一、ANN 存在的局限

        在人工神经网络中,”浅层网络”是指具有一个输入层、一个输出层和最多一个没有循环连接的隐藏层的网络。随着层数的增加,网络的复杂性也在增加。更多的层或循环连接通常会增加网络的深度,并使其能够提供不同级别的数据表示和特征提取,称为“深度学习”。

        然而对于输入或输出是序列的问题, ANN 存在着如下局限:

1)输入、输出是固定长度,无法适应可变长度的问题,例如文本生成;

2)不是共享权重,无法共享不同位置的特征,且随着网络深度的增加,训练难度也随之增大。

二、RNN 的基本结构

        循环神经网络(Recurrent Neural Network, RNN)是一类有监督的机器学习模型,由具有一个或多个反馈回路的人工神经元组成。反馈回路是随时间或序列的循环(在 RNN 中称之为时间)。

        在单层感知器中,神经元需要完成两个阶段的计算,分别为对输入进行线性组合,以及非线性激活。激活函数通常为 sigmoid、ReLU 等函数。单层感知器网络任意时刻的输出,仅取决于当前时刻的输入,与时间无关。

        假设网络的初始输出为 0,将网络上个时刻的输出连接到输入端,就得到带反馈回路的神经网络。网络不同时刻的输入、线性组合与激活值使用下标进行区分。

        在循环神经网络中,通常使用 h_t 表示网络状态(h 代表 hidden layer)。让网络上个时刻的激活值 a_{t-1} 作为网络当前的状态 h_t,并输出网络当前的状态值,就得到了最简单的 RNN 网络。可以看到,RNN 任意时刻的输出,不仅取决于当前输入,还跟网络当前的状态有关。

        对于多维情况,输入、隐藏与输出层神经元的数量不再为 1,假设输入层包含 N 个单元,隐藏层包含 M 个单元,输出层包含 P 个单元,网络的输入、状态和输出分别记为

\mathbf{x}_t = (x_1, x_2, \cdots , x_N)

\mathbf{h}_t = (h_1, h_2, \cdots , h_M)

\mathbf{y}_t = (y_1, y_2, \cdots , y_P)

在时间上展开网络,得到如下图结构:

图中  \mathbf{W}_{IH}\mathbf{W}_{HH}\mathbf{W}_{HO} 分别为输入层到隐藏层、隐藏层到隐藏层、隐藏层到输出层的权重。

网络模型为

\mathbf{h}_t = \sigma _H(\mathbf{W}_{IH} \mathbf{x}_t + \mathbf{W}_{HH} \mathbf{h}_{t-1} + \mathbf{b}_H)

\mathbf{y}_t = \sigma_O (\mathbf{W}_{HO} \mathbf{h}_t + \mathbf{b}_o)

三、RNN 的训练

        以监督方式训练 RNN 需要输入和目标值成对的训练数据集。训练的目标是通过优化网络的权重来最小化输出和目标值之间的差异。

        损失函数用于评估网络的性能,将输出与预期的目标进行比较,损失函数在所有的时间步上进行累加,

L(\mathbf{y}, \mathbf{\hat{y}}) = \sum_{t=1}^{T} L_t( \mathbf{y}_t, \mathbf{\hat{y}}_t)

        RNN 训练的难点在于正确初始化网络中的权重,并使用优化算法对其进行调整,以尽量减少训练损失。网络参数之间的关系和隐藏状态随时间的动态变化会导致不稳定。通常算法需要大量的迭代来训练模型。


http://www.mrgr.cn/news/82171.html

相关文章:

  • 2025.01.02(数据库)
  • vue学习第一阶段
  • 「Java 数据结构全面解读」:从基础到进阶的实战指南
  • axios 实现进度监控
  • ==和===的区别,被坑的一天
  • 网络安全 | 量子计算与网络安全:未来的威胁与机遇
  • 【容器化技术 Docker 与微服务部署】详解
  • 基于WSL在Windows下安装Ubuntu
  • C++ 设计模式:组合模式(Composite Pattern)
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之12 方案再探之3:特定于领域的模板 之2 首次尝试和遗留问题解决
  • 「Mac畅玩鸿蒙与硬件50」UI互动应用篇27 - 水果掉落小游戏
  • libvirt学习
  • 【Compose multiplatform教程24】导航与路由
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之11 方案再探之2 项目文件(修改稿1)
  • Linux2.4.20顶层Makefile文件分析
  • 我的Java-Web进阶--Spring
  • CPT203 Software Engineering 软件工程 Pt.2 敏捷方法和需求工程(中英双语)
  • 计算机的错误计算(一百九十七)
  • Kubernetes第二天
  • Vue演练场基础知识(一)
  • Wireshark和科来网络分析系统
  • 掌握大数据处理利器:Flink 知识点全面总结【上】
  • C++ 设计模式:职责链模式(Chain of Responsibility)
  • pyside6总结
  • Docker新手:在tencent云上实现Python服务打包到容器
  • 【Unity3d】C#浮点数丢失精度问题