순환 신경망 (RNN)
순환 신경망(Recurrent Neural Network)은 일반적인 완전 연결 신경망과 거의 동일하다.
다만, 완전 연결 신경망에 이전 데이터의 처리 흐름을 순환하는 고리를 하나 추가하면 된다.
위 그림처럼 순환 신경망은 뉴런의 출력이 다시 자기 자신으로 전달된다.
즉, 어떤 샘플을 처리할 때 이전에 사용했던 데이터를 재사용하는 셈이다.
순환 신경망에서 샘플을 처리하는 한 단계를 타임스텝이라고 부르고 층을 셀이라고 부른다.
예를 들어, 타임스텝 A에서 셀의 출력 Oa가 사라지는 것이 아니라 타임스텝 B의 셀로 주입되며,
타임스텝 B에서 셀의 출력 Ob가 다시 타임스텝 C의 셀로 주입된다.
이처럼 이전 데이터를 계속해서 다음 셀로 전달할 수 있다는 장점 덕분에 순환 신경망은
순차 데이터(Sequential data)와 같은 문장의 감정 분석, 음성 분석 등에 자주 사용된다.
하지만 이전 타임스텝의 샘플을 기억하기는 하지만 타임스텝이 오래될수록 순환되는 정보가 점점 희미해진다는 문제점이 있다.
일반적으로 순환 신경망의 은닉층에서 활성화 함수로는 하이퍼볼릭 탄젠트 (tanh)이 많이 사용된다.
tanh 함수도 S자 모양을 띠기 때문에 종종 시그모이드 함수라고도 불리지만
tanh는 -1 ~ 1 사이의 범위를 갖고, sigmoid는 0 ~ 1 사이의 범위를 갖는다는 차이가 있다.
순환 신경망에서 사용하는 데이터는 텍스트나 일정한 시간 간격으로 기록된 시계열 데이터와 같은
'순차 데이터(Sequential Data)'여야 한다.
만약 "I am a boy"라는 문장이 있으면 쉽게 이해할 수 있지만, "a am I boy"라는 문장은 말이 안 되기 때문이다.
또는, 6월 1일 22℃ / 6월 2일 24℃ / 6월 3일 23℃ 등 일자가 순서대로 정렬되어 있으면 다음 날 온도를 예측할 수 있지만, 데이터가 뒤죽박죽 섞여 있으면 예측이 어려워질 것이다.
순환층은 일반적으로 샘플마다 2개의 차원을 갖는다.
보통 하나의 샘플을 하나의 시퀀스(Sequence)라고 부르는데, 시퀀스 안에는 여러 개의 아이템이 들어 있다.
여기서 시퀀스의 길이가 바로 타임스텝의 길이가 된다.
예를 들어, 어떤 샘플에 "I am a boy"라는 문장이 있다고 해보자.
이 샘플은 4개의 단어로 이루어져 있다.
각 단어를 어떤 3개의 숫자로 표현한다고 가정해보자.
이런 입력이 순환층을 통과하면 두 번째, 세 번째 차원이 사라지고 순환층의 뉴런 개수만큼 출력된다.
설명이 어렵기 때문에 부가적으로 설명해보겠다.
하나의 샘플은 시퀀스 길이(단어 개수)와 단어 표현(컴퓨터가 데이터를 이해할 수 있도록 수치화한 데이터)의 2차원 배열로 이루어져 있다.
이 2차원 배열은 순환층을 통과하면 1차원 배열로 바뀐다.
즉, 순환층은 사실상 마지막 타임스텝의 은닉 상태만 출력으로 내보내게 된다는 뜻이다.
마치 입력된 시퀀스 길이를 모두 읽어서 정보를 마지막 은닉 상태에 압축하여 전달하는 것처럼 이해할 수 있다.
이처럼 마지막 셀의 출력이 1차원이기 때문에, Flatten 클래스로 출력을 펼칠 필요 없이 그대로 밀집층에 사용할 수 있다.
이번 포스팅에서는 순환 신경망(Recurrent Neural Network)이 무엇인지 알아보는 시간을 가졌다.
순환 신경망은 이전 데이터에 대한 정보를 계속해서 전달할 수 있기 때문에, 문장을 분석하는 모델에 주로 사용된다.
다음 포스팅에서는 순환 신경망을 통해 리뷰의 문장이 긍정적인지, 부정적인 판단하는 모델을 만들어보도록 하자.
👍클릭으로 구독하기👍
(이해가 다소 힘들거나, 틀린 부분이 있다면 댓글 부탁드리겠습니다! 😊)
💖도움이 되셨다면 '구독'과 '공감' 부탁드립니다!💖