본문 바로가기
Programming/MachineLearning

딥러닝 순환 신경망 RNN 10분 만에 이해하기

by 하하호호 2021. 12. 17.
반응형

인공 지능의 시대

 

우리는 인공지능 시대에 살고 있다.

인간의 감정을 이해하고, 인간의 삶을

위협하는 인공지능이 아니라, 비서로써

혹은 검색의 어시스턴트로 인공지능

기술이 도입되고 있다.

 

인공지능 서비스의 가장 대표적인 사례는

인공지능 비서다. 애플의 시리, 마이크로소프트의

코타나, 아마존의 알렉스 등등 스피커의 형태로

우리 옆에 다가와있다.

 

애플의 시리가 어떻게 사람의 말을 이해하고,

이에 맞는 문장을 만들어서 음성으로 출력하는지

궁금해본적 있는가? 

 

이런 인공지능 비서들이 사람말을 이해한다는 것은

이미 인간이 사용하는 언어를 상당부분 습득하고,

학습을 진행했다는 뜻이다. 

 

인간의 문장은 여러개의 단어로 구성이 되고, 전체적인

문장의 의미를 이해하기 위해서는 앞에서 입력된

단어가 저장이 되어 있다는 것이다. 모든 문장이 입력되고

나서 처음 부터 단어를 조립하면서 문장의 의미를

출력해낸다. 

 

 

순환신경망(Recurrent Neural Network)

 

여기에 들어가는 인공지능 머신러닝의 기술이 순환 

신경망(Recurrent Neural Network)다. 기억된 데이터가

얼마나 중요한지를 판단해서 딥러닝의 다음 층으로 

입력데이터를 넘기게 된다.

 

하지만 다음 층으로 데이터를 넘기기 전에 모든 단어를

입력받아서 가중치를 결정해야 하기때문에, 한개의 층에서

학습이 순환하면서 머물기 때문에, 순환 신경망이라 

부르는 것이다.

 

RNN에서는 입력된 단어에 따라서 출력값이 변하기

때문이다. 예를 들어서 한국의 인구는 몇명이야? 라고

묻는 것과 미국의 인구는 몇명이야? 라는 질문은 인구의

양을 묻는 건 동일하지만 어떤 인구인지에 따라서 출력

결과가 달라지기 때문이다. 즉, 신경망에서 입력된 모든

단어를 기억하고, 앞의 단어가 뒤의 단어에 영향을 미치고

있는 것이다.

 

LSTM(Long Short Term Memory)

한개의 층을 순환하면서 모든 단어를 입력받고 저장해야

하는 RNN의 특성상 한개층에서 기울기 소실 문제를 피해

갈 수 없다.

 

오히려 다른 신경망 알고리즘 보다 기울기 소실 문제가 

더 심각하게 발생할 수 있다. 기울기 소실문제는 아래 

글을 참고하길 바란다.

 

이 문제를 해결하기 위해 나온 솔루션이 LSTM이다.

RNN신경망을 순환하기 전에 다음층으로 입력된

데이터를 넘길지 말지를 결정하는 단계를 하나 더 

추가해서 기울기 소실 문제를 해결한다.

 

 

딥러닝 핵심 개념 신경망 10분만에 이해하기

인간의 신경망 작동 인간의 뇌는 약 1000억개의 뉴런으로 구성된다. 뉴런 사이에는 시냅스라는 연결부위가 존재한다. 신경 말단에서 자극을 받으면 시냅스에서 화학물질이 분비되고, 전위 변화

incomeplus.tistory.com

 

딥러닝 예제

 

이제 RNN을 어떻게 구현하는지 알아보자.

데이터는 로이터 뉴스를 가지고 카테고리를

분류하는 작업을 진행한다.

 

1. 데이터셋 불러오기

 

먼저 keras.datasets에서 로이터 통신 뉴스

데이터를 가져 온다. 데이터를 확인해보면,

11,258개의 뉴스 데이터가 존재한다. 이 중

20%는 테스트용으로 80%는 학습용으로

사용해서 딥러닝 모델을 설계한다.

 

학습용 데이터를 출력해보면 길이가 100이하인

1차원 리스트가 출력된다. 뉴스 기사에서 단어의

반복되는 횟수를 나타내는 데이터다. 

 

num_words 인자는 1000회 미만으로 반복된

데이터를 출력한다는 것이다.

test_split은 테스트 데이터로 몇%를 사용하겠냐는

것이다. 0.2는 20%를 의미한다.

 

1
2
3
4
5
6
7
8
9
10
from keras.datasets import reuters
import numpy
 
(X_train, Y_train), (X_test, Y_test)  = reuters.load_data(num_words=1000, test_split=0.2)
 
category = numpy.max(Y_train) + 1
print("category : ", category)
print(len(X_train), "학습용 뉴스 기사")
print(len(X_test), "테스트용 뉴스 기사")
print(X_train[0])
print(len(X_train[0]))
cs

2. 데이터 전처리

뉴스 기사에서 반복되는 단어의 갯수가 

기사들마다 다르기 때문에, 모든 기사의

단어 숫자를 맞춰준다. keras의 sequence

사용한다.

 

maxlen은 단어 수의 최대크기를 100으로 한정

