Transformer
变形金刚:每个encoder又拆解成立self-Attention和前馈神经网络两个模块
模型确实很复杂
- SeqtoSeq模型,有一个Encoder和一个Decoder
- 不是RNN
- 没有循环的结构,只有attention和全连接层
- 实现效果非常好!
基于attention的神经网络 剥离RNN 保留attention
每计算出一个C,就要重新计算一遍权重a:
权重是h_i与s_j的函数
W_k,W_v和W_q是参数,参数需要从数据中学习
先将当前状态s_j映射到query向量
RNN:
数据预处理基础
Categorical Feature 转化为 机器学习可以理解的数值特征
Word embedding(词嵌入)
Tex to Sequence 文本处理(其实很重要,这直接影响机器学习的学习率)
Step1 Tokenization
- 两种类型 char word
- 是否要关心数据的大小写
- 是否要删掉一些stop word 例如 “a”, "of" 等
- 是否要进行纠错 goood to good
Step2 Build Dictionary
token_index = {"the":1,"cat":2,.......}
Step3 One-Hot Encoding
两个句子可能得到不同长度的tokens
Step4 Align Sequences
如何将序列对齐
- 将序列的长度固定为w,如果序列的长度超过了w,那就砍掉前面的,或者砍掉后面的
- 如果序列的长度较短,那就zero_pedding,就是用零来进行填充
所有序列的长度都是w,就都可以存在一个矩阵中
从训练数据中提取出一个参数矩阵
Simple RNN
双曲正切函数 tanh(x) 作为激活函数 用在
h_{t}依赖于h_{t-1},x_{t},A
GRU:
基于RNN
讲明要特别关心一些地方,特别不关心一些地方
能关注的机制:更新门
能遗忘的机制:遗忘门
SeqtoSeq模型:
Encoder RNN
Decoder RNN
若是输入的模型很长,输入的模型会记不住完整的句子,Encoder的最后一个状态会漏掉一些信息
BLEU:是评价机器翻译好坏的标准
。。。。。(这一块的内容待补充和更新中)
Attention模型:
为了解决遗忘的问题,引入Attention机制(2015年提出)
计算h_i 与 s_0 的相关性
第一种(用在attention机制的第一篇论文中)
第二种(更常用的一种,与transformer的方法是一样的)
- 出现了两个参数矩阵W_{K} 与W_{Q},这两个参数矩阵要从训练数据中学习
- 这里得到权重的方式与transformer是一样的
从而可以得到a1,a2,a3.....an个值 这些被称为权重
包含了Encoder输入从x1,x2,x3,,,,,xm的所有的完整的信息,这样Encoder可以知道decoder完整的输入,从而可以解决遗忘的问题
S_0是decoder最终得到的状态
SimRNN更新状态的方式,只需要知道新的输入与旧的状态,他并不会去看Encoder的状态
使用了Attention处理机制之后的更新公式
更新完S1之后,重新计算这些权重
如此循环下去即可以连续地计算下去
权重的可视化效果
attention的缺点:数据量太大了
Self-Attention模型:
用c_0取代h_0
计算权重
新的h这样计算
然后计算c_3,
,再得到c_3,然后循环下去即可
RNN都有遗忘的问题,
......To be continued