论文《Fast and Accurate Entity Recognition with Iterated Dilated Convolutions》

提出了一种基于迭代膨胀卷积神经网络(IDCNN)的快速准确命名实体识别方法,解决了传统CNN在序列标注问题上的局限,通过增加dilationwidth实现了更广阔的输入覆盖,参数线性增加而receptivefield指数增加,有效利用并行计算优势。

论文地址:Fast and Accurate Entity Recognition with Iterated Dilated Convolutions

对于序列标注问题,普通的CNN有一个劣势:卷积之后,末层神经元可能只是得到了原始输入数据中一小块的信息。而对于命名实体识别,整个句子的每个字对当前需要标注的字产生影响。为了覆盖更多的信息,加入更多的卷积层,这样会导致层数越来越深,参数越来越多,为防止过拟合要加入更多的Dropout之类的正则化,带来更多的超参数,整个模型变得庞大和难以训练。

BiLSTM之类的网络结构,能够尽可能的记住全局的信息来对单个字做标注。但问题是,并行计算能力不如CNN强大。

该论文提出了一个dilated CNN的模型。
想法其实很简单:正常CNN的filter,都是作用在输入矩阵一片连续的位置上,不断sliding做卷积。dilated CNN为这片filter增加了一个dilation width,作用在输入矩阵的时候,会skip掉所有dilation width中间的输入数据;而filter矩阵本身的大小仍然不变,这样filter获取到了更广阔的输入矩阵上的数据,看上去就像是“膨胀”了一般。

具体使用时,dilated width会随着层数的增加而指数增加。这样随着层数的增加,参数数量是线性增加的,而receptive field却是指数增加的,可以很快覆盖到全部的输入数据。

在这里插入图片描述

对应在文本上,输入是一个一维的向量,每个元素是一个character embedding:

在这里插入图片描述

模型是4个大的相同结构的Dilated CNN block拼在一起,每个block里面是dilation width为1, 1, 2的三层Dilated卷积层,所以叫做 Iterated Dilated CNN。

IDCNN对输入句子的每一个字生成一个logits,这里就和biLSTM模型输出logits之后完全一样,放入CRF Layer,用Viterbi算法解码出标注结果。

在biLSTM或者IDCNN这样的深度网络模型后面接上CRF层是一个序列标注很常见的方法。biLSTM或者IDCNN计算出的是每个词分类的概率,而CRF层引入序列的转移概率,最终计算出loss反馈回网络。

缺点:1)会丢失局部信息; 2)虽说可以看得比较远,但是有时候远距离的信息并没有相关性。

应用场景:1)需要全局信息的图像任务; 2)需要解决长距离信息依赖的语音与文本任务。

由于给定的参考引用未涉及EEG - DCNET快速准确的MI - EEG扩张卷积神经网络分类方法的相关内容,结合专业知识,EEG - DCNET是用于运动想象脑电图(MI - EEG)信号分类的方法。 MI - EEG信号反映了人类在进行运动想象时大脑皮层的电活动变化,对于脑机接口等领域有重要意义。EEG - DCNET利用扩张卷积来构建网络结构。扩张卷积可以在不增加参数数量的情况下,增大卷积核的感受野,让网络能够捕捉到更广泛的上下文信息,有助于提取EEG信号中的长距离依赖特征。 该方法具备快速和准确的特点。快速体现在其网络结构经过优化设计,能够在较短时间内完成对EEG信号的处理和分类,提高了系统的实时性,这对于实际应用中的脑机接口系统尤为重要。准确则源于扩张卷积对EEG信号特征的有效提取,以及网络对特征的学习和分类能力,通过大量数据的训练,网络可以学习到EEG信号中与不同运动想象任务相关的特征模式,从而准确地对信号进行分类。 ```python # 以下是一个简单的扩张卷积层示例代码 import torch import torch.nn as nn # 定义一个扩张卷积层 class DilatedConv(nn.Module): def __init__(self, in_channels, out_channels, kernel_size, dilation): super(DilatedConv, self).__init__() self.conv = nn.Conv1d(in_channels, out_channels, kernel_size, dilation=dilation) def forward(self, x): return self.conv(x) # 示例使用 in_channels = 16 out_channels = 32 kernel_size = 3 dilation = 2 dilated_conv = DilatedConv(in_channels, out_channels, kernel_size, dilation) # 模拟输入数据 batch_size = 8 sequence_length = 100 input_data = torch.randn(batch_size, in_channels, sequence_length) # 进行前向传播 output = dilated_conv(input_data) print(output.shape) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值