일반적인 신경망 일반적으로 신경망은 다음과 같이 표현된다. 가장 외쪽이 입력층, 가장 오른쪽이 출력층 그리고 가운데 층들은 은닉층이라고 부른다. 오른쪽에 작은 원은 활성화 함수이다. 단일층은 은닉층이 없이 입력층 출력 층만 존재하는 모델이라 생각하면 된다. 단일층의 모델은 다음과 같다. 앞에서 구현한 LogisticNeruon을 조금 변형하여 단일층 신경망을 만들어 보자. 손실 함수 결과 저장 변수를 추가하여 손실 함수의 결과값을 저장할 리스트 self.losses를 만든다. 샘플마다 손실 함수를 계산하고 평균을 내어 저장한다. 하지만 np.log( )계산을 위해 한번 더 조정해야 한다. a가 0에 가까워지면 -∞에 가까워지고, 1에 가까워 지면 0에 가까워지기 때문에 np.clip( )를 이용해 조정한..
로지스틱
로지스틱 회귀 뉴런 만들기 우선 __init__(), forpass(), backprop()은 앞서 만든 뉴런과 별로 다르지 않다. class LogisticNeuron: def __int__(self): self.w = None self.b = None def forpass(self, x): z = np.sum(x * self.x) + self.b return z def backprop(self, x, err): w_grad = x * err b_grad = 1 * err return w_grad, b_grad forpass에서 np.sum은 numpy모듈에서 sum이라는 메서드를 이용하여 가중치와 입력의 곱을 더하는 것이다. 훈련 활성화 함수라는 것이 추가되었기 때문에 fit()함수를 조정해야 한다...
로지스틱 손실 함수 로지스틱 손실 함수는 다중 분류를 위한 손실 함수인 크로스 엔트로피(cross entropy) 손실 함수를 이진 분류 버전으로 만든 것이다. a를 활성화 함수가 출력한 값이고 y는 타깃이라 하자. L = -( y * log(a) + (1 - y) * log(1-a)) 그렇다(1), 아니다(0)라는 식으로 2개의 정답만 있기 때문에 왼쪽과 오른쪽이 반대가 되는 상황입니다. 식을 최소로 만들다 보면 a의 값이 우리가 원하는 목표치가 된다. 이제 가중치와 절편을 찾기 위해 미분만 하면 된다. 로지스틱 손실 함수 미분하기 로지스틱 손실 함수를 미분하면 다음과 같다. 함수를 기울기(가중치)와 절편에 대해 편미분을 진행하면 다음 식이 나온다. 이 식을 자세히 보면 앞에서 사용한 제곱 오차를 미분..
로지스틱 회귀를 제대로 이해하기 위해서는 먼저 알아볼 개념이 몇 가지 있다. 그중 하나는 퍼셉트론이다. 퍼셉트론이란? 1957년 코넬 항공 연구소의 프랑크 로젠블라트는 이진 분류 문제에서 최적의 가중치를 학습하는 알고리즘을 발표했다 이것이 퍼셉트론이다. 선형 회귀와 유사하게 직선 방정식을 사용한다. 하지만 퍼셉트론은 마지막 단 게에서 샘플을 이진 분류하기 위하여 계단 함수를 사용한다. 계단 함수를 통과한 값을 다시 가중치와 절편을 업데이트하는 데 사용한다. 위 구조를 방정식으로 표현하면 w1x1 + w2x2 + b = z이다. z가 0보다 크거나 같으면 1로, 0보다 작으면 -1로 분류한다. 이때 1로 분류되는 걸 양성 클래스, -1을 음성 클래스라고 한다. 아달린 퍼셉트론에서 조금 더 개선한 적응형 선..