728x90

IT 417

[python/Tensorflow2.0] RNN(Recurrent Neural Network) ; seq to seq with attention (simple neural machine translation, attention)

1. Attention 방식이란? seq to seq의 성능을 높이기 위해 도입된 방법 중 하나인 seq to seq Attention에 대해 알아보는 시간을 가지도록 하겠다. 기존의 seq to seq는 다음과 같은 문제점을 가지고 있다. ①중간에 한 개의 벡터 값(C)을 활용하는 방식으로는 모든 정보를 담기 어렵다. ②입력 언어와 타켓 언어가 길면 길어질수록 모델의 성능이 떨어지는 현상이 발생한다. 위와 같은 문제를 해결하기 위해 등장한 것이 바로 Attention이다. 이는 우리가 영어 지문을 해석할 때 모든 정보를 기억하기 보다 중요한 문장이나 단어에 집중하듯, 모델이 예측을 할 때 중요한 정보만 기억하면서 학습하는 구조이다. 기존에 배운 seq to seq에서 어텐션을 적용한 그림을 한 번 살펴..

IT/AI\ML 2020.04.21

[python/Tensorflow2.0] RNN(Recurrent Neural Network) ;seq to seq(simple neural machin translation)

1. seq to seq 구조 이번에는 챗봇이나, 번역기 등에서 사용하는 seq 2 seq에 대해 알아 볼 것이다. seq 2 seq는 시퀀스의 입력을 받고 시퀀스를 출력하는 모델이다. 일반 RNN도 시퀀스의 입력을 받지만 seq 2 seq 모델은 인코더와 디코더 구조가 존재한다는 차이점이 있다. 인코더 부분에서는 입력 정보를 담은 벡터를 만들어내고 이후 디코더에서는 이 벡터를 활용하여 재귀적으로 출력값을 만들어내는 구조이다. 그림으로 살펴보자. 우선 아래쪽의 박스가 인코더로 RNN step마다 입력값이 들어가고 있다. 이때의 입력값은 하나의 단어가 됐고 인코더 부분의 전체 신경망의 마지막 부분에 C로 표현된 하나의 벡터 값이 나온다. 이 벡터는 인코더 부분의 정보를 요약해 담고 있다. 정확하게 말하자면..

IT/AI\ML 2020.04.21

[python/Tensorflow2.0] bidirectional RNN(Recurrent Neural Network) ; many to many

1. bidirectional(양방향) RNN 이란 ? 이전 강의까지는 모두 RNN을 모두 단방향으로만 활용을 하였는데, 사실 이 방식은 정보의 불균형이 존재한다. 풀어서 설명하자면 다음과 같다. 단방향 RNN이 시퀀스의 첫 번째 토큰을 읽었을 때, 첫 번째 토큰에 대한 hidden states에는 정보가 1만큼 저장되어 있다고 하면, 그 정보를 기반으로 첫 번째 아웃풋을 내고, 다시 RNN이 시퀀스의 두 번째 토큰을 읽었을 때는 첫 번째 토큰에 대한 hidden states의 정보도 활용하여 두 번째 아웃풋을 출력하고, 또 다시 RNN이 시퀀스의 세 번째 토큰을 읽었을 때는 첫 번째와 두 번째 토큰에 대한 hidden states의 정보를 활용하여 세 번째 아웃풋을 내는 방식이므로 정보의 불균형이 생길..

IT/AI\ML 2020.04.21

[python/Tensorflow2.0] RNN(Recurrent Neural Network) ; many to many

1. Many to Many 방식이란 ? ​many to many 방식은 자연어 처리에서 개체명 인식, 또는 형태소 분석과 같은 시퀀스 태깅을 모델링 하는데 활용할 수 있다. 이전에 다뤘던 many to one의 경우 RNN이 시퀀스를 구성하고 있는 각각의 토큰을 읽어들이면서 시퀀스의 마지막에 해당하는 토큰을 읽었을 때 출력을 내는 구조였다. 이와는 다르게 many to many는 RNN이 시퀀스를 구성하고 있는 각각의 토큰에 대해서 모두 출력을 하는 구조이다. ​ RNN을 many to many 구조로 활용하는 방법을 간단한 형태소 분석 예제를 통해 확인해보도록 하자. 예를 들어 'tensorflow is very easy'라는 문장이 주어졌을 때, 문장의 단어 단위로 tokenization을 한 후 ..

IT/AI\ML 2020.04.21

[python/Tensorflow2.0] RNN(Recurrent Neural Network) ; many to one stacking

