Aprenda programação quântica em Python usando exemplos. Relatório Yandex

Hoje qualquer pessoa pode usar técnicas de programação quântica, escrever código Python simples e executá-lo em um computador quântico real. Rishat Ibragimovrishat_ibrahimov examinou o básico da computação quântica usando exemplos com código, mostrou como executar programas em um simulador local e em um computador quântico remoto.





- Olá pessoal, meu nome é Rishat. Trabalho na qualidade da pesquisa Yandex há quase três anos. Mas hoje eu quero falar não sobre trabalho, mas sobre o que faço no meu tempo livre. Estou envolvido em informática quântica, mas na verdade - uma variedade de modelos de computação, incluindo modelos quânticos.



A informática quântica é uma área interessante no momento. Muito esforço está sendo investido lá, muito foi feito. No meu relatório, tentarei interessar alguns de vocês. Talvez haja um engenheiro legal de ML entre vocês que queira fazer um aprendizado de máquina quântica ou apenas um forte algoritmo que possa investir nessa direção. Vai ser ótimo, porque o futuro está chegando.



Devo dizer imediatamente que não sou físico. Certamente há pessoas entre vocês que entendem todos esses processos na física mais do que eu. Portanto, não direi quase nada sobre física.



Espero que você se lembre um pouco da álgebra, lembre-se do que é um vetor e como multiplicar um vetor por uma matriz.







Como meu relatório será estruturado? Primeiro, falaremos um pouco sobre história, sobre de onde tudo veio, a fim de olhar com confiança para o futuro. Então veremos onde isso pode ser aplicado, qual é o estado atual, se é possível fazer algo com as mãos agora. Escreveremos o primeiro programa Python que pode ser executado em um computador quântico. E então, como bônus, mostrarei alguns exemplos de algoritmos nos quais a computação quântica ajuda a obter um desempenho incomparavelmente melhor comparado aos clássicos.







Como é que tudo começou? Deste jovem. Este é Alan Turing, ele pode ser chamado com segurança de pai da ciência da computação ou da ciência da computação, aquele pelo qual todos agora vivemos, ganha dinheiro. Na década de 1930, Turing criou um modelo de computação que chamaríamos de computador programável. Mas alguém reconhecerá essa pessoa?







Mais difícil. Seu sobrenome muitas vezes vai ao lado do sobrenome de Turing. Esta é Alonzo Church, ele também lidou com problemas de computabilidade, e até um pouco antes de Turing criar seus próprios modelos de computação. Mas o trabalho de Turing se tornou mais popular. E, em geral, Church em algum momento foi o consultor científico de Turing. Tomados em conjunto, seus nomes geralmente estão associados a esta tese.



A tese de Church-Turing diz: qualquer processo pode ser modelado com eficiência em uma máquina de Turing. Este é o final dos anos 30 - início dos 40, e tudo é muito bom. Por cerca de 30 anos, tudo está muito bem, até que essas duas pessoas apareceram. Alguém os conhece?







Já estamos nos anos 70, muito perto do presente. Seus sobrenomes são freqüentemente encontrados em cursos de criptografia. Estes são Robert Nightingale e Volker Strassen. Essas duas pessoas são famosas por apresentar um algoritmo probabilístico para verificar um número de simplicidade, o teste de Solovey-Strassen.



E este é um ponto muito importante para nós, porque até agora dissemos que qualquer processo algorítmico pode ser modelado em uma máquina de Turing. Mas agora acontece que o algoritmo deles não pode ser modelado. É probabilístico, não há nada disso na máquina de Turing.



Eu tive que fazer uma solução rápida e dizer que qualquer processo pode ser modelado em uma máquina de Turing probabilística. Isso não é mais muito legal, com certeza um de vocês tem uma pitada no peito. Você pensou: como assim? Agora dizemos "probabilístico", em dez anos outra coisa será descoberta, outra coisa terá que ser corrigida. Isso não é muito agradável. Mas você e eu, é claro, não estamos sozinhos.







Havia outro jovem - David Deutsch. E ele também se perguntou: como assim? Como viver? Ele é físico por formação, dedicou toda a sua vida à física. E eu decidi enfrentar esse problema do ponto de vista da física. Ele disse: vamos tentar substanciar, conseguir algo para que a própria natureza nos diga que esse é exatamente o caso. E a natureza já disse então (e ainda acreditamos) que é mecânica quântica. Então começamos a procurar uma resposta na mecânica quântica. E foi com David Deutsch, com seus primeiros algoritmos, que a informática quântica começou.



