순환 신경망은 과거와 현재 입력에 의해 결정되는 인과 구조를 갖고 있으며, 이는 현재 상태가 이전 상태에 의해 영향을 받을 수 있다는 것을 의미합니다.
일부 응용에서는 신경망의 출력이 전체 입력 순차열에 의존할 수 있습니다. 예를 들어, 음성 인식에서 현재 음소를 정확히 해석하려면 이후 음소를 고려해야 할 수 있습니다. 때로는 더 나아가 인접한 단어 간의 언어적 의존 관계를 고려하여 미래 입력까지 고려해야 할 수도 있습니다. 따라서 여러 가능한 단어가 있는 경우, 과거뿐만 아니라 미래의 입력도 고려해야 할 수 있습니다.
양방향 순환 신경망은 이러한 요구를 충족시키기 위해 고안되었습니다. 양방향 RNN은 필기 및 음성 인식, 생물정보학 등 여러 응용 분야에서 큰 성과를 거두었습니다.
양뱡향 순환 신경망의 성과
양방향 RNN은 시간순 RNN과 역시간순 RNN을 결합한 구조로, 순차열의 첫 요소부터 시작하여 시간을 따라 진행하는 방식과 순차열의 마지막 요소부터 시작하여 역으로 시간을 거슬러 올라가는 방식을 결합합니다. 이를 통해 시간 t 근처의 입력값에 가장 민감하게 반응하는 표현을 계산할 수 있습니다. 일반적인 RNN이나 합성곱 신경망은 t를 중심으로 한 고정 크기의 구간을 지정하여 이러한 표현을 계산해야 하지만, 양방향 RNN에서는 이러한 제약이 없습니다.
2차원 입력을 다루는 양방향 순환 신경망
이러한 접근은 자연스럽게 2차원 입력으로 확장될 수 있습니다. 이 경우 상하좌우 방향 각각 하나씩 총 네 개의 부분 RNN이 필요합니다. 이를 통해 2차원 격자의 각 점에서 출력은 주로 국소 정보를 포착하면서도 더 멀리 떨어진 입력도 고려하는 표현을 계산할 수 있습니다. 이미지에 대한 RNN은 합성곱 신경망과 비교했을 때 계산 비용이 많이 들지만, 대신 같은 특징 지도 안에 있는 특징들 사이의 장거리 잠재적 상호작용을 잡아낼 수 있는 장점이 있습니다. 실제로 이러한 RNN에 대한 순전파 공식을 변형하면, 각 층에 대한 상향 입력을 계산하기 위해 합성곱을 이용하여 각 층에 대한 순환 전파를 수행하기 전에 드러납니다.
가변 길이 순차열을 처리하는 RNN의 아키텍처
RNN에서는 보통 입력을 문맥이라고 합니다. RNN의 목표는 이러한 문맥을 기반으로 한 표현을 만들어 내는 것입니다. 이 문맥은 입력 순차열을 요약하는 하나의 벡터일 수도 있고, 그러한 벡터들의 순차열일 수도 있습니다.
2014년에 가변 길이 순차열을 또 다른 가변 길이 순차열로 사상하는 RNN의 가장 간단한 아키텍처가 처음 제시되었습니다. 이후 이와는 독립적으로 개발된 아키텍처가 등장했는데, 이는 현재 수준의 기계 번역을 가능하게 한 최초의 접근 방식입니다. 전자는 다른 기계 번역 시스템이 생성한 제안들에 점수를 매기는 방식이었지만, 후자는 독립적인 순환 신경망으로 직접 번역문을 생성합니다. 하나는 부호기 복호기 아키텍처이고 다른 하나는 순차열 대 순차열입니다.
이러한 접근의 기본 아이디어는 간단합니다. 부호기 RNN(또는 입력 RNN)은 입력 순차열을 처리합니다. 이 부호기는 보통 문맥을 산출하는데, 대개는 부호기의 마지막 은닉 상태의 간단한 함수입니다. 반면, 복호기 RNN(또는 출력 RNN)은 고정 길이 벡터를 조건으로 하여 출력 순차열을 생성합니다.
문맥이 하나의 벡터일 때, 복호기 RNN은 벡터 대 순차열 RNN입니다. 벡터 대 순차열 RNN이 입력받는 방식은 적어도 두 가지가 있습니다. 첫 번째는 입력을 RNN의 초기 상태로 돌리는 것이고, 두 번째는 입력을 각 시간 단계에서의 은닉 단위들에 연결하는 것입니다. 두 방법을 결합해서 사용할 수도 있습니다. 이 아키텍처에서 부호기의 은닉층과 복호기의 은닉층 크기가 같아야 한다는 제약은 없습니다.
RNN의 계산 블록
대부분의 RNN은 주로 세 가지 블록으로 나눌 수 있는 계산을 수행합니다.
1. 입력에서 은닉 상태로의 변환
2. 이전 은닉 상태에서 다음 은닉 상태로의 변환
3. 은닉 상태에서 출력으로의 변환
RNN 아키텍처에서는 이 세 블록 각각에 하나의 가중치 행렬이 연관되어 있습니다. 다시 말해, 신경망을 펼쳤을 때 각 블록은 하나의 얕은 변환에 대응됩니다. 여기서 얕은 변환은 심층 MLP의 층 하나로 표현할 수 있는 변환을 의미합니다. 이러한 변환은 일반적으로 학습된 어파인 변환 다음에 고정된 비선형성을 적용하는 형태로 나타납니다.
재귀 신경망의 일반화
재귀 신경망은 순환 신경망의 또 다른 일반화로 볼 수 있습니다. 재귀 신경망은 RNN과는 다른 계산 그래프를 사용하며, RNN의 계산 그래프가 사슬 형태지만, 재귀 신경망의 계산 그래프는 깊은 트리 형태입니다. 재귀 신경망은 1990년에 처음 소개되었으며, 이후 2011년에는 추론 학습에 대한 재귀 신경망의 잠재적인 용도를 소개했습니다. 재귀 신경망은 자료구조를 신경망의 입력으로 사용하여 처리하는 응용 분야뿐만 아니라, 자연어 처리와 컴퓨터 비전 분야에서도 성공적으로 적용되었습니다.
재귀 신경망은 순환 신경망과 비교할 때 한 가지 명백한 장점을 가지고 있습니다. 순차열의 길이가 n이라고 할 때, 순환 신경망의 깊이는 n이지만, 재귀 신경망의 깊이는 O(log n)에 불과합니다. 이러한 장점은 장기 의존관계를 다루는 데 도움이 될 수 있습니다.
재귀 신경망에서 정답이 없는 문제 중 하나는 트리의 구조를 어떻게 하는가입니다. 한 가지 옵션은 단순히 자료에 의존하지 않는 트리 구조를 사용하는 것입니다. 그러나 응용에 따라서는 외부 요인에 근거해서 적절한 트리 구조를 선택하는 것이 바람직할 수도 있습니다.
결론
양방향 순환 신경망은 과거와 미래 입력을 고려하여 시간적 구조를 이해하고, 가변 길이 순차열을 효과적으로 처리할 수 있습니다. 특히, 이러한 구조는 음성 및 문자 인식, 생물정보학 등 다양한 분야에서 성과를 거두며, 장기 의존 관계를 처리하는 데 장점을 가집니다. 또한, 재귀 신경망과 비교하여 계산 비용 측면에서 효율적이며, 다양한 응용 분야에서 활용될 수 있는 가능성을 보여줍니다.