一 前置的基础知识
1 单层感知机
单层感知机:只有一个神经元,它没有隐藏层
,这里的
就是神经网络中的sigmoid激活函数,如果没有激活函数那么
与多元线性函数一摸一样。
中的{
,
, .....
,
} 是线性回归中每个样本对应x轴上的值,在向量数据库中是embedding嵌入后的样本向量数据,
是回归函数中的回归系数,
是回归函数中的截距
2 BP神经网络
BP神经网络:用反向传播算法训练的多层前馈神经网络,它包含输入层、若干隐藏层、层与层之间全连结。
x —> 隐藏层 —> ....... —>输出层 —>
反向传播指的是算法训练的一种方法,它根据损失函数,从输出层向输入层逐层计算每个参数对损失的梯度,然后用梯度下降等优化器更新参数。
=
+
二 RNN
RNN是BP神经网络的一种,RNN引入隐状态作为“记忆”,在时间步之间循环传递,且所有的时间步共享同一组参数,把RNN按时间轴展开,它等价于一个权重共享的深层前向网络(深度=序列长度),因此可以直接用反向传播训练,这个算法叫做BPTT.
x_0 → h_0 → h_1 → h_2 → ... → h_T ↓ ↓ ↓ ↓ y_0 y_1 y_2 ... y_T把t = 1, 2, 3展开看就会很清楚:
在t不同的时间点下,权重、
、
的值都是一致的,但下一个时间点t的h是基于t - 1时刻
的值计算出的,因此RNN包含了过去时间点的一些数据,但又因为它是反向传播的,在训练时计算损失函数时,会有梯度消失的问题,因此它虽然有记忆的一些能力,但也是很近的几个时间点的记忆,时间较长时它有记忆丢失的问题。
三 LSTM长短时记忆网络
LSTM 仍然是循环网络,也按时间展开,但它把 RNN 的单一隐状态改成了两个状态:
ct:细胞状态,cell state,类似“长期记忆主干道”,
ht:隐状态,对外输出,也参与下一步计算,
它多了三个门函数,用来控制留下过去的哪些数据,传给下一层多少数据,在输入到当前层时输入多少数据,门本质上是sigmoid输出的0到1之间的软开关:
这里的sigmoid函数专门用于将数值转换为0-1之间的数值
三个门与候选记忆底层原理:
设当前输入为,上一时刻隐状态
:
遗忘门:可以看到在下面公式中将上一刻的数据与这一刻新输入的数据做了一次合并,然后经过
处理掉不需要的数据,因此它叫遗忘门
输入门:决定新候选记忆写入多少,这个与遗忘门不同的是
候选记忆:可以看到下面的公式与RNN用到的函数是同一个tanh
更新细胞状态:
公式里的是逐元素相乘。
输出门:决定细胞状态有多少暴露成当前隐状态
小结
RNN的底层是:,靠隐状态循环传递历史,LSTM的底层是:在细胞中加入隐式状态
,用遗忘门、输入门、输出门控制记忆的保留、写入和输出,使梯度更容易沿细胞状态长距离传播,从而缓解RNN的梯度消失和长期依赖问题。
import torch import torch.nn as nn nn.RNN封装了RNN常用的API nn.LSTM封装了LSTM常用的API