[BoostCamp] DAY17 NLP#2
[BoostCamp] DAY17 NLP#2
1. RNN and Language Model
Types of RNN
- One-to-one
입출력이 하나인 경우를 말한다.
sequential, timestamp로 이루어진 데이터가 아닌 단일한 데이터로 input, output을 사용한다.
- one-to-many
sequential, timestamp로 이루어 지지 않은 단일한 input data로 sequential한 output을 가지고 오는 경우를 말한다.
- ex) Image Captioning
sequential한 데이터를 input으로 입력해야하는 경우, 나머지 input은 0으로 입력해주면 된다.
- many-to-one
sequential한 data를 input으로 받은 후에 최종 결과를 마지막 step에 return 해주는 경우를 말한다.
- ex) Sentiment Classification
- many-to-many
- first case
input을 다 읽은 후 output을 return 해준다.
-
ex) machine translation
-
second case
input이 주어질 때마다 output을 return 하는 형태도 존재한다. (실시간 성이 필요한 경우)
- ex) video classification on frame level
Character level Language Model
언어 모델?
주어진 문자열, 단어 순서를 기반으로 다음 단어를 예측하는 것을 Task
How to training?
- character level의 사전을 구축한다.
- 각각의 chatacter를 one-hot vector로 표현이 가능하다.
- 단어가 주어지면, 주어진 단어를 character 단위로 쪼개어 입력할때, 다음에 나올 charater를 예즉하는 output이 나올 수 있도록한다.
- 그림과 같이 hello라는 단어를 character단위로 쪼개어 본다면 h, e, l, l을 순서로 input이 입력되게 된다.
- 그러면, 우리는 h가 입력됐을 때 e가 반환되고
- e가 입력됐을 때 l이 반환되는 model을 기대한다.
- input들은 RNN의 hidden layer를 통해 training을 한다.
- h(t-1)즉, 이전에 학습한 결과 값 + 현재 input을 기반으로 학습을 하여 다음에 나올 character를 예측하도록 한다.
- 이제 hidden layer를 통해 학습되어 나온 output값을 통해 다음에 나올 character를 찾아낸다.
- 각 timestamp 마다 다음에 나올 character를 예측한다.
- outputlayer를 통해 값을 예측한다.
- output vector는 기존에 정의된 사전의 크기와 동일하다.
- 결과 값에서 제일 높은 확률을 가진 character를 가져오기 위해 softmax를 통해 그 값을 가져온다.
- 이제 원하는 결과 값을 가지기 위해 계속해서 training을 해준다.
처음 넣은 데이터값의 return 값을 그 다음 timestamp의 input값으로 활용한다면 무한정으로 학습이 가능하다.
주식 값 예측…? 셰익스피어 글쓰기 참고할 블로그
Backpropagation through time (BPTT)
- 매 timestep마다 주어진 character에서 발생된 hidden state vaetor-> output layer를 통한 예측값과 label값을 비교하여 loss값을 구한다.
- Wxh : input layer에서 hidden layer로 값을 넘겨줄 때 가중치
- Whh : 이전 input들에 대한 연산값을 현재 input값과 연산될 때, 이전 값에 가해지는 가중치
- Why : hidden state에 결과 값을 output layer에 넘겨줄 때 가중치
- BPTT는 이러한 Wxh, Whh, Why을 알맞게 튜닝하기 위해 연산한다.
- input이 너무 길면 자원이 부족해질 수 있는 문제가 생긴다.
- sequence를 나누어서 학습하자.
RNN에는 좋기만 할까??
- 문제점이 존재한다. 그 문제점에 대해 알아보자.
RNN을 간단히 그림으로 나타내면 아래와 같다.
그러면 이제 위의 그림을 식으로 나타내어 생각해보자.
위의 식을 확인해본다면, Backpropagation을 할때,
- W의 절대값이 1이하이면 계속해서 곱한다면 기울기가 0에 가까워져 Gradient Vanshing이 야기될 수 있다.
- W의 절대값이 1이하이면 계속해서 곱한다면 기울기가 inf에 가까워져 Gradient Exploding이 야기될 수 있다.
2. LSTM and GRU
Long Short Term Memory (LSTM)
- IDEA : transformation없이 직관적인 cell state 정보 전달
- Original RNN에서 Long Term Dependency를 해결한 Model이다.
- Original RNN의 Gradient Vanshing과 Gradient Exploding을 해결해준다.
- hidden state를 단기기억을 담당하는 소자로 생각할 수 있다.
- 위의 수식과 같이 LSTM에서는 Ct-1이라는 값이 더 추가해서 연산된다.
- Ct-1 : Cell state vector
- Cell state vector가 hidden state vector보다 완성된 정보를 가지고 있다.
- hidden state vector는 Cell state vector를 한번더 가공해서 노출할 필요가 있는 정보만을 남긴 Vector이다.
How Training?
- Xt와 Ht-1을 입력으로 받아서 vector를 선형 변환한 후, output vector를 분할 해서 각각의 vector를 sigmod로 계산하는데, 마지막 값은 tanh로 연산을 한다. 각각의 연산된 vector를 아래와 같이 명명한다.
- i : input gate
- f: forget gate
- o : output gate
- g : gate gate
- 해당 vector들은 cell state vector, hidden state vector를 계산하기까지 사용되는 중간 결과물로써 사용이 된다.
- i, f, o는 sigmoid 함수를 통해 연산되기에 0~1의 가진다.
- 즉, 원래 값의 일부를 가지도록 해주는 역할을 한다.
- g의 값은 -1 ~ 1의 값을 가진다. 즉, 현재 timestep에서 유의미한 값을 가지도록 해준다.
1. 얼마나 많은 정보가 cell state로부터 흘러갈지 제어하기위해 gate를 사용한다.
- 전 timestep에서 넘어온 Ct-1을 적절하게 변환해서 중간 결과물인 i, f, o, g를 만들어 낸다.
2. Forget gate?
- 이전 timestep에서 넘어온 값을 얼마나 잊을지, 얼마나 기억할지 계산하는 gate이다.
3. Gate Gate?
- 이전 cell state vector를 f를 통해 적당한 비율로 정보를 잊게 만들어 왔을 때,
- 해당 연산에서는 해당 state에서 들어온 input data를 적당한 비율로 기억을해서 해당 state에서의 cell state vector를 만들어 낸다.
4. Output Gate and Hidden State vector
- Cell state vector가 가지던 값에서 적절한 비율로 그 값을 적게 만들어서 hidden state vector를 만든다.
- Ct는 기억해야하는 모든 정보를 압축해서 가지고 있다.
- 반면에 ht는 현재 timestep에서 직접적으로 필요한 정보만을 가진다.
Gated Recurrent Unit (GRU)
- LSTM을 경량화 해서 더 빠른 속도와 적은 메모리를 사용하는 Model이다.
- LSTM의 cell state vector와 hidden state vector를 통합하여 hidden state vector만을 사용한다.
- LSTM과 동작 원리가 매우 비슷하다.
3. Plus Question
-
1 BPTT 이외에 RNN/LSTM/GRU의 구조를 유지하면서 gradient vanishing/exploding 문제를 완화할 수 있는 방법이 있는지 찾아보자.
-
2 RNN/LSTM/GRU 기반의 Language Model에서 초반 time step의 정보를 전달하기 어려운 점을 완화할 수 있는 방법을 찾아보자.
4. 이모저모
- 강의
- 오늘은 자연어 처리 model인 LSTM과 GRU에 대해 배웠다.
- RNN을 자연어 처리뿐만아니라 이미지 학습도 가능하다는 것을 들었는데
- 오늘 배운 LSTM을 활용하여 이미지 분류를 해보아야겠다.
- 피어세션
댓글남기기