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

深度学习14(循环神经网络)

目录

循环神经网络背景--序列模型

循环神经网络结构

序列生成案例

词的表示(one-hot)

输出表示(softmax)

矩阵运算表示

交叉熵损失计算

时序反向传播算法(BPTT)

梯度消失与梯度爆炸


循环神经网络背景--序列模型

        通常在自然语言、音频、视频以及其它序列数据的模型。催生了自然语言理解、语音识别、音乐合成、聊天机器人、机器翻译等领域的诸多应用。常见的场合有:

        语音识别,输入一段语音输出对应的文字。

        情感分类,输入一段表示用户情感的文字,输出情感类别或者评分。

        机器翻译,两种语言的互相翻译。


循环神经网络结构

        循环(递归)神经网络(RNN)是神经网络的一种。RNN将状态在自身网络中循环传递,可以接受时间序列结构输入。常分为以下结构:

        一对一:固定的输入到输出,如图像分类
        一对多:固定的输入到序列输出,如图像的文字描述
        多对一:序列输入到输出,如情感分析,分类正面负面情绪
        多对多:序列输入到序列的输出,如机器翻译,称之为编解码网络
        同步多对多:同步序列输入到同步输出,如文本生成,视频每一帧分类,也称之为序列生成

        而放在神经网络中,其基础结构为

xt:表示每一个时刻的输入
ot:表示每一个时刻的输出
st:表示每一个隐层的输出
中间的小圆圈代表隐藏层的一个unit(单元)
所有单元的参数共享

其通用公式为:

        s_0 = 0

        s_t =g_1(Ux_t+Ws_{t-1}+ba)

        o_t=g_2(Vs_t+b_y)

g1,g2:表示激活函数,通常g1:tanh/relu,g2:sigmoid、softmax其中如果将公式展开:

可以看到,循环神经网络的输出值ot,是受前面历次输入值xt-1,xt,xt+1影响。


序列生成案例

通常对于整个序列给一个开始和结束标志,start,end标志。

例如:s(start),我 ,昨天 ,上学 ,迟到 了 ,e(end)

输入到网络当中的是一个个的分词结果,每一个词的输入是一个时刻。

        它的效果可以理解为类似于输入法的联想功能,训练完成后,当输入“我”,该模型输出为“昨天”;当输入“上学”,该模型输出为“迟到”。

        但是,对于电脑来说,不能理解我们的日常语言,需要将我们的输入(中英文等等)转化为向量表示。
1、建立一个包含所有序列词的词典包含(开始和标志的两个特殊词,以及没有出现过的词用等),每个词在词典里面有一个唯一的编号
2、任意一个词都可以用一个N维的one-hot向量来表示。其中,N是词典中包含的词的个数。


词的表示(one-hot)

        One-Hot 编码(独热编码)是一种将分类变量转换为数值形式的常用方法,特别适用于机器学习算法中处理类别型数据。One-Hot 编码将一个具有 N 个不同类别的特征转换为 N 个二进制特征,每个特征对应一个类别。对于每个样本,只有一个特征为 1("热"),其余都为 0。

特点:

1、消除数值大小带来的偏见:如果不使用 One-Hot 而直接用 1,2,3 表示不同类别,算法可能会误认为数值大小有意义。

2、适用于大多数机器学习算法:特别是那些期望输入是数值型的算法。

3、处理无序类别数据:当类别间没有自然顺序时特别有用。


输出表示(softmax)

        RNN这种模型,每一个时刻的输出是下一个最可能的词,可以用概率表示,总长度为词的总数长度。


矩阵运算表示

1、形状表示:[n, m]x [m, 1] +[n, n] x[n,1]= [n, 1]
      则矩阵U的维度是nxm,矩阵W的维度是nxn
      m:词的个数,n:为输出s的维度

注:此步骤可以简化:[u,w]x[]=[n,n+m]x[n +m,1]=[n,1]

