상세 컨텐츠

본문 제목

[PLAYDATA] 데이터 엔지니어링 9월 4주차 9/19

PLAYDATA/PLAYDATA데일리노트

by Na느님 2023. 9. 19. 09:40

본문

  • 9월 19일
순차 데이터와 순환 신경망의 개념에 대해 배운다.

 

 

순차 데이터

순차 데이터(sequential data)는 텍스트나 음성같이 순서에 의미를 가지는 데이터를 말한다. 즉 순서가 다르면 의미가 다른 데이터를 순차 데이터 라고 한다.

-> 따라서 순차 데이터를 다룰 때는 이전에 입력한 데이터를 기억하는 기능이 있어야 한다.

 

기존의 완전 연결 신경망이나 합성곱 신경망은 데이터 흐름이 무조건 앞으로만 간다. 하지만 순차 데이터는 이전 데이터를 기억하고 활용해야 하기 때문에 데이터 흐름을 뒤로 보내는 장치를 추가한다. 이 신경망을 순환 신경망(recurrent neural network, RNN) 이라고 한다.

순환 신경망은 기존의 완전 연결 신경망과 거의 똑같지만, 뉴런 층에 뉴런의 출력을 다시 입력으로 하는 장치가 추가된 점이 다르다.

순환 신경망

타임 스텝

순환 신경망은 데이터가 한번 처리될 때 마다 그것을 타임스텝 이라고 부른다.

예를들어 입력이 A, B, C 순서로 들어간다면, 다음 타임스텝에 A출력이 나오고 그 다음 타임스텝에는 B가 들어가 B출력이 나올텐데, 이 때 A출력이 되먹임 되었으므로 B출력은 입력인자로 B뿐만 아니라 A출력을 가지고 있게 된다. 따라서 B출력은 A출력을 반영(활용)한다고 할 수 있다.

 

(용어) RNN에서는 특별히 뉴런층을 셀(cell) 이라고 부른다. 그리고 뉴런의 출력값(물론 활성화 함수까지 다 거치고)을 은닉 상태(hidden state)라고 부른다.

 

(주의!) RNN에서는 하나의 셀(뉴런 층)을 뉴런 하나로 압축해서 표현한다!

 

순환 신경망에서는 활성화 함수로 tanh함수가 많이 쓰인다.

출처: https://reniew.github.io/12/

 

 

순환 신경망의 표현

출처: 위키피디아

위 그림은 순환 신경망의 한 셀(뉴런층)을 나타낸 것이다. 순환 신경망 그림을 보면 동일한 셀을 병렬로 쭉 그려놓은 경우가 있는데, 이것은 단순히 타임스텝별로 순서대로 그림을 복사해 놓은것에 불과하다.

 

순환 신경망의 식에는 활성화 함수까지 다 거친 출력을 순환가중치와 곱하는 항이 존재한다.

일반적인 뉴런의 식: y = w1x1 + w2x2 + ... + b

순환 신경망의 뉴런의 식: y = w1x2 + w2x2 + ... (wr)y' + b

여기서 y'은 이전 타임스텝의 출력이라고 한다.

 

 

순환 신경망의 작동 원리

순환층은 일반적으로 샘플(언어모델의 경우 문장)마다 차원이 2개이다.

하나의 차원은 샘플 속 item들의 갯수를 의미하고 다른 차원은 각 item을 표현하는 배열이다.

e.g.)

I 1 43 28
love 8 94 2
you 23 61 7

예시에서 I는 [1, 43, 28]을 뜻한다.

그리고 아래 행렬이 바로 샘플 하나의 값이 된다.

1 43 28
8 94 2
23 61 7

배열의 크기가 3이므로 순환층의 뉴런 갯수(column)도 3개이다.

순환 신경망의 되먹임 때문에, 첫 타임스텝에서 입력값 1의 출력값이 나오고, 이 출력값이 두 번째 타임스텝에 입력값 8과 같이 입력으로 들어간다.

순환 신경망은 마지막 타임스텝의 출력값만 다음 층으로 넘겨준다!

따라서 출력값은 (column, )차원인 1차원 행렬이지만, 순환층이 다음에 또 있다면 2차원을 입력으로 넣어줘야 하기 때문에 매 타임스텝마다 나온 출력값들을 모아두고 한꺼번에 2차원 행렬 형태로 다음 순환층에 넘겨준다.

 

순환신경망 모델도 합성곱신경망과 같이 마지막에는 완전연결층을 두어 class분류를 수행한다.

하지만 합성곱신경망과 다른 점은 마지막 셀의 출력이 1차원(column, )이기 때문에 Flatten클래스로 1차원화 해 줄 필요가 없다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

관련글 더보기