퀀텀/하이브리드 양자

6.2. 데이터를 각도로 변환해서 양자에 넣는 방법-각도 인코딩

친절샘 정이 2026. 5. 18. 12:00

데이터를 각도로 변환해서 양자에 넣는 방법

각도 인코딩 


시작하기 전에 — 이런 장면을 상상해보자

시계를 본다.

시침이 12시 방향에 있다. 이것이 하나의 상태다.

시침을 3시 방향으로 돌렸다. 90도 회전했다. 이것이 다른 상태다.

6시 방향으로 더 돌렸다. 180도가 됐다. 또 다른 상태다.

시침의 각도가 정보를 담고 있다. 12시인지, 3시인지, 6시인지. 각도만 보면 지금 몇 시인지 안다.

각도 인코딩이 이것이다.

데이터를 시침처럼 큐비트를 돌리는 각도로 표현한다. 숫자 하나가 각도 하나가 된다.


진폭 인코딩과 뭐가 다른가

지난 시간에 배운 진폭 인코딩을 기억하는가.

두 가지 짐 싸는 방법 비유로 정리하자.

진폭 인코딩 (압축 전문가):
→ 짐 100만 개를 가방 하나에 쑤셔넣는다
→ 엄청난 압축. 그런데 쑤셔넣는 과정이 복잡하다
→ 가방을 잘못 다루면 짐이 망가진다 (오류)

각도 인코딩 (실용주의자):
→ 짐 하나에 가방 하나를 쓴다
→ 압축은 덜 된다. 그러나 쑤셔넣는 과정이 단순하다
→ 가방이 튼튼해서 짐이 잘 보관된다 (안정적)
 
 

진폭 인코딩이 압축률은 높지만 불안정하다.

각도 인코딩이 압축률은 낮지만 안정적이다.

지금 양자 컴퓨터는 아직 불완전하다. 오류가 생기기 쉽다. 그래서 각도 인코딩이 현재 가장 많이 쓰인다.


기본 원리: 나침반을 돌린다

각도 인코딩을 가장 단순하게 이해하는 방법이다.

나침반 비유로 설명하자.

나침반이 있다. 바늘이 북쪽을 가리키고 있다. 이것이 기본 상태(0도)다.

데이터가 들어왔다. 숫자 45가 들어왔다.

나침반 바늘을 45도 돌린다. 이제 나침반 바늘이 북동쪽을 가리킨다. 이 상태가 숫자 45를 담은 큐비트다.

다음 데이터 90이 들어왔다.

다른 나침반 바늘을 90도 돌린다. 동쪽을 가리킨다. 이것이 숫자 90을 담은 큐비트다.

데이터 0   → 큐비트 바늘 0도 (북쪽)
데이터 45  → 큐비트 바늘 45도 (북동쪽)
데이터 90  → 큐비트 바늘 90도 (동쪽)
데이터 180 → 큐비트 바늘 180도 (남쪽)
 
 

데이터마다 큐비트 바늘을 그만큼 돌린다. 이것이 각도 인코딩이다.

이 돌리는 동작을 양자 게이트로 한다. RX, RY, RZ 게이트가 X축, Y축, Z축으로 돌리는 게이트다.


왜 단순한 것이 강점인가

각도 인코딩이 단순한 게 왜 좋은가.

레고 조립 비유로 설명하자.

레고로 무언가를 만든다.

복잡한 방법 (진폭 인코딩): 블록 200개를 동시에 맞춰야 한다. 한 블록이 잘못 끼면 전체가 무너진다. 조립하는 데 오랜 시간이 걸린다. 실수가 생기기 쉽다.

단순한 방법 (각도 인코딩): 블록 하나씩 차례로 끼운다. 하나가 잘못 끼면 그것만 고치면 된다. 빠르고 안전하다.

양자 회로에서 이것이 회로 깊이다.

 
진폭 인코딩:
회로 깊이 깊음 = 게이트가 많이 쌓임
→ 오류가 누적된다
→ 결과가 부정확해진다

각도 인코딩:
회로 깊이 얕음 = 게이트가 적게 쌓임
→ 오류가 적다
→ 결과가 정확하다
 

지금 양자 컴퓨터는 오류가 생기기 쉽다. 그러니 회로를 얕게 유지하는 각도 인코딩이 유리하다.


비선형 변환이 왜 중요한가

이것이 각도 인코딩의 숨겨진 강점이다.

직선 도로 vs 구불구불 도로 비유로 설명하자.

두 지점이 있다. A와 B.

