Path: blob/main/translations/pt/quantum-machine-learning/encoding.ipynb
3860 views
Codificação de dados
Nesta página, apresentaremos o problema de codificação de dados para aprendizado de máquina quântico e, em seguida, descreveremos e implementaremos vários métodos de codificação de dados.
Introdução
A representação de dados é crucial para o sucesso dos modelos de aprendizado de máquina. Para o aprendizado de máquina clássico, o problema é como representar os dados numericamente, para que possam ser melhor processados por um algoritmo de aprendizado de máquina clássico.
Para o aprendizado de máquina quântico, essa questão é semelhante, mas mais fundamental: como representar e inserir eficientemente os dados em um sistema quântico, para que possam ser processados por um algoritmo de aprendizado de máquina quântico. Isso geralmente é chamado de codificação de dados, mas também é chamado de incorporação ou carregamento de dados.
Esse processo é uma parte crucial dos algoritmos de aprendizado de máquina quânticos e afeta diretamente seu poder computacional.
Métodos
Vamos considerar um conjunto de dados clássico consistindo de amostras, cada uma com características : ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{script-x}{\mat… onde é um vetor dimensional para . Para representar este conjunto de dados em um sistema de qubits, podemos usar várias técnicas de incorporação, algumas das quais são brevemente explicadas e implementadas a seguir, conforme as Referências 1 e 2 .
Codificação de base
A codificação de base associa uma string clássica de bits com um estado de base computacional de um sistema de qubits. Por exemplo, se , isso pode ser representado como uma string de bist como , e por um sistema qubits como o estado quântico . De forma geral, para uma string de bits: , o estado de qubits correspondente é ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{ket-x}{| x \ra… com ParseError: KaTeX parse error: Undefined control sequence: \class at position 5: b_n \̲c̲l̲a̲s̲s̲{in}{\in} {0,1} para .
Para o conjunto de dados clássico descrito acima, para usar a codificação de base, cada ponto de dados deve ser uma string de bits: , que pode ser mapeado diretamente para o estado quântico com para e . Podemos representar todo o conjunto de dados como superposições de estados de base computacional:
ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_ket-dataset}{…Codificação de base
No Qiskit, uma vez que calculamos qual estado irá codificar nosso conjunto de dados, podemos usar a função initialize para prepará-lo. Por exemplo, o conjunto de dados é codificado como o estado :
Este exemplo ilustra algumas desvantagens da codificação de base. Embora seja simples de entender, os vetores de estado podem se tornar bastante esparsos e os esquemas para implementá-lo geralmente não são eficientes.
Codificação de amplitude
A codificação de amplitude codifica dados nas amplitudes de um estado quântico. Ela representa um ponto de dados -dimensional clássico normalizado, , como as amplitudes de um estado quântico de qubits, : onde , é o elemento de e é o estado da base computacional.
Para codificar o conjunto de dados clássico descrito acima, concatenamos todos os pontos de dados -dimensionais em um vetor de amplitude, de comprimento : ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 8: \alpha=\̲c̲s̲s̲I̲d̲{ *a -norm}{A* … onde é uma constante de normalização, tal que . O conjunto de dados agora pode ser representado na base computacional como: onde são elementos do vetor de amplitudes e são os estados da base computacional. O número de amplitudes a serem codificadas é . Como um sistema de qubits fornece amplitudes, a incorporação de amplitude requer qubits.
Codificação de amplitude
Como exemplo, vamos codificar o conjunto de dados usando codificação de amplitude. Concatenando os dois pontos de dados e normalizando o vetor resultante, obtemos: e o estado quântico de 2 qubits resultante seria:
No exemplo acima, o número total de elementos do vetor amplitude, , é uma potência de 2. Quando não é uma potência de 2, podemos simplesmente escolher um valor para tal que e preencher o vetor amplitude com constantes pouco informativas.
Tal como na codificação de base, uma vez calculado qual o estado que codifica nosso conjunto de dados, podemos usar a função initialize no Qiskit para prepará-lo:
A vantagem da codificação de amplitude é que ela requer apenas qubits para codificar. No entanto, algoritmos subsequentes devem operar nas amplitudes de um estado quântico, e os métodos para preparar e medir os estados quânticos tendem a não ser eficientes.
Codificação de ângulo
A codificação de ângulo codifica recursos nos ângulos de rotação de qubits, onde . Por exemplo, o ponto de dados pode ser codificado como: ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_}{|x\rangle} …
Isso é diferente dos dois métodos de codificação anteriores, pois codifica apenas um ponto de dados por vez, em vez de um conjunto de dados inteiro. No entanto, ele usa apenas qubits e um circuito quântico de profundidade constante, tornando-o receptivo ao hardware quântico atual.
Podemos especificar a codificação de ângulo como uma unitária : ParseError: KaTeX parse error: Undefined control sequence: \class at position 12: S_{x_j} = \̲c̲l̲a̲s̲s̲{ *big-o-times-…
onde:
Lembrando que uma rotação de um único qubit em torno do eixo é:
Notamos que , e como exemplo, codificamos o ponto de dados usando o qiskit:
A codificação de ângulo denso é uma ligeira generalização da codificação de ângulo, que codifica dois recursos por qubit usando a fase relativa, onde o ponto de dados pode ser codificado como: ParseError: KaTeX parse error: Undefined control sequence: \class at position 13: |x\rangle = \̲c̲l̲a̲s̲s̲{ *big-o-times-…
Embora a codificação de ângulo e ângulo denso usem sinusóides e exponenciais, não há nada de especial sobre essas funções, e podemos facilmente abstraí-las para uma classe geral de codificações de qubit que usam funções arbitrárias ou definem as codificações como unidades arbitrárias, implementadas como circuitos quânticos parametrizados
Codificação arbitrária
A codificação arbitrária codifica recursos como rotações em portas lógicas parametrizadas em qubits, onde . Tal como a codificação de ângulo, esta codifica apenas um ponto de dados de cada vez, em vez de um conjunto de dados inteiro. Esta codificação também usa um circuito quântico de profundidade constante e qubits, o que significa que pode ser executada no hardware quântico atual.
Por exemplo, usar o circuito do Qiskit EfficientSU2 para codificar 12 recursos, necessita apenas de 3 qubits:
Aqui codificamos o ponto de dados com 12 recursos, usando cada uma das portas parametrizadas para codificar uma recurso diferente.
O circuito Qiskit ZZFeatureMap com 3 qubits, codifica apenas um ponto de dados de 3 recursos, apesar de possuir 6 portas parametrizadas:
Questionário rápido
Um circuito quântico parametrizado possui 16 parâmetros. Qual é o maior número de recursos que ele pode codificar?
4
8
16
32
O desempenho de diferentes circuitos quânticos parametrizados em diferentes tipos de dados é uma área ativa de investigação.
Referências
Maria Schuld and Francesco Petruccione, Supervised Learning with Quantum Computers, Springer 2018, doi:10.1007/978-3-319-96424-9.
Ryan LaRose and Brian Coyle, Robust data encodings for quantum classifiers, Physical Review A 102, 032420 (2020), doi:10.1103/PhysRevA.102.032420, arXiv:2003.01695.