循环神经网络
可以借助说一句话的序列为例子
首先由于输入值x1.。。。。Xn 其实是一句话根据时间步进行划分的(同一个向量) 所以整个循环神经网络中的参数是共享的 然后第一步就是输入x1 然后还有一个初始状态h0(通常是0向量)然后通过线性函数和tanh激活函数得出新的状态h1 当作下一时间步的输入状态,那么x1对应的输出y1可以直接是h1 也可以是根据h1算出的信息值
LSTM:与RNN区别就是多了一个细胞状态 这个可以解决RNN无法进行长期记忆回溯的功能 原理首先是RNN的基本的原理全保留下来 然后就多了一个细胞状态C C1、h1 和当前的输入x2 通过sigmoid和tanh 函数得出C2、h2
仔细点就是x2和h1相加通过sigmoid得出遗忘权重a和更新权重b 输出权重k
然后a乘以c1 相当于将c1中某些信息遗忘 得出遗忘细胞状态
然后 x2和h1组合通过tanh函数算出新的细胞状态(不算是c2)这个新的细胞状态与b相乘得出更新细胞状态 然后与前面的遗忘细胞状态进行相加得出c2
c2再通过tanh函数换算成输出值 接着与输出权重相乘得h2
双向RNN:
一个正向rnn 一个反向rnn 正向的和普通的一样 反向的是相反方向的 实际应用上正向处理上文 反向处理下文 可以结合两个来进行训练
Seq2Seq模型
Encoder:
Transformer中的编码器 ,其原理就是RNN(其实可以用不同的 反正都是为了编码而已 根据需求决定)然后其RNN得出的所有隐藏状态 形成编码C
Decoder、注意力机制:
首先当前解码器的状态是根据前一步的解码器状态和当前输入(前一步输出)(预测且在初始时则可以用一些初始字符)决定,然后根据计算当前解码器的状态与编码器各时间步的状态的相关性 进行分配权重(其中要用softmax进行概率归一化) 然后再根据注意力权重计算上下文向量(编码器状态的加权和) 然后通过上下文向量和当前状态和输入得出输出
self attention:
在自身中寻找相关性 无论是RNN还是LSTM都是按次序计算 对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。但是Self Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,且计算是并行的 不需要按次序进行计算。具体计算:
假设a1、a2、a3、a4为self attention的输入 先计算234跟1的相关性 首先a1×Wq(一个系数矩阵)得a 然后1234分别×Wk得b 然后ab两个矩阵点乘 得 c1 c2 c3 c4(相关数)进行softmax 然后a1234各自×Wv得v1234 v1234再各自×c1234 各结果相加得a1经过self attention的输出h2