Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

All 126

다중분류 다층신경망 구현하기 - 상

이번 포스팅에서는 다중분류 다층신경망의 개념과 기본적인 구조에 대해서 알아본다. Multiclass Classification 다중분류는 말 그대로 여러 개의 클래스로 분류할 수 있는 모델을 의미한다. 이전 포스팅에서 다뤘던 이진분류모델과는 출력층의 개수만 다르다. 이진분류는 양성클래스에 대한 확률(y_hat)만 출력했기 때문에 출력층의 뉴런이 1개였지만 다중분류 신경망은 출력층에 분류할 클래스 개수만큼 뉴런을 배치한다. Problem. 그런데 이진분류 모델에서 출력층의 개수만 늘려서 다중분류 모델로 사용하면 한 가지 문제가 생긴다. 아래의 두 그림은 사과, 귤, 포도의 이미지를 분류하는 다중분류신경망의 출력층만 나타낸 것이다. 왼쪽과 오른쪽의 신경망은 모두 자동차를 타깃 클래스로 예측하고 있다. 과연 ..

미니배치경사하강법을 이용하는 로지스틱 회귀 모델 구현하기

이번 포스팅에서는 미니배치경사하강법의 개념과 이를 이용해서 학습하는 로지스틱 회귀 모델을 구현해본다. Mini Batch Gradient Descent Method. 미니배치경사하강법은 확률적 경사하강법과 배치경사하강법의 장점을 절충한 방식으로, 실전에서 가장 많이 사용되는 경사하강법이다. 구현 방식은 배치 경사 하강법과 비슷하지만 에포크마다 전체 데이터를 사용하는 것이 아니라 조금씩 나누어(Mini Batch) 정방향 계산을 수행하고 그레이디언트를 구하여 가중치를 업데이트 한다. 미니 배치의 크기는 보통 16,32,64 등 2의 배수를 사용한다. 미니배치의 크기가 1이라면 확률적 경사하강법이 되는 것이고, 입력데이터의 크기와 동일하다면 배치경사하강법이 된다. 미니배치의 크기가 작으면 확률적 경사하강법처..

Python으로 다층신경망 구현하기

이번 포스팅에서는 저번포스팅에서 다룬 가중치, 절편 도함수를 토대로 학습하는 다층신경망을 Python으로 구현해본다. Dataset Load & Preprocessing import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler cancer = load_breast_cancer() x = cancer.data y = cancer.target x_train_all, x_test, y_train_all, y_te..

다층신경망 경사하강법으로 가중치 업데이트하기

이번 포스팅에서는 다층신경망에서 경사하강법으로 가중치를 업데이트하는 원리를 다룬다. 단일신경망 이전 포스팅까지 다뤘던 예측 모델은 입력층과 출력층으로만 구성된 단일신경망이었다. 다층신경망 위 그림은 K개의 뉴런을 가진 다층신경망이다. 보통 입력층의 개수는 층의 개수에 포함시키지 않는다. 그래서 위와 같은 다층신경망을 2개의 층(은닉층, 출력층)을 가진 다층신경망이라고 한다. 위 그림에서 출력층의 뉴런은 1개인데, 내가 다룰 모델은 이진분류모델이기 때문에 은닉층의 각 뉴런에서 출력된 값을 하나의 뉴런으로 다시 모아야하기 때문이다. 다중분류모델이라면 출력층에 여러개의 뉴런이 존재할 수 있다. 경사하강법 적용하기 다층신경망을 단순화해서 그렸다. 경사하강법을 적용하기 위해서는 W2와 b2 그리고 W1,b1에 대..

카테고리 없음 2020.10.09

배치 경사 하강법을 이용하는 로지스틱 회귀 모델 구현하기

경사하강법은 가중치 업데이트에 사용하는 샘플(입력데이터)의 개수에 따라 배치 경사 하강법 : 모든 샘플을 사용 확률적 경사 하강법 : 무작위로 1개의 샘플을 뽑아 사용 미니 배치 경사 하강법 : 무작위로 여러개의 샘플을 뽑아 사용 3가지로 나눌 수 있다. 이번 포스팅에서는 배치 경사 하강법을 통해서 가중치 업데이트를 하는 로지스틱 회귀 모델을 구현해본다. Library Import import numpy as np import matplotlib.pyplot as plt Data Load from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split cancer = load_breast_..

카테고리 없음 2020.10.08

[모델 튜닝] K-폴드 교차검증

