일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- top_k
- flask
- correlation
- grad-cam
- XAI
- 공분산
- tensorflow text
- session 유지
- GCP
- subdag
- spark udf
- API
- Retry
- login crawling
- hadoop
- requests
- TensorFlow
- Counterfactual Explanations
- gather_nd
- youtube data
- API Gateway
- UDF
- Airflow
- chatGPT
- 상관관계
- integrated gradient
- GenericGBQException
- BigQuery
- 유튜브 API
- airflow subdag
- Today
- Total
데이터과학 삼학년
Sequence Model (RNN, LSTM) 본문
Working with Sequence Model
- sequence는 시계열적인 특성을 가짐
> time에 따라 변해가는 양상을 모델에 표현할 수 있음
- 자연어 처리도 마찬가지로 단어의 순서에 따라 영향을 미치기 때문에 적용할 필요 있음
- 이미지 모델에서는 sequence를 어떻게 적용할까?
> 동영상과 같은 움직임이 들어가 있는 이미지의 경우 적용 가능
- 시퀀스 모델의 타입은 3가지로 볼수 있음
> one to sequence
> sequence to one
> sequence to sequence
- 번역의 문제의 경우, sequence to sequence 로 볼 수 있음
> 번역할 것의 사이즈가 정해져서 사이즈만큼 변환
- 이미지 captioning 경우, one to sequence 인풋이 하나의 이미지가 들어가고 레이블은 길이를 가짐
- 이메일의 경우, sequence to one 모델을 가짐
- 시퀀스 모델을 할때는 sliding window를 얼마나 가져갈지를 결정하는 것이 중요
> preprocess할때 1시간 단위? 1일 단위?, 1주일 단위? 로 할지 결정
- 자기상관성(autocorrelation)을 이용하여 이것이 sequence 모델에 적용할 만한 피처인지 결정
- benchmark (baseline)를 가지고 모델을 구성하는 것이 좋음
>> 결국 들어가는 인풋의 형태가 시계열인지 아닌지가 중요!
Sequences models
- Recurrent Neural Networks
- Gated Recurrent Unit
- 적절한 time lag를 찾는 것은 데이터의 형태에 의존적임
> 얼마나 다음을 예측할 수 있는 것인지
> 샘플 데이터 셋을 이용하여 실험을 해보면서 찾아가는 것이 일반적인 형태
- RNN은 timeseries 데이터의 성격을 받아들일 수 있도록 구성되어 있음
> 이전의 상태를 고려하면서 예측할 수 있도록
> unrolling 같은 셀을 반복하는 것인데 펴놓는 형태로 표현한 것
: 동일한 가중치를 학습시키는 것
출처 : http://dprogrammer.org/rnn-lstm-gru
Recurrent Neural Networks
- 이전 데이터의 모델 통과 아웃풋을 함께 다시 활성화 함수에 통과시키는 것
- shape 비교 : ht = batchsize * neuron 수
xt = batchsize * feature 수(input 수)
wx = feature 수 * neuron 수
wh = neuron수 * neuron 수
b = 1 * neuron 수
- tanh 함수가 사용되는 이유 : -1 ~ +1 → That's why tanh is used to determine candidate values to get added to the internal state.
- negative~positive 사이의 value를 갖는 다른 function을 적용하면 안되나?
> 될거 같긴 한데 tanh function을 가장 일반적으로 사용함
- rnn의 구조 : 보통 하나의 layer(input과 cell이 합쳐진)가 tanh layer를 거쳐 나간다고 생각하면 됨
- state : 마지막 모든 cell을 지난 마지막 output을 의미(H5)
> 위 그림은 한개의 layer를 가진 rnn 을 말하는 것(cell size = neuron수)
Dealing with long sequences
- RNN은 긴 시퀀스의 문장을 다룰때 학습시키기가 힘듦 → 이것을 Long term dependancies 라고 함
- 이런 문제를 해결하기 위해 나온 것이 LSTM(Long-Short Term Memory)
> 정보를 컨트롤하는 방법
Long-Short Term Memory
- 컨베이어 벨트(Ct)에서 얼마나 keep할지 결정(0~1) → ft : forget gate
- 셀스테이트에서 얼마나 keep할지 결정 it : input gate
- 셀스테이트 중에서 얼마나 많이 아웃풋으로 전달하냐 Ot : output gate (⊙ : 행렬곱(내적))
- 각 vector size 비교
- sequence 모델을 적용할때, 데이터셋을 shuffle 하면 안되는 것 아닌가? 왜냐면 shuffle을 하면 sequence의 성격을 잃게 되지 않나?
> shuffle을 할때 어차피 통(단락)으로 오기 때문에 상관없어
- advanced RNN : multiRNNCell 호출로 layer를 늘리는 케이스
- improving loss function
'Machine Learning' 카테고리의 다른 글
tf.keras.callbacks.LearningRateScheduler (1) | 2020.06.24 |
---|---|
Speech to text (Speech Recognition API and PyAudio library) (0) | 2020.06.18 |
Going Faster and Deeper (0) | 2020.06.02 |
Dealing with Data Scarcity (0) | 2020.06.02 |
Image Classification (Linear, DNN, CNN) (0) | 2020.06.02 |