たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

ビット分割

n-bitの整数を整数の組み合わせで表現する方法.
上位ビット/下位ビットみたいなやつ.

表現

6bit == 26 == 0~63
これを上位3bitと下位3bitに分割し、そのペアで表現する.
(3bit, 3bit) == (23, 23) == (0~8, 0~8)

変換法

上位decimal = valuedecial // 2nbit/2
下位decimal = valuedecial % 2nbit/2

例: 34
34 // 8 = 4, 34 % 8 = 2 => (4, 2) == 100/010 == 34

利点

Categoricalでビット値予測をしようとすると、64通りの予測より8通りx2の方が軽いから.
また上位ビットを優先して学習させたり融通が効くから.

予測時の欠点

4bitを2bit/2bitで表現したとき、「7と8のどっちでもいい」を学習してほしかったら (1, 3) と (2,0) が50%/50%で出るように学習させたい.
上位と下位を別に学習させ上位が1/2を50%/50%で、下位が3/0を50%/50%で出すように学習できた場合、(1,0)=1 や (2,3)=8 が頻出して全然だめ.
上位/下位という階層命名が示しているように、p(下位|上位) のconditional確率を学習しなければいけない.
そして推論時には上位のサンプリングをしてから下位の計算をしなくてはいけない、つまりARが必須.

WaveRNNのDualSoftmaxも上位bit conditionalに下位bitの分布予測をしてる.