PTB递归神经网络阅读笔记
R ECURRENT N EURAL N ETWORK R EGULARIZATION
在神经网络模型中,一般分为非时序模型和时序模型,对于非时序模型而言,其应用场景有单一手写字识别、图像物体分类等等,最基本的模型是前馈式神经网络(FNN);而对于时序模型而言,其应用场景十分广泛,如连续手写字识别、语音识别、语义理解、机器翻译、看图说话、自动生成、数据压缩等等,最基础的模型是循环神经网络(RNN)。今天我们着重谈论的是RNN的基础概念。
RNN最初也是受人类的生物神经模型启发而来,因为所有的生物神经系统都是一个动态的系统,神经元与神经元之间不是孤立的而是互相产生动态影响的,这就促发了RNN的诞生。RNN相比普通的FNN的主要区别有:
- FNN的神经元是静态的,而RNN是一个动态的网络,其神经元的状态时刻处于动态变化之中
如果说FNN可以进行任意的非线性映射,那么RNN则可以拟合任意的动态系统- FNN的训练一般采用后向传播(BP)算法,而RNN一般采用随时间的后向传播(BPTT)算法>
- FNN在拟合非线性系统上取得了很大的成功,但是RNN在处理长时间时序问题上还存在着很大不足
3 通过LSTM单元来调整RNNs
所有状态的大小都是n尺寸的。让hlt∈Rn是在l 层时间步为
3.1 LSTM单元
RNN动态网络能够描述成使用确定的转变从先前的状态到目前的隐藏状态。这个确定的状态转变函数如下:
对于经典的RNNs网络,状态转变函数如下:
LSTM具有复杂的动态网络,这让LSTM网络能够很容易的“记忆”若干延长时间步的信息。这个“长期记忆”是被存储在记忆单元clt∈Rn的向量里。尽管许多LSTM单元的构建在他们的连接构建和激活函数方面都有些不同,但是所有的LSTM的构建都有明确的记忆单元用来存储一个长周期的信息。LSTM单元能够在下一个时间步重写记忆单元恢复记忆单元,或者保持记忆单元。这里有LSTM单元的构建公式如下:
在上面这些公式里,sigm和tanh都是通过逐元相乘操作应用的。下图1是LSTM单元的例子。
enter image description here
_build_vocab
train_data:总共有929589个word。
counter统计每个词出现的次数,一共有10000个word。
然后按词出现次数进行降序排序。
返回
def _build_vocab(filename):
data = _read_words(filename)
counter = collections.Counter(data)
count_pairs = sorted(counter.items(), key=lambda x: (-x[1], x[0]))
words, _ = list(zip(*count_pairs))
word_to_id = dict(zip(words, range(len(words))))
return word_to_id