개요
- 책을 보고 공부한 내용을 정리합니다.
딥러닝 텐서플로 교과서
- 저자 서지영님
- 길벗 출판사
코드 출처
https://github.com/gilbutITbook/080263
7. 시계열 분석
7.1 시계열 문제
- 시계열 분석이란 특정 대상의 시간에 따라 변하는 데이터를 사용하여 추이를 분석하는 것
- 예를 들어 주가/환율 변동 및 기온/습도 변화 등
- 추세 파악, 향후 전망 예측
시계열 형태는 데이터 변동 유형에 따라 불규칙 변동, 추세 변동, 순환 변동, 계절 변동으로 구분
1. 불규칙 변동(irregular variation) : 규칙성이 없어 예측 불가능하고 우연적으로 발생하는 변동
- 전쟁, 홍수, 화재, 지진
1. 추세 변동(trend variation) : 장기적인 변화 추세
- 추세란 장기간에 걸쳐 지속적으로 증가. 감소하거나 또는 일정한 상태(stationary)를 유지하려는 성향, 짧은 기간 동안에는 추세 변동을 찾기 어려운 단점이 있음
- 국내총생산, 인구증가율
1. 순환 변동(cyclical variation) : 2~3년 정도의 일정한 기간을 주기로 순환적으로 나타나는 변동
- 1년 이내 주기로 곡선을 그림, 추세 변동에 따라 변동하는 것
- 경기 변동이 대표적
1. 계절 변동(seasonal variation) : 보통 계절적 영향과 사회적 관습에 따라 1년 주기로 발생하는 것
💡 결국 시계열 데이터는 규치적 시계열과 불규칙적 시계열로 나눔
Q. 시계열 데이터를 잘 분석한다는 것??
- 불규칙성을 갖는 시계열 데이터에 특정한 기법이나 모델을 적용해 규칙적 패턴을 찾거나 예측하는 것
- 불규칙적 시계열 데이터에 규칙성을 부여하는 방법으로 AR, MR, ARMA, ARIMA
- 하지만 최근에는 딥러닝을 이용하는것이 좋은 성능을 냄
7.2 AR, MA, ARMA, ARIMA
7.2.1. AR모델(AutoRegression)
- 자기 회귀 모델
- 이전 관측 값이 이후 관측 값에 영향을 준다는 아이디어
7.2.2. MA모델(Moving Average)
- 이동평균 모델
- 트렌드(평균 혹은 시계열 그래프에서 y값)가 변화하는 상황에 적합한 회귀 모델
- 이전 데이터의 오차에서 현재 데이터의 상태를 추론한다는 의미
7.2.3. ARMA 모델(AutoRegressiv Moving Average)
- 자동 회귀 이동평균 모델
- AR + MA
- 시계열을 따라 윈도우 크기만큼 슬라이딩(moving)된다고 하여 이동 평균 모델이라고 함
7.2.4. ARIMA 모델 (AutoRegressive Integrated Moving Average)
- 자동 회귀 누적 이동 평균 모델
- ARMA 와 달리 과거 데이터의 선형 관계뿐만 아니라 추세까지 고려
구현 방법
1. ARIMA() 함수 호출, ARIMA(p, d, q) 파라미터는 다음과 같다
- p : 자기 회귀 차수
- d : 차분 차수
- q : 이동 평균 차수
2. fit()으로 모델 훈련
3. predict() 메서드로 예측
7.3 순환 신경망(RNN)
- Recurrent Neural Network
- 시간적으로 연속성이 ㅇㅆ는 데이터를 처리하려고 고안
- Recurrent(반복되는)은 '이전 은닉층이 현재 은닉층의 입력이 되면서 ' 반복되는 순환 구조를 갖는다'는 의미
특징
1. 일대일 :
- 순환이 없기 때문에 RNN이라고 말하기 어려움, 순 반향 네트워크가 대표적
2. 일대다
- 익렵이 하나, 출력이 다수
- 이미지를 입력해서 이미지에 대한 설명을 문장으로 출력하는 이미지 캡션(image captioning) 이 대표적
3. 다대일
- 입력이 다수 , 출력이 하나, 문장을 입력해서 긍정/부정을 출력하는 감성 분석기에 사용
4. 다대다
- 입력과 출력이 다수
- 언어를 번역하는 자동번역기 대표 사례
5. 동기화 다대다
- 입력과 출력이 다수
- 문장에서 다음에 나올 단어를 예측하는 언어 모델
- 즉, 프레임 수준의 비디오 분류가 대표적
7.3.1 RNN 계층과 셀
- RNN을 구성하는 RNN 계층(layer)과 RNN 셀(cell)
- RNN 셀은 RNN 계층의 for loop 구분의 내부
- RNN 계층은 셀을 래핑 하여 동일한 셀을 여러 단계에 적용
- 셀은 실제 계산에 사용되는 RNN 계층의 구성 요소로, 단일 입력과 과거 상태(state)를 가져와서 출력과 새로운 상태를 생성
셀 유형
- tf.keras.layers.SimpleRNNCell : SimpleRNN 계층에 대응되는 RNN cell
- tf.keras.layers.GRUCell : GRU 계층에 대응되는 GRU cell
- tf.keras.layers.LSTMCell : LSTM 계층에 대응되는 cell
7.4 RNN 구조
- 은닉층 노드들이 연결되어 이전 단계 정보를 은닉층 노드에 저장하는 신경망
- w_x는 입력층에서 은닉층으로 전달되는 가중치
- W_hh는 t시점의 은닉층에서 t+1 시점의 은닉층으로 전달되는 가중치
- w_h는 은닉층에서 출력층으로 전달되는 가중치
- 모든 시점에 동일함
은닉층
- 계산을 위한 x_t와 h(t-1) 필요
- 은닉층은 일반적인 하이퍼볼릭 탄젠트 활성화 함수 사용
출력층
- 심층 신경망과 계산 방법 동일
- 즉, (은닉층 -출력층 가중치 * 현재 은닉층)에 소프트 맥스
오차
- 심층 신경망에서 전방향 하급과 달리 각 단계(t)마다 오차를 측정
- 즉, 각 단계마다 실제값과 예츠 값으로 오차를 이용하여 측정
역전파
- BPTT(BackPropagation Through Time)을 이용하여 모든 단계마다 처음부터 끝가지 역전
- 오차는 각 단계마다 오차를 측정하고 이전 단계로 전달, 이것을 BPTT
- BPTT는 오차가 멀리 전파될 때 계산량 이 많아지고 전파되는 양이 점차 적어지는 문제점 (Vanishing Gradient Problem)이 발생
- 근본적으로 LSTM, GRU 사용
7.4.1 RNN 셀 구현
7.5 LSTM
- 가중치가 업데이트되는 과정에서 1보다 작은 값이 계속 곱해지기 때문에 기울기 소멸 문제 발생
- 해결을 위해 LSTM이나 GRU 같은 확장된 RNN 방식 사용
7.5.1 LSTM 구조
LSTM 순 전파
- 망각 게이트, 입력 게이트, 출력 게이트라는 새로운 요소를 은닉층에 추가
1. 망각 게이트(forget gate)
- 과거 정보를 어느 정도 기억할지 결정
- 과거 정보와 현재 데이터를 입력받아 시그모이드를 취한 후 그 값을 과거 정보에 곱함
- 시그모이드 출력이 0이면 과거 정보 버리고, 1이면 과거 정보 저장
2. 입력 게이트(input gate)
- 정보를 저장하기 위함
- 과거 정보와 현재 데이터를 입력받아 시그모이드와 하이퍼볼릭 탄젠트 함수를 기반으로 현재 정보에 대한 보존량 결정
- 계산한 값이 1이면 허용, 0이면 차단
3. 메모리 셀
- 각 단계에 대한 은닉 노드를 뜻함
4. 출력 게이트(output gate)
- 과거 정보와 현재 데이터를 사용해 뉴런의 출력 결정
- 이전 은닉 상태와 t번쨰 입력을 고려해서 다음 은닉 상태 계산
LSTM 역전파
- 셀을 통해 역전파를 수행하기 때문에 '중단 없는 기울기(uninterrupted gradient flow) 라 고도함
- 셀 단위로 오차가 전파된다고 해서 입력 방향으로 오차가 전파되지 않는 것은 아님
- 셀 내부적으로도 오차가 입력으로 전파됨
7.5.2 LSTM 셀, 계층 구현
7.6 게이트 순환 신경망(GRU)
- Gated Recurren Unit
7.6.1 GRU 구조
- LSTM에서 사용하는 망각 게이트와 입력 게이트를 하나로 합친 것
- 하나의 게이트 컨트롤러(gate controller)가 망각 게이트와 입력 게이트 모두 제어
- 컨트롤러 1 : 망각 열림, 입력 닫힘
- 컨트롤러 0 : 망각 닫힘, 입력 열림
망각 게이트
- 과거 정보를 적당히 초기화(reset) 시키려는 목적으로 시그모이드 함수를 출력으로 이용하여 값을 이전 은닉층에 곱함
업데이트 게이트
- 과거와 현재 정보의 최신화 비율을 결정
- 시그모이드로 출력된 결과는 현시점의 정보량을 결정하고 1에서 뺀 값은 직전 시점의 은닉층 정보와 곱함
후보군
- 현시점의 정보에 대한 후보군 계산
은닉층 계산
- 업데이트 게이트 결과와 후보군 결과를 결합하여 현시점의 은닉층 계산
7.8 양방향 RNN
- 이전 시점의 데이터뿐만 아니라, 이후 시점의 데이터도 함께 활용하여 출력 값을 예측하고자 하는 것
7.8.1 양방향 RNN 구조
- 하나의 출력 값을 예측하는 데 메모리 셀 두 개 사용
- 첫 번째 메모리 셀은 이전 시점의 은닉 상태(forward states)를 전달 받아 현재 은닉 상태 저장
- 두 번쨰 메모리 셀은 다음 시점의 은닉 상태(backward states) 계산
- 그리고 이 값 두 개를 모두 출력층에서 출력 값을 예측하는 데 사용
글자 임베딩
사람의 이러한 이해 능력을 흉내 내는 알고리즘
- 'understand'라는 단어는 '이해하다'라는 뜻을 가진 영단어입니다.
- 그런데 여기에 mis-를 앞에 붙여주게 되면, 'misunderstand'라는 '오해하다'라는 뜻의 다른 의미의 영단어가 됨
- 비슷한 예시를 들어보겠습니다. 'underestimate'라는 단어는 '과소평가하다'라는 단어입니다. 그렇다면 'misunderestimate'는 무슨 뜻인가
- mis-라는 접두사는 '잘못 판단하는'이라는 의미의 'mistaken'의 의미를 담고 있으므로 '과소평가하다'라는 단어 앞에 mis-라는 접두사가 붙었다면 'misunderestimate'는 '잘못 과소평가하다'라는 추측이 가능
- have'에 대해서 BiLSTM을 통해서 단어 표현 벡터를 얻는 과정
- 우선, 단어 'have'를 'h', 'a', 'v', 'e'와 같이 글자 단위로 분리
- Embedding layer을 이용한 임베딩을 단어에 대해서 하는 것이 아니라 글자에 대해서 함, 다시 말해 글자를 임베딩함
- 그러고 나서 정방향 LSTM은 단어 정방향으로 순차적으로 글자 임베딩 벡터를 읽고 반면, 역방향 LSTM은 단어의 역방향으로 순차적으로 글자 임베딩 벡터를 읽음
- 방향 LSTM의 마지막 시점의 은닉 상태와 역방향 LSTM의 첫 번째 시점의 은닉 상태를 연결(concatenate)
- 최종적으로 이렇게 얻은 벡터를 단어 'have'의 벡터로 사용
- 글자 레벨 표현(Character-level representation)이라고 기재된 벡터에 해당
'Study > 딥러닝 텐서플로 교과서 - 길벗' 카테고리의 다른 글
[Book]9. 자연어 처리 (0) | 2022.01.06 |
---|---|
[Book]8. 성능 최적화 (0) | 2022.01.06 |
[Book]6. 합성곱 신경망 2 (0) | 2022.01.04 |
[Book]5. 합성곱 신경망 1 (0) | 2022.01.02 |
[Book]4. 딥러닝 시작 (0) | 2021.12.29 |