1. 시계열 데이터의 이해

    1.1. 시계열 데이터의 특성

    1.2. 미래 예측을 위한 데이터 준비

    1.3. 시계열 데이터 사례: 비트코인 가격

2. 순환 신경망

    2.1. 구조와 동작, 학습 알고리즘

    2.2. 선별 기억력을 갖춘 LSTM

    2.3. LSTM의 유연한 구조

3. LSTM으로 시계열 예측하기

    3.1. 단일 채널 비트코인 가격 예측

    3.2. 성능 평가

    3.3. 다중 채널 비트코인 가격 예측

4. 편곡하는 인공지능

    4.1. ABC 악보 표기

    4.2. LSTM으로 편곡

5. 자연어 처리

    5.1. 텍스트 데이터에 대한 이해

    5.2. 텍스트 데이터 사례: 영화평 데이터셋 IMDB

    5.3. 단어 임베딩

    5.4. LSTM으로 인식: 조기 멈춤 적용

    5.5. word2vec과 GloVe


1. 시계열 데이터의 이해

    1.1. 시계열 데이터의 특성

시계열 데이터 예시

시계열 데이터(時系列, Time Series)

시간 정보가 들어있는 데이터, 시간 축을 따라 신호가 변하는 동적 데이터이다.

시계열 데이터는 기존의 데이터와는 다른 독특한 특성이 있다.

ㆍ 단어(요소)가 나타나는 순서가 중요하다.

ㆍ 샘플의 길이가 다르다. ('인공지능' 발음과 '인~공~지~능~' 발음은 다른 것이다.)

ㆍ 문맥 의존성이 있다.

ㆍ 계절성이 있다. (계절에 따른 미세먼지 수치, 항공권 판매량 등)

 

시계열 데이터를 인식하는 고전 모델

ㆍ ARIMA(AutoRegressive Integrated Moving Average)

ㆍ SARIMA(Seasonal ARRIMA)

ㆍ Prophet 등

 

시계열 데이터를 인식하는 딥러닝 모델

ㆍ RNN(Recurrent Neural Network)

ㆍ LSTM(Long Short Term Memory)

 

시계열 데이터의 표현

시계열 데이터는 가변 길이이고, 벡터의 벡터이다.

매일 기온, 습도, 미세먼지 농도를 기록한다면 a1 = (23.5, 42.0, 0.1, ...), a2 = (25.5, 45.0, 0.08, ...)처럼 될 것이다.

 

    1.2. 미래 예측을 위한 데이터 준비

RNN의 구조는 여러 문제에 적용이 가능하다.

ㆍ 미래 예측(Prediction / Forecasting)

     └ 주가, 날씨, 기기 고장, 제품 가격, 수요량 등의 예측

ㆍ 언어 번역

ㆍ 음성 인식

ㆍ 생성 모델

     └ 사진을 보고 설명하는 문장을 생성하는 인공지능

 

예를 들어, 농산물 수요량 데이터를 예측한다고 해보자.

농산물 유통업자가 5년동안 매일 판매량을 기록했다면, 길이가 t = 365 * 5 = 1825인 샘플일 것이다.

하나의 긴 샘플을 가지고 '윈도우 크기(w)'로 잘라 샘플을 수집한다.

얼마나 먼 미래를 예측할지 지정하는 '수평선 계수(h)'를 정해 예측한다.

위의 예시에서는 w는 3, h는 1이다.

 

다중 품목을 표현하는 데이터(다중 채널)이다. 벡터의 벡터 구조를 갖는다.

예를 들어, 농산물 수요량에서 오이와 상추를 예측하고, w = 3, h = 1일 때 위와 같다.

 

    1.3. 시계열 데이터 사례: 비트코인 가격

코인데스크(www.coindesk.com)에서 코인 가격 데이터를 다운로드한다.

데이터는 Currency, Date, Closing Price(USD), 24h Open(USD), 24h High(USD), 24h Low(USD)의 6열이다.

 

L7 첫 번째 행을 헤더(header = 0)로 사용하는 코드이다.

