순차 데이터의 일반적인 표기는 벡터의 요소가 벡터인 형태
대표적인 순차 데이터로는 문자열이 있다.
입력 = "April is the crulest month."
출력 = "4월은 가장 잔인한 달"
어떻게 표현할까?
사람이 사용하는 단어를 모으거나 주어진 말뭉치를 분석해서 단어를 자동 추출하여 구축하는 사전을 사용하여 표현한다.
단어 각각의 빈도수를 세서 차원의 벡터로 표현한다.
그러나 시간성 정보가 사라지므로, 단어의 순서가 중요한 데이터에는 치명적이라는 한계가 존재한다.
해당 단어의 위치만 1로 표현한다.
그러나 단어 가방을 보완하여 순차는 표현할 수 있지만 한 단어를 표현하는데 차원 벡터를 사용해야한다는 비효율적인 부분이 있다. (고차원이 되므로)
단어 간의 유사성(관계성)을 보장할 수 없다는 한계점도 존재한다.
단어 사이의 상호작용을 분석해서 새로운 공간으로 변환한다.
보통의 차원 보다 훨씬 낮은 차원으로 변환시키면서 효율성이 높아진다.
순환 신경망이 갖추어야 할 3가지 필수 기능
기존의 깊은 신경망과 유사하다. 👉 입력층, 은닉층, 출력층을 가진다.
다른 점은 은닉층이 순환 연결을 가진다는 점이다.
순환 연결을 가짐으로써 3가지 필수 기능을 모두 처리할 수 있다!
수식으로는
순환 신경망의 매개변수는
U: 입력층과 은닉층을 연결하는 pd 행렬
W: 은닉층과 은닉층을 연결하는 pp 행렬
V: 은닉층과 출력층을 연결하는 qp 행렬
b,c: bias. 각각 p1 과 q*1 행렬
👉 RNN 학습이란 훈련집합을 최적의 성능으로 예측하는 값을 찾는 일
매 순간 다른 값을 사용하지 않고 같은 값을 고융하고 있다. (매개변수 공유)
왜?
과거에 있었던 정보를 기억하고 있으며 문맥 의존성 측면에서 작동 할 수 있다.
문장이 길어져서 문맥 의존성이 장기의존성이 되면, 그걸 파악해야하는데 RNN은 잘,,
전방 계산과 오류 역전파를 수행한다.
RNN과 DMLP는 입력층, 은닉층, 출력층을 가진다는 점에서는 유사하지만,
RNN은 시간을 고려하고 DMLP는 시간을 고려하지 않는다는 점에서 차이가 있다.
또한,
목적함수 정의에 평균제곱 오차, 교차 엔트로피, 로그우도 중에 선택해서 사용할 수 있다.
(어떤걸 사용해도 상관이 없다)
왼쪽에서 오른쪽으로만 정보가 흐르는 단방향 RNN은 한계가 있다.
👉 양방향 문맥 의존성
관련된 요소가 멀리 떨어진 상황
W 요소가 1보다 작을 때는 경사 소멸, W 요소가 1보다 클때는 경사 폭발이 일어난다는 문제점이 있다.
이러한 문제점은 아래와 같은 이유로 RNN이 DMLP나 CNN보다 심각하다.
1. 긴 입력 샘플이 자주 발생
2. 가중치 공유 때문에 같은 값을 계속 곱함
이를 해결하기 위한 해결책으로 가장 많이 사용되는 것이 LSTM
hidden 요소간에 requirement가 전달될 때, 단순전달을 하게 되면 과거에 있었던 정보가 희석되는 문제가 생기는 것이 일반적인 RNN의 문제였다. (즉, 장기의존성 보장 X)
: [0,1] 사이의 실수 값으로 개폐 정도를 조절한다. ( 이 값은 학습으로 얻음)
👉 학습을 통해 결정
RNN은 은닉층의 정보가 단순 전달되는 형태
LSTM은 메모리 블록, 입력게이트, 출력게이트를 통해 hidden representation을 관리할 수 있음
LSTM 구조에 따라 셀의 연결성이 좋아졌기 때문에 gradiant가 효율적으로 학습된다.
망각 개폐구 -> 입력 개폐구 -> 셀 상태 갱신
LSTM 확장
ouput을 한번 더 사용해서 stacked 된 형태
시간상으로도 깊어지지만, stacked된 LSTM을 통해서 정보를 한번 더 추사오하 시키는것을 통해 출력값을 만든다.
개념은 알겠는데 수식 등을 자세히 보려니까 헷갈리는것 같다..
(BPTT는 아직 물음표