• 【NLP入门教程】二十三、循环神经网络(RNN)| 小白专场


    本教程旨在为初学者提供一份全面而系统的NLP入门指南,探索NLP的核心概念、方法和技术。无论你是计算机科学的新手,还是对自然语言处理领域感兴趣的研究人员,本教程都将为你提供所需的基础知识和实用技能。

    当谈到自然语言处理(NLP)时,深度学习已经成为一种强大而广泛应用的技术。深度学习是一种机器学习方法,通过构建具有多层神经网络的模型来模拟和学习数据的复杂特征。在NLP领域,深度学习模型已经在多个任务上取得了突破性的性能,如文本分类、情感分析、机器翻译等。


    🚀🚀🚀往期精彩文章:

    循环神经网络(RNN)

    循环神经网络(Recurrent Neural Networks,简称RNN)是一类特殊的神经网络,用于处理序列数据。与传统的前馈神经网络不同,RNN 在处理序列数据时引入了循环结构,使得网络可以保持一种记忆能力,能够更好地处理时序信息。RNN 在自然语言处理(NLP)、语音识别、时间序列预测等任务中取得了显著的成功。在本节中,我们将深入探讨RNN的原理、数学表达以及其在NLP中的应用。

    1. RNN基本原理


    RNN的核心思想是将当前时刻的输入和上一时刻的隐状态(hidden state)结合起来来进行计算。这种结构允许网络在处理序列数据时对先前的信息进行编码,从而具备处理时序信息的能力。在每个时间步上,RNN的计算可以表示如下:

    h t = activation ( W h h ⋅ h t − 1 + W x h ⋅ x t + b h ) h_t = \text{activation}(W_{hh} \cdot h_{t-1} + W_{xh} \cdot x_t + b_h) ht=activation(Whhht1+Wxhxt+bh)

    其中, h t h_t ht 是当前时刻的隐状态, h t − 1 h_{t-1} ht1 是上一时刻的隐状态, x t x_t xt 是当前时刻的输入, W h h W_{hh} Whh W x h W_{xh} Wxh b h b_h bh 是可学习的参数, activation \text{activation} activation 是激活函数。

    2. BPTT:RNN的反向传播


    为了训练RNN,我们需要定义损失函数并通过反向传播算法来更新网络的参数。在RNN中,我们使用一种称为Backpropagation Through Time(BPTT)的算法来完成反向传播。BPTT的过程与传统的反向传播类似,但由于RNN的循环结构,需要在时间维度上展开计算梯度。

    BPTT的数学表达式如下:

    ∂ L ∂ W h h = ∑ t = 1 T ∂ L t ∂ W h h \frac{\partial L}{\partial W_{hh}} = \sum_{t=1}^{T} \frac{\partial L_t}{\partial W_{hh}} WhhL=t=1TWhhLt

    ∂ L ∂ W x h = ∑ t = 1 T ∂ L t ∂ W x h \frac{\partial L}{\partial W_{xh}} = \sum_{t=1}^{T} \frac{\partial L_t}{\partial W_{xh}} WxhL=t=1TWxhLt

    其中, L L L 是损失函数, L t L_t Lt 是在时间步 t t t 上的损失, T T T 是序列的长度。

    3. 长短时记忆网络(LSTM)


    尽管RNN具备一定的记忆能力,但它面临着长期依赖问题,即在处理长序列时,隐状态的信息可能在时间上逐渐消失,导致较远的输入信息无法有效传递。为了解决这个问题,我们引入了长短时记忆网络(Long Short-Term Memory,简称LSTM)。

    LSTM引入了称为门控机制的组件,包括输入门(input gate)、遗忘门(forget gate)和输出门(output gate)。这些门控制着信息的流动,允许LSTM在处理长序列时更好地保留和使用先前的信息。

    LSTM的数学表达式如下:

    其中, i t i_t it f t f_t ft o t o_t ot 分别是输入门、遗忘门和输出门的激活向量, C ~ t \tilde{C}_t C~t 是候选细胞状态, C t C_t Ct 是细胞状态, h t h_t ht 是隐状态, σ \sigma σ 是sigmoid激活函数, ⊙ \odot 表示逐元素乘法。

    4. 双向循环神经网络(BiRNN)


    双向循环神经网络(Bidirectional RNN,简称BiRNN)是一种结合了正向和反向信息的网络。在传统的RNN中,我们只利用了过去的信息,而忽略了未来信息。BiRNN通过在同一层次上构建两个RNN,一个正向处理序列,一个反向处理序列,从而有效利用了全部序列信息。

    BiRNN的输出由两个RNN输出连接而成,可表示为:

    h t = [ h t → , h t ← ] h_t = [\overrightarrow{h_t}, \overleftarrow{h_t}] ht=[ht ,ht ]

    其中, h t → \overrightarrow{h_t} ht 是正向RNN在时刻 t t t 的隐状态, h t ← \overleftarrow{h_t} ht 是反向RNN在时刻 t t t 的隐状态。

    5. 应用示例:情感分类


    现在,让我们通过一个简单的NLP任务来演示RNN在实际中的应用。我们将使用情感分类作为示例,将一段文本分类为正面情感或负面情感。

    假设我们有以下训练数据:

    文本情感
    “这部电影太棒了!”正面
    “这个餐馆很糟糕。”负面
    “我喜欢这个产品。”正面
    “这个服务很差。”负面

    首先,我们需要将文本数据转换为数值向量,通常使用词嵌入来表示每个单词。然后,我们可以构建一个简单的RNN模型来进行情感分类。

    import tensorflow as tf
    from tensorflow.keras.layers import Embedding, SimpleRNN, Dense
    
    # 定义词汇表大小和词向量维度
    vocab_size = 10000
    embedding_dim = 100
    
    # 构建RNN模型
    model = tf.keras.Sequential([
        Embedding(vocab_size, embedding_dim),
        SimpleRNN(64),
        Dense(1, activation='sigmoid')
    ])
    
    # 编译模型
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    
    # 训练模型
    model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这个例子中,我们使用了一个简单的RNN层来处理序列数据,并在顶部添加了一个全连接层来输出二分类的结果。模型将文本转换为词向量后,通过RNN层进行序列处理,最终输出正面或负面情感的预测结果。

    结论

    本节中,我们深入探讨了循环神经网络(RNN)的基本原理、数学表达以及其在NLP中的应用。我们还介绍了LSTM和双向RNN的概念,并通过情感分类示例演示了RNN在实际NLP任务中的应用。RNN作为一种强大的序列处理工具,在NLP领域发挥着重要作用,但也有其局限性。为了更好地处理长序列和解决长期依赖问题,我们还可以探索更复杂的循环单元结构,如GRU和Transformer等。

    深入学习循环神经网络和其他NLP技术将帮助你在自然语言处理领域取得更进一步的进展。希望本节内容对你理解和学习NLP有所帮助。

  • 相关阅读:
    若依框架,集成flowable工作流
    在Visual Studio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)
    Swagger示例
    【每周AI简讯】Stable Diffusion 3大版本更新
    【uniapp上传单图】uniapp开发小程序,上传单张图片。
    Next.js和sharp实现占位图片生成工具
    koa2+vue3通过exceljs实现数据导出excel文档
    DX-11Q信号继电器
    tracemalloc分析内存使用情况与泄露
    vivo互联网机器学习平台的建设与实践
  • 原文地址:https://blog.csdn.net/m0_68629936/article/details/131969493