Esta é uma excursão tão pequena na história, para que você entenda: ela não veio do nada. Nesta área, existem problemas reais, teóricos, é claro, que atormentam as pessoas que começaram tudo.



Mas tudo é apenas no nível da teoria? De um modo geral, do ponto de vista da matemática, não há mais problemas. Matematicamente, sabemos tudo sobre como um computador quântico deve funcionar. Agora já existem computadores quânticos reais de diferentes configurações, trabalhando de maneiras diferentes. E este é, em geral, um desafio de engenharia.



Por exemplo, em nosso instituto, temos um departamento inteiro que lida com informática quântica. Existem matemáticos e físicos. Agora, os físicos estão muito envolvidos no problema do armazenamento a longo prazo de informações quânticas. É muito semelhante aos nossos discos rígidos, mas queremos que as informações quânticas sejam armazenadas lá.







Quais são os usos de toda essa economia? Obviamente, a primeira coisa que vem à mente é a modelagem de processos, porque o mundo é mecânico quântico. E se usarmos um computador quântico para simular processos, reações químicas ou qualquer outra coisa, será muito mais barato em termos computacionais.



A segunda e muito grande seção, à qual agora são dedicados muitos esforços, é o aprendizado de máquina quântico. Há uma grande esperança de que a computação quântica ajude a acelerar os processos de aprendizado e melhorar os algoritmos. Há muito trabalho aqui. Agora, por exemplo, nosso grupo quântico está trabalhando em conjunto com um cientista da China. Ele é um engenheiro de ML muito forte e temos um viés quântico, tentando criar algo juntos.



A terceira coisa foi um pouco exagerada há alguns meses atrás. Agora, talvez o hype já esteja dormindo, mas há até toda uma blockchain quântica. Foi inventado pelo meu bom amigo e grande amigo. Sou eu, digo com um pouco de orgulho.



Mas não temos um computador quântico. Infelizmente, não podemos voltar para casa e executar programas com a mesma facilidade que fazemos em Python.



O que fazer? Eu estava pensando sobre o que fazer no meu terceiro ano quando estava escrevendo meu primeiro trabalho. Eu estava escrevendo um emulador de computação quântica. Claro, todo mundo escreve emuladores e todo mundo os usa de alguma maneira. No meu quarto ano, escrevi um emulador que simula interferências, ruídos e assim por diante. E então eu fiquei entediado.



Tentei pesquisar em um mecanismo de pesquisa e percebi que existem muitos emuladores. Aqui estão alguns links, eles são bastante simples e interessantes:





Mas eu quero parar no qiskit. Ele é especial, se destaca de todos. Do que?







Funciona em dois modos. O primeiro é, como todo mundo, um emulador local comum. O segundo é executar o programa em um computador quântico IBM Q real, que se parece com isso.







Agora é um barril inteiro no qual é mantida uma temperatura extremamente baixa - cerca de três milikelvin. Está muito frio. E a IBM fornece a capacidade baseada na nuvem de conectar e executar seu código diretamente nessa máquina.



Obviamente, ele compila comandos e assim por diante de uma maneira especial. Como isso funciona? Existem várias instalações desse computador para acesso geral. Um deles é de 5 qubit, há 15 qubit, 16 qubit e até 20 qubits estão disponíveis para nós. São cerca de 20 bits de informação comum e clássica, mas já são alguma coisa.



Aqui, com certeza, muitos de vocês pensam: é isso, eu quero! Mas você precisa se lembrar de um pouco de matemática. Um pouco de álgebra, mas só um pouco, como prometi.



Para começar a programar em um computador quântico, você precisa entender o que é um qubit. É apenas um vetor no espaço vetorial 2-D. Mas, como estamos falando de espaços vetoriais, eles têm uma base.







A base se parece com isso. Existem duas colunas de vetores e uma base unitária, padrão, nos cursos de álgebra, é indicado da seguinte forma:

[ frac10]

e

[ frac01]

. E há uma notação padrão na notação de Dirac, entre colchetes angulares.



Ou seja, para que você não fique confuso, continuarei diminuindo assim.







