RNN
RNN简介
我们来看一看百度百科给的解释
下面是循环神经网络的一部分
黑色直线代表权重,a1,a2代表存储单元,黄色框框代表输入,曲线是激活函数
RNN常用领域
- 语言建模(Language Modeling):RNN可以根据前文预测下一个单词或字符,用于自动文本生成、拼写纠错等任务。
- 机器翻译(Machine Translation):RNN可以将输入语言的序列转换为输出语言的序列,实现自动翻译。
- 文本分类(Text Classification):RNN可以对文本进行情感分析、垃圾邮件过滤等分类任务。
- 命名实体识别(Named Entity Recognition):RNN可以识别文本中的人名、地名、组织名等实体。
RNN结构
这是一个序列模型的例子。
我们可以看出, 这个是模型是由很多个相同的网络结构结成的,因此也称它为循环神经网络。
我们将这个网络的结构进行抽象,然后展开,就得到了以下内容:
RNN的工作原理
循环神经网络的工程原理其实就是它的训练算法,一种基于时间的反向传播算法BPTT.
BPTT算法是针对循环层设计的训练算法,它的工作原理和反向传播BP的工作原理是相同的,也包含同样的三个步骤:
1.前向计算每个神经元的输出值。
2.反向计算每个神经元的误差项值,它是误差函数对神经元的加权输入的偏导数。
3.计算每个权重的梯度,用随机梯度下降法更新权重。
以下是加权输入的含义:
现在,我们就对RNN有了大致的了解,下面就让我们来具体学习它的各个部分的内容。
RNN的前向传播
我们主要观察中间那层,b我们设为0,可以忽略不计
中间结果z=前一层即隐藏层的值*隐藏层权重U+这一层的输入值*权重W
我们对z加上激活函数得到h,我们这在这里用到的是Tanh激活函数
这是隐藏层中间结果的表示方法。
输出层y的表示方法。
V在这里表示的也是权重。
g()是使用Softmax激活函数。
这是我们的输出值的最终函数,也就是一个嵌套的循环函数。
接下来,我们对应公式来书写代码
代码
import numpy as np
def forward_propagation(self,x):
T=len(x) # T为输入序列的长度
# 初始化
h=np.zeros((T+1,self.hidden_dim))
h[-1]=np.zeros(self.hidden_dim)
y_pre=np.zeros((T,self.in_shape))