Probability

如何計算每個字符的位數(BPC)?

  • May 10, 2016

在 Alex Graves 的一篇論文(以及其他幾位作者)中,使用了術語每字符位數 (BPC)。我在這裡引用的論文是“使用遞歸神經網絡生成序列”(http://arxiv.org/abs/1308.0850)。

在論文中,他將 BPC 定義為,在第 3.1 節中定義,結果如表 1 所示。

這是如何準確計算的,尤其是當涉及到循環神經網絡時,例如 char-rnn?例如,給定循環神經網絡的輸入和預測,我如何計算每個字符的這些位數?

此外,這個問題解決了這個問題(https://stackoverflow.com/questions/17797922/how-to-calculate-bits-per-character-of-a-string-bpc)但沒有一個答案解釋它是如何計算的,特別是當涉及到 RNN 時。

據我了解,BPC 只是平均交叉熵(與對數基數 2 一起使用)。

在 Alex Graves 的論文中,模型的目的是在給定過去字符的情況下近似下一個字符的概率分佈。在每個時間步,我們稱之為(近似)分佈然後讓是真實的分佈。這些離散的概率分佈可以用一個大小為的向量來表示,其中 n 是字母表中可能的字符數。

因此 BPC 或平均交叉熵可以計算如下:

在哪裡是輸入字符串的長度。 第二行中的相等來自於真實分佈除了對應於真實字符的索引處,其他地方都為零在位置的輸入字符串中.

有兩點需要注意:

  • 當你使用 RNN 時,可以通過在時間步對 RNN 的輸出應用softmax來獲得(RNN 中的輸出單元數應等於- 字母表中的字符數)。
  • 在上面的等式中,平均交叉熵是在一個大小為 T 的輸入字符串上計算的。實際上,您的批次中可能有多個字符串。因此,您應該對所有這些進行平均(即)。

引用自:https://stats.stackexchange.com/questions/211858

comments powered by Disqus