관리 메뉴

ComputerVision Jack

[케라스 Chapter6 정리] 본문

DeepLearning/케라스 - Keras Lib

[케라스 Chapter6 정리]

JackYoon 2020. 2. 11. 17:33
반응형

순환 신경망(Recurrent neural network)

시계열 또는 시퀀스 데이터를 처리하는 기본적인 딥러닝 모델 =1D 컨브넷으로 사용하기도 한다.

텍스트 데이터 다루기

텍스트 : 가장 흔한 시퀀스 형태의 데이터

순환 신경망 모델은 문자 언어에 대한 통계적 구조를 만들어 간단한 텍스트 문제를 해결한다.

자연어 처리(natural language processing)를 위한 딥러닝 모델은 단어, 문장, 문단에 적용한 패턴 인식이다.

 

텍스트 벡터화(vectorizing text)

텍스트를 수치형 텐서로 변환하는 과정

  • 텍스트를 단어로 나누고 각 단어를 하나의 벡터로 변환한다.
  • 텍스트를 문자로 나누고 각 문자를 하나의 벡터로 변환한다.
  • 텍스트에서 단어나 문자의 n-그램(윈도우 사이즈)을 추출하여 하나의 벡터로 변환한다.

텍스트를 나눈 단위를 토큰이라고 한다. 이러한 텍스트 벡터화 과정을 토큰화 라고 한다.

텍스트 벡터화를 위해 2가지의 과정이 필요하다

  • 원-핫 인코딩(one - hot encoding)
  • 토큰 임베딩(token embedding)

원-핫 인코딩(one-hot encoding)

토큰을 벡터로 변환하는 가장 일반적이고 기본적인 방법

모든 단어에 고유한 정수 인덱스를 부여하고 이 정수 인덱스 i를 크기가 N인 이진 벡터로 변환한다.

I love you 경우 크기가 3인 이진 벡터로 변환한다.

I 인경우 [[1, 0, 0]]식으로 변환

 

from keras.preprocessing.text import Tokenizer

#케라스에서 제공하는 유틸리티

 

원-핫 해싱(one-hot hasing)

토큰 수가 너무 커서 모두 다루기 어려운 경우 사용.

각 단어에 명시적으로 인덱스를 할당하고, 인덱스에 단어를 해싱하여 벡터로 변환한다.

해시 충돌(hash collision) 단점이 존재한다.

 

단어 임베딩(word vector)

단어 임베딩은 원핫 코딩으로 만든 벡터와는 다르게 저차원의 실수형 벡터이다.

단어 임베딩은 데이터로부터 학습된다.

따라서 우리는 좋은 임베딩 공간을 만드는 것이 핵심이다.

사전에 훈련된 임베딩 공간을 사용하여 문제를 해결하기도 한다.

 

GloVe단어 임베딩을 사용하여 영화의 긍정 부정 이진 분류 모델 실행하기

사전 훈련된 단어 임베딩 사용 결과

성능이 그렇게 좋지 않다.

사전 훈련된 단어임베딩 보다 데이터가 많다면 일반적으로 성능이 더 좋아진다.

순환 신경망 이해하기

피드 포워드 네트워크

컨브넷이나 다른 딥러닝 모델로 시계열 데이터를 처리하기 위해선 모델에 시퀀스를 주입해야한다.

아니면 전체 시퀀스를 통으로 입력으로 넣어주어야 한다.

 

순환 신경망

순환 신경망은 시퀀스의 원소를 순회하며 처리 상태를 저장하고 전 상태를 불러와 학습을 진행한다.

초기 상태인 경우 전 상태가 존재하지 않기 때문에 0벡터로 초기화 한다.

RNN은 내부에 루프가 존재한다고 생각하면 편하다.

 

케라스의 순환층

SimpleRNN 

다른 케라스 층과 마찬가지로 시퀀스 배치를 처리한다.

  • 각 타임스텝의 출력을 모은 전체 시퀀스 반환
  • 입력 시퀀스에 대한 마지막 출력만 반환

model.add(Embedding(max_feature, 32))

model.add(SimpleRNN(32))

#SimpleRNN층을 추가한다.

SimpleRNN을 사용하여 영화 이진분류 문제 분류 결과

LSTM과 GRU층

SimpleRNN층은 너무 단순하다.

학습이 진행될 수록, 초기 단계의 타임스텝을 기억하기 힘들다.(그래디언트 소실 문제)

따라서 초기의 상태를 어느 정도 보존하는 모델이 필요하다.

 