1. Stacking이란? ​CNN에서 convolution layer를 여러 개를 썼듯 ,RNN도 마찬가지로 여러 개를 쌓을 수 있다. 이를 multi layered RNN 또는 stacked RNN이라고 얘기한다. CNN에서 convolution layer를 여러 개 쌓았을 때, 인풋 이미지에 가까운 convolution layer는 edge와 같은 글로벌한 feature을 뽑을 수 있고 아웃풋에 가까운 convolution layer는 좀 더 abstract한 feature을 뽑을 수 있듯이 RNN에서도 stacked RNN를 활용하여 비슷한 효과를 얻을 수 있다. 이는 이론적으로 증명된 것은 아니지만 다양한 문제를 풀 때 stacked RNN 구조가 shallow RNN보다 더 좋은 성능을 보여왔..

IT/AI\ML 2020.04.21

[python/Tensorflow2.0] RNN(Recurrent Neural Network) ; many to one

이번에 다룰 Many to one은 특히 자연어 처리 분야에서 어떤 문장, 또는 단어를 RNN으로 인코딩하고 해당 문장 또는 단어의 sentiment를 classification하는 데 활용할 수 있다. ​ 먼저 간단하게 many to one의 활용 방법을 확인해보자. 예를 들어 'This movie is good'이라는 문장이 주어져 있을 때, 문장의 polarity를 파악하는 문제를 푼다고 가정해보자. 'This movie is good'문장을 단어의 시퀀스라고 생각해 문장을 ['This', 'movie', 'is', 'good']과 같이 단어 단위로 쪼갠 후 (이를 'Tokenization'라고 한다) Tokenization한 단어들을 RNN에 입력하면 RNN은 각각의 토큰을 읽고, 마지막 토큰을 ..

IT/AI\ML 2020.04.21

[python/Tensorflow2.0] RNN(Recurrent Neural Network) ; basic

1. RNN(Recurrent Neural Network)란? ​음악, 동영상, 에세이, 시, 소스 코드, 추가 차트의 공통점은 바로 시퀀스라는 점이다. 여기서 시퀀스(sequence)란 연관된 연속의 데이터를 의미한다. 음악은 음계들의 시퀀스, 동영상은 이미지의 시퀀스, 에세이는 단어들의 시퀀스 등으로 볼 수 있다. 한 페이지의 에세이, 한 권의 에세이 등이 있듯 시퀀스의 길이는 가변적이다. 기존의 뉴럴 네트워크 알고리즘은 고정된 크기의 입력을 다루는 데는 탁월하지만, 이러한 가변적인 크기의 데이터를 모델링하기에는 적합하지 않 는 문제점이 있었다. 이 때 등장한 것이 바로 RNN(Recurrent Neural Network, 순환신경망)이다. RNN이 기존 뉴럴 네트워크와 다른 점은 '기억'(다른 말로..

IT/AI\ML 2020.04.21

[python/Tensorflow2.0] Mnist 학습 모델 (4)-CNN; Best CNN

지금까지 배운 개념들을 활용해서 모델의 성능을 최대한 끌어내는 실습을 해본다. 우리가 사용하고 있는 CNN의 구조는 아래와 가다. CNN구조를 변경하지 않을 것이며, 이 상태에서 성능을 향상 시킬 수 있는 방법은 아래의 네 가지이다. How to Get the Best Performance ​- Data Augmentation ; 사용 데이터의 양을 늘리는 방법 - Batch Normalization - Model Ensemble - Learning Rate Decay 여기서 이 네 가지 방법을 모두 사용하여 성능을 향상시켜 볼 것이다. 따라서 이전과 달리 10단계로 뉴럴 네트워크를 구성하게 될 것이다. ​ 1. Set hyper ..

IT/AI\ML 2020.04.21

[python/Tensorflow2.0] Mnist 학습 모델 (3)-CNN; Ensemble

0. NN Implementation Flow in TensorFlow 1. Set hyper parameters ; learning rate, training epochs, batch size, ect. ​ 2. Make a data pipelining ; use tf.data # data pipeline이란 데이터 셋을 load하고, 앞에서 설정했던 batch_size만큼 테이터를 가져 와서 네트워크에 공급하는 역할 ​ 3. Build a neural network model ; tf.keras의 subclassing 사용 ​ 4. Define a loss function ; cross entropy # 뉴럴 네트워크의 output과 우리가 가진 정답(label)간의 error비교 # classifi..

IT/AI\ML 2020.04.20

[python/Tensorflow2.0] Mnist 학습 모델 (2)-CNN;Sequential, Functional, Model Subclassing

0. NN Implementation Flow in TensorFlow 1. Set hyper parameters ; learning rate, training epochs, batch size, ect. ​ 2. Make a data pipelining ; use tf.data # data pipeline이란 데이터 셋을 load하고, 앞에서 설정했던 batch_size만큼 테이터를 가져 와서 네트워크에 공급하는 역할 ​ 3. Build a neural network model ; tf.keras의 sequential API / tf.keras의 Functional API / tf.keras의 subclassing ​ 4. Define a loss function ; cross entropy # 뉴럴 ..

IT/AI\ML 2020.04.20
728x90