티스토리 뷰

<경고! 잘못된 내용이 굉장히 많을 수 있습니다>

 

 

Sequential Data순차 데이터라는 의미로, 시간에 따라 순차적으로 데이터가 들어온다는 것을 뜻한다!

대표적으로 주식 차트같은 느낌. 문자열이나 음성 역시 순차 데이터로 볼 수 있다. (동적 데이터)

- 시간에 따른 순서가 의미가 있으며, 순서가 뒤바뀔 경우 의미가 손상되는 데이터.

동적 데이터(순차 데이터)

반면 지금까지 해온 데이터(사람 얼굴같은 이미지, 스펙트로그램 등)은 시간에 따라 데이터가 변하거나 하지 않았다. (정적 데이터)

정적 이미지

순차 데이터는 일반적으로 RNN(Recurrent Neural Network, 순환 신경망), LSTM(Long Short Term Memory)과 같은 방법으로 학습을 진행한다.

 

순차 데이터 역시 이미지화하여 CNN을 통해 학습할 수도 있다. 하지만 동적 데이터는 동적 데이터 답게 처리해주는 것이 더 좋은 성능을 기대할 수 있다.

 

# RNN

RNN(Recurrent Neural Network, 순환 신경망)은 단어의 뜻에서 짐작해볼 수 있다시피 순환 구조를 가진 네트워크이다. 

순환구조라는 이름에 걸맞게 RNN은 바로 직전의 output이 다음 순차 데이터와 함께 input으로 다시 들어가게 되는 구조이다. 

 

또한 CNN의 경우에는 고정된 input 사이즈(예를들어 227x227x3)에 맞춰 학습시켜줘야 했다면, RNN의 경우는 고정된 길이가 없어 유연한 설계를 할 수 있다는 장점이 있다.

 

 

# LSTM

LSTM(Lont Short Term Memory)는 RNN의 성능을 개선하고자 등장하였다.

RNN 구조에 "메모리(Internal Memory State)"가 추가되어 이전의 output 데이터를 기억해뒀다가 순차 데이터가 들어올때마다 함께 input으로 넣는다. 메모리가 있기 때문에 바로 직전의 output 데이터만 활용하는 것이 아니라 모든 데이터의 값을 아울러서 활용할 수 있다는 의미이다.

 

메모리에 저장된 값을 input에 따라 얼마나 사용할 것인지를 조절하는 파라미터 등등 학습을 통해 조절될 수 있는 파라미터들도 굉징히 많다. (세부 내용은 구글에 검색을 좀 해봤는데 뭔소리인지 잘 모르겠다)

그냥 RNN 순환구조에 메모리를 추가해서 이전의 모든 output 데이터를 활용하여 학습한다 정도로만 이해하면 될 것 같다. 

 

여기에 더 얹어서 Bidirectional LSTM이 등장한다. BiDirectional LSTM은 순차 데이터를 시간의 역순으로 뒤집어 다시 한번 학습하 방법이다. 이 경우 학습 시간은 물론 두배가 되겠지만 정확도가 훨씬! 높아진다고 한다.

 

 

# Sequential Data Classification

순차 데이터를 가지고 특정 Categorical 데이터를 특정하는 방법! CNN에서 했던 거랑 거의 같다고 보면 된다.

LSTM에서의 Classification 방법은 OutputMode 옵션을 'last'로 설정하고 Softmax 와 Classification 레이어만 뒤에 달아주면 된다.

요로코롬

(OutputMode가 'sequence'인 경우는 순차 데이터 뒤에 나오는 데이터들을 예측하는 경우에 사용된다)

- 'last'인 경우에는 순차 데이터가 누구의 데이터인지 예측하고자 할 때 사용

 

이를 코드로 나타내면 다음과 같다

layers = [
    sequenceInputLayer(1);
    bilstmLayer(100, "OutputMode", "last");
    fullyConnectedLayer(3);
    softmaxLayer();
    classificationLayer();
    ]

1. sequenceInputLayer -> 순차 데이터를 입력으로 받는다.

- 파라미터는 각 순차 데이터가 몇행으로 구성되어있는지를 나타낸다.

 

2. bilstmLayer -> Output 모드 설정. ('last'로!)

 

나머지 fc 레이어는 분류할 때 카테고리컬 데이터가 몇개인지.

 

이게 끝이다.

 

 

* 순차 데이터는 보통 "셀" 형태로 사용한다!

 

* 데이터를 학습시킬 때 학습 데이터 간의 길이를 모두 통일시켜줘야 한다.

- Zero Padding을 뒤에 덧붙여서 길이를 맞추는 가장 기본적인 방법을 사용할 수 있다.

(이 경우 LSTM은 0값을 패딩으로 인식하지 못하고 이 역시 학습데이터로 사용하기 때문에 별로 좋지 않다)

- 이외에도 데이터를 sorting 한 이후에 miniBatch 사이즈로 학습을 시키는 방법 등등.. 여러가지 기법들이 있다.

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함