모두를 위한 딥러닝

[DL] 모두를 위한 딥러닝 12-1 RNN

승무_ 2022. 4. 25. 16:46

하나의 단어로는 문맥을 파악할 수 없다.

이전 단어와의 조합을 통해 우리는 문장이 의미하는 바를 알 수 있다.

 

연속적인 데이터들의 의미를 파악하기 위해 기존의 NN/CNN 구조를 사용하는 것은 어려운 일이다.

따라서 이전의 연산 결과가 현재의 연산 결과에 영향을 미치는 신경망 구조를 만들게 되었는데,

이를 RNN 이라고 한다.

 

 

RNN의 구조는 위의 그림과 같이 풀어서 나타낼 수 있다.

연속적인 데이터들이 입력으로 들어가게 되고, 현재의 입력값에 대한 출력이 과거의 연산값에 영향을 받는 구조이다.

 

각각의 RNN cell에서 출력값을 뽑아낸다.

위의 그림은 RNN의 연산식을 나타낸 것이다.

 

현재의 입력값과 과거의 상태가 현재의 상태에 영향을 미치는 것을 알 수 있다.

 

계산 과정에서 쓰이는 fw(함수)와 파라미터들은 매 time step 마다 동일하다.

 

상세 계산 과정과 활성화 함수를 확인해보자.

가중치(W)는 총 3가지 종류가 존재함을 알 수 있다.

*) ht는 다음 입력을 넣어주기 위한 것

 

3가지의 가중치는 전체 cell에서 동일한 값이다. (그래서 왼쪽 그림처럼 표현)

 

이제 RNN의 예시 모델을 살펴보자.

"hello"라는 단어를 학습시켜 'h'를 입력으로 넣을 경우 그 다음의 문자인 'e'가 출력되게 할 수 있다.

 

ex) 네이버 연관 검색어

 

각 문자들을 one-hot 인코딩을 통해 변환하고 이를 입력값으로 설정하게 된다.

 

현재 상태를 구하기 위해 이전값과 현재 입력값을 이용해 구하는데,

첫번째 입력일 경우 이전값이 존재하지 않으므로 h_t-1값을 0으로 설정한다고 한다.

 

이러한 계산 과정을 반복하여 진행한다.

마지막으로 W_hy를 상태값(초록색)에 곱하여 y를 뽑아내게 된다.

y값에 softmax함수를 적용하고 최대값을 예측값으로 설정하여 Cost값과 정확도를 계산할 수 있다.

 

RNN을 이용하여 위와 같은 Application을 만들 수 있다.

Language Modeling: 연관 검색어

Conversation Modeling: 채팅 봇

 

다양한 RNN 구조이다.

  • one to one: 기본 RNN 구조
  • one to many: ex) 이미지 설명 (이미지를 통해 문장을 만들어냄)
  • many to one: ex) 감정 분석 (문장을 통해 감정을 분석)
  • many to many 1: ex) 자동 번역 (문장을 다른 언어로 번역)
  • many to many 2: ex) 비디오를 프레임 단위로 설명

더 깊은 구조의 RNN을 설계할 수 있다.