参考王老师的ppt:https://github.com/wangshusen/DeepLearning
1. Processing Categorical Features 处理类别特征
处理分类特征属于数据处理的第一步,数值特征(numerical feature)可以保留不作处理,但类别特征(categorical feature)必须转换成独热向量(one-hot vector)。首先将类别特征转成数值索引,然后根据数值索引转成独热向量。
注:
1. 数值索引必须从1开始,因为索引0用于表示不清楚或空缺的具体类别。
2. 数值索引必须转成独热向量是因为数值计算量和存储空间需求都很大。
2. Align Sequences 统一序列
每个时间序列的长度不一致,我们必须将其处理成同等长度的序列。我们可以设置一个阈值w,所有长度大于w的序列裁剪掉前面一部分(或后面一部分)的数据,所有长度小于w的序列用null补满。
3. Processing Text Data 处理文本数据
1. Tokenization(Text to Words)
* char-level:一个字符是一个token
* word-level:一个单词是一个token
2. Count Word Frequencies
统计每个token的出现次数,排序后将其按排名转成数值索引,并去除部分低频token,最终整合成的哈希表就是字典dictionary。
3. One-Hot Encoding
将每个token的数值索引转成独热变量,不存在的或错误的token可以编码为0。
4. Word Embedding:word to vector 词嵌入
由于字典中token数量过多,像英语单词就能达到10K以上的数量,这样转成的独热向量维度很大,因此我们通过词嵌入的方式将每个向量进一步处理成低维向量。
该参数矩阵P可以直接使用网上现成的词向量矩阵,也可以使用模型进行训练,包括CBOW(Continuous bag of words连续词袋模型)、Skip-gram、GloVe(global vector)、FastText(将英文单词分割成两部分,分别进行embedding,即子词嵌入subword embedding)等等。
注:embedding参数矩阵可以pretraining,否则词向量维度过高会导致overfitting。
1. Train a model on large dataset。
2. Keep only the embedding layer。
3. Train new LSTM and output layers。
5. RNN/LSTM/Stacked RNN/Bi-RNN/Bi-LSTM/Seq2Seq/Attention/Self-attention/Transformer 选择深度学习模型训练
RNN
缺点:RNN不擅长分析长序列,会遗忘最前面的数据信息。
LSTM
LSTM用于解决RNN对前面数据的遗忘问题,GRU(Gate Recurrent Unit)是LSTM的变体。LSTM包括传送带Conveyor Belt、遗忘门Forget Gate、输入门Input Gate、New Value和输出门Output Gate,而GRU只包括更新门和重置门。
Stacked RNN——多层RNN
GRU(Gate Recurrent Unit)
Bi-RNN(Bidirectional RNN)——双向RNN
Bi-LSTM(Bidirectional LSTM)——双向LSTM
Seq2Seq
Loss:CrossEntropy(y,p)损失函数的值越小,说明下一个字母预测越准确,损失函数计算梯度并将梯度反向传播回到Encoder和Decoder,并通过梯度下降优化两个模型的参数,一直迭代使得损失越来越小。Encoder可以改用Bi-LSTM,但Decoder不能,因为Decoder本质上是一个文本生成器,必须从左到右阅读预测。
Attention
注:为什么要引入attention?attention同样也能解决RNN会遗忘最前面数据信息的问题。
Weight用于表示hi与s0的相关性,即在attention中我们必须算出Decoder每次的输入s与Encoder的每个状态hi的相关性。所有α的和为1且都是正数,生成权重α有两种方案:
Self-attention
self-attention只用在一个RNN上,可以提高RNN的准确度。(所以也可以用来处理时间序列分类)
注:下图中c0和h0初始都为0向量,所以c1为α1*h1,由于α代表每个h状态的权重,而目前只有一个状态h1,因此α1为1,即c1为h1。
Transformer