직선 도로로 간다. 빠르지만 장애물을 만나면 돌아갈 방법이 없다.

구불구불 도로로 간다. 조금 느리지만 장애물을 유연하게 돌아간다. 더 다양한 경로가 있다.

수학에서 선형과 비선형이 이것과 같다.

선형 변환: y = ax
(입력이 두 배면 출력도 두 배. 단순하지만 유연하지 않음)

비선형 변환: y = cos(ax/2)
(입력과 출력이 복잡하게 연결됨. 더 다양한 패턴을 표현 가능)
 
 

각도 인코딩을 쓰면 무슨 일이 일어나는가.

데이터 θ(세타)를 큐비트 바늘을 돌리는 데 쓴다. 그런데 돌리는 과정에서 자동으로 cos(θ/2)라는 변환이 일어난다.

이것이 비선형 변환이다. 데이터가 복잡하게 변환되면서 더 다양한 패턴을 표현할 수 있다.

일반 AI에서 활성화 함수(ReLU, sigmoid 등) 라고 부르는 것과 같은 역할이다.

각도 인코딩이 자동으로 이 역할을 해준다. 추가 장치 없이.


데이터 재업로드와 결합하면

이전에 데이터 재업로드를 배웠다. 기억하는가.

데이터를 처음에 한 번만 넣는 것이 아니라 계속 중간중간에 다시 넣는 것.

각도 인코딩과 데이터 재업로드를 결합하면 강력한 효과가 나온다.

피아노 변주곡 비유로 설명하자.

피아노 곡을 연주한다.

방법 1 (한 번만 각도 인코딩): 처음에 주제 멜로디를 한 번 연주한다. 끝.

방법 2 (데이터 재업로드 + 각도 인코딩): 주제 멜로디를 연주한다. 변주를 한다. 또 연주한다. 또 변주한다. 반복.

주제가 계속 반복되면서 풍부하고 복잡한 곡이 완성된다.

각도 인코딩만:
데이터 → 한 번 각도로 변환 → 제한적 표현력

데이터 재업로드 + 각도 인코딩:
데이터 → 각도 변환 → 학습 파라미터 → 데이터 다시 → 각도 변환 → ...
→ 반복할수록 더 복잡한 패턴 표현 가능
→ 어떤 함수든 근사할 수 있을 만큼 강력해짐
 
 

실제로 어디에 쓰이는가


활용 1 — 자연어 처리 (언어 AI)

단어를 나침반으로 표현하는 비유로 설명하자.

"행복"이라는 단어가 있다.

이 단어를 AI에 넣으려면 숫자로 바꿔야 한다. 언어 AI에서는 단어를 벡터(숫자 여러 개)로 표현한다.

예를 들어 "행복" = [0.8, 0.3, 0.5, 0.7] 이런 식으로.

이 숫자들을 각도 인코딩으로 양자에 넣는다.

"행복" = [0.8, 0.3, 0.5, 0.7]
        ↓ [각도 인코딩]
큐비트 1: 0.8도만큼 회전
큐비트 2: 0.3도만큼 회전
큐비트 3: 0.5도만큼 회전
큐비트 4: 0.7도만큼 회전
 
 

나침반 4개가 각각 다른 방향을 가리키는 것처럼. 그 패턴이 "행복"이라는 단어를 나타낸다.


활용 2 — 레이더 위성 이미지

지도 간소화 비유로 설명하자.

위성 레이더가 지구를 찍었다. 이 데이터는 복잡하다. 복소수(실수 + 허수)로 이루어진 값들이 가득하다.

이것을 전부 다 처리하려면 너무 복잡하다.

영리한 방법이 있다. 복소수 전체를 다 쓰지 않는다. 그 복소수의 크기(강도, Intensity)만 뽑아낸다.

 
복소수 데이터: 3 + 4i
강도(크기) 뽑기: √(3² + 4²) = 5
→ 숫자 5만 남긴다

이 숫자 5를 각도 인코딩으로 양자에 넣는다
큐비트 바늘을 5도 돌린다
 

복잡한 레이더 데이터가 단순한 각도로 변환됐다. 이것으로 지형 분류, 건물 탐지 같은 작업을 한다.


시계열 데이터

심장박동 측정 비유로 설명하자.

심전도 기계가 있다. 심장박동을 시간 순서대로 기록한다.

시간 1: 박동 70
시간 2: 박동 72
시간 3: 박동 68
시간 4: 박동 75
...
 
 

이 데이터를 양자 AI에 넣으려면 어떻게 하는가.

방법 1 — 직접 각도 인코딩: 각 시간의 박동 수를 바로 각도로 변환한다.

박동 70 → 큐비트 70도 회전
박동 72 → 큐비트 72도 회전
...
 

방법 2 — 특징 추출 후 각도 인코딩: LSTM이나 CNN으로 먼저 핵심 특징을 뽑는다. 평균 박동수, 최고점, 최저점, 패턴 등. 그 특징들을 각도로 변환한다.

원래 데이터 10,000개
        ↓ [LSTM/CNN으로 특징 추출]
핵심 특징 10개
        ↓ [각도 인코딩]
큐비트 10개
 
 

방법 2가 더 효율적이다. 중요한 정보만 남기고 나서 양자에 넣는다.


각도 인코딩의 한계

각도 인코딩도 단점이 있다.

1인 1실 숙소 비유로 설명하자.

여행단이 숙소에 도착했다.

진폭 인코딩 숙소: 방 하나에 사람 100명이 들어간다. 좁지만 방이 하나면 된다.

각도 인코딩 숙소: 사람 1명에 방 1개가 필요하다. 넓고 편하지만 사람이 100명이면 방이 100개 필요하다.

각도 인코딩의 단점:
특징(데이터) 1개 → 큐비트 1개 필요
특징 100개 → 큐비트 100개 필요
특징 1000개 → 큐비트 1000개 필요

지금 양자 컴퓨터에 큐비트가 몇 개?
→ 수십~수백 개

고차원 데이터(특징 수천 개)는?
→ 큐비트가 부족하다!
 
 

이 문제를 어떻게 해결하는가.

먼저 줄이고 나서 쓴다.

데이터 특징 10,000개
        ↓ [PCA 또는 오토인코더로 압축]
핵심 특징 50개
        ↓ [각도 인코딩]
큐비트 50개

→ 50개는 현재 양자 컴퓨터로도 처리 가능!
 
 

진폭 인코딩 vs 각도 인코딩 최종 비교

두 여행자 비유로 정리하자.

여행자 A (진폭 인코딩): 짐을 최대한 압축해서 작은 가방 하나에 넣는다. 이동이 편하다. 그런데 짐을 쑤셔넣는 과정이 복잡하고 힘들다. 가방 지퍼가 자주 망가진다.

여행자 B (각도 인코딩): 짐 하나마다 작은 파우치 하나씩 쓴다. 파우치가 여러 개지만 각각 간단하게 넣는다. 가방이 망가지는 일이 거의 없다.

항목              진폭 인코딩    각도 인코딩
압축률:           극히 높음      낮음
회로 깊이:        깊음           얕음
오류 내성:        약함           강함
준비 복잡도:      매우 복잡      단순
NISQ 적합성:      낮음           높음
현재 사용 빈도:   제한적         매우 많음
 
 

지금 당장 쓸 수 있는 것은 각도 인코딩이다.


전체를 한 번에 보자

시계열 AI를 만드는 과정으로 전체를 정리하면 이렇다.

원래 데이터 (심장박동 10,000개 시간 기록)
        ↓
고전 AI (LSTM)가 핵심 특징 추출
"평균 72, 최대 95, 최소 55, 불규칙 패턴 있음..."
→ 50개의 핵심 숫자로 요약
        ↓
각도 인코딩
숫자 하나 → 큐비트 바늘 하나 돌리기
50개 숫자 → 큐비트 50개 각각 해당 각도로 회전
        ↓
(데이터 재업로드로 반복하면 더 강력해짐)
        ↓
양자 회로 처리
얕은 회로로 안정적으로 계산
        ↓
결과 측정
"이 심장 패턴은 정상 / 부정맥 위험"
 
 

최종 정리

각도 인코딩을 네 문장으로 압축하면 이렇다.

첫째, 데이터를 큐비트 바늘을 돌리는 각도로 표현한다. 시계 시침이 각도로 시간을 나타내듯, 큐비트 바늘이 각도로 데이터를 나타낸다.

둘째, 회로가 얕아서 오류가 적다. 지금 불완전한 양자 컴퓨터에서 가장 많이 쓰이는 방법이다.

셋째, 돌리는 과정에서 자동으로 비선형 변환이 일어난다. 추가 장치 없이 복잡한 패턴도 표현할 수 있다.

넷째, 데이터가 많으면 먼저 줄이고 나서 쓴다. 고전 AI로 핵심만 뽑은 뒤 각도 인코딩으로 양자에 넣는다.