분류하는 뉴런은 딥러닝에서 가장 많이 사용하는 것이다. 일반 데이터를 분류하고자 할때는 데이터가 없어서, 분류를 하지 못하였다면, 사진이나 글 같은 비정형 데이터는 상당히 많다. 하지만, 그것을 하는데도 사전에 전처리 기술이 필요하지만, 딥러닝은 퍼셉트론을 기반으로 지속적으로 발전 해 온 것도 사실이다.
1. Perceptron(퍼셉트론)
1957년 코넬 항공 연구소(Comell Aeronauticla Lab)의 프랑크 로젠 블라트(Frank Rosenblatt)는 이진분류 문제(Binary classification)란 임의의 샘플 데이터를 True나 False로 구분 하는 문제로 판단 한다.
이진 문제에서 최적의 가중치를 설명 하고자 하면, 위의 그림에서와 같이 뉴런은 입력 신호를 받아 $w_1x_1 + w_2x_2 = z $ 와 같은 '선형함수'를 만든 다음 계단 함수 0을 중심으로 신호가 0보다 크면, True , 0보다 작으면 False 신호 가지고 분류 하였다. 즉 아래 그림과 같이 계단 함수를 적용 하였다.
2. 아달란(Adaline)
퍼셉트론이 등장한 이후 1960년대 스탠포드 대학 버나드 위드로우(Bernard Widrow)와 테드 호프(Ted Hoff)가 퍼셉트론을 개선한 적응형 선형 뉴런 (Adaptive Linear Neuron) 을 발표 하였다.
뉴런은 입력 신호를 받아 $w_1x_1 + w_2x_2 = z $ 와 같이 계산 한 다음 역방향 계산 이후에 계단 함수를 적용 하였다. 앞에서 한 퍼셉트론과 다르게, 역방향 계산을 계단 함수 앞에 놓았다.
3. 로지스틱 회귀
로지스틱 회귀는 현재 사용하고 있는 딥러닝의 대표적인 모형 이다. (2006년 Geoffrey Hinton) 교수에 의해 부활
로직스회귀는 퍼센트론,아달란 모델을 거처 더욱 발전된 모형인데, 선형 모형모형에서 활성화 함수를 비선형 함수인 로지스틱으로 발전 시킨 것이다.
선형 함수 z를 산출한 이후에 활성화 함수를 통과하여, a 값을 만드는데, 앞서서 이야기한 시그모이드 함수는 0~1까지의 함수값을 가지고 있다. 확률은 정하기 나름이지만, 0.5%이하이면, 음성 클래스, 이상이면 양성 클래스로 해석 한다.
로지스틱 함수를 보려면 여기를 클릭 하십시오. 4. 로지스틱 손실 함수 로지스틱 손실 함수는 다중분류를 의한 손실 함수인 크로스 엔트로피(cross entropy)를 사용하게 된다. 아래의 예제는 이진 분류지만, 실무에서는 그냥 묶어서 크로스 엔트로피라고 부른다. 여기에서 a는 활성화 한 값이고, y는 종속변수(target) 이다.
$$ L = -y(log(a) + (1-y)log(1-a)) $$
이진 분류는 그렇다(1), 아니다(0)라는 식으로 2개의 정답만 즉 Target 값이 (0,1) 이다.
위의 두식의 값을 최소로 만들다 보면 a 값이 우리가 원하는 목표치가 된다는 것을 알 수 있다.
예를 들어 양성 클래인 경우 로지스틱 손실함수의 값을 최소로 만들려면, a는 1에 자연스럽게 가까워 진다.
반대로 음성 클래인 경우 로지스틱 손실 함수의 최소로 만들면 a 가 0에 자연스럽게 가까워진다.
1) 로지스틱 손실 함수 미분
w 에 대한 미분 : $ { \partial \over \partial w_i}L = -(y-a) x_i $
a 에 대한 미분 : $ { \partial \over \partial b} L = -(y-a)1 $
다행이도 미분의 로지스틱 미분의 결과가 $\hat{y}$ 이 a로 바뀌기만 했고, 결과는 흡사 하다. 코드는 앞에서 했던 제곱오차의 미분과 비슷 하지만, 미분 유도 과정은은 복잡하다. 하지만, 로지스틱 손실 함수의 미분을 통해 로지스틱 손실 함수의 값을 최소로 하는 가중치아 절편을 찾아야 한다는 것은 같다.
2) 로지스틱 손실함수 연쇄 법칙 (chain rule)
먼저 손실함수 L을 활성화 함수 출력값 a에 대하여 미분하고 활성화 출력값 a 는 선형함수의 출력값 z 를 가중치 w 또는 기울기 b에 대하여 미분한 다음 서로 곱하면 손실 함수의 가중치와 기울기의 미분한 결과 값을 얻을 수 있다.
총 4개의 식으로 2개는 공통사항 , 가중치와 절편은 각각 미분 정리 하면 된다.
공통사항은 아래 2가지이다.
- 로지스틱 손실 함수 L를 a에 미분하기
$ { \partial L \over \partial a } = { \partial \over \partial a } = (-(ylog(a) + (1-y)log(1-a)) $
$ = -(y { \partial \over \partial a } log(a) + (1-y) {\partial \over \partial a} log(1-a))$
log(a)을 a에 대하여 미분하면 $ { 1 \over a}$ 이므로 위 식은 아래와 같이 간단하게 정리 된다.
식 1 : $ {\partial L \over \partial a} = -(y {1 \over a} - (1-y){1 \over 1-a}) $
- 활성함수 a를 선형함수 z에 대하여 미분하기
$ {\partial a \over \partial z } = {\partial a \over \partial z} ({1 \over 1+e^{-z} } )= { \partial \over \partial z }(1+e^{-z})^{-1} $
$ = -(1+e^{-z})^{-2} { \partial \over \partial z}(e^{-z} ) = -(1+e^{-z})^{-2}(-e^{-z})^{-2} = { e^{-z} \over ( 1 +e^{-z})^2} $
얻은 식을 분수식으로 나눈 다음 공통식을 묶어 정리하면 아래와 같다.
$ { \partial a \over \partial z } = { 1 \over 1+e^{-z} } {e^{-z} \over 1+e^{-z}} = { 1 \over 1 +e^{-z} } ( 1 - { 1 \over 1 + e^{-z} } ) = a(1-a)$
식 2 : $ { \partial a \over \partial z } = a(a-1) $
- 식 1과 식 2를 체인룰에 의해 미분하기
$ { \partial L \over \partial z} = {\partial L \over \partial a} {\partial a \over \partial z }$
= $ -(y { 1\over a } - (1 -y) { 1 \over 1-a})a(1-a) = - (y(1-a) - (1-y)a) $
= $ -(y-ya-a+ya) = -(y-a) $
식3 : -(y-a)
- z를 w에 미분하기
식 4 : ${\partial z \over \partial w_i} = x_i $
- z를 기울기에 업데이트 하여 미분하기
식 5: $ {\partial \over \partial b}(b+ \sum_{i=1}^{n} w_i x_i) = 1 $
- 가중치(w) 업데이트 에 대하여 미분하여 구하기 (식 3와 식4와 곱하면 된다.)
손실함수(w) : $ w = -(y-a)x_i $
- 기울기(b) 엡데이트에 대하여 미분하여 구하기 (식 3과 식4와 곱하면 된다.)
손실함수(b) : $ b = -(y-a)1 $
조금 복잡하지만, 복잡한 것도 제거 해서 간단하게 하려고 노렸했다. 앞에 어떤 식으로 인공지능이 발전 되었는지 알고 있어야 순차적으로 이해 할 수 있다.
※ 참고서적 : 정직하게 코딩하며 배우는 딥러닝 입문 (이지스퍼블리싱)
댓글 없음:
댓글 쓰기