일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 딥러닝
- 생활코딩
- 크롤링
- 논문리뷰
- 예제중심HTML&자바스크립트&CSS
- Apache
- 프로그램새내기를위한자바언어프로그래밍
- 한빛미디어
- 소스설치
- deeplearning
- Crawling
- aws
- 컴파일설치
- image
- CBOW
- jupyter
- Selenium
- 셀레니움
- AndroidStudio를활용한안드로이드프로그래밍
- 머신러닝
- Lamp
- attention
- word2vec
- 밑바닥부터시작하는딥러닝
- 수동설치
- 비지도학습
- 가비아
- MySQL
- 밑바닥부터시작하는딥러닝2
- 한빛아카데미
- Today
- Total
안녕, 세상!
SVD를 이용한 차원 축소가 의미하는 바 본문
앞서 SVD(Singular Value Decomposition) 특이값 분해를 이용해서 차원 축소를 사용하였습니다.
하지만 이 차원 축소를 사용하는데 왜 U의 일부만 사용하는지 의미하는 바가 무엇인지 설명이 부족하였습니다.
이번에는 SVD 자체에 대해서는 깊게 다루지 않고 전반적인 의미를 해석하는 식으로 SVD를 이용한 차원 축소에 초점을 맞춰서 이야기를 해보겠습니다.
(1) Singular Value Decomposition
우선 SVD의 식은 다음과 같습니다.
X는 Original 데이터를 의미하고,
U와 V는 Orthogonal matrix(직교 행렬)이며,
S는 Diagonal matrix(대각 행렬)입니다.
(2) Principal Component Analysis
차원 축소는 크게 다음과 같은 과정을 거칩니다.
X=USV^T 에서
1. 데이터를 행렬로 묶어서 X라고 합니다.
2. 행은 몇 번째 데이터인지 나타내고 열은 feature을 나타냅니다.
3. 각 열의 평균을 0으로 만들어 줍니다.
4. V의 열벡터는 데이터들이 사영시켰을 때 분산이 가장 커지는 축들을 열로 나타낸 것입니다.
5. XV=US의 행 백터는 새로운 축에 대한 좌표 표현입니다.
6. XV에서 적당한 크기로 열을 잘라내면 중요한 정보를 가급적 유지한 채 차원이 줄어들게 됩니다.
위의 과정을 순차적으로 좀 더 자세히 설명해보겠습니다.
X=USV^T
우선 기존 차원에서 각 열의 평균을 0으로 만들어줍니다.
차원 축소는 기존 차원에서 낮은 차원의 축을 새로 그어 해당 축 기준으로 데이터를 새롭게 좌표에 표현하는 방식입니다.
여기서 주의해야 할 점은 차원을 축소하되, 데이터의 의미를 최대한 보존한 상태로 축소를 시켜야 진정한 차원 축소의 의미를 지니는 것입니다.
데이터의 의미를 최대한 보존한다는 축은 곧 데이터들의 분산이 커지도록 축을 설정해야 한다는 뜻입니다.
왼쪽에 2차원으로 표현된 데이터가 있다고 했을 때 이 데이터들을 차원 축소하여 1차원 축을 기준을 잡아서 표현한다고 가정하겠습니다.
오른쪽 사진에 크게 검은색과 빨강색 두 가지 색상으로 축이 잡혔습니다.
두 축을 비교하자면 검은색 축으로 데이터들을 보았을 때 분산이 커지도록 축을 잡아서 데이터의 의미가 최대한 보존이 되는 축이라는 것을 알 수 있고,
빨강색빨간색 축으로 데이터들을 보았을 때 데이터들을 빨간색 축에 사영시키면 주황색 영역 밖에 파악이 안 되기 때문에 분산이 안되어서 데이터들의 의미가 많이 사라진다는 것을 알 수 있습니다.
이제, 데이터들의 의미를 최대한 보존해서 축을 설정한다는 것이 무엇인지 이해를 했습니다.
그렇다면 수학적으로는 어떻게 데이터의 분산이 커지도록 축을 설정하느냐가 문제입니다.
이 때 우리는 SVD 식을 사용하게 되는 것입니다.
SVD 식에서 무엇이 데이터의 의미를 최대한 보존한 축을 의미하는 것인지 알아야 합니다.
X=USV^T 식에서 V가 바로 축에 대한 의미를 가지고 있습니다.
V의 각 Column(열) 들이 바로 여러 축들입니다.
이러한 축들 중에서 가장 왼쪽 즉, 0번째 열이 데이터들의 분산이 제일 커지도록 하는 축이라는 의미를 가지고 있습니다.
왼쪽의 열에 가까운 열일 수록 데이터의 분산이 잘 된 축들입니다.
X=USV^T 식에서 V는 직교 행렬이고 V^T의 역행렬은 V이므로
XV=US
여기서 XV가 의미하는 것은 original 데이터들 모두를 V가 가지고 있는 모든 여러 축들을 기준으로 좌표들을 표현한 것입니다.
XV의 행렬에서 열들이 의미하는 바는
XV의 첫 번째 열은 X의 데이터들을 V의 분산을 위한 첫 번째 축(즉 V의 첫 번째 열)을 기준으로 나타낸 데이터이고,
두 번 째 열은 x의 데이터들을 V의 분산을 위한 두 번째 축(V의 두 번째 열)을 기준으로 나타낸 데이터들입니다.
이제 XV의 의미를 알았고, 여기서 차원 축소가 진행되는데,
차원 축소라는 것은 정보의 손실은 어쩔 수 없지만 가장 중요한 앞부분 열만은 살리고 뒤의 열들은 잘라서 없애겠다는 것입니다.
앞서 말했듯이 앞 부분열이 곧 데이터들의 의미를 최대한 유지한 축으로 데이터들을 표현한 좌표들이기 때문에 앞부분 정보로도 충분히 Original Data의 X가 의미하는 바를 표현할 수 있다는 것입니다.
XV의 특정열 까지만 사용하기 위해 자른 다는 것은 US에서 다음과 같습니다.
XV에서 3행까지만 살리고 나머지 자른다면 U를 3행까지만 살린것과 S의 위에서부터 3x3을 자른 행렬의 곱과 같은 의미가 됩니다.
그래서 U와 S를 이용하여 Original Data X에 대한 차원 축소를 표현할 수 있다는 것을 우리는 알 수 있습니다.
이렇게 차원 축소에 대해 알아봤는데 책과는 좀 다르다는 것을 알 수 있습니다.
책의 경우에는 차원축소 과정에서 기존 데이터의 평균을 0으로 만들지 않았고, U와 S의 곱을 사용하지 않고 U 값만을 사용하여 단어 간의 ppmi를 표현하였습니다.
S는 대각행렬이므로 아마 간소하게 U만 사용해서 일단 보여준 것 같습니다.
이제 앞에서 사용한 코드를 다시 보겠습니다.
여기서 의미적으로 봐야 할 부분은 그래프 그리는 부분에서 왜 저런 식으로 축을 설정한 것인지입니다.
그래프를 그리는 데 사용한 두 개의 축을 보면 U[ : , 1]과 U[ : , 0] 열이라는 것을 알 수 있습니다.
이 두 개의 열은 Original Data를 차원 축소를 할 때 최대한 의미를 보존해주는 축 기준으로 데이터 좌표를 표현한 열이라는 것을 알 수 있습니다.
그중 최대한 의미를 보존해주는 두 번째, 첫 번째 축을 사용한 것입니다.
차원 축소를 하여 최대한 의미를 보존해주는 두 개의 축 기준으로 나타내어진 데이터 좌표들을 가지고 ppmi를 표현해주었다고 생각할 수 있습니다.
이제 그래프를 그릴 때 왜 U[ : , 1]과 U[ : , 0] 열을 축으로 결과를 표현했는지 알 수 있습니다.
위의 코드 결과는 다음과 같습니다.
(위의 내용은 밑바닥부터 시작하는 딥러닝 2 (한빛미디어)를 바탕으로 글을 작성하였습니다)
'It공부 > Deep learning' 카테고리의 다른 글
(2)-3-2 word2vec 보충 (0) | 2021.01.18 |
---|---|
(2)-3-1. word2vec (0) | 2021.01.17 |
(2)-2. 자연어와 단어의 분산 표현 (2) | 2020.06.30 |
(2)-1 자연어 처리 하기 전에 (0) | 2020.06.29 |
7. CNN (0) | 2020.06.26 |