最適なエンコードと情報量の関係

問題設定

情報を"0"と"1"の二つの記号を用いて伝達するときの最適なエンコード方法について考察する。
そしてその方法とは、シグナルの発生確率に反比例した語長(具体的には\log \dfrac{1}{p(x)})のコードワードを割り当てることであることをこれから説明する。
最後に情報量との関係について述べる。

あるシグナルの伝達の効率の評価

シグナルxに対して、その出現確率をp(x)、その語の長さをL(x)と定義すると、平均のメッセージ長としてp(x)L(x)を考えることができる。この和\sum p(x)L(x)が短ければ短いほど効率よく伝達できていることになる。

コードワードの採用とそのコスト

デコードのプロセスを考えるとコードワードに"010"を選んだ場合、"0100""01011"など、接頭"01"を持つコードワードを新規に採用出来なくなる。このようにあるコードワードに対してそのコードワードを採用することで、コードワード全体のうち、どれだけのコードワードが使用不可になるか?を定量的に評価するためにコストの概念を導入する。

シグナルxに対してある語word(x)(語長はl(x))を採用すると、それによって使用不可になるコードワードの割合はcost=\dfrac{1}{2^{l(x)}}定量的に評価できる。

最大の語長を3とする。コードワードの総数は語長0の空文字も含めて1+2+4+8=15である。"01"をコードワードに採用した場合、コードワード全体のうち"01"を接頭に持つのは"01","010","011"の3つであるから、コストは \dfrac{2^{2}-1}{2^{3}-1}\simeq\dfrac{1}{4}=\dfrac{1}{2^{l(x)}})と定義される。 f:id:python_beginner:20201121233001p:plain

出現確率p(x)のシグナルに対してコストp(x)を割り当てるのが最適であることの証明

出現確率p(x)のシグナルに対してはコードワード全体のうちp(x)を使用不可にするようなコードワードを採用することが最適であることを示す。 これから、議論をわかりやすくするために、語長の最大は5であるとする。 f:id:python_beginner:20201122000042p:plainf:id:python_beginner:20201122000048p:plainf:id:python_beginner:20201122000055p:plainf:id:python_beginner:20201122000100p:plain

出現確率p(x)のシグナルに対して語長\log \dfrac{1}{p(x)}のコードワードを割り当てるのが最適であることの証明

これまでの議論によって、
①語長l(x)のコードワードの割り当てによってコードワード全体のうち\dfrac{1}{2^{l(x)}}が使用不可になる。
②出現確率p(x)のシグナルに対してコストp(x)を割り当てるのが最適である。

が示された。よってシグナルxに対して、p(x)=\dfrac{1}{2^{l(x)}}分のコストを割り当てることが最適であるから、この式を変形してl(x)=\log \dfrac{1}{p(x)}が得られる。

情報量との関係

確率p(x)でおこる事象xの情報量は\log \dfrac{1}{p(x)}であるが、上の議論からこれは最適なエンコードのコードワードの語長と一致していることがわかる。

参考

掲載した図はDraw.ioを用いて制作しました。

app.diagrams.net

postd.cc