Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Yesterday

Total
05-06 04:14
관리 메뉴

Hey Tech

[Deep Learning] RNN 알고리즘 개념 이해 본문

AI & 빅데이터/머신러닝·딥러닝

[Deep Learning] RNN 알고리즘 개념 이해

Tony Park 2022. 7. 23. 10:23
728x90
반응형

📚 목차

1. RNN 개념
2. RNN 수식
3. RNN 용도

1. RNN 개념

Recurrent Neural Network(RNN)은 자연어 문장과 같이 단어의 순서에 따라 의미가 달라지는 순차 데이터(Sequential Data)를 다룰 때 주로 사용되는 신경망입니다. 따라서 RNN은 단어의 어순에 따라 문장의 의미가 달라지고 앞에 어떤 단어가 쓰였는지 기억해야 뒤에 오는 단어를 예측하는 등의 문제를 풀 때 주로 활용됩니다.

RNN은 Hidden Layer의 노드에서 활성화 함수(Activation Function)를 거쳐 나온 결괏값을 Output Layer로 보내면서 다시 다음 Hidden Layer 노드 계산의 입력값으로 보내는 신경망입니다. 이처럼, 결괏값이 다음 Hidden Layer 노드의 입력값 계산에 보내지는 것을 '순환한다'라고 표현하고, 이러한 신경망을 순환 신경망이라고 부릅니다. 즉, Hidden Layer에서 Activation Function를 지난 값은 오직 Output Layer로만 향하는 피드 포워드 신경망(Feed Forward Neural Network)과는 다른 구조의 신경망입니다.

그림 1. RNN 도식화1

RNN을 도식화하면 위의 그림 1과 같습니다. \(x\)는 Input Layer의 입력 벡터, \(y\)는 Output Layer의 출력 벡터를 의미합니다. 편향(bias) \(b\)는 설명 편의상 생략하겠습니다. 여기서 셀(cell)은 Hidden Layer에서 Activation Function을 거쳐 결과를 내보내는 역할을 합니다. 또한, Cell은 이전 time step에서의 출력값을 기억하는 역할도 하므로 메모리 셀(Memory Cell) 또는 RNN Cell이라고도 부릅니다. 여기서 Cell이 값을 기억한다는 것은 이전 time step에서 Hidden Layer의 메모리 셀의 출력값을 자신의 입력값으로써 재귀적으로(recursively) 사용한다는 것을 의미합니다.

그림 2. RNN 도식화2(출처: https://commons.wikimedia.org/wiki/File:Recurrent_neural_network_unfold.svg)

메모리 셀이 Output Layer 혹은 다음 time step의 메모리 셀에 보내는 값을 Hidden State라고 부릅니다. 즉, \(t\)번째 time step의 메모리 셀은 \((t-1)\)번째 time step에서의 메모리 셀이 보낸 Hidden State를 현재 시점의 Hidden State를 계산하기 위한 입력값으로 활용합니다. RNN을 구체적으로 도식화하면 위의 그림 2와 같습니다. 그림 2의 좌측과 같이 화살표를 재귀 형태로 표현하기도 하지만, 우측과 같이 재귀적 화살표 대신 여러 time step의 layer 구조를 펼쳐서 표현하기도 합니다. 그림 2에서 확인할 수 있듯이, 이전 time step\((t-1)\)에서의 Hidden State\((h_{t-1})\)가 다음 time step\((t)\)에서의 Hidden State 계산을 위한 입력값으로 사용됩니다.

반응형

2. RNN 수식

그림 3. RNN 도식화3

위의 그림 3은 RNN을 수식과 함께 도식화한 것입니다. RNN을 수식과 함께 동작 원리를 더 자세히 알아보겠습니다.

$$ h_{t} = tanh(W_{xh}x_{n} + W_{hh} h_{t-1} + b_{h}) $$

  • \(h_{t}\): \(t\)번째 time step에서의 Hidden State
  • \(W_{xh}\): 현재 입력값에 곱해지는 가중치
  • \(x_{t}\): 입력값
  • \(W_{hh}\): 이전 time step에서의 가중치
  • \(h_{t-1}\):  \((t-1)\)번째 time step에서의 Hidden State
  • \(b_{h}\): 편향
  • \(tanh\): Activation Function 일종인 하이퍼볼릭 탄젠트

수식에서 알 수 있듯이, 현재 \(t\)번째 tiem step에서의 Hidden State를 구할 때 입력값으로 이전 time step(\(t-1\))에서의 Hidden State를 입력값으로 사용하는 것이 특징입니다. 가장 기본적인 RNN을 Vanilla RNN라고 부릅니다. 이 Vanilla RNN은 일반적으로 Activaton Function으로 하이퍼볼릭 탄젠트(\(tanh\))를 사용하는 것이 특징입니다.

728x90

3. RNN 구조

RNN은 입력 벡터와 출력 벡터의 길이에 따라 크게 3가지 구조가 있으며, 구조별 활용 예시를 알아봅니다.

1) 일 대 다(One-to-Many) 구조

그림 4. 일 대 다 구조

  • 이미지 캡셔닝(사진 인식하여 제목 출력) 등 활용

2) 다 대 일(Many-to-One) 구조

그림 5. 다 대 일 구조

  • 감정 분류(긍정/부정), 스팸 메일 분류(스팸/일반) 등에 활용

3) 다 대 다(Many-to-Many) 구조

그림 6. 다 대 다 구조

  • 기계 번역, 챗봇 등 활용

포스팅 내용에 오류가 있을 경우 아래에 댓글 남겨주시면 감사드리겠습니다.
그럼 오늘도 즐거운 하루 보내시길 바랍니다 :)
고맙습니다😊

728x90
반응형
Comments