繁体   English   中英

tensorflow 中的 tf.matmul(X,weight) 与 tf.matmul(X,tf.traspose(weight))

[英]tf.matmul(X,weight) vs tf.matmul(X,tf.traspose(weight)) in tensorflow

在全连接层的标准 ANN 中,我们使用以下公式: tf.matmul(X,weight) + bias 我很清楚,因为我们使用矩阵乘法来连接输入和隐藏层。

但在 GloVe 实现( https://nlp.stanford.edu/projects/glove/ )中,我们使用以下公式进行嵌入乘法: tf.matmul(W, tf.transpose(U))让我感到困惑的是tf.transpose(U)部分。 为什么我们使用tf.matmul(W, tf.transpose(U))而不是tf.matmul(W, U)

它与向量的列方向与行方向的选择有关。

请注意, weight是这里的第二个参数:

tf.matmul(X, weight)

但是第一个参数W在这里:

tf.matmul(W, tf.transpose(U))

因此,您看到的是以下矩阵转置恒等式的实际应用:

矩阵乘法转置恒等式


回到您的示例,让我们假设 10 个输入和 20 个输出。

第一种方法使用行向量。 单个输入X将是一个1x10矩阵,称为行向量,因为它只有一行。 为了匹配, weight矩阵需要为10x20才能生成大小为20的 output 。

但是在第二种方法中,乘法是相反的。 这暗示一切都在使用列向量。 如果乘法反转,那么一切都会转置。 所以这个例子使用了列向量,之所以这样命名是因为它们只有一列。

这就是转置存在的原因。 他们 GLoVe 的作者完成他们的符号的10x20 ,乘法反转,权重矩阵W必须已经转置为 20x10 而不是20x10 他们必须期待 output 的20x1列向量。

因此,如果输入向量U自然是1x10行向量,它也必须转置为10x1列向量,以适应其他所有内容。


基本上你应该一直选择行向量或列向量,然后为你确定乘法的顺序和权重的转置。

我个人认为 GloVe 使用的列向量与行向量相比是笨拙且不自然的。 最好让乘法排序遵循数据流排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM