이때, Q의 column 벡터들은 A의 column 벡터들로부터 생성된 정규직교기저(서로 orthogonal하며, 크기가 1인 기저 벡터들)이며, R은 상삼각행렬이다. 즉, QR decomposition은 column 벡터들이 서로 선형독립인 행렬 A를 그에 해당하는 정규직교기저 및 성분으로 분해한다.
2. 그람-슈미트(Gram-Schmidt) 방법을 통한 QR Decomposition
A의 column 벡터에 대한 정규직교기저를 생성하는 방법으로 다음과 같은 그람-슈미트(Gram-Schmidt) 방법을 사용할 수 있다. 그람-슈미트방법은 n개의 선형독립인 n차원 column 벡터 a1,⋯,an으로부터 정규직교기저 q1,⋯,qn을 얻는 방법이다.
Step 1에서는 a1을 사용하여 크기가 1인 하나의 벡터를 생성하며, step 2부터는 이전에 생성되었던 벡터들을 사용하여 이전의 벡터들과 직교하는 벡터를 생성한다. Step 2를 예시로 들면, (a2⋅q1)는 a2를 q1에 투영한 성분이고, 즉, (a2⋅q1)q1는 a2가 가지고 있는 q1 방향의 성분이다. 따라서 최종적으로 p2=a2−(a2⋅q1)q1처럼 a2에서 q1 방향의 성분을 빼줌으로써 q1과 직교하는 벡터를 생성할 수 있으며, q1,q2는 a1,a2가 생성(span)하는 공간을 모두 생성할 수 있으므로 q1,q2를 기저(basis)라고 할 수 있다. 따라서 이러한 과정을 n번 반복하면 n개의 정규직교기저가 생성된다.
QR decomposition에서 Q는 A에 대한 정규직교기저, 상삼각행렬 R는 각 정규직교기저에 대한 성분이다. 위의 그람-슈미트 방법을 통해 Q의 원소가 되는 정규직교기저를 찾았으며, 그 과정에서 R 또한 구할 수 있다.
rii=∣p1∣(1≤i≤n)
rij=aj⋅pi(1≤i<j≤n)
이라고 두면 그람-슈미트 방법을 다음과 같이 쓸 수 있다.
q1=r111a1
q2=r221(a2−r12q1)
⋮
qn=rnn1(an−∑i=0n−1rinqi)
이를 ai에 대한 식으로 고치면 다음과 같이 나타나며, 행렬을 사용하여 A=QR의 형태로 쓸 수 있다.
위에서 그람-슈미트 방법을 이용한 QR decomposition 과정을 살펴보았지만, 여기에는 한가지 문제점이 존재한다. 실제 취득된 데이터에는 여러가지 noise가 섞여 있으며, 컴퓨터를 활용한 계산 때때로 약간의 오차를 발생시킨다. 하지만 그람-슈미트 방법의 경우 이전 step에서 계산된 값이 이후에도 계속 사용되기 때문에(예를 들면, q1의 경우 이후 a2,⋯,an의 계산에도 계속 사용됨) 데이터에 섞인 오차가 지속적으로 누적된다. 따라서 실제 구현에서는 그람-슈미트 방법 보다는 반복법 기반의 다른 방법을 사용하여 QR decomposition을 수행하는데 그 중 한가지가 하우스홀더(Householder) 방법이다.
하우스홀더 방법은 대칭변환을 활용하는 방법으로 다음과 같이 원점을 지나는 평면을 기준으로 어떤 점의 반대편을 찾아낸다.
Figure1. 대칭변환
위 그림에서 u가 평면의 단위법선벡터라면, x의 u방향 성분은 uTx이다. 따라서 x를 평면의 반대편으로 옮기기 위하여 x−(uTx)u∗2를 수행해야 한다. uTx는 스칼라 값이므로 (uTx)u=uuTx로 쓸 수 있으므로, 결국 대칭변환된 점 x′=x−2uuTx=(I−2uuT)x이다. 따라서 이러한 대칭이동을 나타내는 선형변환 행렬은 H=I−2uuT로 표현할 수 있다.
이때 I,uuT가 둘 다 대칭행렬이므로 H=HT 또한 대칭행렬이며, 해당 변환을 두번 적용하면 다시 제자리로 돌아오므로 H2=I→H−1=H이다. 따라서 H=HT,H−1=H이므로 H는 직교행렬이다.
∣x∣=∣y∣일 경우, x−y를 법선벡터로 하는 평면을 기준으로 대칭이동을 할 수 있으며 (이등변 삼각형을 생각해보면 알 수 있다), 어떤 벡터 x를 y의 위치로 옮기는 변환 행렬 H를 찾을 수 있다.
H=I−2uuT,u=∣x−y∣x−y
이제 위 변환을 이용하여 QR decomposition을 수행할 수 있다. 3×3 행렬을 예로 들면, 어떤 벡터 x=(x,y,z,w)T를 y=(∣x∣,0,0,0)T로 변환하는 H를 생각해보자. 이 행렬 H는 다음과 같다(이때, y=(−∣x∣,0,0,0)T를 사용해도 괜찮으며, 보통 계산시 발생하는 수치오차를 줄이기 위해 x의 첫번째 성분과 반대 부호를 취한다).
이제 행렬은 우상삼각행렬로 변환되었으며, H3H2H1A=R이며, A=(H3H2H1)−1R=QR으로 QR decomposition이 수행되었다. 다만, (H3H2H1)−1=Q가 되기 위하여 (H3H2H1)−1가 정규 직교 기저 행렬인가 하는 의문이 남는다. 우선 위에서 H가 직교행렬임을 보였으며, 이에 따라 H1,H2,H3 또한 직교행렬이다. 그리고 각 H1,H2,H3의 정의를 보면 알 수 있듯이 각 행렬의 column의 길이는 1이며, 따라서 H1,H2,H3는 정규직교행렬이다. 앞선글에서 직교행렬 변환은 벡터의 길이를 보존함을 보였으며, 따라서 정규직교행렬 끼리의 곱도 정규직교행렬이 된다. 그리고 n×n 정규직교행렬의 rank는 n이 되어 각 column들은 기저라고 볼 수 있다.
이러한 householder 방법 외에 기븐스 회전(Givens rotation) 등의 비슷한 느낌의 방법들도 존재한다. 또한 HA에 H−1를 곱하여도 HAH−1 또한 HA의 형태(하나의 열에서 ∣x∣밑의 원소들은 0인 형태)가 유지되는 것을 알 수 있는데(H−1=H를 생각) 닮음 변환은 고윳값을 유지하므로 householder 방법을 통해 A를 고윳값을 구하기 쉬운 형태(삼각행렬이나 헤센버그(Hessenberg)행렬로의 변환을 통한 QR 반복법)로 변환할 수 있다.
4. QR Decomposition을 통한 최소제곱문제 계산
최소제곱 문제는 Ax=b와 같은 시스템을 풀기위하여 ∣Ax−b∣가 최소가 되는 x를 찾는 문제이다. A의 역행렬을 구하여 x=A−1b와 같이 해결하면 되지 않느냐는 의문이 생길 수 있지만, 실제 실험환경에서는 행렬 A를 구성하는 데이터에 여러가지 noise나 error가 포함되어 있어 역행렬이 존재하지 않는 경우가 빈번하게 발생한다. 따라서 최선의 해를 찾기 위해 ∣Ax−b∣가 최소가 되는 x를 찾게되며, 이를 위해 QR docomposition이 활용될 수 있다.
우선 A의 column space를 V라고 할때(A에 의한 변환 결과는 A의 column space 안에 있으므로), b는 b=b⊥V+b∥V로 생각할 수 있다. 이때, b⊥V는 b가 V에 수직인 성분, b∥V는 b가 V에 투영된 성분이다. ∣Ax−b∣가 최소가 되는 경우는 Ax=b∥V가 되는 경우이다.
증명 ∣Ax−b∣가 최소가 되는 경우는 Ax가 b와 가장 가까워지는 지점을 찾는 것이며, 이 지점은 b∥V이고, 여기서 b까지의 거리는 b⊥V이다. 공간 V 내의 임의의 점 p를 생각하자. 이때 b−p=(b−b∥V)+(b∥V−p)=b⊥V+(b∥V−p)이며, b⊥V는 b∥V에 수직이므로 피타고라스 정리를 적용하면, ∣b−p∣2=(b⊥V)2+(b∥V−p)2이므로 공간 V 내의 임의의 점 p에서 b까지의 거리는 b⊥V보다 같거나 멀다.
그리고 A를 QR docomposition하여 A=QR라고 하면, Q는 A의 정규기저벡터(Q의 column 벡터들) q1,q2,⋯,qn을 포함하고 있다. b∥V는 공간 V 내에 있으므로 b∥V=α1q1+⋯+αnqn으로 둘 수 있다. 이때 qi⋅b=qi⋅(b⊥V+b∥V)=qi⋅b∥V=α1qi⋅q1+⋯+αnqi⋅qn=αi이다. 따라서 QTb는 정규기저백터 q1,q2,⋯,qn에 대한 b∥V의 계수들이며, QQTb=b∥V가 된다. 이는 정규기저벡터로 이루어진 행렬 Q의 column space에 투영된다고 볼 수도 있다(b∥V=b∥Col(Q)).
이제 QR docomposition를 최소제곱문제에 적용해보자
Ax=b
위의 식에 A=QR를 대입하면 다음과 같다.
QRx=b
Q는 정규직교행렬이므로 양변에 QT=Q−1를 곱하면 다음과 같다.
QTQRx=QTb
Rx=QTb
이때 QTb는 공간 V의 정규기저백터 q1,q2,⋯,qn에 대한 b∥V의 계수들이므로 위를 만족하는 x를 찾으면 최소제곱문제를 해결할 수 있음을 알 수 있다.