케라스를 이용하여 간단한 RNN, LSTM 모델을 설계해보겠습니다. 시계열 데이터 분석에 중요한 RNN, LSTM의 기본 구조를 활용하여 간단하게 구현만 해보았습니다. (참고 : 핸즈온 머신러닝 2판) import tensorflow as tf """ 간단한 RNN 구조 keras의 SimpleRNN 에서는 기본적으로 tanh를 활성화 함수로 사용 RNN의 경우 입력 데이터의 길이에 상관 없이 time step 처리할 수 있기 때문에 input_shape=[None, 1] return_sequence=True : time step마다 출력 return 하지 않으면 마지막 time step의 결과만 출력 다음 layer를 RNN 구조 이용하려면 return_sequence=True 해야함 마무리로 Dens..
밑바닥부터 시작하는 딥러닝 책을 이용하여 딥러닝의 기본 구조를 공부했습니다. 하지만 numpy만 가지고 사용하기에는 효율이 떨어지기에 tensorflow2를 이용해 간단한 실습을 하겠습니다. 컴파일은 구글 코랩을 이용하였습니다. 구글 코랩에는 기본적으로 tensorflow와 pytorch 모두 지원하기에 엄청 큰 데이터셋을 이용하는 것이 아니라면 아주 훌륭한 도구입니다. (12시간 지나면 세션이 꺼져서 며칠 씩 돌리는 용으로는 부적합....) MNIST는 유명한 손글씨 데이터입니다. 0~9까지 손글씨 데이터를 지원합니다. tensorflow의 keras.datasets 에는 mnist 데이터 파일을 지원합니다. 조금 색다르지만, 간단한 데이터로는 fashion_mnist 도 있습니다. (이 또한 지원) ..
밑바닥부터 시작하는 딥러닝 2권은 사실 설 전에 다 봤었다. 하지만 설 전에 책을 끝내야겠다는 마음으로 좀 빨리 보다보니 잘 이해가 되지 않아 안 했었다. 그래도 자연어 처리에 대해 전반적으로 어떻게 돌아가는지는 알게 되었다. 남은 2월 일정은 좀 빡빡하여 3월에 다시 봐야겠다. 딥러닝을 좀 오래 공부한 친구에게 책 내용을 대략 말해주니 오히려 자신에게 필요한 책이라 하였다. 그만큼 책 이름 그대로 밑바닥부터 시작하는 느낌이다. 딥러닝을 전문적으로 하려는 것은 아니다. 3월부터 연구프로그램에 딥러닝을 사용해야되서 프레임워크나 라이브러리 사용법을 익히면서 예제를 푸는 게 좀 더 빠를 듯 했지만, 1,2권을 통해 전체적인 구조를 알게 되서 좋았다. 그렇기 때문에 코세라 강의에 텐서플로 강의가 몇 개 있어 그..
기본적인 RNN 구조의 문제점 1. 기울기 손실 / 기울기 폭발 장기 기억의 문제점 : 예를 들어 "Tom was watching TV in his room. Mary came into the room. Mary said hi to ?" 라는 문장에서 ?=Tom 이지만, Tom은 첫 단어 이외에 등장하지 않습니다. 순차적으로 진행해나가면서 Tom이라는 정답레이블이 주어질 때 역전파 과정에서 의미 있는 기울기를 전달해야하지만, 전달 과정에서 기울기 가중치가 0이 될 수 있습니다. 이를 기울기 손실이라 합니다. 그리고 역전파 과정에서의 행렬 곱에서는 기울기 폭발이 일어납니다. (자세한 내용 책 참고) 2. 기울기 폭발 대책 - 기울기 클리핑 식은 다음과 같습니다. hat(g) = 신경망에서 사용되는 매개변수..
RNN이란, 순환 신경망을 의미합니다. 기본적인 RNN 구조는 다음과 같습니다. 시계열 데이터 X_t = (x0, x1, ..., xt) 가 RNN 계층에 입력되어 h_t 가 출력됨을 나타내면 다음과 같습니다. RNN의 출력은 다음과 같은 식으로 계산됩니다. W_x : x를 h로 변환하기 위한 가중치 W_t : 다음 시각으로의 출력으로 변환하기 위한 가중치 b : 편향 BPTT : 시간 방향으로 펼쳐진 신경망의 오차역전파법 BPTT를 이용하면 RNN에 오차역전파법을 적용할 수 있습니다. 하지만 기본적인 BPTT를 이용하면 시계열 데이터의 크기가 커짐(길어짐)에 따라 메모리 사용량이 증가하고, 기울기가 불안정해지기 때문에 Truncated BPTT를 이용합니다. Truncated BPTT : BPTT를 끊..