E como é um vetor, seu estado pode ser escrito assim. Um qubit q é uma superposição de dois vetores de base, onde α e β são números complexos, mas não absolutamente nenhum número, mas de modo que a soma dos módulos de seus quadrados seja igual a um.







Se tentarmos desenhar isso, obtemos que um qubit é um vetor em uma esfera tridimensional. Uma quantidade infinita de informações pode ser armazenada em um qubit, porque é apenas um vetor, do qual existe uma quantidade infinita.



Você não precisa prestar atenção à imagem, é apenas uma técnica de visualização para atrair atenção.



Nós conversamos sobre qubits. Mais importante ainda, um qubit é um vetor. Vetor em espaço vetorial complexo. O que você pode fazer com isso?







A primeira coisa que costumávamos fazer era tentar calcular o valor da nossa variável, por exemplo, em Python. Queremos ler em que estado o qubit está. Mas nunca saberemos o significado exato de α e β.



Se tentarmos olhar para um qubit, leia-o, obteremos um zero ou um com as probabilidades correspondentes. Probabilidades são simplesmente projeções nos vetores de base correspondentes.



A segunda coisa que podemos fazer é, por exemplo, clonar um qubit. Chamamos isso de atribuir uma variável a outra. Infelizmente, isso não pode ser feito no mundo quântico.







Não há operação de atribuição, e isso está muito relacionado ao que eu acabei de dizer: nem seremos capazes de analisar o valor exato. Este é um resultado fundamental. Está provado com muita simplicidade : literalmente duas linhas de comparação, por contradição.







Há um qubit que não podemos ler, não podemos clonar. O que você pode fazer?



Um qubit é um vetor. O vetor pode ser obtido e girado em torno da esfera. Para girar, você pode pensar em uma matriz que faz essa rotação. Todas as operações em qubits são matrizes. Eles são chamados unitários.



Unitário - para que essa condição seja cumprida, ela é escrita aqui de uma maneira astuta. Este ícone indica matriz conjugada transposta e complexa. Essa propriedade é muito importante, significa que há um inverso para qualquer operação. Ou seja, não importa como torcemos o vetor, sempre podemos devolvê-lo à sua posição anterior. Sempre há uma operação reversa.



Vamos ver o que as operações podem ser. O que estamos acostumados no caso clássico. Há um zero, você pode transformá-lo em um e vice-versa.







Este é o operador de negação e é muito simples. É gravado com essa matriz. Se tentarmos multiplicar, conseguimos exatamente o que queremos.







Eu até o desenhei aqui. Nada complicado. O operador de negação tem uma notação padrão, o operador X. Pense bem, é apenas uma rotação em torno de um dos eixos. E existem operadores Y e Z, rotação em torno de outros eixos, mas isso não é tão importante agora.



E já podemos executar nosso primeiro programa em um computador quântico que negará um qubit.



Mas nós, na ciência da computação quântica, é claro, muito raramente escrevemos em Python. Usamos esquemas com mais frequência.







O diagrama geralmente se parece com isso. As linhas horizontais são simplesmente valores de qubit. Eu tenho cinco deles desenhados aqui. E no bloco - a operação que faremos.



Primeiro bloco. Um dispositivo de medição é desenhado aqui. Isso significa que queremos apenas medir o que está no primeiro qubit.







Se executarmos isso, obtemos que, com uma probabilidade de um, temos um zero lá, porque eles são inicializados nesse estado e não fizemos mais nada com eles.







Uma coisa dessas pode ser escrita em Python usando a biblioteca qiskit. Vamos ver o que acontece aqui, linha por linha. Primeiro, começamos o registro quântico. Estou ligando aqui a partir de um qubit. E o registro clássico. O registro clássico é necessário para escrever o resultado da medição em algum lugar. Ou seja, eu faço transformações com um registro quântico, o resultado é um clássico - zero ou um. E então eu crio meu próprio circuito, que tem esse qubit clássico quântico. Só estou dizendo: vamos medir o q qubit em C. Vamos começar tudo isso e tudo ficará bem. Mas o leitor atento verá: diz aqui que meu back-end é um emulador local.







O mesmo pode ser feito com o IBM Q, mas há um pouco mais de código aqui. Há todo tipo de macarrão na escolha de um dispositivo que nos responderá o mais rápido possível, transferindo alguns tokens, só isso. Mas não há nada complicado.







O mesmo pode ser feito com o operador de negação. Este é o operador X, como eu disse. Parece exatamente o mesmo no diagrama, vamos executar o mesmo.







