1. RNN(recurrent neural network)

- 시간에 따라 값이 변하는 순차데이터를 처리하는 신경망을 RNN이라 한다.

2. 순차데이터의 표현

- 일반적으로 벡터를 통해 표기한다. 입력 데이터의 크기는 그 데이터가 담고 있는 시간 길이에 비례하여 증가한다.

- 문장을 벡터로 표현하는 방법에는 다음과 같은 방법이 있다.

  • bag of words: 단어의 빈도수순으로 벡터의 각 성분에 단어를 대응시키고, 문장을 사전 크기와 같은 크기의 벡터로 표현. 각 문장이 담고 있는 전체 단어 집합 간 유사성을 판단할 수는 있으나, 시간 정보를 담을 수 없어 문장의 표현에는 부적절.

  • one hot code: 각 열벡터의 크기가 사전의 크기와 동일하고 단어를 one hot code로 표현하는, 문장에 포함된 단어 길이만큼의 벡터로 표현. 단어 하나를 표현하는 데 사전 크기만큼의 벡터를 사용해야 한다는 점은 공간 낭비이고, 단어 간 유사성을 판단할 수 없다.

  • word embedding: 단어 사이의 관계를 분석하여, 단어 집합을 단어 사이 관계 정보가 담긴 새로운 공간으로 변환한다. 이 과정에서 단어를 표현하는 벡터의 차원은 사전의 크기보다 훨씬 작은 크기로 줄어든다. word2vec이 word embedding 방법으로 단어를 벡터로 변환하는 대표적인 방법이다.

3. 순차데이터의 특성

  • 특징이 나타나는 순서가 중요하다.

  • 각 샘플마다 길이가 다르다.

  • 한 데이터 안에서도 앞에 나오는 데이터와 뒤에 나오는 데이터 사이에 문맥 의존성이 있다.

4. RNN이 가져야 하는 필수 기능

  • 시간: 순서대로 한 번에 하나의 특징이 나열된다.

  • 가변 길이: 신경망에 샘플의 개수만큼 hidden layer가 있어야 하며, 샘플의 길이가 변하는 만큼 hidden layer의 개수도 변할 수 있어야 한다.

  • 문맥 의존성: 이전에 입력된 특징의 내용을 나중에 입력된 특징을 처리하면서 함께 활용할 수 있어야 한다.

5. RNN의 구조

- 대부분이 CNN과 구조가 유사하나, hidden layer 부분에 recurrent edge(한 hidden layer에서 나온 결과가 다시 그 hidden layer의 입력이 되는 edge)가 존재한다는 점이 다르다. RNN은 이러한 구조를 가짐으로써 데이터의 시간, 가변길이, 문맥의존성을 모두 처리할 수 있다.

- 예를 들어, recurrent edge가 있는 부분에서 입력 데이터의 t초에 해당하는 데이터를 처리할 때는 입력 데이터의 t초에 해당하는 데이터와 t-1초에 해당하는 데이터를 그 hidden layer를 통해 처리한 결과값을 모두 그 hidden layer의 입력으로 하여 결과값을 얻는다.

- 입력과 출력의 개수에 따라 RNN의 구조가 다음과 같이 나뉘기도 한다.

  • 하나의 입력, 여러 개의 출력: image captioning 문제가 이와 같은 RNN 모델을 사용한다.

  • 여러 개의 입력, 여러 개의 출력

    • 여러 개의 입력이 하나의 출력이 되고, 그 하나의 출력이 다시 RNN의 입력이 돼 다시 여러 개의 출력을 내놓는 RNN: transformer가 이와 같은 구조를 갖는다. 기계번역에서 흔히 볼 수 있다.
  • 여러 개의 입력, 하나의 출력

- 현재 널리 쓰이는 RNN 모델은 양방향 구조를 갖도록 해 입력 데이터의 앞쪽 정보가 뒤쪽 정보를 참조하여 구체적 문맥을 파악하도록 한다.

6. LSTM(long short term memory)

- 입력 데이터의 시간 길이가 너무 길어서 앞쪽 데이터와 뒤쪽 데이터 사이 거리가 멀어지면 gradient vanishing 등의 문제가 발생할 수 있다. RNN의 한 유형으로서 LSTM은 다음과 같은 요소를 통해 이 문제를 해결한다.

  • memory block

  • forget gate

  • input gate

  • output gate