機械学習理論研究室 ← AI体験の一覧

どこまで直せるか

送った0と1は、途中で勝手に裏返ることがあります。それをあとから直す方法があります。直せるかどうかを決めているのはビット数ではない、というところまで自分の手で確かめます。

送った絵が、そのまま届くとはかぎらない

友だちに1枚の絵を送ります。左が送った絵、右が届いた絵です。同じものを送り続けているのに、右は送るたびに違う汚れ方をします。

送った絵(1024ビット)
届いた絵(0ビットが裏返った)

絵は白と黒だけでできていて、白を0、黒を1として、32×32=1024ビットを順番に送っています。

途中で何が起きているのか

二元対称通信路

では、絵はどこで汚れたのでしょうか。汚れたのは、絵が通っていった道すじの途中です。この道すじのことを通信路といいます。

通信路は0と1しか運べません。そして運んでいる途中で、ときどき0が1に、1が0に化けます。0が1に化ける確率と、1が0に化ける確率が同じだとみなしたものを二元対称通信路(BSC)といいます。誤り訂正符号の話は、だいたいこの1枚の図から始まります。

これは遠くに送るときだけの話ではありません

いま使っているスマホの中でも、机の上のパソコンの中でも、同じことが起きています。ビットが裏返るのは、宇宙探査機のような遠い場所だけで起きる事故ではありません。身のまわりの3か所を見てみます。

場所何が起きるかどう守っているか
スマホの電波建物や他の電波にじゃまされて、届いた波形が読み違えられる誤り訂正符号(LDPC符号・ターボ符号)
光ファイバ長い距離を進むうちに光が弱り、にじむ誤り訂正符号(リードソロモン符号ほか)
いま動いているPCのメモリ宇宙から降ってくる放射線(宇宙線)が当たって、記憶しているビットが勝手に裏返るECCメモリ(誤り訂正符号の入ったメモリ)

いちばん近くで起きているのは3つめです。宇宙線が半導体に当たると、メモリが覚えていた0が1に変わってしまうことがあります。実際に起こるので、止まっては困るサーバーのメモリにはECCメモリという、誤りをその場で直す仕組みの入ったものを使います。ECCは Error Correcting Code、つまり誤り訂正符号のことです。

誤りを直す技術は、遠くの宇宙探査機のためだけにあるのではありません。机の上のパソコンの中で、いま動いています。

いちばん素朴な直し方 — 3回送って多数決

誤りを直したいとき、まず思いつくのは「同じものを何回も送る」でしょう。1ビットを3回ずつ送って、届いた3つの多数決を取ります。1回くらい裏返っても、残り2つが正しければ勝ちます。

1回め
2回め
3回め
多数決の結果

たしかに直りました。でも、送るデータが3倍になりました。写真1枚が3枚分、動画1本が3本分の通信量になります。料金も時間も3倍です。

同じ1024ビットの絵を、3倍にしないで、それでも直せるようにできないでしょうか。