한다는 것이다. 단어수가 100개 이상인 기사는

100개까지만 데이터를 가져오고 나머지는 

모두 0으로 채운다. 

 

결과값 Y는 카테고리 별로 숫자가 배정되어있다.

딥러닝의 결과값으로 조정하기 위해서는 0과 1로

이뤄진 1차원 배열로 변경해줘야 한다. 이때 

사용하는 전처리 함수가 to_categorical() 함수다.

 

1
2
3
4
5
# 데이터 전처리
x_train = sequence.pad_sequences(X_train, maxlen=100)
x_test = sequence.pad_sequences(X_test, maxlen=100)
y_train = np_utils.to_categorical(Y_train)
y_test = np_utils.to_categorical(Y_test)
cs

 

3. 딥러닝 모델 설계

이제 모델을 설계한다.

Sequential() 함수를 사용해 새로운 층 구조를 생성한다.

Embedding()함수는 데이터 전처리 과정을 통해 입력층에서

데이터를 입력받는다. 그리고 다음층으로 보낼 데이터를 

변환해서 전송한다. Embedding()은 항상 모델설정의 

가장 첫 부분에 와야 한다. 입력층의 데이터를 직접 입력

받는 함수이기 때문이다.

Embedding('불러온 단어의 총 개수', '기사당 단어의 갯수')

 

LSTM은 RNN에서 먼저 입력받은 데이터의 가중치를 

결정하는 녀석이다. LSTM은 다음층으로 데이터를 보낼 때

활성화 함수로 Tanh을 사용한다.

LSTM('기사당 단어의 갯수', '기타 옵션')

 

모델의 출력층에서는 46개의 노드를 설정한다.

그 이유는 전체 카테고리의 갯수가 46개이기 때문이다.

활성화 함수는 다항분류 문제이기 때문에 0과 1의 특징을

두드러지게 하는 softmax()함수를 사용한다.

 

1
2
3
4
5
# 모델을 설정 합니다.
model = Sequential()
model.add(Embedding(1000100))
model.add(LSTM(100, activation='tanh'))
model.add(Dense(46, activation='softmax'))
cs

 

 

4. 모델 컴파일

모델 설계가 완료되면 컴파일을 진행한다.

다항 분류에서 가장 많이 사용되는 오차함수는

categorical_crossentopy()함수다.

최적화 함수는 Adam()함수를 사용한다.

1
2
3
4
# 모델을 컴파일 합니다.
model.compile(loss='categorical_crossentropy',
             optimizer='adam',
             metrics=['accuracy'])
cs

 

5. 딥러닝 모델 학습 및 결과 출력

이제 딥러닝 모델 학습을 진행한다.

model.fit()으로 반복할 횟수인 epochs를

20번을 주고, 한번에 100개의 샘플을 

집어넣어서 학습을 진행한다.

 

출력결과를 뽑아보면 70%의 정확도로

로이터 뉴스기사 카테고리를 분류하고 

있음을 확인할 수 있다.

 

1
2
3
4
5
# 모델을 실행합니다.
model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=20, batch_size=100)
 
# 테스트 정확도를 출력합니다.
print("\n Test Accuracy : %.4f" %(model.evaluate(x_test, y_test)[1]))
cs

 

 

 

더 읽을거리

 

 

딥러닝 머신러닝 차이, 머신러닝 딥러닝

머신러닝 딥러닝 차이 알파고가 대한민국을 초토화 시킨지 5년이 지났다. 실생활에도 인공지능이 많이 들어 왔고, 무수히 쌓여가는 데이터들을 기반으로 한 새로운 사업들이 계속 등장하고 있

incomeplus.tistory.com

 

 

딥러닝의 층 구조 딥러닝을 배워보자

더보기 딥러닝 기본 구조 신경망 딥러닝의 구조는 크게 3부분으로 나뉘어져 있다. 1. 입력 부분 2. 분석 부분 3. 출력 부분 마지막으로 모델을 만들고 난 후, 컴파일을 하는 부분으로 구성된다. 층

incomeplus.tistory.com

 

 

딥러닝 CNN 컨볼루션 신경망 10분만에 이해하기

딥러닝이 사용되는 분야는 다양하다. 그 중에서도 많은 딥러닝 모델들이 도전하는 분야가 바로 이미지 인식 분야다. 이미지 인식을 하기 위해서는 프레임을 이해하고 분해하고 해석할 수 있어

incomeplus.tistory.com

 

 

딥러닝 손글씨 예측 모델 만들어보기 (feat 데이터정규화)

딥러닝 손글씨 인식하기 딥러닝을 공부하면 가장 유명한 도전과제가 손글씨를 인식하는 것이다. 컴퓨터가 사람이 쓴 글을 읽고 의미를 데이터화 하기 위해서 필수적인 과정이다. 손글씨를 이해

incomeplus.tistory.com

 

 

딥러닝 수치를 예측해보자 (feat 선형 회귀 분석)

딥러닝 수치 예측 모델 참 거짓을 판별하는 모델에서 한발 더 나아가서 수치를 예측하는 모델이 필요하다. 현실에서 수치를 예측하는 것이 더 필요한 경우가 많다. 구체적인 수치를 예측하기 위

incomeplus.tistory.com

 

반응형

댓글