데이터분석 공부/DSBA 4기

순환 신경망(Recurrent Neural Network, RNN)

이삼오 2024. 4. 22. 17:41

Embedding

  • Embedding 층은 수많은 단어 또는 데이터를 벡터 형태로 표현할 수 있기 때문에 텍스트 분류를 위해 사용하는 가장 기본에 해당하는 츨
    • 사전 학습 모델을 불러와 사용할 수 있음
    • 토큰, 토큰화, 텍스트 분류에 해당하는 기본적 용어를 알고 사용해보자
  • 토큰 (Token)
  • 문법적으로 더 이상 나눌 수 없는 언어 요소
  • 이를 수행하는 작업을 토큰화(Tokenizer)라고 함
  • 텍스트 데이터를 신경망에 입력하기 위해서 일반적으로 토큰화 작업을 수행하고 정의된 토큰에 고유 인덱스를 부여한 뒤 인코딩을 통해 적절한 형태로 바꿔주는 전처리 작업 과정을 거치게 됨
    • 원핫 인코딩, 이진 인코딩
    • 워드 임베딩(Word Embedding)
 

토큰화 작업 수행하기

  • tensorflow.keras.preprocessing.text 모듈에서 이를 위한 함수를 제공

Tokenizer() 함수를 사용하여 토큰화 작업 수행

  • 사전을 손쉽게 만들어주는 함수
  • 사전의 규칙을 지정해줘야 함
  • oov_token : 데이터에 나타나지 않은 단어를 전달된 단어로 교체. 잘 사용되지 않는 단어를 '기타'로 처리
  • fit_on_texts() 함수를 통해 데이터에 적용하고 texts_to_sequence() 함수로 변환
  • sequences_to_matrix 함수를 사용하면 이진 형태로 인코딩된 결과를 얻을 수 있음

희소 행렬(Sparse Matrix)

  • 존재하는 단어의 인덱스를 제외하고 전부 0으로 표현
  • 고차원이며 단어의 유사성(Similarity)를 표현할 수 없음
  • 행렬의 고차원으로 인해 불필요한 계산이 추가되며 차원의 저주를 야기한다
  • 원핫인코딩과 같다

밀집 행렬(Dense Matrix)

  • 각 단어의 관계를 실수로 표현. 저차원에 해당
  • 데이터를 기반으로 조정해 유사한 의미를 가지는 단어는 비슷한 공간에 표현(매핑)됨
  • tfidf와 유사

데이터를 동일한 길이로 맞추기

  • 데이터의 길이가 전부 동일하도록 조정
  • pad_sequences() 함수를 사용
  • 지정해준 길이보다 짧은 경우 0으로 채워넣음 -> zero padding
  • 긴 경우는 잘라냄

Embedding층을 사용해서 모델 구성

  • 모델의 첫 번째 층으로만 사용할 수 있으며 주로 순환 신경망과 연결하여 사용함
  • input_dim 학습 데이터에서 사용한 단어의 개수
  • output_dim 임베딩 벡터 크기
  • input_length 인자는 순환 신경망과 연결할 경우엔 사용하지 않음

모델 학습 및 평가하기

  • validation_split 인자 사용
  • 학습 데이터의 끝에서 해당 비율만큼 떼어내 검증 데이터셋으로 활용
  • 무작위로 20% 비율만큼 뽑아오는 것이 아니라 단순하게 끝에서 떼어낸다는 점을 주의

RNN (순환 신경망)

  • 임베딩 층은 데이터의 표현을 학습하여 데이터 사전을 구축하는 것으로 쉽게 이해할 수 있음
  • 유사 단어를 비슷한 공간에 매핑할 수 있지만 시퀀스 데이터의 중요한 특성인 순서와 맥락을 고려하지 않음
  • Dense vs Conv 차이를 떠올려보자
  • 순환 신경망은 완전연결층&컨볼루션 신경망의 반대되는 개념으로 설명할 수 있음
  • 완전연결층, 컨볼루션 신경망은 피드 포워드 네트워크(feed-forward network)
  • 출력값이 오직 마지막 층인 출력층을 향함
  • 순환 신경망은 출력값이 출력층을 향하면서도 동시에 현재층의 다음 값으로 사용
  • 모든 뉴런이 현재 상태를 계산하기 위해서 이전 상태(이전에 들어온 값)을 활용함

이미지 출처 : https://en.wikipedia.org/wiki/Recurrent_neural_network#/media/File:Recurrent_neural_network_unfold.svg

  • X는 입력, T는 현재 시점
  • A의 결과는 다시 A로 들어가서 루프를 만들어 주게 되는데요. 때문에 현재의 상태(state)가 그 다음 상태(state)에 영향을 미치게 됩니다