Predicting Domain Generation Algorithms with Long Short-Term Memory Networks 解读
RNN模型
1.为什么会有RNN模型
RNN称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。CNN对于简单的猫,狗,手写数字等单个物体的识别具有较好的效果. 但是, 对于一些与时间先后有关的, 比如视频的下一时刻的预测,文档前后文内容的预测等, 这些算法的表现就不尽如人意了.因此, RNN就应运而生了.
2.RNN模型
隐藏层的具体细节
a
?
0
?
a^{\langle0\rangle}
a?0?是激活值,通常是零向量,在 t 时刻,
a
?
t
?
=
g
1
(
W
a
a
a
?
t
?
1
?
+
W
a
x
x
?
t
?
+
b
a
)
y
^
?
t
?
=
g
2
(
W
y
a
a
?
t
?
+
b
y
)
a^{\langle t \rangle} = g_1(W_{aa}a^{\langle t-1 \rangle} + W_{ax}x^{\langle t \rangle}+ b_a) \\ \hat{y}^{\langle t \rangle} = g_2(W_{ya}a^{\langle t \rangle} + by)
a?t?=g1?(Waa?a?t?1?+Wax?x?t?+ba?)y^??t?=g2?(Wya?a?t?+by) 上面的等式定义了神经网络的向前传播,从
a
?
0
?
a^{\langle 0 \rangle}
a?0?开始,用
a
?
0
?
a^{\langle 0 \rangle}
a?0?和
x
?
1
?
x^{\langle 1 \rangle}
x?1? 计算
a
?
1
?
a^{\langle 1 \rangle}
a?1? 和
y
^
?
0
?
\hat{y}^{\langle 0 \rangle}
y^??0?用
x
?
2
?
x^{\langle 2 \rangle}
x?2?和
a
?
1
?
a^{\langle 1 \rangle}
a?1? 计算
a
?
2
?
a^{\langle 2 \rangle}
a?2?和
y
^
?
2
?
\hat{y}^{\langle 2 \rangle}
y^??2? 等等,循环神经网络从左向右传播,同时每个时间步的参数也是共享的。
LSTM
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题 举个例子 假如你需要训练一个语言模型,假如看到这句子 “The cat, which already ate ……, was full.”,前后应该保持一致,因为cat是单数,所以应该用was。“The cats, which ate ……, were full.” cats是复数,所以用were。这个句子有长期的依赖,最前面的单词对句子后面的单词有影响。你的RNN模型要做的就是根据cat来判断改用was还是were 。如果你的RNN的隐藏层有100层,甚至更多,如果要通过was所在的隐藏层通过梯度下降把误差反向传导到cat,就可能存在梯度消失的问题,很难影响到cat所在层的计算。
- 忘记阶段。这个阶段主要是对上一个节点传进来的输入进行选择性忘记。简单来说就是会 “忘记不重要的,记住重要的”。
- 选择记忆阶段。这个阶段将这个阶段的输入有选择性地进行“记忆”。主要是会对输入进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。
- 输出阶段。这个阶段将决定哪些将会被当成当前状态的输出。
文章使用的模型结构
Ⅰ. embedding layer (嵌入层) 嵌入层的作用就是将输入字符序列从输入域
S
?
Z
l
\mathcal{S} \subset \mathcal{Z^l}
S?Zl 映射为向量
R
d
×
l
\mathcal{R^{d \times l}}
Rd×l,其中
l
l
l 是由训练集确定的一个上限长度,
d
d
d是嵌入层的输出维度,是一个可变参数 Ⅱ. LSTM layer LSTM layer 的作用就是隐式特征提取,不同于手动提取特征,而是通过LSTM模型学习输入数据的字符模式。 Ⅲ. logistic regression 用LSTM layer 学习到的隐式特征训练logistic 分类器
|