Processing math: 100%
본문 바로가기

분류 전체보기113

# 6. Long Short-Term Memory (LSTM) - Code 지난 포스트에서는 LSTM의 이론에 대해 다루었다. 이번 포스트에서는 LSTM을 코드로 구현해보는데 주의해야할 점이 있다. 기존의 RNN을 구현할 때에는 은닉 상태에 해당하는 변수 hidden 하나만 다음 시퀀스의 메모리 셀로 전달하는 구조였다. 하지만, LSTM은 은닉 상태 이외에도 셀의 상태에 해당하는 변수인 cell도 같이 고려해야 한다. Pytorch를 통한 구현 """ 두 번째 단어를 입력으로 세 번째 단어가 무엇이 나올지 예측 """ import numpy as np import torch import torch.nn as nn import torch.optim as optim sentences = ['i like dog', 'i love coffee', 'i hate milk', 'you l.. 2022. 1. 3.
# 17. 군집화 평가 지표 (실루엣 계수, 응집도) 이번 포스트에서는 저번 포스트에서 다루었던 군집화 알고리즘이 잘 수행되었는지 판단하기 위한 지표에 대해 알아본다. 이번에 알아볼 지표로는 두 가지로 실루엣 계수와 응집도가 있다. 실루엣 계수 (silhouette score) 실루엣 계수는 각각의 데이터가 해당 데이터와 같은 군집 내의 데이터와는 얼마나 가깝게 군집화가 되었고, 다른 군집에 있는 데이터와는 얼마나 멀리 분포되어 있는지를 나타내는 지표이다. 실루엣 계수가 가질 수 있는 값은 -1~1이며, 1에 가까울수록 군집화가 잘 되었음을 의미한다. 하지만, 데이터 하나에 대한 실루엣 계수만 좋다고 군집화가 잘 이루어졌다고 일반화를 할 수 없다. 각 군집별 데이터의 수가 고르게 분포되어야 하며, 각 군집별 실루엣 계수 평균값이 전체 실루엣 계수 평균값에 .. 2021. 12. 21.
# 16. 군집화 알고리즘 (K-Means Clustering) 이번 포스트에서는 저번 포스트에서 다루었던 군집화 알고리즘 중 대표적인 방법인 K-Means Clustering에 대해 알아보겠다. K-Means Clustering 알고리즘은 이름에서 알 수 있다시피 K개의 군집을 정하며, 데이터들의 평균 중심(거리의 평균)을 각 군집의 중심점으로 삼는다. STEP 1 : 군집의 갯수만큼 임의의 위치에 중심점을 정한다. STEP 2 : 각 데이터를 가장 가까운 중심점에 해당하는 군집에 소속시킨다. STEP 3 : 각 군집에 속해있는 데이터들의 평균 거리를 갖는 중심위치로 군집의 중심점을 이동시킨다. STEP 2~3의 과정을 반복하고, 중심점의 위치에 변화가 없을 경우 군집화 과정을 멈춘다. 알고리즘 자체는 단순하지만, 피처 수가 많아지면 기하급수적으로 느려지는 현상이 .. 2021. 12. 9.
# 5. Long Short-Term Memory (LSTM) - Theory 지난 포스트에서는 순환 신경망 (RNN)에 대해 다루었다. RNN은 시퀀스 데이터를 처리하기에 적합하지만, Gradient vanishing 현상이 존재한다. Gradient vanishing은 신경망에서 은닉층을 거칠수록 (역전파를 통해 가중치를 편미분한) 기울기가 소실되어 학습이 느려지는 현상을 말한다. RNN에서 Gradient vanishing을 직관적으로 설명하면 문장이 길어질수록 앞의 내용을 잊어버리고 뒤에서 엉뚱한 추론을 한다는 의미이다. (역전파와 Gradient vanishing에 관련된 내용은 추후에 포스트에서 자세하게 다루겠다.) RNN의 Gradient vanishing 문제를 보완하기 위해 메모리 셀에 단순히 은닉 상태(hidden state)뿐만이 아닌 셀 상태(cell stat.. 2021. 12. 9.
# 4. Recurrent Neural Network (RNN) - Code 이번 포스트에서는 지난 포스트에서 다루었던 RNN의 이론을 바탕으로 코드로 직접 구현해본다. RNN의 은닉층 연산에 대해 간단히 복습을 해보자. ht=tanh(Wxxt+Whht1+b) 위 식은 이전 메모리 셀의 은닉 상태(ht1)와 현재 시퀀스의 입력 데이터(xt)를 바탕으로 현재 메모리 셀의 은닉 상태를 연산하는 식을 의미한다. Dh : 은닉층의 크기 d : 입력 벡터의 크기 (피처 수, 단어의 종류 수) Numpy를 통한 구현 import numpy as np # sequence data : N x T x D (샘플 수 x 시퀀스 수 x 차원 수) time_steps = 10 # T (시퀀스 수) input_dim = 4 # .. 2021. 12. 7.
# 3. Recurrent Neural Network (RNN) - Theory Sequence Data (시퀀스 데이터) 이번 포스트에서는 순환 신경망(Recurrent Nerual Network, RNN)에 대해 다룬다. RNN은 입출력을 시퀀스(=시간) 단위로 처리하는 모델이다. 고로, 시계열 데이터를 처리하는데에 적합하다. RNN을 다루기 이전에 시퀀스에 대해 간략하게 짚고 넘어가자. 이전에 다루던 데이터는 시간을 고려하지 않은 데이터들이었다. Tabular 데이터는 N×D의 모양을 가지고 있다. 이때, N은 데이터 샘플의 수, D는 피처의 수다. 여기에 시간을 고려한 데이터를 하나의 배열에 표현하려면 N×T×D로 표현할 수 있다. 그리고 RNN의 각 시퀀스의 입력에 대입되는 모양은 N×1×D가 .. 2021. 12. 7.