일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Computer Vision
- 딥러닝
- Python
- Neural Radiance Field
- Paper
- ICCV
- pytorch
- 경희대
- 리눅스
- NeRF paper
- 논문 리뷰
- 융합연구
- CVPR
- docker
- panoptic segmentation
- 파이토치
- IROS
- 2022
- paper review
- GAN
- Vae
- Semantic Segmentation
- ICCV 2021
- panoptic nerf
- 논문
- linux
- NERF
- 논문리뷰
- CVPR2023
- Deep Learning
- Today
- Total
윤제로의 제로베이스
장단기 메모리(Long Short-Term Memory, LSTM) 본문
02. 장단기 메모리(Long Short-Term Memory, LSTM)
바닐라 아이스크림이 가장 기본적인 맛을 가진 아이스크림인 것처럼, 앞서 배운 RNN을 가장 단순한 형태의 RNN이라고 하여 바닐라 RNN(Vanilla RNN)이라고 합니다 ...
wikidocs.net
앞서 배운 RNN의 형태를 가장 단순한 형태의 RNN이라고 하며 바닐라 RNN이라고 한다.
1. 바닐라 RNN의 한계
바닐라 RNN은 출력 결과가 이전의 계산 결과에 의존한다.
하지만 바닐라 RNN은 비교적 짧은 시퀀스에 대해서만 효과를 보이는 단점이 있다.
바닐라 RNN의 시점이 길어질수록 앞의 정보가 뒤로 충분히 전달되지 못하는 현상이 발생한다.
즉 뒤로 갈수록 처음의 정보가 손실되고, 시점이 충분히 긴 상황에서는 전체 정보에 대해 첫 정보의 영향력이 거의 없어지기도 한다.
이러한 문제를 장기 의존성 문제(the problem of Long-Term Dependencies)라고 한다.
2. 바닐라 RNN 내부 열어 보기
LSTM에 대해 알아보기 전에 RNN의 내부를 보면 위와 같다.
바닐라 RNN은 x_t와 h_t-1이라는 두개의 입력이 각각의 가중치와 곱해져 메모리 셀의 입력이 된다.
그리고 이를 하이퍼볼릭탄젠트 함수의 입력으로 사용하고 이 값은 은닉층의 출력인 은닉 상태가 된다.
3. LSTM(Long Short-Term Memory)
LSTM은 은닉층의 메모리 셀에 입력 게이트, 망각 게이트, 출력 게이트를 추가하여 불필요한 기억을 지우고, 기억해야 할 것들을 정한다.
위 그림에서 t시점의 셀 상태를 C_t로 표현했다.
셀 상태는 위의 그림에서 윈쪽에서 오른쪽으로 가는 굵은 선이다.
셀 상태 또한 은닉 상태처럼 이전 시점의 셀 상태가 다음 시점의 셀 상태를 구하기 위해 입력으로 사용된다.
은닉 상태값과 셀 상태값을 구하기 위해서 새로 추가 된 3개의 게이트를 사용한다.
각 게이트는 삭제 게이트, 입력 게이트, 출력 게이트 라고 부르며 이 3개의 게이트에는 공통적으로 값들을 조절하는 시그모이드 함수가 존재한다.
(1) 입력 게이트
입력 게이트는 현재 정보를 기억하기 위한 게이트이다.
우선 현재 시점 t의 x값과 입력 게이트로 이어지는 가중치 W_xi를 곱한 값과 이전 시점 t-1의 은닉 상태가 입력 게이트로 이어지는 가중치 W_hi를 곱한 값을 도하여 시그모이드 함수를 지난다.
이를 i_t라고 한다.
그리고 현재 시점 t의 x값과 입력 게이트로 이어지는 W_xi를 곱한 값과 이전 시점 t-1의 은닉 상태가 입력 게이트로 이어지는 가중치 W_hg를 곱한 값을 더하여 하이퍼볼릭탄젠트 함수를 지난다.
리르 g_t라고 한다.
시그모이드 함수를 지나 0과 1사이의 값과 하이퍼볼릭탄젠트 함수를 지나 -1과 1 사이의 값 2개가 나오게 된다.
이 두개의 값을 가지고 선택된 기억할 정보의 양을 구하는데, 구체적으로 어떻게 결정할지는 다음의 셀 상태 수식을 보면 된다.
(2) 삭제 게이트
삭제 게이트는 기억을 삭제하기 위한 게이트이다.
현재 시점 t의 x값과 이전 시점 t-1의 은닉 상태가 시그모이드 함수를 지나 0과 1사이의 값이 나오게 되는데, 이 값이 곧 삭제 과정을 거친 정보의 양이다.
0에 가까울 수록 정보가 많이 삭제 된 것이고 1에 가까울 수록 정보를 온전히 기억한 것이다.
이를 가지고 셀 상태를 구하게 되는데, 구체적으로는 아래의 셀 상태 수식을 보면 된다.
(3) 셀 상태(장기 상태)
셀 상태 C_t를 LSTM에서는 장기 상태라고 부르기도 한다.
입력 게이트에서 구한 i_t와 g_t이 두개의 값에 대해서 원소별 곱을 진행한다.
입력 게이트에서 선택된 기억을 삭제 게이트의 결과값과 더한다.
이 값을 현재 시점 t의 셀 상태라고 하며 이 값은 다음 t+1의 LSTM 셀로 넘겨진다.
삭제 게이트와 입력 게이트의 영향력을 이해해보자.
만약 삭제 게이트의 출력 값인 f_t가 0이 된다면, 이전 시점의 셀 상태값이 현재 상태값을 결정하기 위한 영향력이 0이 되면서 오직 입력 게이트의 결과만이 현재 시점의 셀 상태값을 결저할 수 있게 된다.
이는 삭제 게이트가 완전히 닫히고 입력 게이트를 연 상태를 의미한다.
반대로 입력 게이트의 i_t값이 0이라면, 현재 시점의 셀 상태값은 이전 시점의 셀 상태값에 의존하게 된다.
이는 입력 게이트를 완전히 닫고 삭제 게이트만을 연 상태를 의미한다.
결과적으로 삭제 게이트는 이전 시점의 입력을 얼마나 반영할 것인지를 의미하고, 입력 게이트는 현재 시점의 입력을 얼마나 반영할지를 결정한다.
(4) 출력 게이트와 은닉 상태(단기 상태)
출력 게이트는 현재 시점 t의 x값과 이전 시점 t-1의 은닉 상태가 시그모이드 함수를 지난 값이다.
해당 값은 현재 시접 t의 은닉 상태를 결정하는 일에 쓰이게 된다.
은닉 상태를 단기 상태라고 하기도 한다.
은닉 상태는 장기 상태의 값이 하이퍼볼릭탄젠트 함수를 지나 -1과 1 사이의 값이다.
해당 값은 출력 게이트의 값과 연산되며 값이 걸러지는 효과가 발생한다.
단기 상태의 값은 또한 출력층으로도 향한다.
4. 파이토치의 nn.LSTM()
nn.LSTM(input_dim, hidden_size, batch_fisrt=True)
'Background > Pytorch 기초' 카테고리의 다른 글
단어 단위 RNN - 임베딩 사용 (0) | 2022.01.26 |
---|---|
문자 단위 RNN(Char RNN) (0) | 2022.01.26 |
순환 신경망(Recurrent Neural Network, RNN) (0) | 2022.01.26 |
파이토치의 nn.Embedding() (0) | 2022.01.26 |
글로브(GloVe) (0) | 2022.01.26 |