Впрочем, можно вот такой плавный переход сделать от перфокарт обратно к квантам. В конце декабря я писал о квантовых кодах исправления ошибок. На примере перфокарт можно проиллюстрировать, почему для помехоустойчивых (fault-tolerant) квантовых вычислений недостаточно просто иметь хороший код.
Как я писал, простейший (пока что классический, не квантовый) код исправления ошибок - это код повторения: мы просто повторяем каждый символ несколько раз. А следующий по сложности код, о котором обычно рассказывают, - это так называемый код Хемминга. Он гораздо эффективнее кода повторения, хотя тоже достаточно простой. Представим, что нам нужно передать четыре бита - например, 0010. Мы по простому алгоритму вычисляем три проверочных бита, в данном случае - 110, и приписываем их в конец (например). Получится 0100110. Семь бит. Если в одной позиции из этих семи произошла ошибка (то есть 0 изменился на 1 или наоборот), то простой алгоритм позволит определить эту позицию, после чего её можно исправить. Это, конечно, гораздо экономнее, чем повторять каждый из четырёх битов сообщения несколько раз. Вычисление проверочных битов и приписывание их в конец называется кодированием. Проверка на ошибку, исправление её и, если нужно, отбрасывание проверочных битов, чтобы снова остались только наши информационные биты 0010 - декодированием.
А вот история этого кода. Ричард Хемминг (Hamming) работал с вычислительными машинами сначала в Манхэттенском (ядерном) проекте, а затем после войны - в Лаборатории Белла (Bell Labs). Машины были электромеханическими и данные вводились как раз при помощи перфокарт.
Машины тогда считали ненадёжно, допускали ошибки, но основной проблемой были ошибки, возникающие при считывании перфокарт, т.е. при переводе информации с одного носителя на принципиальной другой: из отверстий на листе бумаги в электромеханическое состояние машины. При возникновении ошибки приходилось перезагружать всю программу. Хемминга это изрядно раздражало и он несколько лет работал над тем, чтобы придумать коды, с помощью которых машина сможет не просто обнаруживать ошибки считывания с перфокарт, но и сама исправлять их, не прерывая работы. В итоге у него получилось.
Эта история иллюстрирует, в каких случаях коды особенно хороши: когда ошибка возникает (в основном) при передаче информации. Это может быть передача на расстояние, передача с одного носителя на другой, длительное хранение информации, т.е. передача во времени. А само вычисление, в том числе декодирование, работает относительно надежно.
В квантовых вычислениях ситуация не такая: там нет разделения на надёжное вычисление и ненадёжную передачу. Там всё ненадёжно и ошибка может возникнуть абсолютно везде, в том числе при кодировании и декодировании. Это осложняет задачу. Мы вводим дополнительные проверочные биты и дополнительные операции для выполнения проверок, но ошибка равно может возникнуть как раз при выполнении этих операций - в отличие от того, что у Хемминга. В итоге они нам не помогут, а только ещё сильнее запутают. Поэтому, во-первых, надо не просто иметь хороший код, но и всё вычисление, в том числе и обнаружение и исправление ошибки, само тоже подверженное ошибкам, надо организовать грамотно. А во-вторых, это возможно только если вероятность достаточно маленькая - меньше определённого порога, а о чём я тогда писал.
То есть хороший квантовый код, исправляющий ошибки ("хороший" - значит, исправляет много ошибок при минимальном количестве проверочных кубитов, имеет быстрые алгоритмы обнаружения и исправления ошибок и т.д.), лежит в основе помехоустойчивого квантового вычисления, вокруг него оно выстраивается, но самого по себе его недостаточно.
Post #249
81
- 🔥 1