L8 Closing Price 행을 취하고 numpy 배열로 변환한다.

 └ [[ ]]는 벡터의 벡터, [ ]는 벡터라는 차이가 있다. [[ ]]가 다중 채널로 확장이 쉽기 때문에 이 방법을 추천한다.

L9 앞의 5개의 샘플을 취한다.

 

2. 순환 신경망

    2.1. 구조와 동작, 학습 알고리즘

순환 신경망(RNN; Recurrent Neural Network)은 시계열 데이터를 처리하는 대표적인 신경망이다.

다층 퍼셉트론을 살짝만 고치면 RNN으로 사용 가능하다.

다층 퍼셉트론의 은닉층 노드 사이에, 순환 에지를 추가하면 RNN으로써 사용 가능하다.

가중치 집합은 다층 퍼셉트론이 {U, V}, 순환 신경망이 {U, V, W}이다.

 

펼친 순환 신경망

순환 신경망에 데이터 입력을 이해하기 쉽게 펼쳐서 그렸다.

순간마다 서로 다른 가중치를 가지는 것이 아니라, 모든 순간 {U, V, W}를 공유한다.

 

i 순간의 a_i는 가중치 U를 통해 은닉층의 상태 h_i에 영향을 미친다.

h_i는 가중치 V를 통해 출력값 o_i에 영향을 미친다.

h_i-1은 가중치 W를 통해 h_i에 영향을 미친다.

 

은닉층 계산(왼쪽), 출력층 계산(오른쪽)

Whi-1 항을 제외한다면 은닉층의 계산은 다층 퍼셉트론과 동일하다.

RNN은 이 항을 통해 이전 순간의 은닉층 상태를 현재 순간의 은닉층 상태로 전달하여, 시간성을 처리한다.

순환 신경망의 학습 알고리즘은 최적의 {U, V, W}를 알아낸다.

 └ BPTT(Back-Propagation Through Time) 알고리즘

 

 

    2.2. 선별 기억력을 갖춘 LSTM

RNN의 기억력에는 한계가 있다.

은닉층 상태를 다음 순간으로 넘기는 기능을 통해 과거를 기억하는 흉내를 낸다.

하지만 장기 문맥 의존성을 제대로 처리하지 못하는 한계가 있다.

 └ 장기 문맥 의존성 : 멀리 떨어진 요소가 밀접한 상호작용하는 현상

게속 들어오는 입력의 영향으로 한계가 짙어진다.

사람에게는 선별 기억 능력으로 오래 전 기억을 간직한다. LSTM에서는 선별 기억 능력을 참고한다.

 

RNN과 LSTM

LSTM은 게이트라는 개념으로 '선별 기억'을 확보한다(O는 열림, X는 닫힘).

게이트는 0에서 1 사이의 실숫값으로 열린 정도를 조절한다.

게이트의 여닫는 정도는 가중치로 표현하며, 가중치는 학습으로 알아낸다.

(b)의 상황을 보면 게이트를 처음과 끝을 제외하고 중간은 전부 닫아, 기억을 끝까지 끌고 간다.

 

RNN의 가중치 {U, V, W}에 4개를 추가하여 7개의 LSTM 가중치를 사용한다.

 └ LSTM의 가중치 : {U, Ui, Uo, W, Wi, Wo, V}, i는 입력 게이트, o는 출력 게이트 

 

    2.3. LSTM의 유연한 구조

단방향이 아닌 양방향으로 문맥을 살릴 필요가 있는 경우는 양방향 LSTM을 사용한다.

예시로 '잘 달리는 차를 타고, 고산지대에서 생산한 차를 따러 간다.'라는 문장이 있다고 해보자.

문장의 앞과 뒤를 보고 각각 car와 tea로 번역을 할 수 있다.

 

응용 문제에 따라서 LSTM은 다양한 구조를 유연하게 사용한다.

 

3. LSTM으로 시계열 예측하기

시계열 데이터를 보고 미래를 예측하는 프로그래밍 코드 분석 목차이다.

마찬가지로 핵심이 되는 코드와 해석만을 일부 진행한다.