Agora, com uma probabilidade de um, obtemos um, como planejado. Nenhuma mágica.







O código é o mesmo. É que aqui também estou aplicando o operador X ao q qubit.



Ok, vamos tentar ir mais longe.







Há uma coisa muito complicada aqui. Vamos tentar obter esse estado. Este estado é muito interessante. Nós vamos conseguir essa superposição. Se tentarmos medir, com uma probabilidade de 1/2, obtemos zero ou um. Ou seja, será uma superposição tão uniforme que podemos conseguir qualquer coisa.



Pode-se fazer uma analogia com o que é um lançamento quântico de moedas. Vamos dizer que tudo bem, com probabilidade - obtemos zero e um. A matriz fica assim.







Fácil de verificar, mas certamente não. Vamos desenhar um diagrama. Operador H em homenagem a Hadamard.







Vamos medir e obter aproximadamente o que esperamos. Com uma probabilidade de ½, zero e um. Um pouco mais, um pouco menos, mas é assim que funciona.



Aqui está o código Python, apenas para estar lá, estamos em uma conferência em Python.







Existe uma superposição. Aplicamos o operador Hadamard a ele e medimos.



Mas você pode jogar uma moeda duas vezes, todos estamos acostumados a isso. Se você jogar uma moeda duas vezes, nada muda. Vamos tentar fazer isso no caso quântico.







Aplicamos o operador Hadamard duas vezes seguidas e sempre obtemos um zero.







Ou seja, se você jogar uma moeda quântica duas vezes, sempre receberá um zero, porque o operador Hadamard é inverso a si próprio. Se você se multiplicar, sempre terá um. Aqui está uma coisa.



Então, você pode fazer algo com um qubit. Pode ser torcido, torcido e medido. Vamos tentar adicionar mais qubits. O que estamos acostumados a fazer no mundo clássico? Faça e execute operações lógicas simples "ou" e "e".







No mundo quântico, você não pode fazer isso, porque eles não são completamente reversíveis. Ou seja, obtendo zero na operação “e”, nunca podemos saber quais eram os valores iniciais.



E no mundo quântico, como eu disse, uma operação é uma matriz unitária que é sempre reversível. Como, então, você programa? Tudo o que estamos acostumados está desmoronando. Mas um novo herói aparece, este é o operador da chamada negação controlada.







Se estivéssemos escrevendo em Python, ficaria assim. Se o primeiro qubit for um, vamos inverter o segundo qubit. Isso não é uma matriz, é assim que o operador se parece. Mas, em princípio, o que eu disse está escrito aqui. Onde existe unidade no primeiro qubit, o segundo é invertido.







A matriz já é quatro por quatro. Para dois qubits, fica assim. Vou deixar o problema com um asterisco para multiplicar e ver se isso é verdade.







Essa coisa pode até ser programada. Nenhuma ciência de foguetes. Você só precisa pegar, criar um circuito com dois qubits, com dois clássicos, e fazer, não apenas o CNOT, mas o CX, a negação controlada.



A negação era o operador X, portanto, em princípio, tudo é lógico. E você pode desenhar um diagrama. O esquema é o seguinte.







Ou seja, a negação controlada é uma vantagem do qubit que queremos mudar. E o ponto, que é o controle. Aqui, se o qubit estiver em unidade, mudaremos o segundo.







Aqui, especificamente, primeiro inverto o primeiro para que ele seja um, e depois meço ambos e obtenho o resultado | 11⟩. Tudo é como esperávamos.



Mas agora é a hora de usar todo o nosso conhecimento juntos.







Vamos pegar todos os três ou quatro operadores que conhecemos e agrupá-los em um esquema. Ou seja, aplicamos o operador Hadamard ao primeiro operador. Inverta o segundo e, depois, todos juntos, faça uma negação controlada e meça.



Não vamos executá-lo ainda, mas tente adivinhar o que acontecerá.







Se aplicarmos o operador Hadamard ao primeiro qubit e negarmos o segundo, obteremos essa superposição. Não quero perder tempo verificando agora, pode ser facilmente multiplicado. Mas a posição é muito interessante. Em primeiro lugar, é muito semelhante ao uniforme e, em segundo lugar, agora esse estado é chamado emaranhado, se também tomarmos negação controlada.







