반응형

전체 글 66

Tensorflow - 다중 클래스 학습 평가 이론 및 구현

Classification을 할 때 평가에 Precision이나 Recall 등이 필요할 때가 있다. Binary는 바로 지원이 되어 사용하면 되지만 Multi class의 경우는 따로 구현이 필요하다. 그에대한 Custom 함수를 김태영님의 블로그를 참고하여 Tensorflow 2.2 version으로 만들어 보았다. 모든 구현은 Label이 One-hot 형태가 아닌 int형 데이터일 때를 가정하였다. One-hot인 경우는 추가적으로 argmax를 해주는 과정이 필요하다. 위와 같은 Binary + Imbalanced Data 가 있을 때 , 모델이 예측치로 모두 파란색 공을 뽑아내면 제대로 학습이 되지 않았음에도 정확도가 80%가 나오게 된다. 따라서 Recall이나 Precision의 평가방법이..

Auto Encoder란? - Manifold와 차원 축소

이번 글에서는 Auto Encoder를 공부하면서 익힌 내용들을 정리한다. Auto Encoder는 Encoder와 Decoder의 구조로 되어있는데 PCA와 같은 차원 축소가 그 목적이었다. 그러므로 사실 핵심은 Encoder에서 Latent variable을 생성하는 것에 있다. Latent Variable은 Input으로 넣은 Data의 차원을 축소시켜서 만든 벡터인데 언뜻 생각했을 때 정보가 많이 손실돼서 안 좋은 거 아닌가?라고 생각할 수 있다. 이를 이해하기 위해 차원의 저주를 먼저 알 필요가 있다. 차원의 저주는 Data의 개수는 별로 없는데 이를 설명하려고 하는 변수의 차원은 클 때 일어난다. 예를 들어 데이터가 5개밖에 없는데 이를 설명하려는 길이 10인 벡터를 갖는 Parameter 개..

Mean Squared Error VS Cross Entropy Error

DNN에서 Loss Function을 사용할 때 아래의 2가지 가정에 적합해야 한다. 1) Train data에서의 Loss 총합은 개별 데이터 Loss의 합과 같아야 한다. $$L(\theta_{k}, D) = \sum_{i}L(\theta_{k} ,D_{i})$$ 2) DNN 출력 값으로 Loss를 계산한다. (중간 단계에서의 값으로는 계산하지 않음.) $$\bigtriangledown L(\theta_{k},D) = \sum_{i}\bigtriangledown L(\theta_{k}, D_{i})$$ Mean Squared Error(MSE)와 Cross Entropy Error(CEE)를 Loss Function으로 많이 사용하는 이유는 위의 두 조건을 만족하는 대표적 함수이기 때문이다. 이번 글..

경사하강법 이해(2) - Learning Rate란?