3.1의 목차에서는 단일 채널로 종가만을 고려하는 프로그램이다.

3.3의 목차에서는 다중 채널로 종가, 시가, 고가, 저가를 모두 고려하는 프로그램이다.

 

    3.1. 단일 채널 비트코인 가격 예측

L25 LSTM층을 위한 함수를 불러온다.

L34 units=128로 은닉층과  x_train[0]의 입력층을 설정한다.

L35 출력층을 설정한다. activatino 매개변수를 생략하여 기본값인 선형을 사용한다.

L36 손실함수로 MAE를 사용한다.

 

    3.2. 성능 평가

평균 절댓값 오차(MAE; Mean Absolute Erro)는 스케일 문제에 대처하지 못한다.

평균 절댓값 백분율 오차(MAPE; MA Percentage E)는 스케일 문제에 대처 가능한 MAE 식의 변형이다.

 

위의 표는 MAE와 MAPE의 수식 연산 예시이다.

MAE는 값이 변하는 데에 비해 MAPE는 유지하는 모습을 볼 수 있다.

 

성능 기준으로 '등락 정확률'을 본다. 등락을 얼마나 정확하게 맞히는지를 측정한다.

맞힌 경우의 수를 전체 샘플 수로 나누어 등락 정확률을 판단한다.

 

    3.3. 다중 채널 비트코인 가격 예측

L8 (종가, 시가, 고가, 저가)를 데이터로 사용한다.

 

4. 편곡하는 인공지능

    4.1. ABC 악보 표기

인공지능의 창작 능력으로 다양한 활동이 가능하다.

Deep Dream Generator로 생성한 그림, Magenta 프로젝트의 음악 창작, 인공지능 소설 등 다양하다.

앞 소절을 보고 다음 음표를 LSTM으로 예측하는 방식의 단순한 편곡이다.

 

가장 간단한 음악 표기법인 ABC 방식으로 표기한 악보를 사용한다.

 └ ABC 표기 : C(도), D(레), ..., 라(A), 시(B) / 2(2분 음표), 4(4분 음표), 8(8분 음표)

 

    4.2. LSTM으로 편곡

ABC 표기 데이터는 2채널(계이름과 박자)이고, 분류 문제에 해당한다.

 

L62 예측이 목적이 아니고 생성이 목적이기에 전체를 훈련 집합으로 사용한다.

 

L69 원핫 코드의 길이는 21이고, 분류 문제이기에 softmax 함수를 사용한다.

 

L75 첫 소절을 지정한다.

L76 duration만큼 반복한다.

L77 직전 윈도우를 보고 다음 음표를 예측한다.

L78 가장 큰 확률을 가진 부류로 분류하고 ABC 표기로 변환하여 리스트에 추가한다.

 

67번부터 69번까지의 라인 신경망 구조는 왼쪽의 그림과 같다.

 

5. 자연어 처리

    5.1. 텍스트 데이터에 대한 이해

자연어 처리(NLP; Natual Language Processing)는 인간이 구사하는 언어를 자동으로 처리하는 인공지능 분야이다.

언어 변역, 댓글 분석, 고객 챗봇, 소설 창작 인공지능 등의 분야에서 사용할 수 있다.

 

텍스트 데이터의 가장 큰 특성은 시계열 데이터이다.

샘플마다 길이 또한 다르고 구문론과 의미론의 차이도 존재하며, 잡음이 심하고 형태소 분석이 필요하다.

언어별로 다양한 특성을 띄기도 하기에 신경망에 입력하기 위해서는 기호를 수치로 변환해야 한다.

 

하나의 말뭉치(Corpus)가 있다고 해보자.

말뭉치의 단어 수집을 진행한다. Python(3), freshman(2), loves(1), ..., is(1)

파이썬의 자료구조인 딕셔너리를 이용하여 빈도수에 따른 순위를 표현한다.

이렇게 나온 딕셔너리를 기반으로, 텍스트를 숫자 코드로 변환한다. 

 

텍스트를 숫자 코드로 변환한 값을 원-핫 코드로 표현한 것이다.

원핫 코드는 특정 데이터를 제외하고 나머지는 전부 0으로 처리하는 패딩 방식을 말한다.

이런 원핫 코드에는 문제점이 있다.

ㆍ 사전 크기가 크면 원핫 코드는 희소 벡터가 되어 메모리를 낭비한다.

ㆍ 단어 사이의 연관 관계를 반영하지 못 한다.

 

    5.2. 텍스트 데이터 사례: 영화평 데이터셋 IMDB

텐서플로가 제공하는 영화 평가 댓글 데이터셋(IMDB)이 있다.

50,000개의 댓글을 긍정과 부정 평가한 레이블링했다.

감정 분류(Sentiment Classification) 문제에 주로 사용하는 데이터셋이다.

 

다양한 토픽의 뉴스를 모아둔 Reuters 데이터셋이 있다.

로이터 통신의 뉴스 11,228개를 46개의 토픽으로 레이블링했다.

토픽 분류 문제에 주로 사용하는 데이터셋이다.

 

    5.3. 단어 임베딩

원핫코드의 몇 가지 단점을 해결하는 방안 중 하나인 '단어 임베딩(Word Embedding)'이다.

단어 임베딩이란, 단어를 저차원 공간의 벡터로 표현하는 기법이다.

 └ 보통 수백 차원을 사용하는 밀집 벡터이다.

 

원핫 코드와 단어 임베딩의 차이는 위와 같다.

 

L24 샘플의 크기를 sample_size(512)로 고정한다. 보다 작은 샘플은 pad_sequences 함수가 특수 문자로 채운다.

 

L28  Embedding 함수는 input_dim 차원을 output_dim 차원으로 축소한다.

L30 input_length * output_dim 구조의 텐서를 일렬로 펼친다.

L31 0(부정) 또는 1(긍정)로 분류하므로 출력 노드는 1개이다. 손실 함수는 이진 교차 엔트로피이다.

 

    5.4. LSTM으로 인식: 조기 멈춤 적용

조기 멈춤(Early Stopping)은 훈련 집합에 대해 덜 수렴했더라도 검증 집합에 대해 성능 개선이 없으면 학습을 마치는 전략이다.

L18 monitor='val_accuracy'로 검증 집합에 대한 정확률을 조기 멈춤 기준으로 사용한다.

L18 patience=5로 5세대 동안 성능 향상이 없으면 멈춤을 의미한다.
L18 restore_best로 가장 높은 성능을 발휘했을 때의 가중치를 취한다.

L26 validation_split = 0.2로 훈련 집합의 20%를 떼어 검증 집합으로 사용한다.

L26 callback = [early]로 콜백 함수를 통해 조기 멈춤을 적용한다.

 

LSTM에서 조기 멈춤을 적용하여 실행할 경우, 때에 따라 성능이 안 좋을 수 있다.

단어의 빈도수에 따라 분류하는 것이지만, 문장의 의미를 파악하지 못한 채 분류했기 때문에 그렇다.

문장의 의미를 이해하려면 발전한 자연어 처리 알고리즘(word2vec과 GloVe)이 필요하다.

 

    5.5. word2vec과 GloVe

Word2Vec(구글)

ㆍ 1000억 개가량의 뉴스를 모아둔 데이터셋으로 학습

ㆍ 300만 개가량의 단어를 300차원 공간에 표현

 

GloVe(스텐포드 대학)

ㆍ 위키피디아 문서 데이터를 사용하여 학습

ㆍ 40만 개가량의 단어를 50, 100, 200, 300차원 공간에 표현

 

L3 거리 계산용 함수로 사용할 distance를 호출한다.

L6 GloVe의 100차원 공간을 사용한다.

 

L15 문자열 표현을 벡터 형식으로 변환하고 딕셔너리에 저장한다.

L23 매개변수 vector와 가까운 순으로 정렬한 키를 반환하는 함수이다.

L27 'movie'와 가장 가까운 5개의 단어를 찾는다.

+ Recent posts