O estado é confuso. E porque? Vamos tentar fazer uma medição. Olha, se eu medir o primeiro qubit e tê-lo no estado zero, posso dizer que o segundo qubit está necessariamente no estado um.



Ou seja, se eu fizer essa transformação com meus qubits, eu der um qubit ao meu amigo, ele voará para Nova York e eu medir o segundo qubit comigo mesmo, saberei exatamente em que estado ele está. Isso é chamado de efeito de entrelaçamento quântico ou conexão quântica. E este é o principal mecanismo pelo qual a computação quântica funciona. Ele mudará, eles são conectados de forma muito rígida e, durante a medição, só podemos obter | 00⟩ ou | 11⟩.



Nesta ocasião, há uma ilustração muito interessante a favor de um cientista austríaco, na minha opinião, que estava muito distraído (atualização ).







A distração era que ele usava meias diferentes o tempo todo. E seus colegas brincaram com ele: se ele entra na sala com um pé e vemos que a meia é rosa, então podemos dizer com certeza que a segunda meia não é rosa. Assim vai.







Se executarmos isso, obteremos exatamente o que queremos. Já é bem engraçado aqui. A probabilidade é exatamente 0,5, mas isso é uma coincidência.







Se honestamente rodarmos em um computador quântico, teremos essa imagem. Parece que dizemos: o estado | 00⟩ nunca pode ser obtido e o estado | 11⟩ nunca pode ser obtido. Mas ainda funciona: o estado atual da tecnologia é tal que existem ruídos que nem sempre podem ser facilmente suprimidos. E eles estão lutando com isso.



Mas se você se lembra da ciência clássica da computação, é a mesma coisa: códigos de correção de erros e tudo mais. É só que o qubit é muito pequeno para gastar agora bits extras na correção de erros.



Agora, como prometi, alguns exemplos de algoritmos. Mas estes serão apenas exemplos infundados sem análise de algoritmos, para que você pareça, pense e se interesse.







O primeiro algoritmo está relacionado apenas ao Deutsch, sobre o qual falamos no começo. Este é o algoritmo Deutsch-Jozy. E ele faz o seguinte. Imagine que temos uma função booleana em n variáveis. E sabemos com certeza que é constante ou equilibrado. Equilibrado significa que em exatamente metade dos argumentos é igual a zero, e na outra metade - a um. Vamos tentar verificar classicamente se é constante ou não.



Para fazer isso, precisamos verificar pelo menos metade de todas as opções possíveis: opção 2 n - 1 +1. O algoritmo quântico permite fazer isso em n chamadas para a própria função, em n cálculos da própria função. Esse é um número exponencialmente menor de ocorrências.



O segundo exemplo provavelmente é bem conhecido por todos, por causa disso, eles dizem que os computadores quânticos quebram toda a criptografia: podemos fatorar números quânticos muito rapidamente.







As estimativas de dificuldade são fornecidas aqui e há um exemplo fantástico. Em 2011, o número 15 foi fatorado em um computador real, com sete qubits.







Mas nem tudo é tão ruim. Caso os computadores quânticos atinjam o nível em que você pode quebrar o RSA, já existe criptografia pós-quântica. Ele se baseia no aprendizado com erros. É quando um pequeno erro é introduzido no problema, tornando muito difícil encontrar uma resposta. Geralmente, esses são alguns tipos de equações ou um sistema de equações. Aqui está um exemplo do algoritmo. Quem quiser pode ler com mais detalhes.



O mais interessante: o algoritmo da Nova Esperança é baseado nisso , a nova esperança de toda a humanidade. Em 2016, o Chrome adicionou suporte para esse algoritmo. Há um link para o blog aqui. Não foi minha ideia, tudo realmente é. O futuro já está aqui.



Existem alguns links no final:





Isso é mais ou menos tudo. Eu só quero acrescentar que há cerca de 50 anos, quando Deutsch começou a fazer ciência da informação quântica, os computadores eram grandes. Eles foram feitos por várias empresas. Eles eram do tamanho de um guarda-roupa. E agora, aproximadamente as mesmas empresas fabricam grandes computadores quânticos. E, é claro, não sabemos o que acontecerá em 50 anos.



Se você tentar digitar seu mecanismo de pesquisa favorito, hoje poderá encontrar vagas para um programador quântico. Claro, há mais pesquisas por aí, mas mesmo assim. Obrigado.



All Articles