순환 신경망
- 시간적으로 연속성이 있는 시퀀스 데이터를 처리하기 위해 고안된 신경망
- 시간의 순서를 딥러닝으로 학습할 수 있는 모델
- 이전 은닉층이 현재 은닉층의 입력이 되면서 반복되는 순환구조
- 기존 네트워크와의 차이점
- 현재까지 입력 데이터를 요약한 정보(메모리)를 갖는다
- 타임 스텝에 걸쳐서 상태를 보존하는 인공신경망 구성 요소를 메모리 셀(memory cell)이라고 함
- 마지막 최종 메모리는 모든 입력의 요약한 정보가 된다
시퀀스-투-시퀀스 (many-to-many)
- 입력시퀀스를 받아 출력 시퀀스를 만듦
ex) 날짜에 따른 주식 가격 예측시퀀스-투-벡터 (many-to-one)
- 입력시퀀스를 네트워크에 주입하고 모든 출력을 무시하여 마지막 값만 출력
ex) 연속된 단어 → 감정 분석벡터-투-시퀀스 (one-to-many)
- 각 타임 스텝에서 하나의 입력 벡터를 반복해서 네트워크에 주입 → 하나의 시퀀스를 출력
ex) 이미지 입력 → 이미지에 대한 캡션 출력인코더-디코더 (many-to-many)
- 시퀀스-투-벡터 + 벡터-투-시퀀스
ex) 한국어 문장 → 벡터 → 영어 문장
RNN의 가중치
순전파: 은닉층에서의 계산
순전파: 출력층에서의 계산
오차 계산
RNN의 오차(E)는 심층 신경망에서 forward feeding 학습과 달리 각 단계(t)마다 오차를 측정 (MSE)
역전파
RNN에서의 역전파는 BPTT를 이용하여 모든 단계마다 처음부터 끝까지 역전파
BPTT: 각 단계(t)마다 오차를 측정하고 이전 단계로 전달하는 것
역전파: 기울기 소실 문제
오차가 멀리 전파될때 계산량이 많아지고 전파되는 기울기의 양이 점차 적어지는 문제점
역전파: 기울기 폭주 문제
큰 기울기가 계속 곱해지면 기울기가 너무 커지는 문제점
단기 기억 문제
- 현상
- 짧은 문장은 잘 학습
- 긴 문장에 대해 학습이 잘 안됨
- 원인
- 기울기 소실
- 기울기 폭주
- 해결 방안
- 장단기 기억 메모리를 추가 → LSTM
(기본 RNN이 갖는 단기 기억 메모리) + (장기 기억 메모리)를 추가한 신경망 구조
- : 현재로 입력되는 단기 기억 정보, hidden state
- : 현재로 입력되는 장기 기억 정보, cell state
은닉층의 각 뉴런에 게이트를 추가해서 장기 기억이 가능하게 함
- 망각 게이트
- 입력 게이트
- 출력 게이트
목적: 과거의 정보를 얼마나 기억할지 (or 얼마나 잊을지) 결정
방법:
1. 과저 정보와 현재 데이터에 가중치를 곱함
2. 1의 값에 sigmoid 활성화 함수를 취함 ()
3. 2의 값을 과거 정보(cell state)에 곱해줌
- 수식
결과: sigmoid의 출력이 0이면 과거 정보는 무시 / 1이면 과거 정보는 온전히 보존
목적: 현재의 정보를 얼마나 기억할 지 (장기기억을 갖는 셀로 얼마만큼 보낼지) 결정
방법:
1. 과거 정보와 현재 데이터에 가중치를 곱
2. 1의 값에 sigmoid 활성화 함수를 취함 ()
3. 새로운 가중합 값에 tanh 활성화 함수를 취함 ()
4. 3을 현재 데이터 보존량에 곱해서 보존량을 결정
5. 결과를 다시 과거의 정보(cell state)와 더함
- 수식
결과: 현재 메모리에 새로운 정보를 반영할지 결정하는 역할을 함
계산한 값이 1이면 입력 𝑥𝑡 가 들어올 수 있도록 허용(open), 계산한 값이 0이면 차단
목적: 과거의 정보와 현재 데이터를 사용해서 뉴런의 출력을 결정
방법:
1. 과거 정보와 현재 데이터에 가중치를 곱
2. 1의 값에 sigmoid 활성화 함수를 취함 ()
3. 2의 값을 과거 정보(cell state)에 tanh 활성화 함수를 적용한 후 곱해서 hidden state 값 결정()
- 수식
결과: 갱신된 메모리의 출력 값을 제어하는 역할을 함
- 계산한 값이 1이면 의미있는 결과로 최종 출력
- 계산한 값이 0이면 해당 연산 출력 X
필요성
양방향 RNN 구조