미니 배치 사용 딥러닝에서는 종종 아주 많은 양의 데이터를 사용하는데 배치 경사 하강법은 모든 샘플을 처리해야 하기 때문에 적절하지 않을 수 있다. 따라서 확률적 경사 하강법과 배치 경사 하강법의 장점을 절충한 미니 배치(mini-batch) 경사 하강법이 널리 사용된다. 미니 배치 경사 하강법의 구현은 배치 경사 하강법과 비슷하지만 에포크마다 전체 데이터를 사용한느 것이 아니라 조금씩 나누어 정방향 계산을 수행하고 그레이디언트를 구하여 가중치를 업데이트한다. 보통 16, 32, 64 등의 2의 배수를 사용한다. 미니 배치의 크기가 1이라면 1개의 샘플씩 수행하는 것이기 때문에 확률적 경사 하강법과 동일하다. 배치 크기에 따라 확률적 경사 하강법과 배치 경사 하강법의 장점과 단점을 가지는 방법이다. 미니..
ai
다층 신경망 하나의 층에 여러 개의 뉴런을 사용하면 신경망이 어떻게 달라질까?? 입력층에서 전달되는 특성이 각 뉴런에 모두 전달될 것이다. 이를 'Dense'하다고 표현한다. 정방향 계산이 진행되는 과정부터 알아보자. 3개의 특성과 2개의 뉴런이 있는 경우이다. 모두 입력층에서 특성을 전달받아 z1, z2의 출력을 내놓는다. 이를 행렬 곱셈으로 표현하면 다음과 같다. 가중치 행렬의 크기는 (입력의 개수, 출력의 개수)로 생각하면 된다, 현재 3개의 입력과 2개의 출력이 나오는 형태이기 때문에 (3, 2) 크기를 갖는다. 출력 통합 breast_cancer 데이터 세트는 binary 한 출력을 낸다. 즉, 악성인지 정상인지 판단하는 문제이다. 따라서 이진 분류 문제이므로 각 뉴런에서 출력된 값(z1, z2..
교차 검증 전체 데이터 세트의 샘플 개수가 많지 않을 때 검증 세트와 훈련 세트를 분리하여 사용하느라 훈련이 제대로 이루어지지 않을 결루도 있다. 이때, 교차 검증(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())#가중치..
모델 튜닝 사이킷런의 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() 함수를 이용하여 데이터를 나눌 ..
사이킷런 머신러닝 패키지로 널리 사용된다. Numpy, Scipy와 상호 운용되도록 설계되었다. 사이킷런의 경사 하강법이 구현된 클래스는 SGDClassifier이다. 이 SGDClassifier를 이용하여 로지스틱 회귀 문제를 해결해 보자. 사이킷런으로 경사 하강법 적용 로지스틱 손실 함수 지정 sgd = SGDClassifier(loss = 'log', max_iter=100, tol=1e-3, random_state=42) loss를 'log'로 지정한다. max_iter는 반복 횟수를 나타내는 매개변수로 100번 반복한다. random_state를 통해 난수 초깃값을 42로 설정한다. tol은 반복할 때 로지스틱 손실 함수의 값이 변경되는 정도를 컨트롤한다. 만약 tol에 설정한 값보다 적게 변경..
일반적인 신경망 일반적으로 신경망은 다음과 같이 표현된다. 가장 외쪽이 입력층, 가장 오른쪽이 출력층 그리고 가운데 층들은 은닉층이라고 부른다. 오른쪽에 작은 원은 활성화 함수이다. 단일층은 은닉층이 없이 입력층 출력 층만 존재하는 모델이라 생각하면 된다. 단일층의 모델은 다음과 같다. 앞에서 구현한 LogisticNeruon을 조금 변형하여 단일층 신경망을 만들어 보자. 손실 함수 결과 저장 변수를 추가하여 손실 함수의 결과값을 저장할 리스트 self.losses를 만든다. 샘플마다 손실 함수를 계산하고 평균을 내어 저장한다. 하지만 np.log( )계산을 위해 한번 더 조정해야 한다. a가 0에 가까워지면 -∞에 가까워지고, 1에 가까워 지면 0에 가까워지기 때문에 np.clip( )를 이용해 조정한..
뉴런 만들기 딥러닝은 뇌에 있는 뉴런을 따라한 것이다. 앞서 공부한 내용으로 뉴런을 만들어 보면 더욱 이해가 빠를 것이다. 생성자 우선, 생성자에서 필요한 변수를 선언하고 초기화한다. def __init__(self): self.w = 1.0 self.b = 1.0 여기서 1.0은 임의로 선정한 수이다. 다른 수여도 아무런 문제가 없다. 정방향 계산 정방향 계산은 예측값을 계산하는 과정이라 생각해도 된다. 즉, 기울기와 절편을 예측하는 것이다. def forpass(self, x): y_hat = x * self.w + slef.b#직선 방정식 계산 return y_hat y = wx + b라는 식을 이용하여 y_hat을 구하는 과정이라 생각하면 된다. 그럼 이제 w와 b를 적절히 조정하여 올바른 모델을..
인공지능이란? 인공지능(Artificial Intelligence)은 사람의 지능을 만들기 위한 시스템이나 프로그램을 말한다. 머신러닝, 딥러닝, 인공지능의 개념을 혼동하는 사람이 많이 있다. 쉽게 말해 머신러닝과 딥러닝은 인공지능에 포함되는 기술이고, 딥러닝은 머신러닝에 포함되는 기술이다. 다음 그림을 보면 쉽게 이해가 가능하다. 머신러닝이란? 머신러닝은 기계학습을 의미하며, 데이터의 규칙을 컴퓨터 스스로 찾아내는 것을 말한다. 기존 프로그래밍은 규칙을 사람이 직접 만들어 결과를 얻어내지만 머신러닝은 스스로 규칙을 찾아낸다. 머신러닝은 지도 학습(supervised learning), 비지도 학습(unsupervised learning)으로 나뉘다. 지도 학습은 많은 입력과 출력이 주어지면 규칙을 찾아..
KOSTA를 마무리하며... 좋은 기회로 kosta 서포터스에 선발되어 좋은 교육을 듣고, 블로그 포스팅으로 홍보활동을 했었습니다. 하지만, 코로나 바이러스 때문에 많은 활동을 하지 못해 아쉬운 마음이 큽니다. 이런 아쉬운 마음을 마지막으로 kosta에 대한 정보를 드리며 마무리해보겠습니다. 하루빨리 코로나 바이러스가 종식되기를 바랍니다...😥 kosta 메인 화면입니다. 재직자, 취업자 모두를 대상으로 교육을 진행 중입니다. 하지만, 무조건 들을 수 있는 것은 아니고 대학교의 강의와 같이 강의가 개설되면 수강 신청을 받게 되고 교육을 진행합니다. 그렇다면, 이번 달에 개설된 강의는 무엇이 있을까요?? 스크롤을 조금 내려보면, 이달의 과정을 확인할 수 있습니다. 이달의 과정을 클릭하시면 이달에 열리는 강..