- 리눅스마스터2급
- datastructure
- Artificial_Intelligence
- cloud_computing
- study
- Univ._Study
- 2023_1st_Semester
- Operating_System
- Linux
- c++
- kubeflow
- Unix_System
- Personal_Study
- 자격증
- codingTest
- Image_classification
- Java
- Python
- app
- SingleProject
- 오블완
- tensorflow
- Algorithm
- C
- programmers
- Baekjoon
- Android
- 티스토리챌린지
- Database_Design
- Kubernetes
코딩 기록 저장소
[딥러닝] 순환 신경망(Recurrent Neural Network, RNN) 본문
목차
1. RNN (Recurrent Neural Network)
01. RNN 개념
- RNN(Recurrent Neural Network)는 가장 기본적인 인공신경망 시퀀스(Sequence) 모델
- 시계열 또는 순차 데이터를 예측하는 딥러닝을 위한 신경망 아키텍처
- 다양한 길이의 순차 데이터로 작업하고 자연 신호 분류, 언어 처리, 비디오 분석 등의 문제를 해결하는 데 특히 효과적임
- 시퀀스를 처리하기 위해 고안된 모델을 시퀀스 모델이라고 하는데 그 중 RNN은 가장 기본적인 인공 신경망 시퀀스 모델
02. RNN의 구조 및 형태
RNN의 구조
- 은닉층의 노드에서 활성화 함수를 통해 나온 결과값을 출력층 방향으로 보내면서, 다시 은닉층 노드에 입력값으로 보내는 특징
- 입력층의 입력 벡터를 x, 출력층의 출력 벡터를 y라고 하고, 은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드를 셀(cell)이라고 함
- 각각의 시점(time step)에서 바로 이전 시점에서의 은닉층의 메모리 셀에서 나온 값을 자신의 입력으로 사용하기 때문에 "메모리 셀" 이라고 부르기도 함 (현재 시점을 t라고 표현함)
- 메모리 셀이 출력층 방향 또는 다음 시점인 t+1의 자신에게 보내는 값을 은닉상태(hidden state)라고 함
- t 시점의 메모리 셀은 t-1 시점의 메모리 셀이 보낸 은닉 상태 값을 t 시점의 은닉 상태 계산을 위한 입력값으로 사용하는 상태
- RNN에서는 입력층을 입력 벡터, 출력층을 출력 벡터, 은닉층에서는 은닉 상태라는 표현을 주로 사용함
RNN의 형태
- 일대다 (one to many)
- 하나의 입력값에 대해 여러개의 시퀀스한 벡터를 출력함
- ex) 이미지 캡셔닝(Image Captioning) - 다대일 (many to one)
- 여러개의 입력값에 대하여 1개의 벡터를 출력함
- ex) 감정분석(Sentiment Analysis) - 다대다 (many to many)
- 여러개의 입력값에 대하여 여러개의 벡터를 출력함
- 시퀀스 투 시퀀스 (Sequence-to-Sequence)라고도 불림
- ex) 문장 번역
RNN 수식
- 현재시점의 출력값을 도출하기 위한 활성화 함수로는 주로 하이퍼볼릭탄젠트 함수(tanh)를 많이 사용함
- 이진 분류에서는 주로 로지스틱 회귀를 사용하여 시그모이드 함수를 사용, 다중 클래스 분류 문제에서는 소프트맥스 함수를 사용
→ 활성화 함수를 사용하는 이유 : 비선형적인 그래프를 그리기 위함
장단점
- 장점
- 임의의 길이의 순차적인 입력을 처리할 수 있음. 입력과 출력의 길이가 유연하기 때문에 다양한 모델을 설계할 수 있음
- 전 timestep에 걸쳐 같은 파라미터를 공유할 수 있음. 긴 입력값이 들어와도 모델 크기가 증가하지 않음 - 단점
- 이전 timestep이 모두 계산되어야 현재 timestep을 계산할 수 있어 다소 속도가 느림
- 기울기 소실/발산 현상
- 장기의존성 문제 (Long-Term Dependency)
2. LSTM (Long Short Term Memory)
01. LSTM 개념
- RNN의 한 종류로 기존 RNN의 문제를 해결하기 위해 고안된 구조
→ "메모리 셀(Cell)"이라는 구조를 통해 정보의 저장과 삭제를 조절
→ 불필요한 정보를 잊고, 중요한 정보는 오래 보존할 수 있도록 설계
- 이전 정보를 오랫동안 기억할 수 있는 메모리 셀을 가지고 있으며, 이를 통해 긴 시퀀스 데이터를 처리할 수 있음
02. LSTM의 구조 및 형태
LSTM의 구조
- hidden state만이 아니라 cell state가 있으며 Forget gate, Input gate, Output gate를 통해 계산이 이루어짐
- 어떤 정보를 잊을지 유지할지를 선택해 long term과 short term에 대한 정보를 고려할 수 있음
- 게이트는 시그모이드(σ) 함수와 곱셈 연산을 통해 정보를 통과할지, 막을지를 결정함
- 셀 상태(Cell State)
- LSTM의 핵심 메모리 역할
- 전체 시퀀스에 걸쳐 정보를 운반하면서, 게이트에 의해 업데이트되거나 유지됨 - 게이트(Gates)
- 망각 게이트(Forget Gate) : 과거 정보를 잊을지 말지 결정하는 과정
- 입력 게이트(Input Gate) : 현재 정보를 저장할지 결정하는 과정
- 출력 게이트(Output Gate) : 어떤 출력값을 출력할지 결정하는 과정
LSTM의 형태
- LSTM의 한 시점 t에서의 동작 과정
- 망각 게이트 (Forget Gate)
- 과거 정보를 기억할지 잊을지를 결정하는 단계
- 현재 시점 t의 x값과 이전 시점 t-1의 은닉 상태가 시그모이드 함수를 지나게 됨
- 시그모이드 함수를 지나면 0과 1 사이의 값이 나옴 이 값이 곧 삭제 과정을 거친 정보의 양
- 0에 가까울수록 정보가 많이 삭제된 것이고 1에 가까울수록 정보를 온전히 기억한 것
- forget gate의 연산으로 나온 f(t)는 '과거 정보에 대해서 얼마나 잊었냐/기억하냐를 가지고 있는 값' - 입력 게이트 (Input Gate)
- 현재 정보를 잊거나 기억하기 위한 gate
- 현재 시점 t의 x값과 입력 게이트로 이어지는 가중치 W(xi)를 곱한 값과, 이전 시점 t-1의 은닉 상태가 입력 게이트로 이어지는 가중치 W(hi)를 곱한 값을 더하여 시그모이드 함수를 지나는데 이를 i(t)라고 함
- 그리고 현재 시점 t의 x값과 입력 게이트로 이어지는 가중치 W(xi)를 곱한 값과 이전 시점 t-1의 은닉 상태가 입력 게이트로 이어지는 가중치 W(hg)를 곱한 값을 더하여 하이퍼볼릭탄젠트 함수를 지나는데 이를 g(t)라고 함
- 시그모이드 값은 0~1 사이의 값을, tanh는 -1~1 사이의 값을 갖기 때문에 0<i<1, -1<g<1을 만족
- i(t)는 forget gate와 마찬가지로 0에 가까울수록 많은 정보를 삭제하는 것을 의미
- 반면 g(t)는 -1~1 사이의 값을 갖는데 나중에 현재 정보를 cell state에 얼마나 더할지를 결정하는 역할 - 셀 상태 업데이트 (Cell State Update)
- 입력 게이트에서 구한 i(t), g(t)에 대해서 원소별 곱(entrywise product)을 진행
원소별 곱 : 같은 크기의 두 행렬이 있을 때 같은 위치의 성분끼리 곱하는 것
- f(t)*C(t-1)의 계산을 통해 이전 시점의 cell 정보를 얼마나 유지할지를 구함
- i(t)*g(t)를 통해 현재 기억할 정보를 구함
- '과거에서 유지할 정보' + '현재에서 유지할 정보'를 통해 현재 시점의 cell state를 업데이트 함
- 이 값은 다음 t+1 시점의 LSTM 셀로 넘겨짐 - 출력 게이트 (Output Gate)
- 어떤 출력값을 출력할지 결정하는 과정
- Cell 상태에 기반을 두지만 Filtered된 버전
- Sigmoid층을 동작해서 어떤 부분을 출력할지 결정
- tanh와 sigmoid 출력 게이트와 곱함
3. GRU (Gated Recurrent Units)
01. GRU 개념
- RNN 계열의 또 다른 신경망 모델
- LSTM과 비슷한 역할을 하지만 구조가 더 단순함
- GRU는 장기 의존성 문제를 해결하기 위해 LSTM의 일부 기능을 제거하고, 하나의 업데이트 게이트와 리셋 게이트로 구성됨
- 이로 인해 LSTM보다 계산이 간단하고 학습이 빠름
02. GRU의 구조 및 형태
GRU의 구조
- 내부 메모리 값이 외부에서 보게되는 hidden state 값과 다르지 않음. LSTM에 있는 출력 게이트가 없음
- 입력 게이트와 망각 게이트가 업데이트 게이트 z로 합쳐졌고, 리셋 게이트 r은 이전 hidden state 값에 바로 적용
- 따라서, LSTM의 망각 게이트의 역할이 r과 z에 나눠졌다고 생각할 수 있음
- 출력값을 계산할 때 추가적인 비선형 함수를 적용하지 않음
- 게이트(Gates)
- 리셋 게이트(Reset Gate) : 지난 정보를 얼마나 버릴지 결정
- 업데이트 게이트(Update Gate) : 이번 정보를 얼마나 반영할지 결정
GRU의 형태
- Rt : Reset Gate
- 지난 정보를 얼마나 버릴지 결정함
- 현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wr와 내적
- 전 시점의 hiddenstate ht-1는 그 시점의 가중치 Ur와 내적
- 마지막으로 두 계산이 더해져 sigmoid 함수에 입력 → 결과는 0~1사이의 값 - Zt : Update Gate
- 이번 정보를 얼마나 반영할지 결정함
- 현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wz와 내적
- 전 시점의 hiddenstate ht-1는 그 시점의 가중치 Uz와 내적
- 마지막으로 두 계산이 더해져 sigmoid 함수에 입력 → 결과는 0~1사이의 값 - ~h : 현재 시점에 과거의 메모리를 얼마나 사용할건지
- 현재 시점의 입력값 (xt)가 입력되면 그 시점의 가중치 Wh와 내적
- 전 시점의 hiddenstate ht-1는 그 시점의 가중치 Uh와 내적하고 Rt(지난 정보 버림값)와 성분 곱
- 마지막으로 두 계산이 더해져 tanh 함수에 입력
→ Rt, Zt 각각 현시점 인풋 Xt와 이전시점 hidden state ht-1을 weight와 곱한뒤 sigmoid 통과 시키는 구조
다른 점은 연산되는 weight matrix 값이 다르다는 것 - h : 최종 메모리 정보
- update gate 출력값 Zt (이전정보 얼마나 반영) 와 이전시점 hidden state ht-1를 성분 곱
- update gate에서 버리는 값인 1-Zt (이전정보 얼마나 안반영) 와 현재시점 hidden state ht 을 성분 곱
참고한 링크
'개인 공부 > 인공지능' 카테고리의 다른 글
[딥러닝] 대규모 언어 모델(LLM) (0) | 2025.08.26 |
---|---|
[kaggle/Flask] 견종 분류 모델 웹에 구현하기 (1) | 2023.10.04 |
[kaggle/TensorFlow] 견종 이미지 분류 모델 구현 - 2 (0) | 2023.09.26 |
[kaggle/TensorFlow] 견종 이미지 분류 모델 구현 - 1 (0) | 2023.09.26 |
[GPU설정] CUDA 환경 구성 (Tensorflow, PyTorch) (1) | 2023.09.25 |