이와 관련한 포스팅 목적은 대표적 순환신경망 모델들에 대한 간단한 이해를 위해 작성되었다. 순환신경망이 뭐지 하고 구글에서 다음과 같은 이미지로 순환신경망을 마주친다면, 사실 이해가 되기보단 혼란에 빠지기 쉽다.
나 역시 처음에는 이러한 그림만으로 순환신경망을 접했을 땐, 왜 모델이 이렇게 옆으로 늘어져있는지, 또 이 모델이 결국에는 뭘 위해 존재하는 것인지 혼자 공부할땐 감이 안잡혔던 것 같다.
그래서 오늘 포스팅에는 순환신경망이 어떤 모델인지, 왜 사용하는지, 그리고 어떤식으로 활용되는지에 대해 간단하게 알아보고자 한다. 참고로 내 포스팅 목적은 누구나 이해하기 쉽게 차근 차근 설명하자! 라는 대 전제를 깔고갈 예정이니 깊은 수식적 이해나 코드에 대한 이야기는 빠질 예정이다.
순환신경망의 필요성
순환신경망을 알아보기에 앞서 먼저 위키피디아에서 설명하는 순환신경망에 대한 정의를 먼저 알아보자.
순환 신경망(Recurrent neural network, RNN)은 인공 신경망의 한 종류로, 유닛간의 연결이 순환적 구조를 갖는 특징을 갖고 있다. 이러한 구조는 시변적 동적 특징을 모델링 할 수 있도록 신경망 내부에 상태를 저장할 수 있게 해주므로, 순방향 신경망과 달리 내부의 메모리를 이용해 시퀀스 형태의 입력을 처리할 수 있다.[1][2][3] 따라서 순환 인공 신경망은 필기 인식이나[4] 음성 인식과 같이 시변적 특징을 지니는 데이터를 처리하는데 적용할 수 있다.[5][6]
여기서 순환적, 시변적, 시퀸스라는 단어가 전체적인 순환 신경망을 이해하는데 굉장히 중요한 요소임을 알 수 있다. rnn 모델애 대한 사진을 혹시나 접했다면, 그리고 저 순환하는 화살표에 한번쯤 주목해 봤다면, 순환적 구조라는 설명이 바로 화살표가 가리키는 저것이라는 게 추측될 것이다.
더 이야기해 보자면 사실 그림속에서 순환이 이루어지는 초록색 상자는 사실 hidden layer를 단순화 한 것이지 실제로는 x_t를 input으로 하고 output을 y_t로 내뱉는 단순 DNN 모델에서 저 순환고리만 추가된 것이 rnn이다. 그럼 과연 저 순환이란 것이 뭐길래, 시변적, 시퀸스라는 것을 처리해 준다는 거고, 그보다 우선해서 과연 시변적, 시퀸스라는 말이 무슨 뜻일까. 이를 먼저 알아보자.
1. 피드 포워드 신경망
먼저 우리가 기존까지 사용했던 단순 회귀모형과 DNN 기반 딥러닝 모형에 대해 한번 골똘히 생각해보자. 아래 그림은 보기와 같이 2개의 입력값을 받아서 어떠한 변수를 예측한다. 이렇게 직선적으로 input에서 output 노드까지 한 방향으로 계산값을 넘겨주면서 이어가는 모델을 통칭하여 피드 포워드 신경망이라고 한다.
우리가 주로 봤던 iris 데이터에서, 꽃밭침 길이와 꽃잎 길이를 통해 꽃의 종류를 예측한 것도, 타이타닉 데이터에서 나이와 성별 등을 통해 생존여부를 예측했던 것도 이와 마찬가지다.
이러한 모델의 생성 과정을 조금 더 깊게 생각해 보면, 타이타닉 데이터에서, 우리는 모든 사람들은 서로 생존에 있어서 서로 독립적이었다는 가정과, 그리고 특정 인물의 나이와 성별 등의 개인의 특성이 생존에 영향을 미쳤다는 것을 전제한다. 더 쉽게 풀어쓰자면 우리는 이 사람이 특별히 저 사람을 위해 희생했다, 이 사람은 구명보트가 있었지만 자기 가족들을 위해 자기를 희생했다라는 드라마틱한 특수 상황을 캐치해 내고자 하는게 아니라, 우리는 살아남은 사람과 죽은 사람의 개인 신상데이터를 통해서 생존여부에 대한 일반적이고 일관적인 패턴을 규명하고 싶은 것이다.
이에 비춰 우리의 모델 학습과정을 다시 생각해 보면 모델이 각 input 데이터에 대한 가중치를 학습하는 것은 이러한 개인의 특성들이 생존에 얼마나 영향을 미쳤는지에 대한 추론과정이라고 볼 수 있는것이다. 이러한 두개의 큰 가정을 통계적 용어로 표현하면 각 데이터(각 인물에 대한 데이터)에 대해 독립 동일분포를 가정했다고 이야기한다.
그렇다면 이러한 데이터 모델들은 과연 모든 문제에 확장시켜서 적용시킬 수 있을까? 아래와 같은 특수한 상황들을 생각해 보자.
2. 시계열 데이터
문제 상황을 조금 바꿔서, 먼저 통계에서 이야기하는 자기회귀 문제에 대해 들여다보자. 만약 당신이 내일의 주식 데이터를 예측하고 싶다면 input 데이터에 무슨 값을 넣어야 할까?
주식가격에 영향을 미치는 요소는 굉장히 다양하고 많겠지만, 그중에서 주식가격에 영향을 미치는 가장 중요한 요소는 바로 주식 가격의 추세 즉 과거 자신의 주식 가격일 것이다. 상식적인 선에서 오늘의 주식가격은 어제의의 주식가격에서 어느정도 +- 될 것이며, 그러한 변동폭은 과거의 추세와 비슷하게 이어질 것이라 추론해 볼 수 있다.
그러면 다시 생각해 보면, 주식가격 데이터를 예측하기 위해서는 주식가격 데이터 본인이 필요하다는 말인데, 구체적으로 이를 어떤식으로 구현한다는 것일까?
전통적이고 가장 간단한 시계열 예측 모형인 AR모형은 고정된 과거 n개의 시간을 활용해 오늘날의 가격을 예측한다. 우리가 예측하고자 하는 주식데이터 y 의 T 시점의 가격을 y_t 라고 하면, 바로 전 시점의 데이터를 T-1, 그 전시점인 T-2 에 대해서도 주식가격 y를 생각해 볼 수 있는데, 그렇다면 우리는 AR 모형을 다음과 같은 수식관계를 통해 이전값이 다음값에 영향을 미친다는 가정을 수식으로 표현할 수 있다.
즉 이러한 수식 역시 예측하고자 하는 T 시점의 주식가격을 예측하기 위해, 그 하루 전날인 T-1 주식가격, 그 전날인 T-2 시점의 주식가격을 사용하여 각각 가중치를 곱해 T시점의 가격을 계산하는 과정으로 해석할 수 있다.
참고적으로 이를 조금만 확장해보면, 전통 통계학에서 단순히 과거값 n개만을 고려하는 것이 아니라 n 시점 전까지의 과거의 변동성과 장기적 추세까지 input으로 고려한 ARIMA 모형을 사용하거나, 연관된 다른 변수, 즉 환율변동이나 경제지표와 같은 추가적인 시계열 변수들을 에측에 같이 사용하는 ARIMAX 모형을 사용하기도 한다.
아무튼, 이런 방식을 그대로 적용하면, 물론 과거의 주식가격과 미래의 주식가격이 독립적이지는 않지만, 어떤 변수의 몇 개의 과거 데이터 까지 우리가 고려할지 미리 정해두기만 한다면 우리가 이제껏 사용했던 피드 포워드 신경망을 가지고도 시계열 데이터를 충분히 다뤄볼만 하다.
그러나 여기서 고려해야할 문제는, 결국에는 우리가 오늘날의 데이터를 예측하기 위해서 얼마나 과거의 데이터를 참고해야 하는지 우리가 미리 알고 정해둬야 한다는 문제가 있으며, 이를 모델 생성에서 한번 정해놓고 나면, 이후에는 입출력을 유기적으로 조절할 수 없는 문제가 발생한다.
3. 시퀀스 데이터
더 포괄적인 의미를 갖는 순차(sequence) 데이터에 대해서 생각해보자.대표적으로 언어 데이터를 예로 들 수 있다.
데이터 모델 중에는 언어를 입력으로 받는 경우가 존재하는데, 이는 메일 속 문장을 파악해 스팸인지 여부를 판별하는 분류문제 라던가, 입력문장을 받아 출력문장을 내뱉는 번역문제와 같은 자연어를 처리하는 대표적인 모델이다. 이러한 언어라는 것은 문장을 구성하는 단어들의 구성 뿐 아니라 이러한 단어들의 어순 역시 큰 의미를 지닌다. 이는 즉슨, 똑같은 단어로 구성된 문장이더라도 단어의 어순이 다르면 모두 다른 의미가 된다는 것이고, 그에 따른 처리 결과인 output 역시 각각 다르게 나와야 한다는 결론을 야기한다.
그렇다면 이런 언어들은 어떻게 input으로 받고 출력값을 배출할 수 있을까?
각각의 단어들을 어떻게 컴퓨터가 이해하게끔 전달하고 input 으로 넣는지에 대한 고민은 여기서 배제하자. 여기서 정확하게 고려하고자 하는 것은 각각의 단어에 대해 서로 독립적으로 input 값으로 받아버리는 피드 포워드 신경망에 과연 이러한 어순 정보를 어떻게 전달할 것인지 이다.
그러면 시계열 데이터에서 고려했듯, 순서정보를 고려하지 않더라도 어차피 문법상 어순이 고정되어 있으니, 알아서 컴퓨터가 첫번째 단어는 주어라는 가중치로, 두번째 들어오는 input은 동사라는 가중치로 학습하면 되는 거니까 상관없지 않을까?
이에 대한 대답은 크게 두가지의 이유로 불가능하다.
1. 언어는 같은 의미더라도 표현에 따라서 어순이 바뀔 수 있다.
2. 문장은 고정된 길이를 가지고 있지 않다.
단순히 생각하더라도 의도적으로 주어를 문장 뒤쪽에 배치해 강조하는 문법이라던가, 주어가 나오기 전 수식 문장이 나오는 경우가 충분히 존재할 수 있으므로, 단순히 문장내에서 같은 순서에 있는 단어라고 해서 같은 위치에 input 시켜 동일한 가중치를 곱해준 다는게 사실상 의미가 없음을 알 수 있다.
1, 2번 문제는 특히 번역 모델에서 큰 문제가 발생하는데, 일단 입력과 출력이 모두 문장데이터이기 때문에 입력되는 문장길이가 어떻게 될지, 특정 언어로 번역되는 번역문의 길이가 얼마나 길어질지 알수가 전혀 없다. 즉 피드 포워드 신경망에서는 input과 output 노드가 필요한지 사전에 지정하고 학습해야 하는데 이같은게 불가능하다는 것이다. 또, 각 언어의 어순에 따라 어순 역시 달라지므로, input 뿐만 아니라 output에 대해서도 어순정보가 동시에 고려되어야 한다는 문제 역시 야기된다.
4. 결론
결국 우리는 시계열 데이터와 순서 데이터를 처리하는 데 있어 우리는 기존의 회귀모델이나 피드 포워드 신경망으로는 풀기 어려운 한계점에 도달했다. 즉 기존의 피드 포워드 신경망으로는 시변적, 시퀸스 모델에 대해서 처리할 수 없었음을 의미한다.
이러한 문제점을 다시 한번 정리해보면, 우리는 시퀸스 데이터를 처리함에 있어 크게 두가지의 필요성을 느꼈다.
1. 순서 정보에 대한 데이터를 모델이 기억할 필요가 있음.
2. input 길이와 output 길이를 기존에 정해두는 것이 아닌, 상황에 맞게 유동적으로 쓸 필요가 있음
이 시점에서 다시 가장 위의 순환 신경망에 대한 정의를 다시 읽어보자. 순환신경망은 이러한 문제들을 유닛간의 순환적 구조로서 해결했다는 것을 확인할 수 있을 것이다.
다음 포스팅에서는, 이러한 유닛간 순환적 구조를 집중적으로 다뤄보며, 어떻게 이러한 문제들을 해결한 것인지를 알아보고자 한다.
'딥러닝 논문 > 논문 읽기 스터디' 카테고리의 다른 글
[논문 스터디] 1. Effective Approaches to Attention-based Neural Machine Translation (0) | 2023.09.01 |
---|---|
[논문리뷰] 1. Effective Approaches to Attention-based Neural Machine Translation (0) | 2023.09.01 |
[논문 스터디] Seq2Seq 스터디 내용 (활성화 함수를 왜 쓰는가 등) (0) | 2023.09.01 |
[논문리뷰] 0. Sequence To Sequence Learning With Neural Networks (Seq2Seq) (0) | 2023.04.24 |
순환신경망에 대하여(2) - 순환신경망의 순환과정 (0) | 2023.04.23 |