특이값 분해를 이해하기 위해서는 행렬에 대한 기초지식이 필요하다.
다음 링크에서 자세한 이해가 가능하다.
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)
(특이값 분해에 대한 설명) darkpgmr.tistory.com
U의 축소버전을 선택해 시그마와 곱하여 (열의 차원을 줄인다)A를 차원축소하는 행렬로 만들것인지,
VT의 축소버전을 선택해 시그마와 곱하여 (행의 차원을 줄인다)A를 차원축소하는 행렬로 만들것인지를 선택해야 한다.
그러므로 SVD를 세 활용 용도로 표현해보면
로 나타낼 수 있고
우리는 아래 두개에 해당하는 차원 축소하는 A에 대하여
원하는 정보 (단어-문맥 행렬, 단어- 문서 행렬, TF-IDF 행렬, PMI 행렬 등등)
를 새롭게 구한 A에 행렬곱을 하여 축소된 행렬 정보를 사용 할 수 있다.
'Tensorflow 2 NLP(자연어처리) > 차원축소' 카테고리의 다른 글
[1-1] t-SNE 차원축소 기법 (0) | 2021.11.12 |
---|