自然语言处理 第十期

本文深入探讨卷积神经网络的基础,包括卷积运算、反卷积和池化操作,并详细介绍了Text-CNN在文本分类中的应用。通过对卷积运算的动机、一维与二维卷积、池化运算的种类以及反卷积的实现方式进行讲解,揭示了CNN在自然语言处理中的重要性。
摘要由CSDN通过智能技术生成

卷积神经网络基础

  1. 卷积运算的定义、动机(稀疏权重、参数共享、等变表示)。一维卷积运算和二维卷积运算。
  2. 反卷积(tf.nn.conv2d_transpose)
  3. 池化运算的定义、种类(最大池化、平均池化等)、动机。
  4. Text-CNN的原理。
  5. 利用Text-CNN模型来进行文本分类。

一、卷积运算的定义、动机(稀疏权重、参数共享、等变表示)

  1. 卷积的定义:卷积是对两个实变函数的一种数学运算。
    卷积运算通常用星号表示:s(t)=(x∗w)(t)
    在卷积网络的术语中,卷积的第一个参数(函数 x)通常叫做输入(input),第二个参数(函数 w)叫做核函数(kernel function),输出被称作特征映射(feature map)。

    在机器学习的应用中,输入通常是多维数组的数据,而核通常是由学习算法优化得到的多维数组的参数。我们通常假设在存储了数值的有限点集以外,卷积函数的值都为零,因而我们可以通过对有限个数组元素的求和来计算卷积。卷积运算通常会在多个维度上进行。

  2. 卷积的动机:
    卷积运算通过三个重要的思想来帮助改进机器学习系统: 稀疏交互(sparse interactions)、参数共享(parameter sharing)、等变表示(equivariant representa-tions)。另外,卷积提供了一种处理大小可变的输入的方法。

    1)稀疏交互:传统的神经网络使用矩阵乘法来建立输入与输出的连接关系,每一个输出单元与每一个输入单元都产生交互。然而,卷积网络具有稀疏交互(sparse interactions)的特征,这是通过使核的大小远小于输入的大小来达到的。

    如果有 m 个输入和 n 个输出,那么矩阵乘法需要 m×n个参数并且相应算法的时间复杂度为 O(m×n)。如果我们限制每一个输出拥有的连接数为 k,那么稀疏的连接方法只需要 k×n 个参数以及O(k×n) 的运行时间。在实际应用中,只需保持 k 比 m小几个数量级,就能在机器学习的任务中取得好的表现。

    2)参数共享:参数共享(parameter sharing)是指在一个模型的多个函数中使用相同的参数。

    在传统的神经网络中,当计算一层的输出时,权重矩阵的每一个元素只使用一次。而在卷积神经网络中,核的每一个元素都作用在输入的每一位置上(是否考虑边界像素取决于对边界决策的设计)。卷积运算中的参数共享保证了我们只需要学习一个参数集合,而不是对于每一位置都需要学习一个单独的参数集合。

    3)等变表示:如果一个函数满足输入改变,输出也以同样的方式改变这一性质,我们就说它是等变(equivariant)的。特别地,如果函数 f(x) 与 g(x)满足 f(g(x))=g(f(x)), 我们就说 f(x) 对于变换 g 具有等变性。

二、一维卷积运算和二维卷积运算

  1. 一维卷积:
    -
    python代码:
conv1d(value,filters, stride, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

给定三维的输入张量和滤波器来进行1维卷积计算。

input:3维张量,形状shape和data_format有关:

(1)data_format = "NWC", shape = [batch, in_width, in_channels]

(2)data_format = "NCW", shape = [batch, in_channels, in_width]

filters:3维张量,shape = [filter_width, in_channels, out_channels],

stride:滤波器窗口移动的步长,为一个整数。

padding:边界填充算法参数,有两个值:‘SAME’、‘VALID’。具体差别体现在卷积池化后,特征图的大小变化上面。

#conv1d完整源码:

def conv1d(value,
           filters,
           stride,
           padding,
           use_cudnn_on_gpu=None,
           data_format=None,
           name=None): 
  with ops.name_scope(name, "conv1d", [value, filters]) as name:
    # Reshape the input tensor to [batch, 1, in_width, in_channels]
    if data_format is None or data_format == "NHWC" or data_format == "NWC":
      data_format = "NHWC"
      spatial_start_dim = 1
      strides = [1, 1, stride, 1]
    elif data_format == "NCHW" or data_format == "NCW":
      data_format = "NCHW"
      spatial_start_dim = 2
      strides = [1, 1, 1, stride]
    else:
      raise ValueError("data_format must be \"NWC\" or \"NCW\".")
    value = array_ops.expand_dims(value, spatial_start_dim
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值