brunch

You can make anything
by writing

C.S.Lewis

by Geumjae Lee Mar 14. 2019

오토인코더, 신경망, seq2seq

세 가지 개념의 본질

오토인코더와 seq2seq는 인코더와 디코더로 이루어졌다는 점에서 유사해 보인다. 근데 신경망은 여기에 왜? 사실 오토인코더와 신경망의 본질이 같다. 다만 그림으로 표현하는 과정에서 헷갈림을 유발할 뿐이다. 오히려 오토인코더와 비슷할 거라고 생각되는 seq2seq는 좀 다르다. seq2seq는 오토인코더 2개를 겹쳐놓은 것이다. 천천히 설명하겠다. 



오토인코더와 신경망

< 그림 1, 일반적인 오토인코더 도식, 출처 영문 위키 >

먼저 오토인코더를 보자. 원래 오토인코더는 정보의 추상화를 위해서 만들어졌다. 블로그나 위키의 설명은 보통 정보의 추상화보다는 압축을 강조하는데, 이는 오토인코더의 본질이 아니다. 압축은 ‘(인식에) 필요 없는 정보를 빼고 필요한 정보만을 추려낸다’라는 개념을 담고 있으며 이는 2차적인 것이다.      


왜냐하면 오토인코더의 1차 목표는 필요한 정보를 추려내는 게 아니라, 노드간 연결정보를 기억하는 것이기 때문이다. 추상화 과정에서 얻은 중간 패턴들을 기억했다가 나중에 이를 토대로 재현한다. 대신 2차 목표가 정보를 추려내는 것이다. 이는 가중치 학습을 통해서 이루어진다. 가중치가 0에 가까워질수록 필요 없는 정보가 되는 것이다. 


< 그림 2, 인간의 귀납과 연역, 둘을 합치면 추론이라고 하며, 철학에서 다루는 귀납과 연역과는 의미가 다소 다르다 >


히든레이어를 생략하고 최대한 단순하게 그려서 생각해보자. ‘귀납적‘인 과정은 추상화하고 ’연역적‘인 과정은 구체화한다. 중요한 것은 피처 a_1, a_2...와 레이블 A와의 관계다. 보통 오토인코더에서는 A를 레이블이라고 잘 부르지는 않지만, 실제로 네트워크 정보를 구분하기 위해서라도 A는 지도학습에서의 레이블이 되어야 한다.      

좀 더 쉽게 얘기해보자. 당신이 형사라고 해보자. 귀납적 과정에서 당신은 범인이 a_1, a_2, a_3...이라는 증거를 현장에 남겨둔 상황을 보았다. 당신은 여러 증거를 보고 여러 용의자 중에서 모든 증거를 만족하는 범인 A를 지목해야 한다. 또한 증거 중에서 범인이 남긴 증거가 아닌, 그냥 현장에 우연히 떨어져있던 필요 없는 증거(노이즈)를 배제해야 한다.


참고 블로그

https://artoria.us/22


< 그림 3, 증거 중 노이즈인 a_2와 a_4는 배제되었다 >

반대로 연역적 과정에서는 A가 범인이라고 가정할 때, 과연 증거 a_1, a_2, a_3...를 생성(generate)할 수 있는지를 따져보는 것이다. 보통 형사들은 이를 위해서 현장에서 범인을 가장하고 흉내내본다. 범인의 상황을 시뮬레이션 해본다. 탐정 스릴러에 자주 나오는 장면이다. 형사는 여러 상황을 가정해본다. 


< 그림 4, 몬스터 9권 중 >


모든 ‘학습‘에서 최우선은 ’정보의 선택‘이 아니라 ’정보의 연결‘이다. 일단 정보를 연결해놓고 이후에 취사선택한다. 보통 이런 연결을 ’경험’이라고 한다. 우리는 인생의 매순간을 경험하며 배운다. 학습은 대개념(레이블)과 소개념(피처)의 연결이다. 가령 고양이라면 여러 특징을 가지고 있으며, 우리는 경험을 통해 ‘고양이’과 ‘특징들’을 연결한다.   


예시처럼 형사가 연역적 재현할 수 있는 것도 과거에 비슷한 경험을 했었기 때문이다. 그리고 귀납과 연역의 과정은 인코더와 디코더라는 이름에 그대로 나타나있다. 인코더는 언어화하고 디코더는 대상화한다. 둘은 하나의 사이클을 이루며 상호보완 하는 관계다.


< 그림 5, 좌항과 우항은 같은 개념을 달리 표현한 것이다 >

그런데 오토인코더를 좀 다르게 그렸더니 어디서 많이 본 그림이 된다. 신경망이다. 신경망은 순전파와 역전파를 거치며 학습하는데, 이게 사실 오토인코더를 발전시킨 것이다. 종이를 반으로 접었다고 생각해도 된다. 


< 그림 6, 일반적인 신경망, 출처 LG CNS 블로그 >



오토인코더와 seq2seq

이제 seq2seq와 같은 번역을 보자. 오토인코더는 입력과 출력이 같았지만(물론 위에서 언급한 것처럼 엄밀하게 보면 다르다), 번역은 다르다. 그런데 그냥 다른 건 아니다. 표현하는 언어는 다르지만 둘이 표현하려는 원래의 ‘의미‘는 동일하다.


< 그림 7, A는 ‘의미‘, a_1, a_2..., b_1, b_2...는 ’표현‘이다 >


< 그림 8, 일반적으로 알려진 seq2seq 그림 >

번역기는 그림 7처럼 서로 다른 오토인코더 2개를 하나로 겹친 것이라고 할 수 있다. 다만 2개의 오토인코더가 1개의 의미 A를 공유한다. 그리고 보통 의미 A는 context vector이라고 불린다. 이 관점에서 보면 seq2seq에서 좌항을 인코더라고 하고 우항을 디코더라고 따로 표현하는 것은 부적절하다. 좌우측 항 모두가 인코더와 디코더를 가지고 있기 때문이다. 그냥 각각을 신경망이라고 불러야 적절하다.    


seq2seq에서 RNN은? 일단 이 부분은 생략하자. 그걸 빼야 이해하기 쉽기 때문에 굳이 설명에 넣지 않았다.


참고 블로그

https://medium.com/@dev.elect.iitd/neural-machine-translation-using-word-level-seq2seq-model-47538cba8cd7



마치며,

사실 이런 개념적 혼란은 오토인코더의 개념이 오래되어 그 구조적 의미가 후대에 제대로 전달되지 않았기 때문이다. 생각해보라, 신경망이 순전파와 역전파로 표현하지만, 오토인코더는 이를 풀어놓았을 뿐, 본질적으로는 같은 개념이다. 또한 머신러닝의 학습 과정은 인간의 추론 과정과 정확히 같다. 보통은 뉴런의 구조를 모방했다고 하는데, 오히려 필자는 인간의 추론 과정을 모방했다고 하는게 맞다고 본다. 


작가의 이전글 워드 임베딩의 간략한 역사

작품 선택

키워드 선택 0 / 3 0

댓글여부

afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari