为什么CNN可以文本分类?
1,CNN的特性是用局部连接代替了全连接,CNN在2D的图像领域,前提假设是数据在二维空间上存在着局部相关性。如果输入不存在这个局部相关性,即shuffle也不影响,也就不适合用CNN了。
文本语言中单个词单独看待和多个词组合的语义是有差别,即之间是有局部相关性的。
文本上将一个句子embedding后得到二维特征矩阵,类似图像的应用,只是这里是一维窗口滚动,即每个卷积核的一次考虑n个词的全部特征。
2,类似于传统方法用n-gram提特征来做文本分类,n-gram是考虑局部统计信息的语言模型,CNN在文本上近似于n-gram的应用。
CNN提取的是词的组合特征,相当于由网络自己实现n-gram。
同时n-gram可以自动计算每个组合词的每个核的权重。
相关:
RNN的假设是数据在时序上存在相关性。时序上则可以认为是一维上。
CNN分类调参:filter_size的选择
CNN的计算
1. CNN的feature map size计算
若输入为 [input_height x input_width] , 对于kernel: [kernel_height x kernel_width],再考虑上[padding],[stride],得到的output_size:
2. CNN参数量计算
卷机内部实现实际上就是矩阵相乘,每个kernel有 x * y 个weight 加上一个 bias。
比如有3种filter_size,如文本分类中,取[3,4,5],而filter_num = 128, 则有 3x128 个kernel,每个经过maxpooling后都是一个数,可知经过CNN后得到的vector为 3x128维。后续可接全连接等操作。
3. CNN的BP计算
RNN的特点
RNN是一种串行计算的递推式的计算函数,即每一时刻计算都是参考之前的传递的信息。
在t0时刻,s_0一般初始化为0。
过拟合的判断和处理
原因:
把学习进行的太彻底,把样本数据的所有特征几乎都习得了。
1,数据量少,训练集与测试集的分布不一致;2,模型太过复杂。
判断:
1. 绘图训练集和验证集的曲线。
2. 观察训练集与测试集的表现。过拟合最直观的表现就是 training accuracy 特别高,但是test accuracy 特别低,即两者相差特别大。训练完了以后可以测试一下网络在训练集的正确率,如果和测试集的正确率相差特别大(比如20%),则说明网络过拟合了。
预防处理:
训练数据的选取,本身的局部特征应尽可能少,噪声也尽可能小。
限制机器的学习,使机器学习特征时学得不那么彻底
1,从数据下手,增加数据量。
2,使用early stopping。限制模型学习得太过。在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch 没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了。
3,正则化,添加正则化惩罚项来限制参数的解空间。否则模型为了拟合所有训练数据,w可以变得任意大且不稳定,直观看就是对局部特征太敏感。