본 글은 네이버 부스트 캠프 AI Tech 기간동안
개인적으로 배운 내용들을 주단위로 정리한 글입니다
본 글의 내용은 새롭게 알게 된 내용을 중심으로 정리하였고
복습 중요도를 선정해서 정리하였습니다
✅ Week 3
목차
- RNN
- LSTM
- GRU
✅ Intro
오늘 도비와 함께 배울 내용 3줄 요약
- RNN ?
- LSTM ?
- GRU ?
✅1. RNN
What is RNN?
RNN은 Recurrent Neural Networks로
히든 노드가 방향을 가진 엣지로 연결되어 순환구조를 이루는 신경망이다
여기서 핵심은 순환구조를 이룬다는 것인데
이는 Sequential Data를 다루기 위해서이다
그럼 우선 RNN을 다루기 전에 Squence Data에 대한 이해가 필요하다
🔥Sequential Data
Sequential Data는 쉽게 말해서 우리가 사용하는 말, 문장, 음악, 소리 처럼
순서가 있는 데이터이다
만약 이 순서가 변화하거나 길이가 달라진다면 전혀 다른 의미가 될 수있다
즉, Sequential Data에서 중요한 것은 순서이다
그렇다면 Sequential Data는 어떻게 다루어야 할까?
⭐Sequential Data는 받아들여야하는 입력의 차원을 알 수 없기 때문에 - 쉽게 말하자면 우리 말을 예로 들었을 때 시작 지점에서 문장의 전체 길이를 알 수 없고, 또한 같은 의미를 가진 문장이라도 길이가 다를 수있기 때문에 input 차원이 달라진다
따라서 기존의 Fully Connected 방식을 적용하기가 어렵다
그럼 무슨 방법을 사용해야할까?
가장 간단한 접근법이 Markov model first-roder autoregressive model 방식이다
쉽게 설명하자면 과거의 몇개만 사용할지 정해서 이를 통해서 현재를 예측하는것이다
즉, 과거를 보는 수를 고정하는 것이다
하지만 이러한 방법은 현실에서 적용되기 어렵다
예를 들어서 우리가 수능 점수를 예측할 때 Markov model의 방식을 적용한다면
우리의 수능점수는 전날 공부에만 의존하게 되는 이상한? 결과를 낳기 때문이다
따라서 이는 비현실적이고 예측할 수 있는 범위의 한계가 분명한다
여기서 조금 발전한 것이 Latent autoregressive model방식이다
이는 중간에 hidden state를 넣어서 과거의 정보를 요약해서 다음 output은 hidden state에 의존하게 한다
이런 Latent Autoregressive를 조금 더 쉽게 표현하고 구현한 것이 RNN인 것이다
다시 RNN으로 돌아와 RNN에 대해서 알아보자
RNN을 쉽게 표현하자면 시간순서대로 풀어나가는 모델이다
X에서 만들어진 정보가 X+1 시점으로 들어가고 X + 1에서 만들어진 정보가 X+2로 들어가는 구조이다
이렇게 들어가는 정보들이 인풋과 함쳐져 output을 출력한다
RNN의 장점이라면 시퀀스의 길이에 관계없이 인풋과 아웃풋을 받아 들일 수 있다는 장점이 있다
RNN을 활용해서 번역을 하는 예시를 살펴보자
input layer로 들어가는 값은 one-hot encoding 된 값들이다
이를 input 값에 넣고 hidden layer의 W와 연산을 통해서 output이 나오고 가중치 업데이트
다음 input 값을 넣고 hidden layer의 W와 연산을 통해서 output 이런식으로 가중치를 공유하면서
수정해 나가는 방식이다
즉, 모든 시점의 state에서 parameter가 동일하게 적용된다 - 이를 역전파로 업데이트 해주는 것이
따라서 사실상 RNN을 넓게 펴서 살펴보면 Fully Connected Layer를 계속 반복해 주는 것이다
따라서 RNN의 연산은 곱연산의 형태를 가지게된다
RNN의 단점
곱연산이라고?
무언가가 떠오른다
곱연산은 확실한 단점을 가진다
바로 Vanishing / exploding 문제이다
모델이 깊어질 수록 초기의 값이 뒤에 나오는 미래의 값에 영향을 조금만 미치게 되는 문제가 발생할 수 있고
ReLU와 같은 활성화 함수를 사용하면 곱연산때문에 계속해서 값이 커져 exploding해서 학습이 잘 되지 않는 결과를 낳을 수 있다
따라서 RNN에서는 tahn의 활성화 함수를 사용한다
결국 이러한 Short-term dependencies의 단점 때문에 RNN의 구조를 변경해서
Long-term dependencies를 할 수있는 LSTM이 등장하게 된 것이다
✅2. LSTM - Long Short Term Memory
What is LSTM?
LSTM은 앞에서 말했듯이 RNN의 gradient vanishing/exploding을 해결하기 위해서 등장한 모델이다
아래의 사진에서 확인 할 수 있듯이 구조가 조금더 복잡해졌다
이를 조금 더 자세히 나누어서 살펴보면
forget gate
input gate
Updatae Cell
ouput gate가 있다
🔥forget gate
forget gate의 경우 cell state에서 버릴 정보를 선택한다
sigmoid를 지나기 때문에 0, 1값을 갖게 되고 결국 어떤 것을 버릴지 살릴 지를 결정하게 되는 것이다
🔥input gate
input gate의 경우 새롭게 들어온 정보중에 어떤 정보를 올릴지 말지 결정해준다
sigmoid를 활용해서 i_{t}라는 정보를 만들고
tahn를 지나 C_{t} 틸다를 만들어 이를 곱해서 새롭게 cell state에 업데이트 해준다
🔥Update cell
Update cell의 경우 forget gate에서 sigmoid를 통과해 만들어진 값과 C_{t-1}을 곱해서 정보를 선택해주고
여기에 input gate에서 만들어진 값을 더해줌으로 cell을 업데이트한다
🔥ouput gate
마지막으로 ouput gate는 input에 sigmoid를 통과시켜 업데이트된 Cell state에 tanh을 적용해 두 값을 곱해서 output을 뽑아내고 이를 아웃풋과 다음 hidden state으로 흘러 보낸다
LSTM의 단점
하지만 이러한 LSTM의 경우 모델의 파라미터가 많기 때문에 계산 시간이 너무 오래걸린다
복잡한 구조만 봐도 이해가 된다..
따라서 이러한 문제점을 개선해서 계산 시간을 줄이는 모델이 등장하게 되었는데
이것이 GRU 이다
✅3. GRU - Gated Recurrent Unit
What is GRU?
GRU는 LSTM의 단점인 파라미터 수를 개선하기 위해서 만들어진 모델이다
-참고로 뉴욕대의 조경현 교수님이 만드셨다
GRU의 경우 LSTM과 비교하자면
Update gate, Reset gate로 구조를 간편화 시겼다
🔥Reset gate
Reset gate의 경우 이전 은닉층의 값과 이전은닉층의 값을 통해 이를 sigmoid 함수를 지나서 이전 은닉층에 곱해줘서
잊을 정보를 선택한다
🔥Update gate
그리고 Update gate는 LSTM의 input gate와 update gate를 합쳐놓은듯한 구조로 과거 정보와 새로운 정보의 비율을 정해서 이를 h에 업데이트 해준다
GRU 같은 경우에는 한줄로 요약하자면
LSTM보다 적은 파라미터로 비슷한 성능을 낼 수 있다는 장점을 보여주었다
이러한 RNN 계열의 모델들이 새로운 구조를 만들면서 발전을 했지만
아쉽게도 Long term dependency 문제를 해결하지 못한다는 치명적인 문제점을 보여주었다
결국 이러한 한계 때문에 기계번역은 어느 수준에 머무르는 한계를 보였었는데
2017 "Attention All you need"가 등장하게 됨으로 transformer라는 새로운 방법론이 주류가 되었다
사실 RNN 계열은 요즘 잘 사용되지 않는다 - NLP에서
또한 transformer는 NLP 뿐만 아니라 최근에 VIT 같이 이미지 task와 같이
다른 분야에서도 주류가 되어가고 있다
오늘 학습정리 2편에서는 이러한 transformer 구조에 대해서 살펴보도록 하겠다
🔥🔥🔥
'네이버 부스트캠프 🔗 > ⭐주간 학습 정리' 카테고리의 다른 글
[네이버 부스트 캠프 AI Tech] Generative Model (0) | 2023.03.22 |
---|---|
[네이버 부스트 캠프 AI Tech] Transformer (0) | 2023.03.21 |
[네이버 부스트 캠프 AI Tech] CNN Models & CNN Task (0) | 2023.03.20 |
[네이버 부스트 캠프 AI Tech] Model Optimizer & Regularization (0) | 2023.03.20 |
[부스트 캠프]Week 2 회고 및 Week 3 목표 정리 (0) | 2023.03.20 |