순환신경망
: RNN(Recurrent Neural Network)는 뉴런의 상태(state)를 저장하고 이를 다음 스텝에서의 입력으로 사용함으로써 긴 순서열에 대해서도 예측을 할 수 있는 신경망 구조이다.
- 순차적(sequence) 인 데이터를 입력 받아 결과값을 도출하는데 사용하는 딥러닝 모델
- 대표적으로 자연어 처리에 상당히 많이 사용
- 이전 입력 값들(단어들)이 현재 입력 값(단어)의 출력 값(품사)에 영향을 줌
품사가 도출 되도록 프로그램을 만들었는데, google 이라는 단어를 봤을 때 자리에 따라서 동사와 명사로 다른 품사로 출력됩니다. 문장을 통해서 공통점을 찾아 출력될 수 있도록 만듭니다 . 제시된 방향성을 정해줘야지 정확한 데이터를 출력해줍니다.
RNN의 일반적인 구조
RNN 의 심층 구조
활성화 함수 : 탄젠트 함수 사용.
시간 차를 두고 순차적인 데이터를 넣습니다. 시계열의 특징을 가지고 있습니다.
RNN 의 구조 메모리 셀
메모리 셀 (memory cell 혹은 간단히 cell)
- 타임 스텝 t 에서 순환 뉴런의 출력은 이전 타임 스텝의 모든 입력에 대한 함수이기 때문에 이를
일종의 메모리 형태라고 말할 수 있음
- 타임 스텝에 걸쳐서 어떤 상태를 보존하는 신경망의 구성 요소
- 보통 RNN 에서 셀이라고 말할 때는 완전 연결 신경망에서 층 ( 을 의미
일반적으로 타임 스텝 t 에서의 셀의 상태 ℎ𝑡 ℎ는 hidden 을 의미
RNN 네트워크에 셀이 한 개일 경우의 가중치 , 상태값 , 출력값
import tensorflow as tf
import numpy as np
tf.set_random_seed(777)
# hello 다음을 추천해주게끔 하는...
# 스펠링은 각각의 독립적인 의미를 가지고 있지만
# 'he'를 입력 했을 때, 서로의 연관성을 가지고 추천하게끔 만들어준다.
# 컴퓨터 선택의 최적화 되어 있는 수치로 표현 해야한다.
# h:0 , e:1 , l:2 , o:3 임의의 수를 넣어준다.
# One Hot Encoding
h = [1,0,0,0]
e = [0,1,0,0]
l = [0,0,1,0]
o = [0,0,0,1]
# RNN input_dim(4) -> output_dim(2), hidden_size(2)
hidden_size = 2
cell = tf.contrib.rnn.BasicRNNCell(num_units=hidden_size)
# contrib : 상당수 많은 개발자들이 미리 구현해서 오픈하거나 공개하는 경우가 많다.
# print("cell:", cell.output_size, cell.state_size)
x_data = np.array([[h,e,l,l,o]],dtype=np.float32)
# print("x_data:", x_data)
output, _states = tf.nn.dynamic_rnn(cell, x_data, dtype=tf.float32)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print('output: ',output.eval())
eval() : 내부에서 자동적으로 tensor들의 동작이 되어지고 출력되지는 결과값 들을 return 시킨다.
입력값이 1x2 행렬이고 , RNN 의 상태값이 1x3 의 행렬일 경우 , W 는 총 5 개의 행을 가지게 됩니다
'Anaconda > MachineLearning' 카테고리의 다른 글
[MachineLearning] 사이킷런(scikit-learn) - Part2(교차검증) (0) | 2020.11.20 |
---|---|
[MachineLearning] 사이킷런(scikit-learn), Part1(붓꽃 품종 예측) (0) | 2020.08.29 |
[MachineLearning] 학습 관련 기술 (0) | 2020.08.19 |
[MachineLearning] NN for XOR (0) | 2020.08.19 |
[MachineLearning] tensorflow 이용 - Softmax 함수 (0) | 2020.08.18 |