3. Recursive AutoEncoder(递归自动编码器)

1. AutoEncoder介绍

2. Applications of AutoEncoder in NLP

3. Recursive Autoencoder(递归自动编码器)

4. Stacked AutoEncoder(堆栈自动编码器)

1. 前言

今天主要介绍用在NLP中比较常见的AutoEncoder的模型,Recursive Autoencoders(递归自动编码模型)。这篇文章主要讨论RAE在序列化的数据中,如何把数据降维而且用向量表示。html

2. 矩阵表示

假设咱们有一个矩阵\(L\)的表示向量,一个有序的有\(m\)个元素的序列,每一个元素有\(k\)维的向量表示,咱们用\(b_k\)表明咱们须要找的那个向量,公式以下:算法

\[ x_i=Lb_k \]app

如今咱们能用矩阵表示这个\(m\)个元素的序列了,\((x_1,x_2,x_3...,x_m)\)函数

3. 非监督递归自动编码器

image

上图是RAE的二叉树递归结构,最底层的节点\(x_1,x_2...,x_m\)都是序列的内容。第一个RAE从在最底层最右边的两个孩子节点序列的元素\(x_1\)\(x_2\)开始,对它们进行重构,会产生一个隐藏层\(y_1\)。再上层一点,一个节点是序列中的元\(x_i\)素,另外一个节点是下一程节点经过AE的过程算出来的隐藏层向量\(y_i\),通过RAE后,会产生隐藏节点\(y_{i+1}\),如此循环直到序列中全部元素都进行了AE的过程。优化

  • 编码过程:父节点是\(y_1\),两个孩子节点是\(x_1\)\(x_2\):

\[ \mathbf{y_1}=f(\mathbf{W}[\mathbf{x}_{1},\mathbf{x}_{2}]+\mathbf{b}) \]编码

  • 解码过程:经过父节\(y_1\)点再重构\(x_1\)\(x_2\)

\[ [\mathbf{x}_{1}';\mathbf{x}_{2}']=\mathbf{W}'\mathbf{y_1}+\mathbf{b}' \]spa

  • 损失函数

\[ E=\frac{1}{2}\Vert [\mathbf{x}_{1},\mathbf{x}_{2}]-[\mathbf{x}_{1}',\mathbf{x}_{2}']\Vert ^{2} \]
这个过程在每个AE过程当中重复,直到构造出整棵树。3d

4. 优化

咱们能够从几个方面去优化RAE。code

  1. 选择一个好的方式去构造树:咱们构造二叉树的方法不少。例如一个比较好的构造二叉树的方式是用贪婪算法在每一步去尝试每一个可能选择孩子节点,最后选择这一步重构损失最低的方式建树。
  2. 选择一个好的重构损失函数:前面咱们的重构损失是平均的惩罚全部序列的损失值。假设咱们能够包含孩子节点多的RAE过程的损失的权重比包含孩子节点少的RAE过程的损失函数的权重大。
  3. 归一化:RAE计算的隐藏节点,它们后面会被下一个RAE重建。为了最小化重构的损失,RAE计算隐藏节点的时候能够对它进行归一化。

5. 总结

本文主要介绍了RAE的构造和优化方向,RAE适合用来处理序列问题。htm