Tensorflow 2 NLP(자연어처리)/차원축소

[1-2] 특이값 분해를 통한 차원축소

Suhd 2021. 11. 12. 22:21

특이값 분해를 이해하기 위해서는 행렬에 대한 기초지식이 필요하다.

다음 링크에서 자세한 이해가 가능하다.

https://angeloyeo.github.io/2019/08/01/SVD.html#fn:1

간단하게 말하자면,

1. 행렬분해를 통해 하나의 원본을 여러개로 쪼개어 표현할 수 있다.

2. 쪼개어진 여러개의 정보들 중에 중요한 정보들 몇개만을 선택한다.

3. 그들의 합만으로도 원본에 가까운 결과를 구현할 수 있다

4. 이때 행과 열중 차원 축소하고 싶은 부분을 찾아 그 구분에 맞게 축소된 U를 쓰던지, 축소된 VT를 쓰는지를 정해 차원을 낮추는 것(차원축소)가 가능하다는 것이다.

원본(=높은차원) ⇒ 다시 짜맞춘 결과물(낮은차원)

자세히 말하자면,

행렬 분해

각 행렬의 성질

원본인 A를 3개의 행렬로 분해 한다. 그리고 각 행렬은 벡터이므로 벡터합을 해주면

행렬 벡터합

다음과 같은 합으로 나타낼 수 있다.

각각의 벡터곱에 앞에있는 시그마들을 정보량으로 설명가능하다.

즉 시그마가 클수록 정보량이 많아 원본을 구성하는데에 있어 중요한 정보를 담고있는 조각이라고 말할 수 있다.

이제 시그마가 작은 별로 의미없는 정보 조각들 없이도 중요한 정보 조각들만 합해도 어느정도 원본표현히 가능하고 이를 통해 데이터 축소가 가능하다.

하지만 이중에 작은 시그마 몇개를 지운다고 할 지라도 차원은 축소되지 않는다.

왜냐하면 벡터곱 u x v 는 기존의 차원을 유지한 행렬이기 때문이다.

차원 축소를 하려면 시그마를 원하는 만큼 택해(얼마나 택하느냐에 따른 3가지 버전이 존재한다)

3가지 버전에 대한 설명(https://darkpgmr.tistory.com/106)

U의 축소버전을 선택해 시그마와 곱하여 (열의 차원을 줄인다)A를 차원축소하는 행렬로 만들것인지,

VT의 축소버전을 선택해 시그마와 곱하여 (행의 차원을 줄인다)A를 차원축소하는 행렬로 만들것인지를 선택해야 한다.

그러므로 SVD를 세 활용 용도로 표현해보면

로 나타낼 수 있고

우리는 아래 두개에 해당하는 차원 축소하는 A에 대하여

원하는 정보 (단어-문맥 행렬, 단어- 문서 행렬, TF-IDF 행렬, PMI 행렬 등등)

를 새롭게 구한 A에 행렬곱을 하여 축소된 행렬 정보를 사용 할 수 있다.

'Tensorflow 2 NLP(자연어처리) > 차원축소' 카테고리의 다른 글

[1-1] t-SNE 차원축소 기법  (0) 2021.11.12