语言模型和序列生成(Language model and sequence generation)

来源:Coursera吴恩达深度学习课程

在自然语言处理中,构建语言模型(language model)是最基础的也是最重要的工作之一,并且能用RNN很好地实现。在这篇文章中,我们将学习用RNN构建一个语言模型。所以什么是语言模型呢?

如上图,比如一个语音识别系统,你听到一个句子,“the apple and pear(pair) salad was delicious.”,所以究竟说了什么?是 “the apple and pair salad”,还是“the apple and pear salad”?(pear和pair是近音词)。你可能觉得应该更像第二种,事实上,这就是一个好的语音识别系统要帮助输出的东西,即使这两句话听起来是如此相似。而让语音识别系统去选择第二个句子的方法就是使用一个语言模型,他能计算出这两句话各自的可能性。语言模型会告诉你某个特定的句子它出现的概率是多少它是两种系统的基本组成部分:语音识别系统(speech recognition systems)和机器翻译系统(machine translation systems)

对于语言模型来说,用y来表示这些序列比用x来表示要更好,然后语言模型会估计某个句子序列中各个单词出现的可能性。那么如何建立一个语言模型呢?

如上图,为了使用RNN模型,首先需要一个训练集(training set),包含一个很大的英文文本语料库(word corpus)或者其它的语言的语料库。语料库是自然语言处理的一个专有名词,意思就是很长的或者说数量众多的英文句子组成的文本。

例如,在训练集中得到这么一句话,“Cats average 15 hours of sleep a day.”(猫一天睡15小时),接下来需要(1)将这个句子标记化(tokenization),建立一个字典,然后将每个单词都转换成对应的one-hot向量,也就是字典中的索引。可能要定义句子的结尾,一般的做法就是增加一个额外的标记,叫做EOS(End Of Sentence),它表示句子的结尾,这样能够帮助你搞清楚一个句子什么时候结束。EOS标记可以被附加到训练集中每一个句子的结尾。在本例中我们,这句话就会有9个输入(如果你加了EOS标记)。同时,我们忽略了标点符号(punctuation),当然想加入字典也可以。

现在还有一个问题如果你的训练集中有一些词并不在你的字典里,比如“The Egyptian Mau is a bread of cat.”的词Mau,可以把Mau替换成一个叫做UNK(unknown words)的代表未知词的标志,我们只针对UNK建立概率模型,而不是针对这个具体的词Mau。完成标识化的过程后,这意味着输入的句子都映射到了各个标志上,或者说字典中的各个词上。(2)下一步我们要构建一个RNN来构建这些序列的概率模型

如上图,现在来建立RNN模型。还是这个句子“Cats average 15 hours of sleep a day.”。

①在第0个时间步,你要计算激活项a^<1>,它是以x^<1>(全为0的集合,即0向量)作为输入的函数。于是a^<1>会通过softmax进行一些预测来计算出第一个词可能会是什么,这一步其实就是通过一个softmax层来预测字典中的任意单词会是第一个词的概率,比如说第一个词是a的概率有多少,第一个词是Aaron的概率有多少,第一个词是cats的概率又有多少,就这样一直到Zulu是第一个词的概率是多少,还有第一个词是UNK(未知词)的概率有多少,还有第一个词是句子结尾标志的概率有多少,表示不必阅读。它只是预测第一个词的概率,而不去管结果是什么。在这个例子中,最终会得到单词Cats。所以softmax层输出10,000种结果,因为你的字典中有10,000个词,或者会有10,002个结果,因为可能加上了未知词和句子结尾这两个额外的标志。

②然后RNN进入下个时间步,在下一时间步中,仍然使用激活项a^<1>,这一步计算出第二个词会是什么。我们会告诉它第一个词就是Cats,这就是为什么y^<1> = x^<2>。在第二个时间步中,输出结果同样经过softmax层进行预测,RNN的职责就是预测这些词的概率),而不会去管结果是什么。所以在这种情况下,Andrew猜正确答案会是average,因为句子确实就是Cats average开头的。

③然后再进行RNN的下个时间步,现在要计算a^<3>。为了预测第三个词,也就是15,我们现在给它之前两个词,告诉它Cats average是句子的前两个词,所以这是下一个输入, x^<3> = y^<2> ,计算出字典中每一个词的概率,通过之前得到的Cats和average,在这种情况下,正确结果会是15,以此类推。

一直到最后,你会停在第9个时间步,最后的得到结果会是EOS标志,在这一步中,通过前面这些得到的单词,不管它们是什么,我们希望能预测出EOS句子结尾标志的概率会很高。

所以RNN中的每一步都会考虑前面得到的单词,这就是RNN如何学习从左往右地每次预测一个词。

接下来为了训练这个网络,我们要定义代价函数(cost function)。如下式:

而总体损失函数,也就是把所有单个预测的损失函数都相加起来。表达式如下:

如果你用很大的训练集来训练这个RNN,你就可以通过开头一系列单词像是Cars average 15或者Cars average 15 hours of来预测之后单词的概率。

这就是用RNN训练一个语言模型的基础结构。下一节课用语言模型做的一件最有趣的事就是从模型中进行采样

说明:记录学习笔记,如果错误欢迎指正!转载请联系我。

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值