2 minute read

RNN의 불합리한 유효성

2015년 5월, 안드레이 카파시는 “The Unreasonable Effectiveness of Recurrent Neural Networks” 라는 제목의 블로그 글을 작성했다. 이 글의 내용은 “Character 단위로 다음에 올 글자 하나만 예측하도록 단순하게 학습시켰을 뿐인데, RNN이 문법, 문맥, 문서 구조(HTML, LaTeX)까지 놀라울 정도로 지켜서 글을 써내려가더라”이다.

2015년 당시의 분위기

당시 RNN에 대한 설명들은 복잡한 수식이 많아 진입 장벽이 높았다. 이때 안드레 카파시가 수학 공식 없이 RNN을 이해하기 쉽게 설명과 코드, 실험 결과들을 블로그에 공개하였다.

카파시가 했던 실험은 Character level 언어 모델이다. 즉, 단어나 문장의 의미를 알려주지 않고 오직 문장 속 글자 하나하나를 순서대로 읽게 한 뒤에 다음 Character를 예측하도록 모델을 학습시킨 것이다.

카파시는 이 모델에 폴 그레이엄이라는 인물의 에세이, 셰익스피어의 작품, 위키백과 문서, LaTeX 수학 수식 코드, 리눅스 소스코드 등의 텍스트를 학습시켰다.

“불합리할 정도로 유효하다”

이때 카파시는 블로그 글에 RNN은 불합리할 정도로 유효하다 라고 하였다. 왜냐하면 단순히 글자 순서만 학습했을 뿐인데, RNN은 철자를 맞추는 것을 넘어서 문맥과 형식을 정말 잘 시늉했기 때문이다.

실험 결과를 예로 들면

  1. 세익스피어 대본을 학습 시키니 인물 이름과 콜론, 줄바꿈 등의 대본 형식을 그대로 맞춰가며 대사를 생성했다.
  2. 위키백과와 LaTeX를 학습 시키니 위키백과의 마크다운 문법과 주석 틀을 잘 따랐고, 수학적 기호와 구문을 LaTeX 문법에 잘 맞게 만들었다.
  3. 리눅스 코드를 학습 시키니 C언어 코드의 들여쓰기, 변수 선언, 괄호 짝 맞추기 등 구조를 학습해서 코드를 잘 생성하였다.

물론 이때 당시에는 생성물을 자세히 보면 내용적으로는 앞뒤가 맞지 않고, 할루시네이션이 많았다. 하지만 Character 단위 수준에서 시작해서 문법 구조와 문맥을 스스로 파악하고 흉내 낸다는 것 자체가 당시에는 매우 놀랄만했다.

RNN 구조 특징

위 실험 결과를 낼 수 있었던 이유는 RNN의 구조에 있다.

일반적인 신경망(e.g. CNN)은 고정된 크기의 데이터(e.g. 이미지)를 받아서 일회성으로 결과를 내놓지만, RNN은 시간의 흐름이나 순서가 있는 시퀀스 데이터(e.g. 텍스트, 음성)을 다룬다.

그리고 RNN은 Hidden State라는 기억장치가 있다. RNN은 새로운 Character(입력값)을 처리할 때, 이전 단계까지 처리했던 정보를 압축한 Hidden State를 함께 전달받아 업데이트한다.

예를들어 “hello”라는 단어를 만들 때, 이전까지 들어온 글자가 “hell”이라는 기억(hidden state)을 가지고 있기 때문에 다음에 올 글자가 “o”라는 것을 예측할 수 있게 된다. 즉 문맥을 유지할 수 있다는 것이다.

이런 RNN의 앞단의 정보를 연속적으로 전달하는 구조 때문에 과거의 통계적 모델(e.g. n-gram)의 고정된 몇 개 단어만 보는 한계를 넘어서서 앞단의 맥락을 길게 이어가며 문잘을 완성할 수 있었다.

카파시 블로그 글에 대한 논쟁

안드레 카파시의 본 블로그 글은 개발자 커뮤니티에서 반응이 폭발적이었고, 당연히 비판도 있었다.

대표적으로 요아브 골드버그라는 연구원은 단순한 통계 모델(n-gram)에 대량의 데이터를 넣어도 겉보기에는 RNN과 비슷하게 그럴듯한 텍스트를 만들어 낸다라고 주장하며, RNN이 대단한 지능을 가진 것처럼 오해해서는 안 된다고 지적했다.

하지만 이후 토마스 미콜로프 등의 연구 결과에서는 데이터가 많은 상황에서 RNN은 기존 통계 모델이 넘지 못하는 정밀도와 성능한계를 명확하게 넘어서는 우수한 언어 표현 능력을 증명하기도 했다.

RNN 이해하기

Leave a comment