딥러닝을 공부하다보면, 차원을 줄이면서 데이터 손실이 발생한다와, manifold 차원축소라면서 데이터를 잘 축소한다는 개념으로 나뉜다.
가장 흔히 사용되는 방법은 CNN이다. (여기서 CNN을 컨볼루션이라고 하는 사람들이 많지만, 실제로 컨볼루션이라고 보기는 어렵다, CNN을 이해하겠다고, 컨볼루션을 공부하면 큰일난다는 것이다)
이게 CNN에서 흔히 말하는 특징 추출을 의미하는 것이다. 당연히 그림처럼 저렇게 직관적이게 특징을 뽑지는 않는다, 실제로는 뭔지 모르게 그냥 물감 범벅 덩어리를 뽑아낸다.
하지만 manifold, AE에서는 latenet space(잠재 공간)이라고 부르는것이 있다.
잠재 공간은 기존에 있는 데이터들을 기반으로 어떠한 새로운 "범위"를 만들어, 기존의 값(실험에 사용한 데이터들)을 기반으로 (-> 여기서는 파란색 부분들을 의미한다) 다른 새로운 데이터들을 컴퓨터가 알아서 채우도록 한다는 것이다(빨간색은 실제로 있는 데이터가 아닌데, 파란색 데이터 기준으로, 아마 중간에 이런 데이터들도 있지 않을까? 하는 느낌으로 생성한 것이다).
이렇게 두개를 바라보면, 두개는 역할이 정반대가 된다. 하나는 데이터를 쪼개는 것이고, 다른 하다는 데이터를 늘리는 것처럼 보인다.
하지만 실제로 두개의 코드는 거의 똑같다, 그냥 차원만 다르게 할 뿐, 코드 자체는 동일하다.
누구는 recontruction loss를 사용하기 때문에 그렇다 라고 하는데, 실제로 코드에서는 이게 recontrction loss입니다 하면서 명시하는 것은 없다, 그냥 평범하게 BCE loss 를 사용해서 학습을 진행한다. 파이토치나 텐서플로우가 알아서 해주는 것인지, 혹은 그냥 이게 가능한 이론이 알고보니 recontruction error인 것인지 필자는 찾지 못했다.
따라서 저 둘의 차이점은 도대체 어디서 쳐 나오는 것인지 궁금해서 여기저기 찾아보고 물어본 결과, 그냥 그 때마다 입맛에 맞게 사용하는 것 같다. 본래 기계학습의 과정은 black box라고 하며 명확하기 이거 때문에 그렇다 라고 하면서 당당하게 말할 수 있는 사람이 별로 없기 때문인 것인가, 이유는 잘 모르겠다.
따라서 차원 축소와 특징 추출은 어떻게 보면 같은 개념이라고 볼 수 도 있다는 것이 이번 글의 핵심이었다.
'딥러닝' 카테고리의 다른 글
Adam이란 어떻게 되는 것일까? (0) | 2024.11.14 |
---|---|
딥러닝에서 공간을 직관화 하기 위해 어떤 노력들이 있는가? (0) | 2024.11.13 |
AutoEncoder를 공부하는 이유 (0) | 2024.11.12 |
왜 자꾸 f1-score을 강조하는 것일까? (0) | 2024.11.09 |
딥러닝에서 수학은 도대체 무엇일까? (2) | 2024.11.08 |