본문 바로가기
기계학습/자연어 처리 머신러닝

RNN - 딥러닝을 이용한 자연어처리 입문

by tryotto 2020. 1. 28.

# 순환 신경망 (RNN)



- 의의 : 일반적인 피드 포워드 신경망 - 입력 길이 고정

    > 문장 등 길이가 긴 입력들을 처리하는 신경망이 필요

ex) RNN, LSTM <- RNN 은 그 중 하나


- 시퀀스 : 순서. 

- 단어 시퀀스의 경우, 단어들이 순서대로 나열되어 있는 경우를 의미.

   > 문장 = 단어 시퀀스  라고 할 수 있다.

- 시퀀스 모델 : 시퀀스를 처리하기 위해 고안 된 모델.

   > ex) RNN, LSTM, GRU


    ** 왜 b 를 편향값이라고 했었던 걸까?

    >> 입력으로 들어오는 데이터 셋은, 어느정도 전체적으로 치우친 경향을 보일 수 있다. 

         그걸 표현하기 위한 상수값임. 

    ex) 지문인식 프로젝트에서, 똑같은 지문임에도 불구하고 전체적인 중심 좌표가 어딘가로 치우친 경우.

    >> 편향과 regularization 에서 사용하는 값과는 전혀 다른 것이다!! 주의하자

>How? :   regularization 은 변수 x 값들을 조금씩 변형해주는 것이고, 

편향은 입력 input값들이 특정 지점 전체적으로 치우쳐 있는 경우를 의미한다.


- 피드 포워드와 RNN 의 차이점


1) 방향 : 

   > 피드 포워드 : 은닉층에서 활성화 함수 거친 값들은 항상 출력층 방향으로만 전달 됨

   > RNN : 은닉층에서 활성화 함수 거친 값들이 다시 은닉층으로 전달됨 + 출력층으로도 전달 됨 (2개의 방향)


2) 각 은닉층의 단위

   > 피드 포워드 : 각 은닉층에 있는 하나하나의 값들을 "뉴런" 이라고 표현했음

   > RNN : 뉴런 단위로 계산 하지 않음. 전체 뉴런들의 집합인 은닉층 하나 자체만을 놓고 계산함

> Why? :  RNN에서 중요하게 여기는건, "시퀀스"다. 시퀀스에 더 주목하기 위해서 입력/출력벡터의 차원수는

자세하게 표현하지 않기 위해 셀 하나로 퉁치는것. (물론 셀 자체도 중요하긴 함)

- 이름 : "메모리 셀", "RNN 셀"

   > Why? :   각각의 은닉층에 있는 값들을 본인에게 다시 전했으므로, 이전 시점에서 

    은닉층의 출력값이 뭐였는지 알 수 있다. 이를 "기억한다"라고 표현할 수 있다.

- 은닉 상태 (Hidden State) : 메모리 셀이 갖고 있는 값. 즉, 이전 시점에서 메모리 셀로부터 출력된 값

      >즉, 메모리 셀에서는 다음과 같은 연산이 일어난다

: 이전 메모리 셀이 원래 갖고 있는 값(=은닉상태) + 새로운 입력값 = 다음 메모리셀에 전달할 새로운 은닉상태


3) 은닉층 내부에 있는 뉴런들끼리 서로 영향을 주는가?

   > 피드 포워드 : 각각의 뉴런들은 서로에게는 전혀 영향을 주지 않는다. 독립된 관계

   > RNN : 이전 은닉상태에 있던 값을 가지고 새로운 은닉상태 값을 산출해내기 떄문에, 모든 뉴런들에게 서로 영향을 받는다



- 모델의 기본 종류

1) 일대 다 : ex. 이미지를 통해 제목을 생성해내는 일

2) 다대 일 : ex. 스팸 메세지의 내용을 보고, 스팸인지 판단하는 모델

3) 다대 다 : 외국어 문장을 한국어 문장으로 번역하는 일, 챗봇과의 대화, 개체 명 인식, 품사 태깅



- 주로 사용하는 활성화 함수 : 하이퍼볼릭 탄젠트 함수, 가끔씩 ReLU 함수


- 출력층에서 사용하는 활성화 함수 : 이진 분류시 시그모이드, 다항 분류시 소프트맥스  등


- 입력 층, 출력 층, 은닉 층의 단위 : "벡터"

> 각각의 층들을 연결할 때의 가중치 W 단위는 행렬


- 입력 값 : 3D 텐서 - 배치 크기, input 의 차원, hidden_size 만큼의 크기를 갖는 입력값

   > hidden size 의 경우, 몇 개의 은닉 상태(Hidden Size) 를 갖는지를 결정해준다.


- 각 층에 대한 수식

   > 사이트를 통해 직접 참조하기



- BPTT : RNN 에서 사용하는 역전파 학습 방식


- Deep Recurrent Neural Network : RNN 의 은닉층이 여러 개 있는 모델을 의미


- 양방향 RNN : (이전 시점 + 이후 시점) 이 두 가지로부터 상태값을 받아서 계산하는 방식

    > 사용 예시 : 빈칸 채워넣기 

>> 빈칸을 채우기 위해선, 앞 뒤 문맥을 둘 다 고려해야 한다.