开篇记录面试第十天

作者: 一路不向西 | 来源:发表于2019-06-04 23:57 被阅读0次

    昨天忘了带电脑回来,罪过罪过。
    正题,今天面试联想的一个子公司,聊了大概一个小时,没有出算法题,就只是转着圈地问了一些模型的结构,还有具体做的事情这样的,总的来说就是对算法的了解太少,这个也在之前的面试中一直暴露。今天被问到举例说明fasttext的层次softmax是如何实现的,竟然完全没思路。

    层次softmax解读图
    其实这样一张图就可以解释的清楚,但是我只是看过,并不明白这个图是怎么来的。结合https://www.cnblogs.com/Jezze/archive/2011/12/23/2299884.html
    ,我理解这张图的意思是,比如从最底部开始,'o'和'u'的权重都是1,然后它俩相加得到2这个节点,然后把2和'n'的权重相加,得到4这个节点,其他同理。然后构建好这棵树以后,就完成了对标签的编码。比如按左子树是0,右子树为1,那最左边的'e'的编码就应该是0000,'n'的编码是00010。
    但是还有个问题,博客中有这样一句话:“因此,频繁出现类别的树形结构的深度要比不频繁出现类别的树形结构的深度要小,这也使得进一步的计算效率更高。”不是很理解,找了另外一篇博客来补充一下。
    博客中是这样写的:
    输入层到隐层:
    所有输入词向量求和并取平均的方法。
    隐层到输出层:从隐藏层到输出的softmax层这里的计算量个改进,也就是层次softmax。由于我们把之前所有都要计算的从输出softmax层的概率计算变成了一颗二叉霍夫曼树,那么我们的softmax概率计算只需要沿着树形结构进行就可以了。如下图所示,我们可以沿着霍夫曼树从根节点一直走到我们的叶子节点的词w2。 和之前的神经网络语言模型相比,我们的霍夫曼树的所有内部节点就类似之前神经网络隐藏层的神经元,其中,根节点的词向量对应我们的投影后的词向量,而所有叶子节点就类似于之前神经网络softmax输出层的神经元,叶子节点的个数就是词汇表的大小。在霍夫曼树中,隐藏层到输出层的softmax映射不是一下子完成的,而是沿着霍夫曼树一步步完成的,因此这种softmax取名为"Hierarchical Softmax"。
    如何“沿着霍夫曼树一步步完成”呢?在word2vec中,我们采用了二元逻辑回归的方法,即规定沿着左子树走,那么就是负类(霍夫曼树编码1),沿着右子树走,那么就是正类(霍夫曼树编码0)。判别正类和负类的方法是使用sigmoid函数。使用霍夫曼树的好处:首先,由于是二叉树,之前计算量为V,现在变成了log2V。第二,由于使用霍夫曼树是高频的词靠近树根,这样高频词需要更少的时间会被找到,这符合我们的贪心优化思想。
    (作者:吹洞箫饮酒杏花下链接:https://www.jianshu.com/p/28e8fd840671
    说实话,看了这些我还是不太明白。明天再找些资料,看有没有解吧。
    明天还有面试,要赶紧睡了。晚安各位!

    相关文章

      网友评论

        本文标题:开篇记录面试第十天

        本文链接:https://www.haomeiwen.com/subject/yhydxctx.html