本記事の内容
本記事は誤り訂正可能符号について解説する記事です。
本記事を読むにあたり、ハミンググラフ、ハミング距離について知っている必要があるため、以下の記事も合わせてご覧ください。
本記事で言いたいこと
ハミング距離が情報理論で果たす役割が本記事で言いたいことです。
アスキー・コード
ある人Aが、離れた場所に居るBに何らかのメッセージを伝えるとき、よく使われる手段は、電話、無線、あるいはメールなどの通信装置です。
これらの通信装置は、一旦Aから送られるメッセージを符号化(信号化)して、電話線や電波などの信号を運ぶ媒体(チャンネル)を通して、受信装置に贈り、それをもとに戻して(復号化して)受信者Bがメッセージを受け取る、という方法です。
誠に平たく言えば、Aからのメッセージを機械の言葉に一度翻訳してBに送り、Bが機械の言葉を人間の言葉に翻訳し直すことでAとBは意思疎通を図っている、というわけです。
この機構は
と表現されます。
符号の文字(先程の説明で言うと、機械の言葉)が0と1のみから成る場合を考えます。
英語の平文で書かれたメッセージを符号化するのに使われるのがアスキー・コード(ASCII)です。
これはAmerican Standard Code for Information Interchangeの略で、英語の各アルファベットや「!」、「#」、「&」などの記号にも7桁の2進数(0と1を使って表す数)を対応させています。
文字列はこれらの2進数を並べて表します。
A | 1000001 | N | 1001110 |
B | 1000010 | O | 1001111 |
C | 1000011 | P | 1010000 |
D | 1000100 | Q | 1010001 |
E | 1000101 | R | 1010010 |
F | 1000110 | S | 1010011 |
G | 1000111 | T | 1010100 |
H | 1001000 | U | 1010101 |
I | 1001001 | V | 1010110 |
J | 1001010 | W | 1010111 |
K | 1001011 | X | 1011000 |
L | 1001100 | Y | 1011001 |
M | 1001101 | Z | 1011010 |
例えば、「CAT」なら「(C)1000011」と「(A)1000001」と「(T)1010100」を並べて「100001110000011010100」と表現します。
符号化と復号化は暗号の理論に関連しますが、ここでは扱いません。
ここでは、チャンネル(電波や電話線などの信号を運ぶ媒体)で起こり得る問題を扱います。
ノイズ
もし、チャンネル(信号を伝える媒体)を通して、符号がそのまま伝われば問題有りませんが、実際には送信の途中で雑音(ノイズ)が加わり、受信したときの符号が送信したときの符号と異なることがあります。
身近で言うと、Bluetoothイヤホンを電子レンジの近くで稼働させたときがイメージが湧きやすいのではないでしょうか。
Bluetoothイヤホンを電子レンジの近くで使うと、音が途切れたり音質が落ちたりしますよね。
これはBluetoothの周波数と電子レンジの周波数が近いため、互いに干渉することが原因です。
もっと身近で言えば、お祭りやらライブやらの最中に話そうとすると、周りの音が大きいがゆえに、意味が通らない言葉に聞き間違いをしたりと意思疎通がしにくかったりしますよね。
そんなイメージです。
広く言えば、世の中は電波で溢れていて、しかも電波は”波”なので互いに干渉してしまいます。
それがノイズの例です。
このような雑音が激しく、符号で使われている文字の入れ替わりが多ければ、復号することは難しくなります。
しかし、雑音による文字の変動があまり多くないときには、次のような符号のアイディアで正しく復号することが出来ます。
ノイズによる信号の変動が少ないときは正しく復号出来ます。
予め送られるメッセージの符号が決められていて(例えばASCII2進数を採用したとして)、その種類を\(A\)とBの両人が知っているとします。
例えば、4種類の長さが8の符号
a1=(1,1,1,0,1,0,0,0)a2=(1,1,0,1,0,1,0,0)a3=(1,0,1,1,0,0,1,0)a4=(1,1,1,1,1,1,1,1)
が決められていたとしましょう。
つまり、先のASCII2進数の表に対応するのがa1、a2、a3、a4です。
Aはこの中の符号をBに送ります。
例えばAが送信した符号が
a=(1,1,1,0,1,0,0,0)=a1
だったとします。
ところが、雑音によりBが受信した符号が
a′=(1,1,1,0,1,1,0,0)
のようになってしまうこともあり得るわけです(6番目の0が1に変わっています)。
このとき、元の符号を復元しようとするとき、どのようにすれば良いでしょうか。
上で与えた符号のリストの中で、Bが受信したa′に「最も近い」符号が、Aが送った符号と(断定は出来ないけれど)判断して良いでしょう。
この「符号の近さ」を定量的に定式化したものがハミング距離なのです。
ハミング距離をサラッと復習します。
ハミング距離
長さnの文字列a,b∈Vに対して、 d(a,b)=|{i∈{1,…,n}| ai≠bi}| とし、この距離dをハミング距離(Hamming distance)という。詳しくは【幾何学の基礎シリーズ】グラフ理論編 その10を御覧ください。
要するに、長さが同じ文字列aとbが何文字異なるか、ということを表しているのが関数dです。
このハミング距離でa′に最も近いのはa1=(1,1,1,0,1,0,0,0)だから、Bは、Aが送った符号はa1だ、と判断できるわけです。
要するに何が言いたいかと言うと、
ということです。
少々粗をつくことを言えば、ノイズで変わってしまった符号とハミング距離が同じ符号が複数ある場合は判断しかねます。
今の話を一般化します。
先程述べたことを一般化してみます。
以下、前節の設定を用いて、符号で使われる文字の集合をWとして、符号の長さはn∈Nで固定されているとします。
※以下で定めることは、後でまとめます。
符号全体の集合はWのn個の直積集合V=W×⋯×W (n個の直積)です。さらに、|W|=qとします。
故に|V|=qnです。
例えば、先のa1、a2、a3、a4についてはW={0,1}、q=2、n=8です。
M(MessageのM)を送りたいメッセージの集合とすると、Mの符号化というのは、MからVへの単射φ:M→Vのことです。
「全単射じゃないの?」と思うかもしれませんが、もし全単射であれば、メッセージが1つ1つ重複なく対応しているわけですので、ノイズが乗っていない、ということになってしまいます。
また、ψ∘φ=IM、すなわち全てのメッセージm∈Mに対して、ψ(φ(m)=m)を満たすような写像ψ:V→Mを復号化と言います。
では、ノイズ(雑音)はどのように定めたら良いでしょうか。
雑音の原因は様々ですし、完全な記述というのは困難を極めます。
そこで、雑音がもたらす結果のみに着目することにしましょう。
つまり、雑音がもたらす符号の変化に焦点を当てる、というわけです。
これをVからVへの”ある特別な”性質を満たす写像ω:V→Vから成る集合Ωのことを雑音と呼びましょう。
もし、全てのω∈Ωに対して、ψ∘ω∘φ=IMとなるような復号化ψを持つとき、符号化φは雑音Ωによる誤りを訂正できる(error-correcting)と呼ぶことにします。
以上のことをまとめて書くと、次です。
符号、復号の一般化
符号で使われる文字の集合をWとして、符号の長さはn∈Nで固定されているとする。- 符号全体の集合 V=W×⋯×W すなわち、Vはn個のWの直積集合である。
- |W|=q
- Mは送りたいメッセージの集合
- Mの符号化 Mの符号化とはMからVへの単射φ:M→Vのこと。
- Vの復号化 ψ∘φ=IM、すなわち全てのメッセージm∈Mに対して、ψ(φ(m)=m)を満たすような写像ψ:V→Mを復号化と呼ぶ。
- 雑音 ω:V→Vから成る集合Ωのことを雑音と呼ぶ。
雑音の程度
雑音の程度e(φ,Ω)を定めます。
雑音の程度
dをV上のハミング距離とする。符号化φが与えられたとき、雑音Ωの程度e(φ,Ω)を e(φ,Ω)=max で定める。要するに、どういうことかというと
ということです。
訂正可能な符号化を求めるには?
一般化する前の例のお話を思い出すと、訂正可能な符号化を求めるには、雑音の程度と比較して
d(\varphi)=\min_{m_1\neq m_2\in M}d\left(\varphi(m_1),\varphi(m_2) \right)
を大きくすれば良いわけですが、正確には次の定理が成り立ちます。
定理1.
もし、d(\varphi)\geq 2e\left(\varphi,\Omega\right)+1が成り立てば、符号化\varphiの誤りを訂正できる。逆にe\left(\varphi,\Omega\right)\leq eとなる全ての雑音\Omegaについて、\varphiが誤り訂正可能であれば、d(\varphi)\geq 2e+1である。定理1.の証明
符号化\varphi:M\to Vは単射なので、メッセージの集合Mを符号化による像\varphi(M)\subset Vと同一視することで、MはVの部分集合と思っても良いです。
このとき、符号化は包含写像\iota:M\to Vと一致します。
①d(\varphi)\geq 2e\left(\varphi,\Omega\right)+1が成り立てば、符号化\varphiの誤りを訂正できることの証明
e=e\left(\varphi,\Omega\right)として、M=\left\{\boldsymbol{a}_1,\boldsymbol{a}_2,\dots, \boldsymbol{a}_k\right\}\subset Vとします。
ただし、kはメッセージの数です。
ここで、\varphi(\boldsymbol{a}_i)=\boldsymbol{a}_iに注意しましょう。
B_i(e)=\left\{\boldsymbol{a}\in V\middle|d(\boldsymbol{a},\boldsymbol{a}_i)\leq e\right\}\ (i=1,2,\dots,k)
とおくと、任意の\omega\in \Omegaに対して\omega(\boldsymbol{a}_i)\in B_i(e)であり、さらに
B_i(e)\cap B_j(e)=\emptyset\ (i\neq j)
となります。
実際、仮に\boldsymbol{a}\in B_i(e)\cap B_j(e)とすると、dは距離関数なので、三角不等式が成り立つから
d(\boldsymbol{a}_i, \boldsymbol{a}_j)\leq d(\boldsymbol{a}_i,\boldsymbol{a})+d(\boldsymbol{a},\boldsymbol{a}_j)\leq 2e
となって、d\left( \varphi\right)\geq 2e+1に反します。
さて、今示したことを使って復号化\psi:V\to Mを、
\psi(\boldsymbol{a})= \begin{cases} \boldsymbol{a}_i&(\boldsymbol{a}\in B_i(e))\\ Vから任意に選んだ値&\displaystyle\left(\boldsymbol{a}\in\bigcup_{i=1}^k B_i(e) \right) \end{cases}
で定めます。
\psi(\boldsymbol{a}_i)=\boldsymbol{a}_iだから、これを符号化\varphiを用いて書き直すと、\psi\circ\varphi=I_Mが得られるので、\psiは復号化です。
さらに、\omega(\boldsymbol{a}_i)\in B_i(e)であることから、\psi\left( \varphi(\boldsymbol{a}_i)\right)=\boldsymbol{a}_iも成り立ち、これも書き直せば、\psi\circ\omega\circ\varphi=I_Mとなり、\varphiは誤り訂正可能です。
②e\left(\varphi,\Omega\right)\leq eとなる全ての雑音\Omegaについて、\varphiが誤り訂正可能であれば、d(\varphi)\geq 2e+1であることの証明
d\left( \boldsymbol{a}_i,\omega(\boldsymbol{a}_i)\right)\leq e\quad (i=1,2,\dots,k)
を満たす\omega:V\to Vを任意に取ります。
\Omega=\left\{\omega\right\}とすると、
e\left(\varphi,\Omega\right)=\max\left\{d\left( \boldsymbol{a}_i,\omega(\boldsymbol{a}_i)\right)\middle|i=1,\dots, k\right\}\leq e
だから、仮定により\varphiは誤り訂正可能です。
すなわち、\psi\left( \omega(\boldsymbol{a}_i)\right)=\boldsymbol{a}_i\ (i=1,\dots,k)を満たす復号化\psi:V\to Mが存在します。
任意の番号s\neq t\ (1\leq s,t\leq k)についてB_s(e)\cap B_t(e)=\emptysetであることを示しましょう。
背理法により示します。
仮にB_s(e)\cap B_t(e)に属する符号\boldsymbol{x}が存在するとしましょう。
これを用いて\omega:V\to Vを
\begin{eqnarray} \omega(\boldsymbol{a}_s)&=&\omega(\boldsymbol{a}_t)=\boldsymbol{x},\\ \omega(\boldsymbol{a}_u)&=&\boldsymbol{a}_u\quad (u\neq s,t) \end{eqnarray}
で定めます。
これは、d\left( \boldsymbol{a}_i,\omega(\boldsymbol{a}_i)\right)\leq e\ (i=1,\dots,k)を満たします。
実際、
\begin{eqnarray} &&d\left(\boldsymbol{a}_s,\omega(\boldsymbol{a}_s) \right)\leq e\\ &&d\left(\boldsymbol{a}_t,\omega(\boldsymbol{a}_t) \right)\leq e\\ &&d\left(\boldsymbol{a}_u,\omega(\boldsymbol{a}_u) \right)\leq e\quad(i=1,\dots,k) \end{eqnarray}
です。
しかし、上で述べたことから\psi\left( \omega(\boldsymbol{a}_i)\right)=\boldsymbol{a}_i\ (i=1,\dots,k)を満たす復号化\psi:V\to Mが存在するので、
\boldsymbol{a}_s=\psi\left( \omega(\boldsymbol{a}_s)\right)=\psi(\boldsymbol{x})=\psi\left(\omega(\boldsymbol{a}_t) \right)=\boldsymbol{a}_t
となって矛盾です。
故にB_s(e)\cap B_t(e)=\emptysetです。
さて、定理の結論を否定してみます(背理法)。
d(\varphi)\geq 2e+1の否定はd(\varphi)\leq 2eとなるから、d(\boldsymbol{a}_i,\boldsymbol{a}_j)\leq 2eを満たす\boldsymbol{a}_i,\boldsymbol{a}_j\ (i\neq j)が存在することになります。
\boldsymbol{z}\in Vを
\begin{eqnarray} &&d\left( \boldsymbol{a}_i,\boldsymbol{a}_j\right)=d\left( \boldsymbol{a}_i,\boldsymbol{z}\right)+d\left( \boldsymbol{z},\boldsymbol{a}_j\right),\\ &&d\left( \boldsymbol{a}_i,\boldsymbol{z}\right)\leq e,\quad d\left( \boldsymbol{z},\boldsymbol{a}_j\right)\leq e \end{eqnarray}
を満たすように取ることが出来るから、\boldsymbol{z}\in B_s(e)\cap B_t(e)となって、B_s(e)\cap B_t(e)=\emptysetに矛盾します。
従って証明完了です。
定理1.の証明終わり
文字の数、符号の長さ、雑音の程度を固定したときは?
文字の数q=\left|W\right|と符号の長さn、及び雑音の程度(の上限)eを固定したとき、どの程度の数のメッセージを、誤り訂正できるような符号に直すことが出来るかを考えます。
つまり、メッセージ数\left|M\right|の上限を求めたいわけです。
これに答えるのが次の定理です。
定理2.
e\left(\varphi,\Omega\right)\leq eとなる全ての雑音\Omegaについて、\varphiが誤り訂正可能であれば、 \left|M\right|\cdot\left(\sum_{h=0}^e {}_nC_h \left( q-1\right)^h\right)\leq q^n が成り立つ。この不等式をハミングの限界式という。定理2.の証明
定理1.の証明と同様に、M=\left\{\boldsymbol{a}_1,\dots,\boldsymbol{a}_k\right\}とします(k=\left|M\right|)。
仮定から、定理1.の後半を用いて、d(\varphi)\geq 2e+1です。
さらに、定理1.の証明から\displaystyle\left\{B_i(e)\right\}_{i=1}^kは互いに交わりません。
B_i(e)=\bigcup_{h=0}^e\left\{\boldsymbol{x}\middle|d(\boldsymbol{x},\boldsymbol{a}_i)=h\right\}
となることに注意しましょう。
ここで、次の事実を使います。
命題3.
\boldsymbol{a}\in Vとh\geq 0に対して、 \left\{\boldsymbol{x}\in V\middle|d(\boldsymbol{x},\boldsymbol{a})=h\right\}={}_nC_h(q-1)^h である。ただし、 \begin{eqnarray} {}_nC_h=\begin{cases} \displaystyle\frac{n!}{h!(n-h)!}&(1\leq h\leq n-1)\\ 1&(h=0,n)\\ 0&(h>n) \end{cases} \end{eqnarray} とする。補題3.の証明
d(\boldsymbol{x},\boldsymbol{a})=0となる\boldsymbol{x}は\boldsymbol{a}のみであることと、任意の\boldsymbol{x}に対してd(\boldsymbol{x},\boldsymbol{a})\leq nであることに注意すると、1\leq h\leq nの場合についてのみ証明すれば良い事がわかります。
d(\boldsymbol{x},\boldsymbol{a})=hということは、文字列\boldsymbol{x}と\boldsymbol{a}の中で異なる文字を持つ場所の個数がh個ということです。
h個の場所i_1,\dots,i_hの選び方の総数は{}_nC_h個であり、h個の場所i_1,\dots,i_hを選べば、それぞれのi_s\ (1\leq s\leq h)で\boldsymbol{a}の中の文字と異なる文字の個数は\left|W\right|-1であるため、場所i_1,\dots,i_hで\boldsymbol{a}と異なる文字を選ぶ選び方は\left( \left|W\right|-1\right)^h通りあります。
従って、証明完了です。
補題3.の証明終わり
定理2.の証明に戻りましょう。
補題3.から、
\left|\left\{\boldsymbol{x}\middle|d(\boldsymbol{x},\boldsymbol{a}_i)=h\right\}\right|={}_nC_h(q-1)^h
だから、
\left|B_i(e)\right|=\sum_{h=0}^e{}_nC_h(q-1)^h\tag{\(\ast\)}
となり、特に、\left|B_i(e)\right|はiには依存しません。
\displaystyle\left\{B_i(e)\right\}_{i=1}^kが互いに交わらないことから
\sum_{i=1}^k\left|B_i(e)\right|\leq \left|V\right|
となり、これに(\ast)を代入すると、
k\left(\sum_{h=0}^e{}_nC_h(q-1)^h \right)\leq q^n
が得られます。
従って証明完了です。
定理2.の証明終わり
情報理論における重要な問題の1つは、できるだけ多くのメッセージを誤り訂正可能なように符号化する方法を見出すことです。
この問題では、整数論や代数幾何学などが用いられています。
皆様のコメントを下さい!
今回のジョークはこれです。
社会学者、物理学者、そして数学者が同じ長さの閉じたロープによって最大の面積を持つ領域を囲む方法を考えています。
社会学者は正方形の囲いを作りました。
物理学者は円の面積が周囲長の同じ正方形より大きいことを思い出して円を作りました。
そして「君はこれよりも大きくすることが出来るかい?」と数学者に問いかけました。
すると、数学者は円形のロープで自分を囲んで「私が今立っているところを外側と定める。」と言ったそうな。
地表のような球面に円を置いたとき、円によって分けられる2つの領域のどちらが囲まれた内側か、ということはそれだけでは数学者にとっては明らかなことではありません。
普通は物理学者のように発想します。
極端に言えば、赤道の周長と同じ長さのロープで囲むものとして読めば、何らおかしなことを言ってないはずです。
面をロープで囲むという簡単な問題ですら数学者にとっては単純ではない問題ということを示しているのがこのジョークです。
他にご存知のジョークをコメント欄で教えて下さい!
結
今回は、ハミング距離との応用として、誤り訂正可能符号について解説しました。
これはグラフ理論の情報理論での応用例です。
我々が普段何気なく使っているツールの根幹には数学が隠れている、という良い例だと思います。
次回は誤り産業連関について解説します。
乞うご期待!
質問、コメントなどお待ちしております!
どんな些細なことでも構いませんし、「定理〇〇の△△が分からない!」などいただければ全てお答えします!
お問い合わせの内容にもよりますが、ご質問はおおよそ3日以内にお答えします。
もし直ちに回答が欲しければその旨もコメントでお知らせください。直ちに対応いたします。
コメントをする