의사역행렬의 기하학적 의미

※ 의사역행렬의 정확한 이름은 무어-펜로즈 유사역행렬인 것으로 보이나 일반적으로 많이 쓰는 이름인 의사역행렬(pseudo inverse)를 이용하도록 하겠습니다.

※ 의사역행렬은 복소수-체의 범위에서 정의가능하나 이번 post에서는 실수-체 범위에서 설명하도록 하겠습니다. (시각화 목적 및 계산의 헷갈림 방지)

※ 의사역행렬은 기본적으로 선형회귀의 선형대수학적 접근에서 본 내용과 완전히 같은 approach를 가지고 접근합니다.

Prerequisites

해당 포스트를 이해하기 위해선 아래의 내용에 대해 알고 오시는 것을 추천드립니다.

의사역행렬의 정의

우선 가장 심플하게 의사역행렬의 정의부터 알아보도록 하자.

의사역행렬은 임의의 행렬 에 대해서

1) 이고 모든 열벡터가 선형 독립인 경우


식 (1)

이 때 는 가역행렬이어야 한다.

이 경우 가 성립하므로 는 좌측 역행렬(left inverse)이라고 부른다.

2) 이고 모든 행벡터가 선형 독립인 경우


식 (2)

이 때 는 가역행렬이어야 한다.

이 경우 가 성립하므로 는 우측 역행렬(right inverse)이라고 부른다.

위의 1)과 2)를 보았을 때 임의의 크기의 행렬 에 대해 특정 조건만을 만족한다면 어떤 크기의 행렬이라도 역행렬의 기능과 유사한 기능을 하는 행렬을 구할 수 있다는 것을 알 수 있다.

보통 데이터를 분석할 때는 1)과 2) 중 1)의 경우에 더 많이 직면하게 된다. 그것은 1)의 상황이 데이터 수가 feature 수 보다 많은 상황을 나타내기 때문이다. 이번 포스트에서도 1)의 경우인 ‘좌측 역행렬’이 가지는 의미에 대해서 조금 더 깊게 탐구해보고자 한다.

의사역행렬의 수식적 의미

그렇다면, 의사역행렬이 가지는 근본적인 수식적 의미는 무엇일까?

가령, 다음과 같은 연립방정식이 주어졌다고 생각해보자.


식 (3)


식 (4)

기본적으로 의사역행렬이 하고자 하는 일은 임의의 행렬 에 대해 적절한 행렬 을 얻음으로써 위의 주어진 문제를 해결하고자 하는 것이다.

식 (3)에서 을 양변의 좌측에 곱해보자. 그러면,


식 (5)

이며, 우리가 알고있는 식 (1)의 left inverse의 공식을 이용해 을 계산해보면,


식 (6)

이므로 식 (5)를 직접 계산해보면 아래와 같이 의 값을 계산할 수 있게 된다.


식 (7)


식 (8)

그런데, 여기서 이상한 점이 하나 있다.

를 원래의 식에 대입해보면 식이 성립하지 않는다는 점이다.

다시 말해 식 (4)에 대해 식 (4)의 좌변 값을 계산해보면 아래와 같은데,


식 (9)

식 (9)의 결과는 식 (4)의 우변과 같지 않다.

그렇다면, 왜 의사역행렬은 식 (1)과 같은 공식을 갖게 되었으며, 식 (9)의 결과가 식 (4)의 우변과 같지 않다는 것은 어떤 의미를 갖고 있을까?

의사역행렬의 기하학적 의미

중학교 시절 연립방정식에 대해 배운 적 있을 것이다.

연립방정식은 2개 이상의 미지수를 포함하는 방정식의 조를 말하는데, 보통 중, 고등학교 과정에서는 이원 일차 연립방정식을 푸는 경우가 많았던 것 같다.

보통의 연립 방정식의 꼴은 아래와 같이 쓸 수 있겠다.

우리는 이번에 미지수의 개수보다 데이터가 훨씬 많은 경우에 대해 적절한 solution을 찾는 과정을 통해 의사역행렬에 대해 생각해보고자 한다.

가령, 다음과 같이 세 개의 데이터 포인트가 주어져 있다고 하자.


그림 1. 주어진 세 개의 데이터 포인트

만약 이 세 점에 대해 와 같은 모델을 통해 이 세 개의 데이터 포인트를 얻었다고 가정하면 아래와 같이 세 개의 방정식으로 구성된 연립방정식을 세울 수 있다.

이것을 행렬과 벡터를 이용해 표시하면 다음과 같다.

이 행렬을 푸는 문제를 기하학적인 관점에서 생각해보면 그림 1과 같이 세 개의 데이터 포인트가 주어졌을 때 이 데이터 포인트들을 모두 통과하는 직선을 구하는 문제와 같다.

2차원 평면 상에 어떻게 선을 놓더라도 이 세 점을 동시에 통과하는 직선을 구할 수는 없다.

다시 말해, 이 문제는 풀릴 수 없다. 해가 존재하지 않기 때문이다.

선형대수학적으로 연립방정식을 보는 관점

