我是机器学习的新手,所以我花了大约一个星期的时间来了解分层softmax的工作原理,但是我仍然不清楚。如果您帮助我阐明一些细节,将非常有帮助。
我有用X
表示的(具有特征的)输入向量和相应的标签y
。
我实现了霍夫曼树,然后将y
(标签)传递给函数(get_huffman_tree
),它给了我树,即每个节点都拥有权重的向量(它们如何看起来像吗?就像1个暗矢量,对吗?),它是数字。见下文:
print(get_tree(tree))
print(path_to_leaf(tree,'1'))
[(1240, 1.0, 0), (32, 0.457, 1), (10, 0.503, 4), (3, 0.248, 2), (2, 0.249, 3), (1, 0.25, 5), (0, 0.253, 6)]
[(0, 1), (4, -1), ('0', -1)]
之后,我们可以计算log pi_k = - sum_i(log(1+exp(-delta * w_i * x_j)
此刻,我需要一个大的W
矩阵,它由v_i
行组成(其中v_i
是树中每个节点的向量),我将其与x_j
矩阵中的特定X
(功能)
此刻,我不知道如何实现它,以及如何使用霍夫曼树中的路径。
然后我们可以计算损失函数=> loss = lambda/2 * ||V||^2 - sum_j(log pi_k_j) -> min (v)
,并找到其grad(loss)
,这为我们的权重转移提供了矩阵。