Path: blob/master/site/ko/quantum/tutorials/gradients.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
그래디언트 계산하기
이 튜토리얼에서는 양자 회로의 기대 값에 대한 그래디언트 계산 알고리즘을 탐색합니다.
양자 회로에서 관찰 가능한 특정 기대 값의 그래디언트를 계산하는 것은 복잡한 프로세스입니다. 관찰 가능 항목의 기대 값은 기록하기 쉬운 분석적 그래디언트 수식이 있는 행렬 곱셈 또는 벡터 더하기와 같은 기존의 머신러닝 변환과 달리 언제든 기록하기 쉬운 분석적 그래디언트 수식을 사용할 수 없습니다. 결과적으로 다양한 시나리오에 유용한 다양한 양자 그래디언트 계산 방법이 있습니다. 이 튜토리얼에서는 두 가지의 다른 미분 체계를 비교하고 대조합니다.
설정
TensorFlow Quantum을 설치하세요.
이제 TensorFlow 및 모듈 종속성을 가져옵니다.
1. 준비
양자 회로에 대한 그래디언트 계산 개념을 좀 더 구체적으로 만들어 보겠습니다. 다음과 같은 매개변수화된 회로가 있다고 가정합니다.
관찰 가능 항목과 함께:
이 연산자를 보면 라는 것을 알 수 있습니다.
를 정의하면 입니다. 확인해 보겠습니다.
2. 미분기의 필요성
더 큰 회로일수록 주어진 양자 회로의 그래디언트를 정확하게 계산하는 공식이 항상 주어지지 않습니다. 간단한 공식으로 그래디언트를 계산하기에 충분하지 않은 경우 tfq.differentiators.Differentiator
클래스를 사용하여 회로의 그래디언트를 계산하기 위한 알고리즘을 정의할 수 있습니다. 예를 들어, 다음을 사용하여 TensorFlow Quantum(TFQ)의 상기 예를 다시 재현할 수 있습니다.
그러나 샘플링을 기반으로 예상치로 전환하면(실제 기기에서 발생하는 일) 값이 약간 변경될 수 있습니다. 이것은 이제 불완전한 추정치를 가지고 있음을 의미합니다.
이것은 그래디언트와 관련하여 심각한 정확성 문제로 빠르게 복합화될 수 있습니다.
여기서 유한 차분 공식은 분석 사례에서 그래디언트를 계산하는 것이 빠르지만 샘플링 기반 방법의 경우 노이즈가 너무 많습니다. 좋은 그래디언트를 계산할 수 있도록 보다 신중한 기술을 사용해야 합니다. 다음으로 분석적 기대 그래디언트 계산에는 적합하지 않지만 실제 샘플 기반 사례에서 훨씬 더 성능을 발휘하는 훨씬 느린 기술을 살펴보겠습니다.
위에서 특정 연구 시나리오에 특정 미분기가 가장 잘 사용됨을 알 수 있습니다. 일반적으로 기기 노이즈 등에 강한 느린 샘플 기반 방법은 보다 '실제' 설정에서 알고리즘을 테스트하거나 구현할 때 유용한 미분기입니다. 유한 차분과 같은 더 빠른 방법은 분석 계산 및 더 높은 처리량을 원하지만 아직 알고리즘의 기기 실행 가능성에 관심이 없는 경우 적합합니다.
3. 다중 observable
두 번째 observable을 소개하고 TensorFlow Quantum이 단일 회로에 대해 여러 observable을 지원하는 방법을 살펴보겠습니다.
이 observable이 이전과 같은 회로에서 사용된다면 및 입니다. 간단하게 확인해 보겠습니다.
이 정도면 일치한다고 볼 수 있습니다.
이제 를 정의하면 입니다. 회로와 함께 사용하기 위해 TensorFlow Quantum에서 하나 이상의 observable을 정의하는 것은 에 더 많은 용어를 추가하는 것과 같습니다.
이것은 회로에서 특정 심볼의 그래디언트가 해당 회로에 적용된 해당 심볼의 각 observable에 대해 그래디언트의 합과 동일함을 의미합니다. 이는 TensorFlow 그래디언트 가져오기 및 역전파(특정 심볼에 대한 그래디언트로 모든 observable에 대한 그래디언트 합계를 제공)와 호환됩니다.
여기서 첫 번째 항목은 예상 w.r.t Pauli X이고, 두 번째 항목은 예상 w.r.t Pauli Z입니다. 그래디언트를 사용할 때는 다음과 같습니다.
여기에서 각 observable의 그래디언트의 합이 실제로 의 그래디언트임을 확인했습니다. 이 동작은 모든 TensorFlow Quantum 미분기에서 지원하며 나머지 TensorFlow와의 호환성에 중요한 역할을 합니다.
4. 고급 사용법
모든 차별화 요소는 TensorFlow Quantum 서브 클래스 tfq.differentiators.Differentiator
내부에 있습니다. 차별화 요소를 구현하려면 사용자가 두 인터페이스 중 하나를 구현해야 합니다. 표준적인 방법은 그래디언트 추정치를 얻기 위해 측정할 회로를 기본 클래스에 알려주는 get_gradient_circuits
을 구현하는 것입니다. 또는, differentiate_analytic
및 differentiate_sampled
에 오버로드를 적용할 수 있습니다. tfq.differentiators.Adjoint
클래스가 이 경로를 사용합니다.
다음은 TensorFlow Quantum을 사용하여 회로의 그래디언트를 구현합니다. 약간의 매개변수 이동을 사용합니다.
위에서 정의한 회로, 를 상기하세요. 이전과 마찬가지로 관찰 가능 값인 에 대한 이 회로의 기대값으로 함수를 정의할 수 있습니다. 매개변수 이동 규칙을 사용하면 이 회로의 경우, 도함수가 라는 것을 알 수 있습니다. get_gradient_circuits
함수는 이 도함수의 구성요소를 반환합니다.
Differentiator
기본 클래스는 위에서 본 매개변수 이동 공식에서와 같이 get_gradient_circuits
에서 반환된 구성요소를 사용하여 도함수를 계산합니다. 이 새로운 차별화 요소는 이제 기존 tfq.layer
객체와 함께 사용할 수 있습니다.
이제 이 새로운 미분기를 사용하여 미분 ops를 생성할 수 있습니다.
요점: 차별화 요소는 한 번에 하나의 op에만 연결할 수 있으므로 이전 op에 연결된 미분기는 새 op에 연결하기 전에 새로 고쳐야 합니다.
성공: 이제 TensorFlow Quantum이 제공하는 모든 미분기를 사용하고 자신만의 미분기를 정의할 수 있습니다.