이번에는 경사하강법을 이용해 최적화를 할 때 Learning Rate(학습률)을 사용하는 이유를 알아 볼 것이다. 경사하강법은 이전 글에서 작성한 것처럼 Loss값을 줄이는 과정으로 파라미터를 업데이트하는 과정인데 이를 수식으로 작성하면 다음처럼 표현할 수 있다. $L(\theta+\Delta \theta) < L(\theta)$ 위의 조건의 만족되면 Loss가 계속 줄어가는 것이니 학습이 잘 되는 것이다. $L(\theta+\Delta \theta)$ 를 Taylor 정리를 사용하면 다음과 같이 나타낼 수 있다. $$L(\theta+\Delta \theta) = L(\theta) + \bigtriangledown L * \Delta \theta + \frac{1} {2}\bigtriangledown^{..

논문 리뷰: DCGAN(Deep Convolutional GAN)

"UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS"(2015) - Facebook AI Research https://www.tensorflow.org/tutorials/generative/dcgan GAN이 발표되고 1년 반 뒤에 Convolution을 깊게 쌓아 더 안정적으로 학습시킬 수 있는 DCGAN이 발표되었다. GAN은 생성자(Generator)와 판별자(Discriminator)가 경쟁을 하며 학습을 시키는 구조로 이전까지와는 다르게 2개의 모델을 학습시키게 된다. DCGAN은 이전의 GAN을 더 발전시킨 구조를 제안한 논문으로 유명하여 읽게 되었다. 모델 핵심 이 모델에서 ..

논문 리뷰: Attention을 활용한 시계열 예측 A Dual-Stage Attention-Based Recurrent Neural Network for Time Series Prediction

"A Dual-Stage Attention-Based Recurrent Neural Network for Time Series Prediction"(2017) - Yao Qin et al. https://dacon.io/competitions/official/235584/overview/ 이번 글에서는 Attention 기법을 Encoder와 Decoder에서 두 번 사용하는 Dual-Stage Attention 기반의 RNN을 이해하고 구현해 볼 것이다. 참고한 논문에서는 주가 데이터를 이용하여 모델을 사용하였지만 여기서는 Dacon에서 주관하는 온도 추정 경진대회의 데이터를 사용하였다. 데이터 설명 온도 추정에 사용되는 변수는 40가지이며 각각의 데이터는 다음과 같은 8개의 분류로 5개씩 존재한다. ..

Transformer(4) - 모델의 학습과정 정리

Transformer는 기존의 모델들과 달리 CNN의 Convolution이나 RNN의 Cell들을 이용하지 않아 낯설게 느껴져서 다시 한번 모델의 총과정을 리뷰한다. Transformer의 Input data로 Embedding 된 벡터를 넣어주는데 이때 들어가는 벡터에 Positional Encoding 방법으로 벡터의 순서를 표시해준다. 다음으로 Multi-Head Attention에서 self-attention을 수행해주고 단어 간의 관련도를 계산해준다(query, key, value가 모두 같은 sequence가 된다). 이 과정이 Transformer의 성능을 끌어올리는 핵심이다. Attention의 내적연산으로 같은 문장 내 단어끼리의 의미적, 문법적 관계를 포착해내는 중요한 과정이다. Mu..

Python - time, datetime을 이용한 시간 출력,입력 정리

python으로 시간을 출력하거나 입력할 때 time과 datetime을 많이 사용한다. 자주 사용해도 계속 까먹고 검색을 하게 되어 이참에 정리를 남긴다. 1. datetime에서 timestamp로 변환. dt = datetime.datetime(2020,2,16,15,15) ts = time.mktime(dt.timetuple()) # 1581833700 ts = dt.timestamp() # 1581833700 time의 mktime이 datetime을 timestamp로 만들어준다. 더 간단하게는 datetime 내의 함수 timestamp 를 사용하면 된다. 2. timestamp에서 datetime으로 변환. ts=1581833700 dt=datetime.datetime.fromtimesta..

python 2020.02.16

Django 시작 과정 기초와 방법

Django를 활용하여 웹을 만들려고 할 때의 방법을 남겨둡니다. '=>' 표시 후의 명령어는 command 창에서 입력하면 됩니다. 1. 프로젝트를 만들고자 하는 폴더에 들어가 커맨드를 입력해야 합니다. => django-admin startproject 프로젝트이름 -> 프로젝트 이름에 해당하는 폴더가 생깁니다. 2. 해당 폴더로 커맨드 명령 폴더를 옮겨야 합니다. => cd 프로젝트이름 그 후 app을 만들어야 하는데 app은 여러개를 만들어도 되고 하나만 만들어도 됩니다. 다만 여러 기능을 넣는 프로젝트라면 여러개를 만들어 따로 관리하는게 편리합니다. => python manage.py startapp 앱이름 -> 앱이름에 해당하는 폴더가 만들어지고 이제 앱을 만들었다는 것을 django에게 알리..

django 2020.01.31

Convolution Neural Network 원리와 구조 이해

Convolution의 핵심은 kernel을 사용하여 각 요소별 가중치를 줘서 특징을 추출한다는 것이다!! 컨볼루션에 관해서는 간단한 예시들로 이해를 하는 것이 좋다. Convolution은 한국어로 합성곱으로 번역된다. 말 그대로 '곱해서 더한다'라고 직관적으로 생각하면 된다. 이때 사용하는 것이 커널인데 Kernel은 [ 1, 2, 0, 1]과 같은 배열의 형태가 될 수 있다. 예를 들어 1차원의 data가 [1,4,6,7,4]이고 kernel이 [1,1,1] 일 때, [ (1+4+6)/3 , (4+6+7)/3 , (6+7+4)/3 ] = [11/3, 17/3, 17/3]의 결과가 나올 것이다. 이처럼 data에 커널을 통과시키면 데이터 크기가 작아지며 특징을 추출하게 된다. 이런 기법을 어디 사용할..

반응형