모두를 위한 딥러닝 31

[DL] 모두를 위한 딥러닝 12-6 RNN (stock)

시간에 따라 변하는 데이터를 Time series data라고 한다. 시간에 따른 주가 데이터를 가지고 있는 데이터 셋을 이용하여 주가 예측을 수행해보자. Many to one 구조를 사용할 것이다. 일주일 간의 데이터를 넣고 그 다음날의 주가를 예측하는 구조이다. Input길이는 5, seqence길이는 7, Output길이는 1임을 알 수 있다. 전체 데이터의 값의 분포가 들쑥날쑥하게 되어 있으므로 MinMaxScaler를 이용하여 조정해준다. Y의 값은 Close값만 이용할 것이다. 데이터 중 70%를 학습에 사용할 것이다. 우리는 RNN과 FC레이어를 연결해 사용할 것이다. output의 마지막 값(다음 날의 주가)을 FC레이어와 연결시켜 준다. 출력값이 하나이므로 sequence_loss가 아닌..

[DL] 모두를 위한 딥러닝 12-5 Dynamic RNN

고정 길이의 데이터가 아닌 가변 길이의 데이터를 넣기 위한 기존 방법은 빈 자리에 Pad라는 특별한 기호를 사용하여 신경망이 이 부분은 없는 것으로 스스로 판단하길 유도하였다. 하지만 이 자리에도 가중치값이 존재하기 때문에 Loss 함수를 최적화 하기 어렵게 만들었다. 이를 해결하기 위해 Tensorflow는 각각 배치에 sequence길이를 입력하게 하여 출력값도 이와 동일한 길이를 출력하게 하였다. (나머지 부분은 0으로 만든다) sequence길이에 따라 출력되는 결과를 살펴보면, 설정한 길이 외의 결과값은 모두 0이 된 것을 볼 수 있다.

[DL] 모두를 위한 딥러닝 12-4 RNN + Softmax layer

앞의 내용에서는 길이가 매우 긴 문장의 경우 결과값이 제대로 나오지 않는다고 하였다. 이를 해결하기 위해서는 어떻게 해야할까? RNN구조를 더 쌓아 깊은 구조로 만들게 된다면 성능이 더 좋아질 것이다. MultiRNNCell 명령어를 이용하면 여러개의 층을 쌓을 수 있다. CNN구조의 끝 부분에는 FC 레이어가 존재한다. 이를 RNN에도 적용시켜보자. softmax를 RNN에 붙여 결과를 출력하는 형태이다. 이를 위해서 RNN의 출력 결과를 reshape를 통해 나열한 뒤 FC 구조를 통과시킨다, 이후 다시 원래의 모양으로 되돌려준다. 아직 Softmax함수를 적용하지 않음을 알 수 있는데, 이는 Cost Fucntion인 sequence_loss 함수 안에 구현이 되어 있기 때문이라고 한다. logit..

[DL] 모두를 위한 딥러닝 12-3 RNN 예제 실습

한 문자를 주면 다음 문자를 예측하는 모델 *)같은 h여도 어떨땐 i 어떨땐 e를 출력해야돼서 일반적인 foward nn으로는 불가능하다. seq=6, hidden=5, batch=1,rnn_size=5 RNN cell을 생성할때 원하는 종류를 선택할 수 있다. cell을 생성하였으면 cell을 동작시키는 코드가 필요하다. 총 5개의 문자로 이루어진 단어이므로 hidden size는 5로 설정한다. 마찬가지로 input_dim또한 5로 설정한다. 하나의 단어만 학습할 것 이기 때문에 batch 크기는 1로 설정한다. 단어에서 마지막 부분은 들어갈 필요가 없으므로 6으로 설정한다. one_hot 형식으로 데이터를 만든다. * x_data는 여기서 아직 쓰이지 않음 (다음장 참고) cell을 생성하고 실행한..

[DL] 모두를 위한 딥러닝 12-2 RNN 기초 실습

Tensorflow에서 RNN을 사용하기 위해서는 1. Cell을 만듬 (출력크기 정하기) 2. 셀을 구동시켜 출력하기 (cell과 입력 데이터를 넣음, output: 출력 / _states: 마지막 상태값) 셀의 종류는 다양하고 우리가 원하는 셀을 선택하여 선언하면 된다. hidden_size는 출력값의 크기를 나타낸다. 하나의 입력값을 넣어 출력한 결과이다. hidden_size의 값과 출력값의 크기가 동일하다. 5개의 sequence를 가진 데이터를 입력하면 출력되는 결과이다. (1,5,2)에서 5가 sequence_length 데이터를 한번에 여러개 줄려면 batch_size를 키우면 된다. 배치 처리도 입력 데이터만 수정하면 되기 때문에 간단하다.

[DL] 모두를 위한 딥러닝 12-1 RNN

