BuNa_
IT Story
BuNa_
전체 방문자
오늘
어제
  • 분류 전체보기 (117)
    • CS (14)
      • 운영체제 (8)
      • 네트워크 (0)
      • Design Pattern (1)
      • OOP (4)
    • 대외활동 (24)
      • 우아한테크코스 (14)
      • DND 동아리 (4)
      • UMC 동아리 (5)
      • 해커톤 (1)
    • Android (29)
      • MVVM (2)
      • 스터디 (11)
      • Compose (3)
      • Unit Test (1)
    • Project (5)
      • 어따세워 (5)
      • DnD 과외 서비스 (0)
    • Programming (11)
      • Kotlin (4)
      • 파이썬 (7)
    • Git (1)
    • 인공지능 (22)
    • 백준 (8)
    • 기타 (3)
      • IntelliJ (1)
      • 일상 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 우테코 5기
  • RecyclerView
  • MVVM
  • 인공지능
  • UMC
  • 딥러닝
  • 우아한테크코스
  • Baekjoon
  • 다이나믹 프로그래밍
  • 우테코
  • 인공지능 분류
  • Android
  • External fragmentation
  • ViewModel
  • 선형회귀
  • Ai
  • 원시값 포장
  • 파이썬
  • 백준
  • k-means++
  • K-means
  • 객체지향 생활체조
  • 안드로이드
  • 셀레니움
  • 외부 단편화
  • 어따세워
  • Compose
  • 운영체제
  • 우테코 프리코스
  • 컴공선배

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
BuNa_

IT Story

[인공지능][개념] 순환 신경망(Recurrent Neural Network) - RNN 모델 완전 정복하기
인공지능

[인공지능][개념] 순환 신경망(Recurrent Neural Network) - RNN 모델 완전 정복하기

2021. 6. 12. 19:05

 

순환 신경망 (RNN)


 

 

순환 신경망(Recurrent Neural Network)은 일반적인 완전 연결 신경망과 거의 동일하다.

다만, 완전 연결 신경망에 이전 데이터의 처리 흐름을 순환하는 고리를 하나 추가하면 된다.

 

'순환 신경망 (Recurrent Neural Network)'

 

위 그림처럼 순환 신경망은 뉴런의 출력이 다시 자기 자신으로 전달된다.

즉, 어떤 샘플을 처리할 때 이전에 사용했던 데이터를 재사용하는 셈이다.

 

'타임스텝 A에서 셀의 출력 Oa의 재사용'

 

'타임스텝 B에서 셀의 출력 Ob의 재사용'

 

순환 신경망에서 샘플을 처리하는 한 단계를 타임스텝이라고 부르고 층을 셀이라고 부른다.

예를 들어, 타임스텝 A에서 셀의 출력 Oa가 사라지는 것이 아니라 타임스텝 B의 셀로 주입되며,

타임스텝 B에서 셀의 출력 Ob가 다시 타임스텝 C의 셀로 주입된다.

이처럼 이전 데이터를 계속해서 다음 셀로 전달할 수 있다는 장점 덕분에 순환 신경망은

순차 데이터(Sequential data)와 같은 문장의 감정 분석, 음성 분석 등에 자주 사용된다.

하지만 이전 타임스텝의 샘플을 기억하기는 하지만 타임스텝이 오래될수록 순환되는 정보가 점점 희미해진다는 문제점이 있다.

 

'하이퍼볼릭 탄젠트 (tanh) 그래프'

 

일반적으로 순환 신경망의 은닉층에서 활성화 함수로는 하이퍼볼릭 탄젠트 (tanh)이 많이 사용된다.

tanh 함수도 S자 모양을 띠기 때문에 종종 시그모이드 함수라고도 불리지만

tanh는 -1 ~ 1 사이의 범위를 갖고, sigmoid는 0 ~ 1 사이의 범위를 갖는다는 차이가 있다.

 


 

순환 신경망에서 사용하는 데이터는 텍스트나 일정한 시간 간격으로 기록된 시계열 데이터와 같은

'순차 데이터(Sequential Data)'여야 한다.

만약 "I am a boy"라는 문장이 있으면 쉽게 이해할 수 있지만, "a am I boy"라는 문장은 말이 안 되기 때문이다.

또는, 6월 1일 22℃ / 6월 2일 24℃ / 6월 3일 23℃ 등 일자가 순서대로 정렬되어 있으면 다음 날 온도를 예측할 수 있지만, 데이터가 뒤죽박죽 섞여 있으면 예측이 어려워질 것이다.

 

