一、神经网络的基本概念
1. 前馈神经网络
前馈神经网络是一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。
前馈神经网络(feedforward neural network)是种比较简单的神经网络,只有输入层input layer (黄)、隐藏层hidden layer (绿)、输出层output layer (红)
2.网络层数、输入层、隐藏层、输出层、隐藏单元、激活函数
如上图,神经网络神经元中,上层节点的输入值从通过加权求和后,到输出下层节点之前,还被作用了一个函数,这个函数就是激活函数(activation function),作用是提供网络的非线性建模能力。
每个神经元中有三个组成部分:权重(weight)矩阵W,偏置(bias)向量b,以及激活函数(activation function) g
激活函数
所谓激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。
激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。 那么激活函数应该具有什么样的性质呢?
可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate。
二、深度学习中的正则化
参考文献 https://blog.csdn.net/weixin_39845112/article/details/80114918
正则化的形式很简单,是在目标函数后额外附加一项,使其影响目标函数最优点的选取。这种方法叫做正则化方法。
正则化可以解决过拟合问题。
从贝叶斯论者的角度来说,我们知道,深度学习使用神经网络将样本空间映射到特征的概率分布空间。当映射函数可能存在的空间太大时,我们通过学习方法得到的映射函数可能并不满足现实世界的一些规则,所以在泛化,即推广到未训练过的现实世界真实存在的数据集(验证集)时,得到的结果会变差,这叫做“Variance”大,说明模型过拟合了。
正则化的作用
正则化可以解决过拟合问题。
三、深度模型中的优化
参考文献 https://blog.csdn.net/u012756814/article/details/79995133
四、FastText的原理
https://github.com/facebookresearch/fastText#building-fasttext-for-python
fastText方法包含三部分,模型架构,层次SoftMax和N-gram子词特征
fastText的架构和word2vec中的CBOW的架构类似,因为它们的作者都是Facebook的科学家Tomas Mikolov,而且确实fastText也算是word2vec所衍生出来的。
参考文献 https://www.cnblogs.com/huangyc/p/9768872.html
- fastText模型架构:
其中x1,x2,…,xN−1,xNx1,x2,…,xN−1,xN表示一个文本中的n-gram向量,每个特征是词向量的平均值。这和前文中提到的cbow相似,cbow用上下文去预测中心词,而此处用全部的n-gram去预测指定类别。
- 层次SoftMax
对于有大量类别的数据集,fastText使用了一个分层分类器(而非扁平式架构)。不同的类别被整合进树形结构中(想象下二叉树而非 list)。在某些文本分类任务中类别很多,计算线性分类器的复杂度高。为了改善运行时间,fastText 模型使用了层次 Softmax 技巧。层次 Softmax 技巧建立在哈弗曼编码的基础上,对标签进行编码,能够极大地缩小模型预测目标的数量。
fastText 也利用了类别(class)不均衡这个事实(一些类别出现次数比其他的更多),通过使用 Huffman 算法建立用于表征类别的树形结构。因此,频繁出现类别的树形结构的深度要比不频繁出现类别的树形结构的深度要小,这也使得进一步的计算效率更高。
3. N-gram子词特征
fastText 可以用于文本分类和句子分类。不管是文本分类还是句子分类,我们常用的特征是词袋模型。但词袋模型不能考虑词之间的顺序,因此 fastText 还加入了 N-gram 特征。在 fasttext 中,每个词被看做是 n-gram字母串包。为了区分前后缀情况,"<", ">"符号被加到了词的前后端。除了词的子串外,词本身也被包含进了 n-gram字母串包。以 where 为例,n=3n=3 的情况下,其子串分别为 <wh, whe, her, ere, re>,以及其本身 。
四、利用FastText模型进行文本分类
参考文献 https://blog.csdn.net/weixin_43977375/article/details/90200837
运算结果
precision {'Technology': 983, 'Education': 972, 'Shares': 988, 'Affairs': 975, 'Entertainment': 991, 'Financ': 982, 'Furnishing': 975, 'Gam': 841, 'Sociology': 946, 'Sports': 978}
recall {'Technology': 992, 'Education': 1013, 'Shares': 1007, 'Affairs': 995, 'Entertainment': 1022, 'Financ': 1001, 'Furnishing': 997, 'Gam': 854, 'Sociology': 1025, 'Sports': 989}
total {'Technology': 1001, 'Education': 1001, 'Shares': 1001, 'Affairs': 1001, 'Entertainment': 1001, 'Financ': 1001, 'Furnishing': 1001, 'Gam': 876, 'Sociology': 1001, 'Sports': 1001, 'Property': 11}
Technology precision: 0.9820179820179821 recall: 0.9909274193548387 F1: 0.9864525840441545
Education precision: 0.971028971028971 recall: 0.9595261599210266 F1: 0.9652432969215492
Shares precision: 0.987012987012987 recall: 0.9811320754716981 F1: 0.9840637450199202
Affairs precision: 0.974025974025974 recall: 0.9798994974874372 F1: 0.9769539078156312
Entertainment precision: 0.99000999000999 recall: 0.9696673189823874 F1: 0.9797330696984675
Financ precision: 0.981018981018981 recall: 0.981018981018981 F1: 0.981018981018981
Furnishing precision: 0.974025974025974 recall: 0.9779338014042126 F1: 0.975975975975976
Gam precision: 0.9600456621004566 recall: 0.9847775175644028 F1: 0.9722543352601155
Sociology precision: 0.945054945054945 recall: 0.9229268292682927 F1: 0.9338598223099703
Sports precision: 0.977022977022977 recall: 0.9888776541961577 F1: 0.9829145728643216