이 글은 Christopher Olah가 2014년 7월에 쓴 글을 우리 말로 번역한 것이다. Deep learning이 자연어 처리(natural language processing, NLP) 분야에서 성취해낸 많은 연구 결과들을 짚어보면서, 도대체 어떻게 deep learning이 이렇게 문제를 잘 해결해 내는 것인지에 대한 대답을 굉장히 구체적으로 설명한 멋진 글이라고 생각한다. 기본적으로 neural network에 대해서 이해하고 있어야 이 글의 내용을 원활하게 이해할 수 있으리라 생각한다. 저자의 홈페이지에 neural network에 대한 주옥같은 글들이 많으므로 관심이 있다면 둘러보시길 추천한다.

우리 말로 옮기기 애매한 용어는 영어 단어 그대로 표기했고, 원문에 있는 그림을 그대로 가져다 썼다. 물론 저자의 허락을 받고 번역했다. 오역에 대한 지적이나 내용에 대한 피드백은 항상 감사합니다.



Deep Learning, NLP, 그리고 Representation

2014년 7월



시작하는 말

최근 몇 년동안 deep neural network (이하 DNN)은 패턴 인식 분야를 지배해왔다. DNN은 많은 컴퓨터 비전 문제를 풀어오던 기존 최고 기술들을 앞질러 버렸다. 음성 인식 분야 또한 그렇게 진행되고 있다.

결과야 그렇다손 치더라도... DNN이 왜 그렇게 잘 나가는 걸까?

이번 글에서는 자연어 처리 (NLP) 문제에 DNN을 적용해서 얻게 된 매우 대단한 성과들을 짚어보려고 한다. 그래서 도대체 왜 DNN이 잘 작동하는 지에 대해서 너무 어렵지 않지만 꽤 괜찮은 대답이 되었으면 좋겠다. 매우 우아한 관점에서 바라볼 것이다.



One Hidden Layer Neural Networks

단 하나의 hidden layer를 가지는 neural network는 전지전능(universal)하다: 충분히 많은 hidden unit이 있다면, 이 neural network는 어느 함수라도 찾아낼 수 있다. 그리고 이 이론은 꽤나 자주 인용되는 문구이고, 그보다 더욱 자주 오해되어 사용된다.

이러한 universality가 오해되는 근본적인 이유는, hidden layer는 단지 찾아보기 표 (lookup table)로 사용될 수 있다는 점이 간과되기 때문이다.

단순한 예로 perceptron network을 들어보겠다. Perceptron은 일정 문턱을 넘으면 1을 발사하고 그렇지 않으면 0을 발사하는 아주 단순한 neuron이다. Perceptron network는 binary (0 또는 1) input을 받아서 binary output을 준다.

Perceptron network가 input으로 받을 수 있는 가능한 모든 종류가 유한하다고 해보자. 그러면 모든 가능한 input 하나 하나마다 그 input만을 받았을 때 1을 발사하는 neuron을 만들어 낼 수 있다. 그러면 그 network는 특정 input이 들어왔을 때, 이에 해당하는 유일한 neuron을 찾아서 output으로 연결할 수 있게 된다.



자 다시 한 번, one hidden layer neural network은 universal하다. 하지만 이는 딱히 대단한 것이 아니다. 당신의 모델이 이 lookup table와 같은 일을 한다면, 이는 모델에 대한 강력한 근거가 될 수 없다. 오히려 그 모델은 당신의 문제를 해결할 수 없다는 뜻이 된다.

Universality는 모델이 어떤 training 데이터를 받든지 그에 맞춰 줄 수 있다는 뜻이다. Training 데이터에 없는 새로운 data point가 왔을 때 모델이 적절한 값을 찾을 수 있다는 뜻이 아니다.

No, universality는 neural network가 왜 이리 좋은 지에 대한 답이 되지 못한다. 그 진짜 이유는 훨씬 미묘한 무언가에 있을 것 같다... 이것을 알기 위해서 우리는 구체적인 연구 결과들을 이해해 볼 것이다.



Word Embeddings