순환층은 일반적으로 샘플마다 2개의 차원을 갖는다.

보통 하나의 샘플을 하나의 시퀀스(Sequence)라고 부르는데, 시퀀스 안에는 여러 개의 아이템이 들어 있다.

여기서 시퀀스의 길이가 바로 타임스텝의 길이가 된다.

 

'샘플 문장 (I am a boy)'

 

예를 들어, 어떤 샘플에 "I am a boy"라는 문장이 있다고 해보자.

이 샘플은 4개의 단어로 이루어져 있다.

각 단어를 어떤 3개의 숫자로 표현한다고 가정해보자.

이런 입력이 순환층을 통과하면 두 번째, 세 번째 차원이 사라지고 순환층의 뉴런 개수만큼 출력된다.

 

설명이 어렵기 때문에 부가적으로 설명해보겠다.

하나의 샘플은 시퀀스 길이(단어 개수)와 단어 표현(컴퓨터가 데이터를 이해할 수 있도록 수치화한 데이터)의 2차원 배열로 이루어져 있다.

이 2차원 배열은 순환층을 통과하면 1차원 배열로 바뀐다.

즉, 순환층은 사실상 마지막 타임스텝의 은닉 상태만 출력으로 내보내게 된다는 뜻이다.

마치 입력된 시퀀스 길이를 모두 읽어서 정보를 마지막 은닉 상태에 압축하여 전달하는 것처럼 이해할 수 있다.

이처럼 마지막 셀의 출력이 1차원이기 때문에, Flatten 클래스로 출력을 펼칠 필요 없이 그대로 밀집층에 사용할 수 있다.

 

이번 포스팅에서는 순환 신경망(Recurrent Neural Network)이 무엇인지 알아보는 시간을 가졌다.

순환 신경망은 이전 데이터에 대한 정보를 계속해서 전달할 수 있기 때문에, 문장을 분석하는 모델에 주로 사용된다.

다음 포스팅에서는 순환 신경망을 통해 리뷰의 문장이 긍정적인지, 부정적인 판단하는 모델을 만들어보도록 하자.

 


 

 

👍클릭으로 구독하기👍

 

(이해가 다소 힘들거나, 틀린 부분이 있다면 댓글 부탁드리겠습니다! 😊)

💖도움이 되셨다면 '구독'과 '공감' 부탁드립니다!💖

저작자표시 비영리 변경금지 (새창열림)

'인공지능' 카테고리의 다른 글

[인공지능][실습] 순환 신경망(SimpleRNN) 모델로 IMDB 리뷰 감성 분류하기 - (원핫인코딩, 단어 임베딩)  (11) 2021.06.23
[인공지능][실습] 합성곱 신경망(Convolution Neural Network) - CNN 모델로 패션 MNIST 데이터셋 훈련시키기  (33) 2021.06.01
[인공지능][개념] 합성곱 신경망(CNN) - 패딩(Padding)과 스트라이드(Strides), 풀링(Pooling) 완전정복하기  (10) 2021.05.31
[인공지능][개념&실습] 최상의 신경망(ANN) 모델을 만들고 Save 해보자 - 드롭아웃(Dropout), 콜백(Callback), 조기 종료(Ealry Stopping)을 통한 신경망 최적화  (15) 2021.05.29
[인공지능][개념&실습] 인공 신경망(ANN)에 대해 알아보고 패션 MNIST 데이터셋으로 패션 아이템을 분류해보자  (16) 2021.05.27
    '인공지능' 카테고리의 다른 글
    • [인공지능][실습] 순환 신경망(SimpleRNN) 모델로 IMDB 리뷰 감성 분류하기 - (원핫인코딩, 단어 임베딩)
    • [인공지능][실습] 합성곱 신경망(Convolution Neural Network) - CNN 모델로 패션 MNIST 데이터셋 훈련시키기
    • [인공지능][개념] 합성곱 신경망(CNN) - 패딩(Padding)과 스트라이드(Strides), 풀링(Pooling) 완전정복하기
    • [인공지능][개념&실습] 최상의 신경망(ANN) 모델을 만들고 Save 해보자 - 드롭아웃(Dropout), 콜백(Callback), 조기 종료(Ealry Stopping)을 통한 신경망 최적화
    BuNa_
    BuNa_
    안드로이드 개발자를 향해 달리고 있는 공대생입니다! 🧑 Android, Kotlin, Java, Python 등 학습하고 있는 내용과 프로젝트를 주로 업로드하고 있습니다. 지적과 조언은 언제나 환영입니다!😊 github : https://github.com/tmdgh1592

    티스토리툴바