model.add(Embedding(max_features, 32))

model.add(LSTM(32))

#LSTM층을 추가한다.

LSTM층을 추가한 학습 결과

순환 신경망 고급 사용법

순환 신경망 향상 방법

  • 순환 드롭아웃(Recurrent Dropout)
  • 스태킹 순환 층(Stacking recurrent layer)
  • 양방향 순환 층(bidirectional recurrent layer)

[기온 예측 문제]

기온 예측 문제에 대한 데이터 시각화

데이터셋 전체 기간의 온도

어느정도 주기성이 포착된다.

데이터셋 처음 10일간의 온도

일별 주기성을 확인할 수있다.

 

기본적인 머신러닝 방법

RMSprop을 사용하여 간단하게 회귀문제를 적용하여 문제를 해결

간단한 회귀문제를 사용하여 학습한 결과

GRU를 사용

model.add(layers.GRU(32, input_shape=(None, float_data.shape[-1])))

model.add(layers.Dense(1))

GRU를 사용하여 학습한 결과

과대적합을 감소하기 위해 순환 드롭아웃 적용

타임 스텝마다 랜덤하게 드롭아웃 마스크를 바꾸는 것이 아닌 동일한 드롭아웃 수치를 일정하게 모든 타임스텝에 적용

  • dropout : 입력에 대한 드롭아웃 비율 
  • recurrent_dropout : 순환상태의 드롭아웃 비율

순환 드롭아웃을 적용하여 학습한 결과

스태킹 순환 층 적용

과대적합은 존재하지 않지만 병목현상으로 인해 네트워크의 용량을 늘린다.

네트워크의 용량을 늘리려면 층의 유닛수를 늘리거나 층을 추가한다.

 

케라스에서 층을 순서대로 쌓으려면 return_sequences = True로 설정

스태킹 순환층을 적용하여 학습한 결과

양방향 RNN사용하기

RNN의 변종이면서 성능이 좋다.

순서에 의미가 있는 문제를 잘 맞추는 이유.

시퀀스(시간의 흐름)에 민감한 RNN의 타임 스텝을 바꾸어 표현 방식을 바꾼다.

model.add(layers.Embedding(max_features, 32))

model.add(layers.Bidirectional(layers.LSTM(32))

model.add(layers.Dense(1, activation = 'sigmoid')

양방향 RNN을 사용하여 학습한 결과

일종의 변종기법이다. 

자연어 처리를 포함한 다른 문제에서는 종종 사용되는 방법

컨브넷을 이용한 시퀀스 처리

시간을 2D 공간으로 다룰 수 있다. 즉, 1D컨브넷을 사용할 수 있다.

1D 컨브넷)은 특정 시퀀스 문제에 대해 RNN과 비슷하다. + 팽창된 커널과 함께 사용

 

1D합성곱 층은 시퀀스에 있는 지역패턴을 인식한다.

동일한 변환이 시퀀스에 있는 모든 패치에 적용되기 때문에 특정 위치에서 학습한 패턴을 나중에 확인할 수 있다.

1D풀링 연산은 2D풀링 연산과 동일하다.

imdb데이터 1D 컨브넷을 이용한 학습 결과

CNN과 RNN을 연결하여 시퀀스 처리

1D 컨브넷이 입력 패치를 독립적으로 처리하기 때문에 RNN과 달리 타임스텝에 민감하지 않다.

예나 데이터에서 1D컨브넷 학습 결과

 

1D합성곱과 GRU층을 연결하기

model.add(layers.Conv1D(32, 5, activation = 'relu'))

model.add(layers.GRU(32, dropout = 0.1, recurrent_dropout = 0.5))

model.add(layers.Dense(1))

예나 문제에 대한 1D와 GRU 학습 결과

 

6-1 단어 임베딩.ipynb
0.06MB
6-1 텍스트 데이터 전처리.ipynb
0.01MB
6-2 순환 신경망 이해하기.ipynb
0.08MB
6-3 순환 신경망 고급사용법.ipynb
0.18MB
6-4 컨브넷 사용한 시퀀스 처리.ipynb
0.09MB

반응형

'DeepLearning > 케라스 - Keras Lib' 카테고리의 다른 글

[케라스 Chapter8 정리]  (0) 2020.02.23
[케라스 Chapter7정리]  (0) 2020.02.18
[케라스 Chapter5 정리]  (0) 2020.01.31
[케라스 Chapter4 정리]  (0) 2020.01.28
[케라스 Chapter3 정리]  (0) 2020.01.15
Comments