머신러닝&딥러닝/Do it ! 딥러닝 입문

초기 인공지능 알고리즘과 로지스틱 회귀

욱이명 2020. 11. 26. 21:35

로지스틱 회귀를 제대로 이해하려면 로지스틱 회귀로 발전된 초창기 인공지능 알고리즘들을 순서대로 살펴보면 된다. 첫 번째로 알아볼 알고리즘은 '퍼셉트론'이다.

퍼셉트론

이진 분류 문제에서 최적의 가중치를 학습하는 퍼셉트론(Perceptron) 알고리즘은 1957년 코넬 항공 연구소(Cornell Aeronautical Lab)의 프랑크 로젠블라트(Frank Roseblatt)가 발표하였다. 여기서 이진 분류(binary classification)란 임의의 샘플 데이터를 True나 False로 구분하는 문제를 말한다. 예를 들어 과일이라는 샘플 데이터가 있을 때 사과인지(True), 아닌지(False)를 판단하는 것이 이진 분류에 해당한다.

 

퍼셉트론은 직선 방정식을 사용하기 때문에 선형 회귀와 유사한 구조를 가지고 있다. 하지만 퍼셉트론은 마지막 단계에서 샘플을 이진 분류하기 위하여 계단 함수(step function)라는 것을 사용한다. 그리고 계단 함수를 통과한 값을 다시 가중치와 절편을 업데이트(학습)하는 데 사용한다.

 

위 수식이 퍼셉트론을 표현한 수식이고 '선형 함수'라고 부른다. 위 수식을 보면 가중치와 입력값이 1개 더 많아졌을 뿐 선형 회귀의 수식과 비슷하다. 그리고 이전 글 까지는 그래프로 간단히 표현하기 위해 특성을 하나만 사용했지만 앞으로는 위 수식처럼 여러 특성을 사용하여 문제를 해결하는 경우가 많이 나온다. 

 

특성이 n개인 선형 함수는 다음과 같이 표기할 수 있다.

하지만 특성의 개수가 너무 많으면 수식을 표기하기가 힘들다. 그래서 수열을 사용하여 위 식을 다음과 같이 표기한다.

이때 상수 항(b)은 시그마 기호 뒤가 아니라 앞에 두는 것이 좋다. 왜냐하면 상수 항을 시그마 기호 뒤에 두면 시그마 기호에 상수 항이 포함되었다고 착각할 수 있기 때문이다.

 

계단 함수는 z가 0보다 크거나 같으면 1로, 0보다 작으면 -1로 분류한다. 이때 1을 양성 클래스(positive class), -1을 음성 클래스(negative class)라고 부르며 위 함수를 그래프로 그리면 아래 그림처럼 계단 모양이 된다. 그래서 계단 함수라고 부르게 된 것이다.

 

계단 함수의 그래프

쉽게 말해 퍼셉트론은 선형 함수를 통과한 값 z를 계단 함수로 보내 0보다 큰지, 작은지 검사하여 1과 -1로 분류하는 아주 간단한 알고리즘이다. 퍼셉트론은 계단 함수의 결과를 사용하여 가중치와 절편을 업데이트한다.

 

지금까지 퍼셉트론에 대해 알아보았다. 퍼셉트론은 사이킷런 패키지에서 Perceptron이라는 이름으로 클래스를 제공한다. 퍼셉트론 다음에 등장한 알고리즘은 아달린이다. 이번에는 아달린에 대해 알아보겠다.

아달린

퍼셉트론이 등장한 이후 1960년에 스탠포드 대학의 버나드 위드로우(Bernard Widrow)와 테드 호프(Tedd Hoff)가 퍼셉트론을 개선한 적응형 선형 뉴런(Adaptive Linear Neuron)을 발표하였다. 적응형 선형 뉴런은 아달린(Adaline)이라고도 부른다. 아달린은 퍼셉트론과는 다르게 계단 함수의 결과는 예측에만 활용하고 선형 함수의 결과 z를 학습에 사용한다. 즉, 역방향 계산이 계단 함수 출력 이후에 일어나지 않고 선형 함수 출력 이후에 진행된다. 아달린의 나머지 요소는 퍼셉트론과 동일하므로 여기까지만 설명하겠다.

로지스틱 회귀

로지스틱 회귀(logistic regression)는 아달린에서 조금 더 발전한 형태를 취하고 있다. 로지스틱 회귀는 선형 함수를 통과시켜 얻은 z를 임계 함수에 보내기 전에 변형시키는데, 바로 이런 함수를 활성화 함수(activation function)라고 부른다. 활성화 함수를 통과한 값은 a라고 표현되는데 앞으로 a라고 하면 활성화 함수를 통과한 값이라고 이해하면 된다. 로지스틱 회귀는 마지막 단계에서 임계 함수(threshold function)를 사용하여 예측을 수행한다. 여기서 임계 함수란 아달린이나 퍼셉트론의 계단 함수와 역할은 비슷하지만 활성화 함수의 출력 값을 사용한다는 점이 다르다. 그리고 활성화 함수로는 의무적으로 비선형 함수를 사용하고, 로지스틱 회귀에서의 활성화 함수는 바로 '시그모이드 함수'이다.