RNN、CNN、RNN、LSTM、CTC算法原理,pytorch实现LSTM算法

简介: RNN、CNN、RNN、LSTM、CTC算法原理,pytorch实现LSTM算法

1. CNN算法


CNN算法原理


2. RNN算法


最早CNN算法和普通算法类似,都是从由一个输入得到另一个输出,不同的输入之间没有联系,无法实现一些场景(例如:对电影每个时间点的时间类型进行分类,因为时间是连续的,每一个时间点都是由前面的时间点影响的,也就是说输入之间有关联)


2.1 典型的序列数据


  1. 文章里文字内容
  2. 语音里音频内容
  3. 股票市场中价格走势


2.2 基本原理


RNN 跟传统神经网络最大的区别在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。如下图所示


20210701094717580.png

在上面的示例图中 神经网络的模块 A 正在 取某个 入 x_i 并 

出一个值 h_i。循环可以使得信息可以从当前步传 到下一步。 些循

环使得 RNN 看起来非常神秘。然  如果你仔细想想  样也不比一

个正常的神经网络 于理 。RNN 可以 看做是同一神经网络的多次

赋值 每个神经网络模块会把消息传 给下一个。所以 如果我们将 

个循环展开


实现公式如下:

20210701095356572.png


20210701094923445.png

实现如下,这里以,用户说了一句“what time is it?”我们需要先对这句话进行分词:



3. RCNN算法


RCNN(Region with CNN feature)是卷积神经网络应用于目标检测问题的一个里程碑的飞跃。CNN具有良好的特征提取和分类性能,采用RegionProposal方法实现目标检测问题。

算法可以分为三步(1)候选区域选择。(2)CNN特征提取。(3)分类与边界回归。


接下来我将详细的介绍一下每一过程如何实现,及其里面的一些tricks。


(1)候选区域选择:区域建议Region Proposal是一种传统的区域提取方法,基于启发式的区域提取方法,用的方法是ss,查看现有的小区域,合并两个最有可能的区域,重复此步骤,直到图像合并为一个区域,最后输出候选区域。然后将根据建议提取的目标图像标准化,作为CNN的标准输入可以看作窗口通过滑动获得潜在的目标图像,在RCNN中一般Candidate选项为1k2k个即可,即可理解为将图片划分成1k2k个网格,之后再对网格进行特征提取或卷积操作,这根据RCNN类算法下的分支来决定。然后基于就建议提取的目标图像将其标准化为CNN的标准输入。


(2)CNN特征提取:标准卷积神经网络根据输入执行诸如卷积或池化的操作以获得固定维度输出。也就是说,在特征提取之后,特征映射被卷积和汇集以获得输出。


(3)分类与边界回归:实际上有两个子步骤,一个是对前一步的输出向量进行分类(分类器需要根据特征进行训练); 第二种是通过边界回归框回归(缩写为bbox)获得精确的区域信息。其目的是准确定位和合并完成分类的预期目标,并避免多重检测。在分类器的选择中有支持向量机SVM,Softmax等等;边界回归有bbox回归,多任务损失函数边框回归等 。

20210701105858956.png


4. LSTM算法


LSTM是一种RNN特殊的类型,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。


4.1 LSTM算法原理


下图为LSTM简单的结构,可以同RNN算法进行对比

20210701095723206.png

详细算法结构如下



4.2 下面对结构中的各个部分拆解解释


1.


20210701100209355.png


如上图红框的流程,称之为门,是由sigmoid函数实现,实现结果为0~1,结果为0代表这条路不能通过,1代表这条可以通过


2.

20210701100545386.png

3.

4.

5.

20210701100743233.png


5. CTC算法


CTC全称Connectionist temporal classification,是一种常用在语音识别、文本识别等领域的算法,用来解决输入和输出序列长度不一、无法对齐的问题。在CRNN中,它实际上就是模型对应的损失函数。


传统监督学习算法面临的问题:

假设输入序列为x=[x1,x2,x3,…,xt],对应的输出序列y=[y1,y2,y3,…,yt]


  • x和y的长度是可变的
  • x和y的长度比例也是可变的
  • x和y对应元素之间不能找到严格的对齐关系

CTC算法解决以下问题其算法原理如下


5.1 Alignment对齐


CTC的输入和输出可以是不同长度的。对于给定输入,CTC通过求和所有alignments计算其输出的概率,首先理解什么是alignment?


首先看一个简单的例子。假设输入串的长度是6,Y=[c,a,t]。我们需要一个长度为6的alignment与输入相对应,同时要能唯一映射到输出cat。一个最简单的方式是重复字符c或者a或者t,如下图所示。

20210701104944884.png


但是,这种方式有个问题:我们无法区分连续的相同字符,例如,对于一个alignment=[h, h, e, l, l, l, o],我们会把它映射到‘helo’而不是‘hello’。为了解决这个问题,引入了空字符 ,它没有任何含义,映射到输出是会被简单移除。 我们可以从alignment映射到Y通过先合并重复字符再移除 的方式,如下图所示。 如果Y有两个连续的相同字符,那么必须有一个 在他们中间,这样我们就可以区分helo和hello了。


20210701105043248.png


5.2 Loss Function损失函数


CTC alignment为我们提供了一个很自然的方法,可以将每个时间步长的概率转换为输出序列的概率。下图展示了大致的整个流程。


20210701111016912.png


1687218859853.png


20210701112032572.png

1687218875737.png


20210701112217935.png

1687218897659.png



5.3 Case1

1687218955237.png


5.4 Case2


1687218969318.png

5.4 Inference预测

1687218982716.png


5.4.1 Greedy Search

1687219010188.png

5.4.2 Beam Search