선형대수학의 관점에서 연립방정식을 푼다는 것은 아래와 같은 행렬을 푸는 것과도 같이 생각할 수 있는데,

여기서 벡터와 행렬을 모두 열벡터로 표현하고, 의 두 요소를 나눠 쓰면 아래와 같다.

그러면, 위 식은 아래와 같이 생각할 수 있다.

즉, 열벡터 를 어떻게 조합하면 를 얻어낼 것인가?라는 물음에 적절한 조합 비율인 를 답변해주는 것과 같은 이야기인 것이다.


그림 2. A의 열(column)을 이루는 열벡터(, )의 생성공간(span)인 A의 열공간 에 포함되어 있는 를 구하려면 를 얼마만큼 조합해주어야 할까?

하지만 를 조합해서 를 얻을 수 있으려면 를 조합해 얻을 수 있는 모든 경우의 수 중 하나여야 한다.

다시 말해 의 생성공간(span) 안에 가 포함되어 있어야 한다. 이것이 해를 찾을 수 있는 조건이다.

최적의 해를 찾기

꿩대신 닭이라고 했던가. 그림 1과 같은 문제에서 처럼 정확한 정답을 찾을 수 없다면 최대한 정답에 가까운 것이라도 찾아야 한다.

다시 말해 그래도 그나마 가장 세 점의 트렌드를 잘 표현해줄 수 있는 직선을 찾을 수는 있을 것이다.


그림 3. 그나마 세 점의 트렌드를 잘 설명해 줄 수 있을 것 같은 직선을 그어보자

여기서, 우리가 점 세 개의 트렌드를 잘 표현해주는 직선을 과정은 선형대수학적으로는 해()가 행렬 의 열공간(column space)안에 존재하지 않는 경우 열 공간안에 있는 정답에 가장 가까운 해를 찾는 과정과 일치시켜 생각할 수 있다.

실제로 그림 1 혹은 그림 3의 문제에서 , 와 이 두 벡터로부터 생성되는 열공간, 그리고 를 직접 그려보면 다음과 같다.


그림 4. (파란색)와 (주황색) 두 벡터의 생성공간(span)으로 표현되는 열공간과 이 column space에 포함되지 않는 벡터 (보라색)

그림 4에 있는 내용을 조금 더 추상적으로 그리면 아래의 그림 5와 같다.


그림 5. A의 열(column)을 이루는 열벡터(, )의 span인 A의 열공간 와 열공간에 포함되지 않는

그림 5에서 볼 수 있듯이 의 열공간 안에 포함되어 있지 않다. 그리고 그림 5에서 확인할 수 있듯이 여기서 우리가 찾을 수 있는 와 가장 가까우면서 의 선형결합을 통해 얻을 수 있는 최적의 벡터는 가 열공간(col(A))에 정사영된 이며 우리는 이 를 계산해줌으로써 벡터 를 얼마만큼 선형조합 해주어야 할지()를 알 수 있게 된다.

그렇다면 원래의 해 와 정사영 벡터 의 차이 벡터를 라고 하면 는 행렬 의 어떤 벡터와도 직교하므로 다음이 성립한다.

여기서 ‘‘은 내적 연산이다.

즉, 내적을 계산해주면,

이라는 것을 알 수 있다.

의사역행렬과의 연관성

우리가 지금까지 수행한 일은 무엇인가?

라는 방정식에서 적절한 term을 좌변에 곱해 를 계산한 것이다.

즉, 여기서 찾아진 적절한 term을 라 할 때, 라는 사실을 알 수 있는 것이다.

다시 말해, 우리가 얻은 라는 term이 바로 우리가 구하고자 하는 의사역행렬임을 알 수 있다.

또, 식 (9)에서 계산한 결과가 식 (4)의 우변과 같지 않다는 것은 어떤 의미를 갖고 있을까?

그것은 우리가 의사역행렬을 통해 얻은 는 결코 원래 방정식인 식 (4)의 해는 아니지만, 이 를 통해 얻을 수 있는 것은 행렬 의 열공간 내에 있는 벡터 중 가장 에 가까운 벡터를 찾기 위한 행렬 의 열벡터의 조합으로 볼 수 있다는 의미가 된다.

SVD를 이용한 의사역행렬의 표현

임의의 행렬 특이값 분해하면 다음과 같이 쓸 수 있다.

여기서 , , 의 크기를 가지는 행렬이며, , 는 orthogonal matrix, 는 diagonal matrix이다.

여기서 는 singluar value 가 대각성분에 위치하는 행렬이다.

특히 orthogonal matrix의 성질은 다음과 같다.

또, diagonal matrix의 성질은 다음과 같다.

특이값 분해된 에 전치연산(transpose)을 취해주면 다음과 같이 계산할 수 있다.

따라서,

이다.

그러므로, 의 역행렬을 계산해보면,

이다.

위 식에서 식을 전개할 때 라는 orthogonal 행렬 의 특성을 이용하였다.

이제 식 (1)의 좌측역행렬을 계산해보면 다음과 같이 계산할 수 있다.

여기서 이고 이므로 SVD를 이용한 좌측역행렬은

이다.

여기서 은 다음과 같은 행렬이다.

where