딥러닝에서 RNN 의 정확한 의미 및 내부 구조 (얕게 알아보기) - Whitmem
딥러닝에서 RNN 의 정확한 의미 및 내부 구조 (얕게 알아보기)
AI Development Study
2025-04-02 19:46 게시 c5612352aecfa41dcd06

0
0
35
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
과거 인공지능 수업 때 RNN 을 배운적이 있는데, 이 RNN이 하는 역할에 대해서는 이해를 하였으나, 정확히 어떤 원리와 어떤 과정으로 학습이 되는지 제대로 이해하지 못하곤 했었다.
이 게시글에서는 RNN 신경망이 어떻게 순전파되는지 그 과정을 간단하게 알아보고자 한다.
현재 미분 및 오차 역전파를 공부하고 있기에 이 부분을 간단하게 다시 복습하는 것으로, 일부 틀린 내용이 있을 수 있다.
기본적으로 RNN 신경망도 일반 뉴런과 겉보기에는 크게 다른 건 없어보인다. 일반 뉴런 처럼 계산이 들어와 출력을 내보내는 형태로 구성된다.
하지만, 보면 알 수 있듯, 각 뉴런 공간에 임의의 메모리 셀이라는 공간이 존재한다.
메모리 셀에는 이전 연산하였던 아웃풋 값을 보관하고 있어, 이전 시간(t-1)에 입력한 데이터를 현재 시간(t) 데이터와 엮는 역할을 한다고 볼 수 있다.
예를 들어, '나는 너를 정말'이라는 문장을 학습시키고자 할 때, 세 단어는 서로 유기적으로 엮여있음을 알 수 있다. '나는' 다음에 '너를', '너를' 다음에 '정말', 한편 '너를' 다음에 '정말'이 나오는 조건에서, 맨 앞이 '나는' 으로 시작해야하는, 즉 '나는' -> '너를 '-> '정말' 의 순서 관계를 같이 학습시킬 수 있다.
먼저 위 단어들을 내부 임의 코드 또는 임베딩 작업을 통해 부호화한 다음, 이 부호화된 수치 데이터들의 순서 관계를 학습시킨다.
[0, 1] -> [2, 2] -> [3, 1] 이므로, 이 문장 하나를 전처리 작업을 통해 다음과 같이 생성할 수 있다.
[0,0 ] [0, 0] [0, 1] -> [2, 2].
[0,0] [0, 1] [2,2] -> [3, 1].
[0, 1] [2,2] [3,1] -> ...새로운 단어.
즉 나는 이라는 단어가 나온다면, 너를 이라는 단어가 나오게끔, 나는, 너를 이라는 단어가 나온다면 정말이 나오게끔 유도하는 새로운 데이터를 생성할 수 있다.
물론, 위 데이터 셋을 일반적으로 사용하는 비선형 신경망에 학습할 수 있겠지만 위 단어는 단순히 단어의 조합이 아니라, 순서 관계를 가지는 문장이기 때문에 RNN 을 통해 학습하는 것이 좋다.
입력 신경망은 단순히 Linear 신경이라고 가정하고, 중간 RNN 신경이 있다고 가정하자. 이 신경망은 궁극적으로 2개의 입력을 가진다. 그 이유는 임베딩된 차원 결과가 2차원이기 때문이다. 단어의 개수, 단어의 형태 등 각종 단어 데이터를 전처리함으로써 임베딩의 차원수가 2개로 확정된 것이다. 이는 단어의 길이를 의미하지는 않는다.
우선 데이터의 첫 입력에 '나는'이라는 데이터를 넘긴다. 그러면 당연히 RNN 신경으로 가중치와 수치 데이터가 곱해져 넘어갈 것이다. 초반에는 RNN에 존재하는 셀 메모리는 0으로 존재하기에, 0이 곱해져 단순히 신경 가중치만 다음으로 넘어간다.
이 때, 아웃풋 값은 다시 RNN 신경의 (자기 자신에 존재하는) 셀 메모리에 담긴다.
즉, '나는' 이라는 데이터를 담은 RNN까지의 가중치 연산 결과를 셀 메모리에 담고, 다시 앞으로 돌아와 다음 단어 집합을 순전파 한다.
즉 이번에는 '너를'이라는 단어를 넣고 순전파를 한다. 이 과정에서, RNN 의 셀 메모리에 들어있던 이전 '나는' 의 아웃풋 값도 같이 곱셈/덧셈 연산한다. 그리고 이 값이 다시 RNN 의 셀 메모리에 덮어씌우기 된다.
그리고 다시 마지막 단어를 입력에 넣고 순전파하며, 이전 단어 '너를'의 가중치 처릿값을 같이 합 연산하여 다음 뉴런으로 넘긴다. 이렇게 마지막 단어까지 완료해야만 손실 함수를 계산하고 역전파를 수행할 수 있다.
즉, 각각 시점에서 단어를 넣고 RNN 까지의 아웃풋을 RNN 셀 메모리에 다시 담는다. 이 과정을 단어가 끝날 때 까지 반복하면, 단어가 끝나는 마지막 순전파시에는 모든 단어가 순서대로 담긴 뉴런 결괏값 하나가 나오게 되는데 이 값이 비로소 모델의 아웃풋 값이 되는 것이다.
이러한 과정을 기본적으로 다 대 일 이라하는데, 여러 입력을 넣고, 최종 결과 하나를 가져오는 것이다.
입력한 문장의 다음 단어가 무엇인지 파악하거나, 어떤 평가를 수행할 때 주로 사용할 수 있다.
한편, 기울기를 구하고 역전파를 수행하는 방법도 공부하고 있는데, 이 부분은 추후 좀더 명확해지면 정리해 게시하고자 한다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.