머신러닝

· 인공지능
다중 분류 신경망 구현 MinibatchNetwork 클래스를 확장하여 다중 분류를 수행하는 MultiClassNetwork 클래스를 구현해 보자. 소프트맥스 함수 추가 다중 분류에서는 마지막 출력층에 소프트맥스 함수를 사용해야 하므로 은닉층과 출력층에 각기 다른 활성화 함수를 적용한다. 이를 위해 activation() 메서드의 이름을 sigmoid()로 바꾸고 softmax() 메서드를 추가한다. def sigmoid(self, z): a = 1 / (1 + np.exp(-z)) #시그모이드 계산 return a def softmax(self, z): #소프트맥스 함수 exp_z = np.exp(z) return exp_z / np.sum(exp_z, axis=1).reshape(-1,1) 소프트맥스..
· 인공지능
다중 분류 다중 분류 신경망을 만들기 위해서는 소프트맥스(softmax) 함수와 크로스 엔트로피(cross-entropy) 손실 함수라는 새로운 개념을 알아야 한다. 이진 분류와 다중 분류는 크게 다르지 않다. 출력층의 개수만 다르고 나머지는 동일하다. 이진 분류는 양성 클래스에 대한 확률 하나만 출력하고 다중 분류는 각 클래스에 대한 확률 값을 출력한다. 예를 들어 첫 번째 클래스에 대한 확률값이 y1, 두 번째 클래스에 대한 확률값은 y2, 세 번째 클래스에 대한 확률값은 y3로 출력된다. 다중 분류 긴경망은 출력층에 분류할 클래스 개수만큼 뉴런을 배치해야 한다. 다중 분류의 문제점과 소프트맥스 함수 숫자는 확률을 얘기한다. 0.9는 90%이다. 왼쪽과 오른쪽의 신경망 모두 자동차를 타깃 클래스로 예..
· 인공지능
미니 배치 사용 딥러닝에서는 종종 아주 많은 양의 데이터를 사용하는데 배치 경사 하강법은 모든 샘플을 처리해야 하기 때문에 적절하지 않을 수 있다. 따라서 확률적 경사 하강법과 배치 경사 하강법의 장점을 절충한 미니 배치(mini-batch) 경사 하강법이 널리 사용된다. 미니 배치 경사 하강법의 구현은 배치 경사 하강법과 비슷하지만 에포크마다 전체 데이터를 사용한느 것이 아니라 조금씩 나누어 정방향 계산을 수행하고 그레이디언트를 구하여 가중치를 업데이트한다. 보통 16, 32, 64 등의 2의 배수를 사용한다. 미니 배치의 크기가 1이라면 1개의 샘플씩 수행하는 것이기 때문에 확률적 경사 하강법과 동일하다. 배치 크기에 따라 확률적 경사 하강법과 배치 경사 하강법의 장점과 단점을 가지는 방법이다. 미니..
· 인공지능
다층 신경망 하나의 층에 여러 개의 뉴런을 사용하면 신경망이 어떻게 달라질까?? 입력층에서 전달되는 특성이 각 뉴런에 모두 전달될 것이다. 이를 'Dense'하다고 표현한다. 정방향 계산이 진행되는 과정부터 알아보자. 3개의 특성과 2개의 뉴런이 있는 경우이다. 모두 입력층에서 특성을 전달받아 z1, z2의 출력을 내놓는다. 이를 행렬 곱셈으로 표현하면 다음과 같다. 가중치 행렬의 크기는 (입력의 개수, 출력의 개수)로 생각하면 된다, 현재 3개의 입력과 2개의 출력이 나오는 형태이기 때문에 (3, 2) 크기를 갖는다. 출력 통합 breast_cancer 데이터 세트는 binary 한 출력을 낸다. 즉, 악성인지 정상인지 판단하는 문제이다. 따라서 이진 분류 문제이므로 각 뉴런에서 출력된 값(z1, z2..
· 인공지능
벡터화(vectorization) 넘파이, 머신러닝, 딥러닝 패키지들은 다차원 배열(행렬) 연산을 빠르게 수행할 수 있다. 벡터화된 연산을 사용하면 알고리즘의 성능을 높일 수 있다. SingleLayer 클래스에 배치 경사 하강법을 적용해 보자. 배치 경사 하강법은 모든 샘플을 한 번의 훈련에 사용하기 때문에 자원이 더 소모된다. 벡터 연산과 행렬 연산 벡터화된 연산을 제대로 사용하려면 벡터 연산과 행렬 연산을 알아야 한다. 벡터 연산 중 하나인 점 곱(스칼라 곱)과 행렬 곱셈에 대해 알아보자. 단일층 신경망을 나타낸 그림이다. z를 구했던 강법은 가중치(w1, w,2, w3)와 입력(x1, x,2, x3)을 각각 곱하여 더했다. 코드는 다음과 같다. z = np.sum(x * self.w) + self..
· 인공지능
교차 검증 전체 데이터 세트의 샘플 개수가 많지 않을 때 검증 세트와 훈련 세트를 분리하여 사용하느라 훈련이 제대로 이루어지지 않을 결루도 있다. 이때, 교차 검증(cross validation)은 이런 경우에 사용하면 좋다. 교차 검증의 원리 교차 검증은 훈련 세트를 작은 덩어리로 나누어 다음과 같이 진행한다. 이때 훈련 세트를 나눈 작은 덩어리를 '폴드'라고 한다. 폴드를 1번씩 검증에 사용하며 훈련한다. 교차 검증 과정 훈련 세트를 k개의 폴드(fold)로 나눈다. 첫 번째 폴드를 검증 세트로 사용하고 나머지 폴드(k-1개)를 훈련 세트로 사용한다. 모델을 훈련한 다음에 검증 세트로 평가한다. 차례대로 다음 폴드를 검증 세트로 사용하여 반복한다. k개의 검증 세트로 k번 성능을 평가한 후 계산된 성..
· 인공지능
규제 적용 로지스틱 회귀에 규제를 적용해보자. 앞에서 만들어 놓은 SingleLayer 클래스에 L1 규제와 L2 규제를 적용하자. def __init__(self): self.w = None self.b = None self.losses = [] self.val_losses = [] self.w_history =[] self.lr = learning_rate self.l1 = l1 self.l2 = l2 l1, l2 변수를 만들었다. def fit(self, x, y, epochs=100, x_val=None, y_val=None): self.w = np.ones(x.shape[1])#가중치 초기화 self.b = 0#절편 초기화 self.w_history.append(self.w.copy())#가중치..
· 인공지능
규제 과대 적합을 해결하는 대표적인 방법 중 하나가 가중치 규제(regularization)이다. 가중치 규제란 말 그대로 가중치의 값이 커지지 않도록 제한하는 기법이다. 가중치를 규제하면 모델의 일반화 성능이 올라간다. 두 그래프 모두 점들을 잘 표현하고 있다. 그러면 둘 중 어떤 그래프의 성능이 더 좋을까?? 이 경우에서는 기울기가 완만한 그래프가 성능이 좋다. 박스 표시된 점까지 잘 표현하였기 때문이다. 몇 개의 데이터에 집착하면 새로운 데이터에 적응하지 못하므로 성능이 좋지 않다. 이럴 때 규제를 사용한다. 대표적인 규제 L1 규제와 L2 규제를 알아보자. L1 규제 손실 함수에 가중치의 절댓값인 L1 노름(norm)을 추가한다. w는 벡터를 의미한다. 로지스틱 손실 함수에 L1 규제를 적용해보자..
· 인공지능
학습 곡선 훈련 세트와 검증 세트의 정확도를 그래프로 표현한 것이다. 과대적합 과대적합이란 모델이 훈련 세트에서는 좋은 성능을 내지만 검증 세트에서는 낮은 성능을 내는 경우를 말한다. 첫 번째 그래프가 이에 해당한다. 이러한 모델을 '분산이 크다'라고도 말한다. 과대적합의 주요 원인 중 하나는 훈련 세트에 충분히 다양한 패턴의 샘플이 포함되지 않은 경우이다. 이런 경우네는 더 많은 훈련 샘플을 모아 검증 세트의 성능을 향상할 수 있다. 하지만, 불가능할 경우 모델이 훈련 세트에 집착하지 않도록 가중치를 제한하는 것이다. 이를 모델의 복잡도를 낮춘다고 표현한다. 과소적합 과소적합이란 모델이 훈련 세트와 검증 세트에서 측정한 성능이 가까워지지만 성능 자체가 낮은 경우를 말한다. 두 번째 그래프가 이에 해당한..
· 인공지능
모델 튜닝 사이킷런의 SGDClassifier 클래스를 이용하여 로지스틱 회귀 문제에 경사 하강법을 적용했다. 이때 loss 함수를 log로 지정했었다. from sklearn.datasets import load_breast_cancer from sklearn.model_selction import train_test_split cancer = load_breast_cancer() x = cancer.data y = cancer.target x_train_all, x_test, y_train_all, y_test = train_test_split(x, y, stratify = y, test_size=0.2, random_state=42) train_test_split() 함수를 이용하여 데이터를 나눌 ..
hvv_an
'머신러닝' 태그의 글 목록 (2 Page)