2、形状表示:[m, n]x [n,1]= [m,1]
      矩阵V维度:[m,n]
     总结:其中的n是可以人为去进行设置。


交叉熵损失计算

        总损失定义:一整个序列(一个句子)作为一个训练实例,总误差就是各个时刻词的误差之和。

E_t(y_t,\hat{y_t})=-y_t\log (\hat{y_t})

E(y,\hat{y})=\sum E_t(y_t,\hat{y_t})=-\sum y_t\log (\hat{y_t})

在这案例中,yt是时刻t上正确的词,必是预测出来的词


时序反向传播算法(BPTT)

        对于RNN来说有一个时问概念,需要把梯度沿时问通道传播的 BP 算法,所以称为Back PropagationThrough Time-BPTT。

        我们的目标是计算误差关于参数U、V和W以及两个偏置bx,by的梯度,然后使用梯度下降法学习出好的参数。由于这三组参数是共享的,我们需要将一个训练实例在每时刻的梯度相加

要求:每个时间的梯度都计算出来t=0,t=1,t=2,t=3,t=4,然后加起来的梯度,为每次W更新的梯度值。

求梯度需要分为两种情况:
最后一个celt:
        计算最后一个时刻交叉熵损失对于s_t的梯度,记忆交叉损失对于s^t,V,by的导数
        按照图中顺序计算
除最后一个的celt:
        第一步:求出当前层损失对于当前隐层状态输出值的梯度+上一层相对于st的损失
        第二步:计算tanh激活函数的导数
        第三步:计算Ux_t+Ws_{t-1}+b_a的对于不同参数的导数,主要运用链式法则。


梯度消失与梯度爆炸

        由于RNN当中也存在链式求导规则,并且其中序列的长度位置。所以:
        如果矩阵中有非常小的值,并且经过矩阵相乘N次之后,梯度值快速的以指数形式收缩,较远的时刻梯度变为0。
        如果矩阵的值非常大,就会出现梯度爆炸。

http://www.dtcms.com/a/274959.html

相关文章:

  • Cocos游戏开发中,检测两个物体碰撞,并实现物理反弹逻辑
  • JAVA——选择结构、循环结构、随机数、嵌套循环、数组(一维、二维)
  • 亚古数据:澳大利亚公司的ABN和ACN号码是什么?
  • PyInstaller打包完整指南1
  • Java语言基础
  • 从硬件层面上限制电脑用户只能上网访问特定的网址
  • 知识就是力量——STM32(低功耗芯片方向)
  • ROS系统如何接管工业机械臂?
  • U2Fusion: A Unified UnsupervisedImage Fusion Network
  • 2025 js——面试题(7)——ajax相关
  • Linux自动化构建工具(一)
  • AI技术与大模型对比分析:发展趋势、应用场景及挑战
  • UI前端与数字孪生融合新领域:智慧环保的垃圾分类与回收系统
  • LLM场景下的强化学习【GRPO】
  • PCIE set_property问题
  • Java synchronized 锁机制深度解析与实战指南 - 银行转账案例
  • 深度学习超参数调优指南
  • Scrapy入门实战指南:从零开始打造高效爬虫系统
  • 每日算法刷题Day45 7.11:leetcode前缀和3道题,用时1h40min
  • 机器学习之线性回归(七)
  • 安全领域的 AI 采用:主要用例和需避免的错误
  • 基于k8s环境下pulsar高可用测试和扩缩容(上)
  • 基于k8s环境下pulsar高可用测试和扩缩容(下)
  • 线程通信与进程通信的区别笔记
  • CMU15445-2024fall-project1踩坑经历
  • 小米汽车今年6月新车交付超2.5万辆
  • Marin说PCB之Allegro高亮BOM器件技巧详解
  • 格密码--数学基础--03格的基本域与行列式
  • 用AI做带货视频评论分析【Datawhale AI 夏令营】
  • 《P3976 [TJOI2015] 旅游》