그 시작점으로, 나는 흥미로운 deep learning 연구 한 줄기를 따라가보려고 한다. 그것은 바로 word embedding이다. Word embedding은 십 여년 전에 Bengio 외 (2003)에 의해 처음으로 소개되었다. 꽤나 오래 전에 소개된 이론이지만, 나의 개인적인 의견인데, word embedding은 현 시점에서 deep learning 연구 분야 중 가장 흥미진진한 것이 아닌가 싶다. 개인 의견은 배제하더라도 word embedding은 왜 deep learning이 이렇게 좋은 건지에 대한 직관을 얻기에 최고의 주제 중 하나이다.

Word embedding은 아래와 같이 단어를 parameter로 받는 함수로,

\[ W : \text{words} \mapsto \mathbb{R}^n \]

단어를 고차원 (아마도 200에서 500차원 정도?)의 vector로 보내주는 함수이다. 아래의 예를 보자.

\[ W(\text{"cat"}) = (0,2, -0,4, 0.7, \cdots) \\ W(\text{"mat"} = (0.0, 0.6, -0.1, \cdots) \]

(보통은 이 함수 W는 matrix \(\theta\)를 parameter로 받는 lookup table인데, matrix \(\theta\)의 각 행은 각 단어 vector를 가지게 되어 \(W_\theta(w_n) = \theta_n\)으로 쓸 수 있다.)

W는 각 단어마다 random vector들로 초기화된다. 이제 문제를 해결하기 위해서는 뭔가 의미있는 vector를 배워야 한다.

예를 들어, 5-gram (연속적인 5개의 단어)이 "올바른" 지에 대해 network를 훈련하고 싶다고 생각해보자. 우리는 많은 5-gram 데이터를 Wikipedia에서 쉽게 얻을 수 있고 (예를 들어 "cat sat on the mat"), 그 5-gram 데이터를 망가뜨리는 것도 쉽게 할 수 있다 ("cat sat song the mat"). 왜냐하면 그렇게 아무렇게나 단어를 바꾸면, 그 5-gram은 말이 안 될 것이 분명하기 때문이다.

모델은 이제 5-gram 데이터의 각 단어를 W를 거쳐서 vector 표현으로 바꾸고, 그 vector 데이터를 R이라고 하는 다른 "모듈"에 넣을 것이다. 모듈 R은 이 5-gram이 "올바른" 지 "망가진" 것인지 예측하고자 할 것이다. 즉 아래처럼 training을 위한 데이터 입력이 이루어지게 된다.

\[ R( W("cat"), W("sat"), W("on"), W("the"), W("mat") ) = 1 \\ R( W("cat"), W("sat"), W("song"), W("the"), W("mat") ) = 0 \]


Modular network to determine if a 5-gram is 'valid' (From bottou (2011))5-gram이 "올바른" 지를 결정하고 싶은 modular network
출처: Bottou (2011)


이 학습이 잘 되기 위해서는, network는 W와 R의 parameter들을 잘 계산해야 한다.

이렇게 5-gram을 통해서 문법이 맞는 지를 알아내는 것은 딱히 재미있는 문제는 아니다. 뭐 텍스트에서 문법이 틀렸는 지 검사하는 용도로 쓰일 수는 있을 것이다. 하지만 정말로 재미있는 개념은 이 문제 자체에 있는 것이 아니라 word embedding W에 있다.

(이 5-gram 문제를 꺼낸 원인은 그저 W를 배우는 것을 보여주기 위함이다. 사실 이 문제가 아니더라도 된다, 예를 들어 어느 문장 다음에 올 단어를 예측할 때에도 word embedding W를 배워야 한다. 하지만 여기서는 어떤 문제인지는 별로 중요하지 않다. 앞으로는 많은 word embedding 결과들에 대해 이야기할 것인데, 어떤 문제를 해결하느냐는 딱히 구별하지 않을 것이다.)

Word embedding 공간이 어떻게 생겼는지 느껴볼 수 있는 방법 중 하나로 t-SNE가 있는데, 고차원의 데이터를 시각화하기 위한 세련된 기술이다.


t-SNE visualizations of word embeddingsWord embedding의 t-SNE 시각화. 왼쪽은 숫자 단어 지역이 되고 오른쪽은 직업 단어 지역으로 나눠진다.
출처: Turian 외 (2010)
전체 그림도 있다.


위와 같은 단어 "지도"는 우리에게 좋은 직관을 준다. 비슷한 단어들은 서로 가까이 있다. 그리고 단어의 word embedding들이 서로 얼마나 가까운 지에 대해 생각해보는 것도 같은 맥락이다. 아래의 단어 표를 보면 꽤 비슷한 단어들끼리 모여있는 것을 알 수 있다.


What words have embeddings closest to a given word?한 단어를 받았을 때, 어떤 단어들이 그 단어와 가까운 embedding을 가지고 있는가?
출처: Collobert 외 (2011)


Network 모델이 의미가 비슷한 단어들의 vector를 서로 가깝도록 만들어가는 것이 꽤나 이치에 맞아 보인다. 본래 인간의 입장에서, 문장에서의 단어를 동의어로 바꾼다고 해도 ("a few people sing well" \(\rightarrow\) "a couple people sing well") 문장의 적합성은 변하지 않는 것이 맞다. 기계 입장에서 문자 그대로 보면 실제로 문장이 많이 바뀐 것이 맞지만, W가 동의어들을 서로 가깝게 연결해주고 있다면, R의 입장에서는 그 변화를 미미하게 받아들일 수 있는 것이다.

이렇게 word embedding은 매우 강력하다. 가능한 5-gram의 수는 엄청나게 많은데 반해, 우리가 학습시킬 수 있는 데이터의 수는 그에 비해 적은 것이 현실이다. Word embedding을 통해 비슷한 단어들을 서로 가깝도록 묶음으로써 하나의 문장이 그와 비슷한 의미를 지닌 문장 클래스로 일반화될 수 있도록 해 준다. 이는 word embedding이 그저 동의어만을 바꿔줄 수 있는 것이 아니라, 비슷한 역할을 가지는 단어를 바꿀 수도 있다는 것을 의미한다 ("the wall is blue" \(\rightarrow\) "the wall is red"). 더욱이, 여러 단어들을 동시에 바꿀 수도 있다 ("the wall is blue" \(\rightarrow\) "the ceiling is red"). Word embedding의 효과는 단어의 수에 따라 지수적으로 증가하게 된다.

지금까지 설명했던 것처럼 word embedding이 해주는 일은 분명히 쓸만한 것들이다. 그런데 이 W는 어떻게 그런 일을 하도록 배우는 것일까? "the wall is blue"와 같은 문장을 받았는데, "the wall is red"와 같은 문장을 보기 전에, "thewall is blue"가 올바른 문장이라는 것을 알게 되는 경우가 많이 있다. 그리고 이제야 "the wall is red"라는 문장을 받았다면, "red"라는 단어를 "blue"에 조금 더 가까이 위치시킴으로써 network의 성능을 향상시킬 수 있는 것이다.

인간은 모든 단어의 조합을 다 알게 되기 전에, 모르는 단어 조합이 와도 그 뜻을 유추해 낼 수 있다. 단어들의 뜻을 알고 있다면, 처음보는 문장을 봐도 이미 알고 있는 것처럼 뜻을 알게 되지 않는가? Neural network도 마찬가지다.

Word embedding은 이보다 더 주목할 만한 특성을 또 가지고 있다. 그것은 바로 단어 간의 관계가 vector 간의 차이에 녹아들어간다는 것이다. 예를 들어, 성별에 따른 vector 차이 값이 아래와 같이 일정하게 존재하는 것을 보자.

\[ W("woman") - W("man") \approx W("aunt") - W("uncle") \\ W("woman") - W("man") \approx W("queen") - W("kink") \]


Difference vectors in word embeddingsWord embedding에서의 difference vector
출처: Mikolov 외 (2013a)


이 결과는 어쩌면 당연하게 보일 수도 있다. 성별에 따라 대명사가 다르게 존재하기 때문에, 단어를 바꾸다 보면 문법적으로 틀린 문장이 될 경우가 결국엔 생기게 되는 것이다. 배운 사람이라면 "she is aunt"라고 쓰고 "he is uncle"이라고 쓴다. "he is the King"이 맞는 표현이고 "she is the Queen"이 맞다. 누군가 "she is uncle"라는 문장을 본다면, 문법적으로 틀렸다는 대답이 나올 가능성이 가장 높을 것이다. 만약 문장의 단어 절반이 임의적으로 바꾼다면, 이런 식의 오류가 나올 가능성이 높다.

"아 그야 물론!" 이제서야 우리는 이렇게 생각할 수 있을 것이다. "Word eembedding이 성별 차이를 배웠잖아. 분명 word embedding에는 성별을 위한 차원이 존재하고 있을거야. 마찬가지로 단수/복수형의 의미를 구분하기 위한 차원이 하나 또 있을 거고. 이렇게 어렵지 않은 관계성은 쉽게 찾을 수 있다고!"

근데, 방금 들은 주장보다 훨씬 어려운 관계도 word embedding에 녹아들어가 있다. 이런 결과는 거의 기적에 가깝다!


Relationship pairs in a word embeddingWord embedding에서의 같은 관계를 지닌 단어 쌍들
출처: Mikolov 외 (2013b)


지금까지 봐 온 word embedding W의 이런 특성들은 그저 부수적인 효과라는 것을 알아야한다, 이걸 아는 것은 중요하다. 우리가 비슷한 단어들을 묶으려고 word embedding을 학습시킨 것이 아니다. vector간의 차이에 인간이 유추하는 개념을 심어주기 위해서 학습시킨 것도 아니다. 이 word embedding의 학습은 그저 문장이 올바른 지 예측하고자 했던 단순한 문제를 풀려고 시작한 것이다. Word embedding의 특성들은 아마도 최적화 과정에서 튀어 나온 것 같다.

이런 현상은 neural network의 굉장한 장점이 된다. Neural network이 데이터를 표현하기 위한 더 좋은 방법을 스스로 학습하는 것이다. Machine learning 문제를 성공적으로 풀기 위해서는 결국 데이터를 잘 표현해야 한다. Word embedding은 데이터 표현(representation)을 배우는 사례 중 굉장히 특출난 사례일 뿐이다.



Shared Representations

지금까지 살펴 본 word embedding의 특성은 매우 흥미롭긴 했는데, 5-gram의 문법이 맞는 지 맞추는 것 말고 좀 더 유용한 사례가 없을까?

우리가 word embedding을 시작하게 된 동기는 그저 조그마한 문제를 잘 해결하기 위해서였다. 하지만 그렇게 알게 된 word embedding의 좋은 특성들을 바탕으로 생각해 봤을 때, word embedding은 NLP 전반적으로 사용할 만 한 가치가 있지 않나 고려해 봄직하다. 실제로 단어를 vector로 표현하는 것(word representations)은 굉장히 중요하다:

Word representation은... named entity recognition, 품사 태깅, semantic role embedding 등의 최근 많은 NLP 시스템의 핵심 "비밀 특제 소스"가 되어 왔다.
출처: Luong 외 (2013)


W and F learn to perform task A. Later, G can learn to perform B based on W.W와 F는 A 문제를 풀기 위해 학습된다. 그리고나서, G는 문제 B를 풀기 위해 W를 바탕으로 학습된다.


위 그림과 같이 A 문제를 통해서 좋은 represenation을 배운 후에 그것을 B 문제를 푸는데 사용하는 방법은 deep learning toolbox의 주요 전략 중 하나이다. 그 전략은 미미한 차이에 따라 다른 이름으로 불려진다: Pretraining, transfer learning, multi-task learning. 이 방법의 가장 큰 장점은 하나의 representation이 여러 종류의 문제를 다루기 위해 데이터를 학습할 수 있다는 점이다.

이 전략에 정 반대되는 개념이 있다. 하나의 embedding을 통해 여러 종류의 문제를 푸는 데 사용하는 대신, 애초에 여러 문제의 따른 여러 종류의 데이터를 모아서 하나의 representation으로 학습시키는 것이다!

이에 대한 아주 좋은 예가 바로 bilingual word embedding으로, Socher 외 (2013a)에서 소개되었다. 여기서는 두 나라의 언어를 하나의 공유된 공간에서 word embedding을 학습시키게 되는데, 영어와 중국 만다린 언어를 대상으로 해보겠다.



우리는 두 개의 word embedding \(W_{\text{en}}\)과 \(W_{\text{zh}}\)를 각각 따로 학습을 위에서 했던 것과 같은 방식으로 하게 된다. 하지만, 우리는 분명히 각 언어 마다 비슷한 의미를 지닌 단어들이 있다는 것을 알고 있다. 따라서 우리는 또 다른 특성을 얻기 위해 최적화를 하게 된다. 같은 의미로 번역되는 단어들은 서로 가까이 있어야 한다는 특성 말이다.

물론, 이미 알고 있는 단어들이 진짜로 가깝게 붙어있는 것을 확인할 수 있었고, 그것이 최적화의 목적이었으므로 엄청 놀라운 것은 아니다. 놀라운 것은 우리가 실제로 같은 의미의 단어였는지 몰랐던 두 나라의 단어들도 가깝게 붙어있다는 것이다.

지금까지 word embedding를 경험해 봤던 것에 비춰봤을 때, 어쩌면 이는 그다지 놀라운 결과가 아닐 수도 있다. Word embedding이 비슷한 단어들을 서로 가깝게 당기기 때문에, 영단어와 중국 단어의 의미가 비슷하다는 것을 안다면 걔네들의 동의어들 역시 서로 가깝게 위치할 것이다. 또한 성별 차이와 같은 개념도 일정한 vector 차이로 나타나게 되는 것을 이미 경험해 봤다. 이를 기반으로 생각해보면, 충분한 point (representation)를 줄 세운다는 것은 방금 언급한 difference vector들이 영어와 중국어 embedding에서 똑같도록 만드는 것처럼 보인다. 그래서 어떤 남성형 단어를 영어에서 중국어로 번역될 수 있다면, 그에 연결되는 여성형 단어도 서로 번역될 수 있게 될 것이다.

두 언어 embedding 각자의 좌표에 뿌린 후, 서로 겹치는 단어를 중심으로 다른 단어들을 알맞은 위치로 땡겨와서 아래와 같은 그림을 만들 수 있다. 직관적으로, 두 언어 모델이 비슷한 "모양"을 가지게 되는 것처럼 보인다.


t-SNE visualization of the bilingual word embeddingBilingual word embedding의 t-SNE 시각화
출처: Socher 외 (2013a)



Bilingual word embedding을 통해 우리는 비슷한 두 종류의 데이터를 관통하는 공유된 representation을 학습시켰다. 그런데 굉장히 다른 종류의 데이터도 한 공간에 같이 embed시킬 수 있다.

최근 결과로, deep learning은 이미지와 단어들을 하나의 표현으로 삼는 embedding을 학습하는 모델을 연구하기 시작했다.



이 연구의 기본적인 생각은, word embedding을 통해서 vector를 만들어서 이미지 분류 문제를 풀겠다는 것이다. 이 모델은 개 그림은 "개"라는 단어 vector 가까이에, 말 그림은 "말"이라는 단어 가까이에, 자동차 그림은 "자동차" vector 가까이에 위치시킨다.

새로운 종류의 그림을 테스트해 볼 때 흥미로운 결과가 나온다. 예를 들어 이 모델인 전혀 고양이에 대해서 학습되지 않았는데 (즉, "고양이" vector 가까이에 있는 그림이 없다면), 고양이 그림을 넣어보면 어떤 결과가 나올까?


Socher et al. (2013b)출처: Socher 외 (2013b)


이 network 모델은 전혀 새로운 종류의 그림들을 꽤나 제대로 다룰 수 있음을 보여주었다. 고양이 그림은 word embedding 공간에서 아무렇게나 위치되지 않고, 그 대신 "dog" 단어 부근에 (실제로 "cat" vector 부근에) 자리 잡고 있었다. 마찬가지로 트럭 그림은 학습된 단어 중에 관련된 "automobile" vector 부근에 위치해있었고, 실제로 "truck" vector 부근이었다.


Socher et al. (2013b)출처: Socher 외 (2013b)


이 결과는 Stanford 그룹에서 진행한 연구로, 고작 8개의 클래스 (+ 2개의 테스트용 클래스)의 데이터로 학습한 것이다. 그 결과는 꽤나 인상적이었다. 하지만 고작 8개의 클래스만 아는 것으로는 이미지와 단어 의미 공간 사이를 충분히 연결하기엔 부족하다.

구글 그룹에서 훨씬 많은 데이터 (무려 1000개의 이미지 클래스)로 거의 같은 시기에 연구를 진행했고 (Frome 외 (2013)), 이를 기반으로 다른 연구에도 응용되었다 (Norouzi 외 (2014)). 이 두 연구 모두 매우 강력한 이미지 분류 모델 (Krizehvsky 외 (2012))을 기반으로 연구를 진행한 점은 같지만, 이미지를 word embedding 공간에 각인시키는 방법에서는 서로 다르다.

연구 결과도 인상적이다. 비록 새로운 그림을 보고 정확한 의미의 단어를 잡아내진 못 하지만, 그 단어 근처에까지는 그림을 위치시킬 수 있었다. 만약 전혀 모르는 종류의 이미지이지만, 그 종류가 확실히 다른 이미지들을 입력한다면, 모델은 충분히 그 종류에 따라 이미지를 구분할 수 있다는 뜻이다.

비록 내가 Aesculapian 뱀이나 아르마딜로가 어떻게 생겼는 지 본 적은 없지만, 만약 내가 이 두 동물의 사진을 보게 된다면 나는 어떤게 뱀이고 어떤게 아르마딜로인지 구분할 수 있는 이유는, 나는 어느 동물의 종류가 어떤 단어와 연관이 있는지 전반적인 인식이 있기 때문이다. 여기서 본 network 모델도 그런 전반적인 인식이 있다고 볼 수 있다.

(이 연구 결과들은 모두 "여기 있는 가까운 단어들은 서로 의미가 비슷하다"는 word embedding의 생각을 이용한 것들이다. 하지만 단어 간의 관계를 얹어서 생각해보면 훨씬 더 강력한 결과를 보일 수 있을 것 같다. 우리의 word embeddind 공간에서는, 단어의 성별 관계를 나타내는 difference vector가 일관성있게 존재하는 것을 알고 있다. 이와 마찬가지로 이미지 공간에서는 성별에 따라 구분되는 특징들이 존재한다. 수염, 대머리 등의 생김새는 남성을 나타내는 강력한 증거가 된다. 가슴, 긴 머리, 화장이나 보석 장신구 등은 여성의 증거가 될 수 있다. 예를 들어, 우리 모델이 지금까지 "king"과 관련된 이미지를 하나도 보지 못했고, queen의 이미지는 알고 있다고 생각해보자. 새로운 이미지가 왔는데, 왕관과 같은 여러 이유로 인해 queen의 그림과 가깝다고 생각을 하던 와중에 갑자기 턱수염이 나왔다. 그러면 모델은 "이 그림이 queen의 남성 버전이겠구나"라고 생각하는 것이 합리적인 것이다.)

Shared embedding은 매우 흥미로운 연구 분야이고, representation을 중점으로 생각하는 deep learning이 왜 그리 매력적인지를 잘 보여주는 연구 분야이다.



Recursive Neural Networks

아래 그림과 같은 network를 시작으로 word embedding에 대한 새로운 논의를 시작해보겠다.


Modular Network that learns word embeddingsWord embedding을 배우기 위한modular Network
출처: Bottou (2011)


위 그림은 modular network를 나타내는데, 수식으로는 다음과 같이 표시할 수 있다.

\[ R(W(w_1), W(w_2), W(w_3), W(w_4), W(w_5)) \]

이 모델은 두 개의 모듈 W과 R로 이루어져 있다. 이렇게 작은 neural network "모듈"을 엮어서 하나의 neural network를 구성하는 것은 그다지 널리 쓰이는 방식은 아니다. 하지만 NLP에서는 굉장한 성공을 거두었다.

위와 같은 모델은 유감스럽게도 강력하지만 한계를 가지고 있다: 모델이 받을 수 있는 input의 수가 고정되어 있어야 한다는 점이다.

이 문제는 A라는 association 모듈을 얹음으로써 극복할 수 있다. A 모듈은 두 개의 단어나 문구 representation을 받아서 이 둘을 합치는 역할을 한다.


From Bottou (2011)출처: Bottou (2011)


나열된 단어를 합치는 모듈인 A를 통해서 우리는 단어만을 표현할 뿐 아니라 일정 구문을 표현할 수도 있고, 심지어 문장 전체를 표현할 수도 있게 된다! 또한 A는 여러 개수의 단어를 합칠 수 있으므로 input의 개수가 고정되어 있을 필요가 없게 된다.

단어들을 합치는 데 있어서 나열된 순서대로 할 필요는 없다. 문장 "the cat sat on the mat"을 보면 사람은 자연스럽게 이 문장을 이렇게 나눌 것이다: "((the cat) (sat (on (the mat))))". 이에 맞춰서 A를 구성할 수 있다.


From Bottou (2011)출처: Bottou (2011)


이러한 모델은 종종 "recursive neural network"라고 불리는데, 한 모듈의 output이 같은 모듈의 input으로 들어갈 수 있기 때문이다. 또한 "tree-structured neural network"라고 불리기도 한다.

Recursive neural network는 많은 NLP 문제를 굉장히 성공적으로 풀어왔다. 예를 들어 Socher 외 (2013c)에서는 recursive neural network를 이용해서 문장의 감정을 예측했다.


From Socher et al. (2013c)출처: Socher 외 (2013c)


NLP의 주요 문제 중 하나는 되돌릴 수 있는(reversible) 문장 표현을 만드는 것으로, 이 표현을 통해서 대동소이한 의미를 가진 실제 문장을 재건축할 수 있도록 하는 것이다. 예를 들어 disassociation 모듈 D를 도입해서 A가 했던 단어 병합을 다시 풀어 헤쳐보려고 할 수 있다.


From Bottou (2011)출처: Bottou (2011)


이러한 작업이 성공할 수 있다면, D는 굉장히 강력한 도구가 될 것이다. 예를 들어 두 나라의 언어를 이용한 bilingual sentence representation을 구축해서 번역에 사용할 수 있는 것이다.

유감스럽게도 이건 매우 어려운 문제임이 밝혀졌다. 진짜 정말 매우 어려운 일이다. 그래도 이것이 성공했을 때의 얻을 수 있는 굉장한 희망을 가지고 많은 사람들이 연구를 계속하고 있다.

최근에 Cho et al. (2014)에서 구문을 표현하는 것에 대한 진척을 이루었는데, 여기서의 모델은 영어 구문을 인코딩해서 프랑스어 구문으로 해석해냈다. 이 모델이 학습한 구문 표현을 한 번 보시라!


Small section of the t-SNE of the phrase representation구문 표현을 t-SNE로 시각화한 내용 중 일부
출처: Cho 외 (2014)


Deep Learning에 대한 비판

지금까지 소개했던 연구 결과 중 일부는 NLP나 언어학 등의 다른 분야의 연구자들의 비판을 받았다고 들은 바가 있다. 그 결과 자체를 문제로 삼지는 않지만, 그 결과를 토대로 도출된 결론에 대해 우려를 표하고, 그 결론이 다른 기술과 어떻게 비교될 수 있는지에 대해 걱정하고 있다.

내가 이러한 우려를 해결할 자격이 있지는 않다. 혹시 이에 대해 변론하고자 하는 분이 있다면 댓글로 의견을 주었으면 좋겠다.



맺음말

Deep learning에서 단어를 representation으로 보는 시각은 "왜 deep learning이 이렇게 문제를 잘 해결하는지"에 대한 대답이 될 수 있는 강력한 관점이다. 여기에 더해서, 나는 매우 아름다운 뭔가가 더 있다고 생각한다. 왜 neural network는 좋은가? 왜냐하면 데이터를 표현하는 더 나은 방법들이 층층이 쌓인 모델 (layered models)을 최적화하는 과정에서 튀어나오기 때문이다.

Deep learning은 매우 젊은 분야로, 이론이 아직 확실하게 자리잡지 않았으며, 이를 바라보는 시각도 빠르게 변하고 있다. "Neural network가 representation에 집중하는 관점이 현재 매우 인기있다"는 것도 나의 관점일 뿐이라는 말이다.

이번 글에서는 내가 보기에 매우 흥미로운 수 많은 연구 결과들을 짚어보았는데, 이 글을 쓰게 된 가장 중요한 동기는 deep learning과 type theory와 functional programming을 연결해서 생각하는 또 다른 글을 쓰기 위해서 그 준비 단계로서의 글을 쓰고자 함이었다. 이 다음 글이 기대된다면 부디 나의 rss feed를 구독해서 새 글을 기다려주시기 바란다 (역자 주: 이미 그 글이 나와있다).

  • ihsong 2020.08.13 17:47

    Representation을 검색하다가 왔는데 제 전공과 다른 영역임에도 영양가 있는 글이었습니다. 잘 봤습니다.

  • qwerty 2021.06.06 16:16

    번역해주신 덕분에 좋은 정보를 쉽게 얻어가네요! 깔끔하게 정리해주셔서 감사합니다. 잘 읽구가요!