하나의 단어로는 문맥을 파악할 수 없다. 이전 단어와의 조합을 통해 우리는 문장이 의미하는 바를 알 수 있다. 연속적인 데이터들의 의미를 파악하기 위해 기존의 NN/CNN 구조를 사용하는 것은 어려운 일이다. 따라서 이전의 연산 결과가 현재의 연산 결과에 영향을 미치는 신경망 구조를 만들게 되었는데, 이를 RNN 이라고 한다. RNN의 구조는 위의 그림과 같이 풀어서 나타낼 수 있다. 연속적인 데이터들이 입력으로 들어가게 되고, 현재의 입력값에 대한 출력이 과거의 연산값에 영향을 받는 구조이다. 각각의 RNN cell에서 출력값을 뽑아낸다. 위의 그림은 RNN의 연산식을 나타낸 것이다. 현재의 입력값과 과거의 상태가 현재의 상태에 영향을 미치는 것을 알 수 있다. 계산 과정에서 쓰이는 fw(함수)와 파라..

* [DL] 모두를 위한 딥러닝 11-4 CNN의 구현

convolution-각각 다른 필터를 사용하여 여러 layer만듬 CNN 구조 예시 컨볼루션 연산을 테스트 하기 위한 입력 이미지를 만들었다. 모든 요소가 1이고 2x2크기를 갖는 필터를 컨볼루션 연산을 수행하면 2x2크기의 출력값이 나오게 된다. Padding:same을 적용하게 되면 입력 크기와 출력 크기가 동일하게 된다. 여러개의 필터를 사용하여 출력 결과의 갯수를 늘릴 수 있다. 최대 풀링을 적용하여 값을 출력한다. MNIST 이미지에서 컨볼루션 연산을 수행해보자. 3,3,1,5(3,3 이미지 색깔 1 필터 5) 5줄까지만 이해하고 나머지는 그냥 출력했다 정도만 알자 5개의 필터를 적용하여 나온 출력 결과들이다. 최대 풀링을 적용한다면 위와 같은 결과가 나오게 된다. 간단한 CNN 네트워크를 구..

[DL] 모두를 위한 딥러닝 11-3 CNN case

CNN의 등장을 알린 네트워크이다. 컨볼루션 필터의 크기는 5x5이고 stride는 1이다. 풀링 레이어를 사용하였다. Normalization layer(초록색)는 최근에는 잘 사용되지 않는 레이어이다. ReLU를 처음 사용한 네트워크이다. 7개의 네트워크를 사용하여(앙상블) 성능을 향상하였다. 인셉션 모듈이라는 특이한 레이어 구조를 가지고 있는 네트워크이다. ResNet 다른 네트워크와 비교하여 네트워크가 상당히 깊어졌다. 네트워크가 깊어지면 학습이 어려워지게 되는데 ResNet은 특수한 구조를 사용하여 이를 해결하였다. 기존에는 모든 레이어를 거쳤는데 몇개는 점프하는 식으로 바꿨다. 두 네트워크(GoogLeNet, ResNet)는 유사한 구조를 가지고 있다. 이미지 뿐만 아니라 Text 분류에도 컨..

[DL] 모두를 위한 딥러닝 11-2 Max pooling and others

Pooling layer는 컨볼루션 레이어의 출력 값을 Sampling하는 레이어이다. (resize) 위 그림은 2x2필터를 적용한 최대 풀 처리과정이다. 상단부터 하단까지 2만큼 이동하며 최대값을 뽑아낸다. 이때 생성되는 출력의 크기는 필터의 크기와 stride에 따라 달라진다. 앞서 배운 여러 레이어를 조합하여 CNN네트워크를 구성할 수 있다. 네트워크의 말단 부분은 분류를 위한 FC layer를 붙여야한다. (마지막 pooling으로 나온 데이터를 분류 NN에 넣어줌)

[DL] 모두를 위한 딥러닝 11-1 CNN introduction

CNN의 기본 아이디어는 고양이 실험에서 시작되었습니다. 시각 피질 안의 많은 뉴런들이 시야의 일부 범위 안에 있는 시각 자극에만 반응을 한다는 내용입니다. 어떤 뉴런은 수직선의 이미지에만 반응하고, 다른 뉴런은 다른 각도의 선에 반응하는 뉴런이 있는 등 일부 영역에만 반응하였습니다. 자세한 내용은 링크를 참고하세요: https://excelsior-cjh.tistory.com/180 하나의 이미지를 여러개의 컨볼루션 필터를 통해 서로 다른 특징점들을 뽑아내는 방법을 이용하였고, ReLU와 Pooling레이어를 조합한다. 마지막 부분에서는 분류를 위해 FC레이어를 붙여 사용한다. 컨볼루션 필터의 수는 Input 채널의 수와 동일해야 한다. *)3은 color수 ->R,G,B *)컨볼루션 연산을 통해 하나..