Beam Search是寻找全局最优值和Greedy Search在查找时间和模型精度的一个折中。一个简单的beam search在每个时间片计算所有可能假设的概率,并从中选出最高的几个作为一组。然后再从这组假设的基础上产生概率最高的几个作为一组假设,依次进行,直到达到最后一个时间片,下图是beam search的宽度为3的搜索过程,红线为选中的假设。


20210701113114307.png


6. pytorch实现LSTM算法


定义LSTM参数


import torch.nn as nn
rnn=nn.LSTM(input_size,hidden_size,numlayers,bias,batch_first,dropout)


1687218897659.png


input_size:输入数据X的特征值的数目。

hidden_size:隐藏层的神经元数量,也就是层的特征数

num_layers:循环神经网络的层数,默认值是 2。

bias:默认为True,如果为 false 则表示神经元不使用 bias偏移参数。

batch_first:如果设置为True,则输入数据的维度中第一个维度就是 batch 值,默认为False。默认情况下第一个维度是序列的长度,第二个维度才是 batch 第三个维度是特征数目。

dropout:如果不为空,则表示最后跟一个dropout层抛弃部分分数据,抛弃数据的比例由该参数指定。


实现LSTM输入数据输出数据


output,(h_n,c_n)=LSTM(input,(h0,c0))
• 1


输入参数:


  • input:输入数据input一个三维向量
  • h_0:隐藏层初始权重
  • c_0:隐藏层的初始状态
    输出数据:
  • output:输出数据
  • h_n:隐藏层的输出权重
  • c_n:隐藏层输出状态


6.1 实例


import torch
impoort torch.nn as nn
from torch.autograd import Variable
rnn=nn.LSTM(10,20,2)
input=Variable(torch.randn(5,3,10))
h0=Variable(torch.randn(2,3,20))
c0=Variable(torch.randn(2,3,20))
output,hn=rnn(input,(h0,c0))
相关文章
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
CNN中的注意力机制综合指南:从理论到Pytorch代码实现
注意力机制已成为深度学习模型的关键组件,尤其在卷积神经网络(CNN)中发挥了重要作用。通过使模型关注输入数据中最相关的部分,注意力机制显著提升了CNN在图像分类、目标检测和语义分割等任务中的表现。本文将详细介绍CNN中的注意力机制,包括其基本概念、不同类型(如通道注意力、空间注意力和混合注意力)以及实际实现方法。此外,还将探讨注意力机制在多个计算机视觉任务中的应用效果及其面临的挑战。无论是图像分类还是医学图像分析,注意力机制都能显著提升模型性能,并在不断发展的深度学习领域中扮演重要角色。
125 10
|
20天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
1月前
|
监控 PyTorch 数据处理
通过pin_memory 优化 PyTorch 数据加载和传输:工作原理、使用场景与性能分析
在 PyTorch 中,`pin_memory` 是一个重要的设置,可以显著提高 CPU 与 GPU 之间的数据传输速度。当 `pin_memory=True` 时,数据会被固定在 CPU 的 RAM 中,从而加快传输到 GPU 的速度。这对于处理大规模数据集、实时推理和多 GPU 训练等任务尤为重要。本文详细探讨了 `pin_memory` 的作用、工作原理及最佳实践,帮助你优化数据加载和传输,提升模型性能。
84 4
通过pin_memory 优化 PyTorch 数据加载和传输:工作原理、使用场景与性能分析
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
115 1
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
2月前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
232 1
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化卷积神经网络(Bayes-CNN)的多因子数据分类识别算法matlab仿真
本项目展示了贝叶斯优化在CNN中的应用,包括优化过程、训练与识别效果对比,以及标准CNN的识别结果。使用Matlab2022a开发,提供完整代码及视频教程。贝叶斯优化通过构建代理模型指导超参数优化,显著提升模型性能,适用于复杂数据分类任务。
|
5月前
|
机器学习/深度学习 PyTorch 编译器
Pytorch的编译新特性TorchDynamo的工作原理和使用示例
PyTorch的TorchDynamo是一个即时编译器,用于优化动态图执行,提高运行效率。它在运行时分析和转换代码,应用优化技术,如操作符融合,然后编译成高效机器码。通过一个包含特征工程、超参数调整、交叉验证的合成数据集示例,展示了TorchDynamo如何减少训练时间并提高模型性能。它易于集成,只需对现有PyTorch代码进行小改动,即可利用其性能提升。TorchDynamo的优化包括动态捕获计算图、应用优化和编译,适用于实时应用和需要快速响应的场景。
92 11
|
5月前
|
资源调度 PyTorch 调度
多任务高斯过程数学原理和Pytorch实现示例
本文探讨了如何使用高斯过程扩展到多任务场景,强调了多任务高斯过程(MTGP)在处理相关输出时的优势。通过独立多任务GP、内在模型(ICM)和线性模型(LMC)的核心区域化方法,MTGP能够捕捉任务间的依赖关系,提高泛化能力。ICM和LMC通过引入核心区域化矩阵来学习任务间的共享结构。在PyTorch中,使用GPyTorch库展示了如何实现ICM模型,包括噪声建模和训练过程。实验比较了MTGP与独立GP,显示了MTGP在预测性能上的提升。
101 7
|
4月前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习中的卷积神经网络(CNN)原理与实践
【8月更文挑战第31天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力脱颖而出。本文将深入浅出地探讨卷积神经网络(CNN)这一核心组件,解析其在图像识别等领域的应用原理,并通过Python代码示例带领读者步入实践。我们将从CNN的基本概念出发,逐步深入到架构设计,最后通过一个简易项目展示如何将理论应用于实际问题解决。无论你是深度学习的初学者还是希望深化理解的实践者,这篇文章都将为你提供有价值的洞见和指导。

热门文章

最新文章

下一篇
DataWorks