system: [SYSTEM]

user: 3. 模型设计与算法流程 为了有效地提高文本的分类效率，本文采用全卷积神经网络，使用卷积层和全局平局池化层代替全连接层，结合全局平均池化层减少参数，卷积层收敛迅速、稳定且计算速度快的优势。因为去除了全连接层，所以传统卷积神经网络的Dropout层无法发挥太大的作用，本文在卷积层后加入批量标准化层(Batch Normalization)来代替Dropout层防止过拟合，同时使用Inception结构增加分类的准确率。 3.1. 总模型 本文设计的字符级全卷积神经网络(Inception-CharFcn)如图1所示，将卷积神经网络的全连接层替换为全局平局池化层加全卷积层，同时采用多尺度卷积核的思想，使用两层Inception的结构，最深处有4层卷积。设置了两个loss单元，在中间层加入了辅助计算的loss单元，目的是计算损失时让第一层的特征也有很好的区分能力，帮助网络的收敛，从而让网络能更好地训练。第一层Embedding层将输入的中文数据进行字符级嵌入操作，转换为向量矩阵，然后进入第一个Inception结构，分别由多个不同尺寸的卷积核进行卷积运算，合并特征向量后进入下一个Inception结构，再次合并后将激活的张量输入全局平均池化层(Glabal average pooling)，最终由全卷积层(Fcn)继续进行两次卷积运算并输出分类结果。输出层的长度是由具体的类别数目决定的。 图1. 模型总体结构 3.2. 全卷积和全局平均池化 全卷积神经网络是由卷积层代替传统卷积神经网络中的全连接层来实现的，因为全连接层可以看做一个特殊的卷积层，所以该神经网络将全连接层替换为等价的卷积层。其中传统卷积层的时间复杂度为公式1所示，M是输出特征向量(Feature Map)的尺寸，K为卷积核(Kernel)的尺寸，Cin为输入通道数，Cout为输出通道数。而在公式2的单个卷积层的空间复杂度公式中可以看到，卷积层的空间复杂度只与卷积核的尺寸K、通道数C相关，而与输入图片尺寸无关。 Time ∼ O ( M 2 ∗ K 2 ∗ Cin ∗ Cout ) (1) Space ∼ O ( K 2 ∗ Cin ∗ Cout ) (2) 但是将全连接层看做一个特殊的卷积层时，其卷积核尺寸K与输入矩阵X一样，每个卷积核输出特征图是一个标量点，即M = 1，如公式3和公式4所示，全连接层的空间复杂度与输入数据的尺寸密切相关。因此如果输入数据尺寸越大，模型的体积也就会越大。 Time ∼ O ( 1 2 ∗ X 2 ∗ Cin ∗ Cout ) (3) Space ∼ O ( X 2 ∗ Cin ∗ Cout ) (4) 由上述公式可以看出，如果直接将全连接层替换为卷积层，模型的大小受到输入数据尺寸的影响，参数并不会减少。而使用全局平均池化层来替换全连接层，会使模型直接降维，极大地减少模型的参数量，但是为了实现该过程，需要将最后一层卷积的输出通道数对应具体的分类类别数目，虽然这相当于直接赋予了每个输出通道实际的类别意义，但是这会导致模型的收敛速度变慢。 虽然全连接层可以看做一个特殊的卷积层，但是之间还是存在着区别。当模型训练完成时每个连接都拥有权重，其中全连接层会给每个连接分配权重但不会改变连接关系，而卷积层则会学习目标和那些特征之间的关系，有用的关系保留，没用得到关系它会弱化或者直接抛弃，同时全部卷积层可以共用一套权重，减少了重复计算，降低了模型复杂度，使模型收敛更加迅速。 所以本文使用结合全卷积和全局平均池化的结构，在不改变最后一层卷积的输出通道数的情况下，先利用全局平均池化将数据的尺寸变为1，再将数据输入全卷积层进行分类。这样不仅利用全卷积结构收敛速度快的特点解决了单一全局平均池化收敛速度缓慢的问题，同时由公式5和公式6可知，特征向量大小变为1后全卷积层复杂度只与输入、输出通道数相关，模型参数量极大减少，运算速度加快。 Time ∼ O ( Cin ∗ Cout ) (5) Space ∼ O ( Cin ∗ Cout ) (6) 3.3. 批量标准化 因为本文模型中没有全连接层，而Dropout在卷积层后的作用又不明显，所以为了归一化输入增加模型的泛化能力，我们在卷积层后添加了批量标准化层(Batch Normalization)。批量标准化(Batch Normalization )是Sergey Ioffe和Christian Szegedy [ 20 ] 在2015年的论文中提出，解决小批量随机梯度下降算法在训练过程中输入分布多变的问题。批量标准化首先对每个batch的输入 C = { X 1 ， X 2 ， ⋯ ， X m } 求平均值，其中batch size等于m，然后计算该batch每个输入的均值 μ 和方差 σ 。再然后对于所有的 X i ∈ C 进行一个标准化，把取值区间逐渐向极限饱和区靠拢的输入分布拉回到均值为0、方差为1的比较标准的正态分布，使得输入值落入比较敏感的区域，以此避免梯度消失问题，同时增大导数值，增强反向传播的流动性，加快训练收敛速度。但是上述标准化过程会导致网络的表达能力下降，为了防止这一点，最后每个神经元增加两个调节参数( γ 和 β )，这两个参数是通过训练来学习到的，通过反向变换标准化后的输入值，使得网络表达能力增强。具体计算如下列公式7至10所示： μ ← 1 m ∑ i = 1 m x i (7) σ c 2 ← 1 m ∑ i = 1 m ( x i − μ c ) 2 (8) x ^ i ← x i − μ c σ c 2 + ε (9) y i ← γ x ^ i + β ≡ B N γ ， β ( x i ) (10) 3.4. 字符表示 本文使用中文的单字作为字符向量，相较于单词级的嵌入，字符级别的嵌入能极大缩小字典的长度，降低计算成本和提升计算速度，同时能减少处理拼写错误和罕见词对分类的影响。模型的第一层为字符向量嵌入层，目的是将输入数据的向量表示同主分类任务一起进行训练，共享神经网络的权重。进行向量嵌入的第一步是对文本进行分词操作，同时去除停用词。第二步将分好词的文本按单个字的出现次数排列，并建立对应字典。 第三步建立向量嵌入层，创建一个行列分别是最大单字索引数和嵌入维度的向量矩阵，第四步对应建立的字典，将整数索引映射为字符向量，输出一个字符向量向量矩阵，最后将该矩阵输入模型进行训练。 3.5. 算法实现 算法实现步骤如下。第一步，将输入的文本按照上文描述的字符级嵌入方法进行向量化表示，使整个文本形成一个向量矩阵 A ∈ R s × d ，其中s为固定后的文本长度，d为字符嵌入向量的维度。第二步，将A输入模型与第一层Ineception结构中的多尺度卷积核进行卷积运算，得到基于不同卷积核的特征向量V i ，i代表不同的卷积核。然后应用1-Max池化来提取特征向量V i 中的最大值，所有最大值合成一个卷积最终特征 B i ∈ R k ，其中k为卷积核的数量，i代表不同卷积核。第三步，将不同卷积核的最终卷积特征B i 合并为一个新特征 X ∈ concat ( B i ) 后将新特征输入批量标准化层进行归一化和ReLU非线性激活，输出特征为 D 1 。第四步，将 D 1 输入第二层Ineception结构，重复第二步和第三步，输出特征为 D 2 。第五步，将 D 2 输入全局平均池化层，使特征向量大小变为1，形成一个新的向量矩阵 E ∈ R 1 × b ，b为构成新特征的卷积核数量之和。然后将新的矩阵E放入全卷积层，继续进行两次卷积运算，最后输出特征 F ∈ R y ，该特征就是模型的预测值，其中y为最终分类的类别数。第六步，将特征F通过argmax函数得到得分最高的项，该项就是分类预测，最后通过交叉熵计算损失函数(Loss function)用来训练模型，但不同于传统模型，本文设置的辅助loss单元会输出由 D 1 得到的辅助损失函数，该损失函数乘以0.5后和后面的损失函数值相加作为最终的损失函数来训练网络。其中损失函数的运算如公式11所示，p为分类的标签，f为预测值。 loss ( p ， f ) = − 1 n ∑ i = 1 n p ( x i ) log ( f ( x i ) ) (11)