이번 포스팅에서는 전체 샘플 데이터의 개수가 많지 않을 때 데이터를 부풀리는 방법인 교차검증(Cross Validation)에 대해서 다룬다. Why? 훈련시킬 데이터의 개수가 부족하면 머신러닝 모델이 다양한 패턴을 학습하지 못하기 때문에 성능 높은 모델을 만들기 어렵다. 현실에서는 원하는 데이터를 충분하게 확보하기 어려운 경우가 많기 때문에 데이터의 특성은 유지하면서 데이터의 양을 늘리는 기법이 필수적이다. 교차검증도 그러한 방법 중 하나이다. How? 기존방식 이전 포스팅까지 사용했던 방식은 전체 데이터를 8:2로 나눠 훈련세트를 얻은 후, 이 훈련세트를 다시 8:2로 분할해 검증세트로 사용했다. 전체 데이터가 100개라고 가정하면 60개의 데이터만 훈련에 사용할 수 있던 셈이다. K-폴드 교차검증 ..

[모델 튜닝]하는 법 2 - 가중치 제한(feat. L1, L2규제)

이번 포스팅에서는 과대적합을 해결하는 방법 중 하나인 '가중치 제한'을 다룬다. 가중치 제한이란 모델 훈련과정에서 가중치의 수정 범위를 제한하는 기법을 말한다. 그럼 먼저, 가중치의 수정범위를 제한하는 것이 어떻게 과대적합을 해결해주는지 부터 알아보자. 이 그래프, 성능이 높다고 말할 수 있을까? 이 그래프는 샘플 데이터 6개에 너무 집착한 나머지 박스로 표시한 샘플 데이터를 제대로 표현하지 못하고 있다. 모델이 몇개의 데이터에 집착하면 새로운 데이터에 적응하지 못하므로 좋은 성능을 가졌다고 말할 수 없다. 이런 모델은 훈련세트에서는 높은 성능을 낼지 모르지만 검증세트, 테스트세트에서는 높은 성능을 내기 어렵다. 즉 과대적합이 발생하는 것이다. 가중치의 수정범위를 조절한다는 것은 모델이 훈련데이터에 대해..

[모델 튜닝] 하는 방법 - 과대적합과 과소적합

이번 포스팅에서는 머신러닝/딥러닝 모델의 성능평가 이슈 2가지 과대적합(overfittiong)과 과소적합(underfitting)에 대해서 다룬다. | Overfitting VS Underfitting 과대적합(Overfitting)이란 모델이 훈련세트에서는 좋은 성능을 내지만 검증세트에서는 낮은 성능을 내는 경우를 말한다. 구체적인 예로 분류 문제에서 훈련세트의 정확도가 99%이고, 검증세트의 정확도가 80% 수준이라면 과대적합을 의심할 수 있다. 반면에 과소적합(Underfitting)은 훈련세트와 검증 세트의 성능에는 차이가 크지 않지만 모두 낮은 성능을 내는 경우이다. | 언제 발생해?? 도서 에서는 과소, 과대 적합이 발생하는 원인을 3가지 관점에서 분석했다. 1. 훈련세트의 크기와 과대/과소..

[모델 튜닝] 머신러닝/딥러닝 Validation Set 만드는 이유와 방법

이번 포스팅에서는 머신러닝 모델을 구현할 때 Validation Set을 만드는 이유와 방법을 다룬다. | Validation Set이란? Validation Set을 직역하면 '검증데이터 집합'이다. 글자 그대로 '머신러닝 모델을 검증하기 위한 데이터셋' 즉, 성능 평가를 위한 데이터 셋이라고 보면 된다. 보통 위 그림과 같이 전체 데이터 셋의 20% 정도 떼어서 만든다. 그냥 Test Set으로 성능 평가하면 되는 거 아니야? Nope! 이는 하나의 머신러닝 모델을 구축하는 프로세스를 이해하면 쉽게 이해가 될 것이다. 모델검증과 모델평가는 분리해서 생각해야한다. 모델 검증은 모델의 성능을 평가하고, 그 결과를 토대로 모델을 튜닝하는 작업을 진행한다. 반면 모델 평가는 최종적으로 '이 모델이 실전에서 ..

[데이터 전처리] 스케일 조정

이번 포스팅에서는 AI 모델을 구현할 때, 데이터 전처리 단계에서 스케일 조정을 해야하는 이유와 방법에 대해서 다룬다. 데이터 전처리가 필요한 이유? 사이킷런과 같은 머신러닝 패키지에 준비되어있는 데이터는 대부분 실습을 위한 것이므로 잘 가공되어 있다. 하지만 실전에서 수집된 데이터는 그렇지 않다. 누락된 값이 있을 수도 있고 데이터의 형태가 균일하지 않을 수도 있다. 이런 데이터들을 그대로 사용하면 제대로 결과를 얻을 수 없다. 이런 경우 데이터를 적절히 가공하는 데이터 전처리(Data preprocessing) 과정이 필요하다. 그런데, 잘 정리된 데이터에 대해서도 전처리를 해야하는 경우가 생기는데, 바로 특성의 스케일이 다른 경우이다. 스케일이란 어떤 특성이 가지고 있는 값의 범위를 말한다. 예를 ..