본문 바로가기

AI/머신러닝(코세라)

[ML] 신경망으로 이진 분류를 할 때의 결정 경계(decision boundary) 구하기

https://cuffyluv.tistory.com/64

 

[ML] #6 신경망(Neural Networks)

본 글은 학교 '머신러닝' 수업을 들으며 공부한 내용을, 저의 말로 바꿔서 남에게 설명해주듯이 쓰는 글입니다.다시 한번 복습하는 과정에서 Coursera Andrew Ng 교수님의 강의를 일부 수강하였고,

cuffyluv.tistory.com

 

위 글의 초반부를 보자.

 

데이터를 비선형적으로 분류해야 할 때(현실의 대부분 문제들이 이 경우), 로지스틱 회귀를 사용하면 비선형식을 표현하기 위해 식을 고차 polynomial 꼴로 나타내야 했다.

정확히는, 각 피쳐들을 결합하는 등 적절한 가공을 하여 새로운 피쳐들을 만들어내는데, 이 피쳐들 하나하나에 가중치가 붙을 테이니 피쳐 개수 = 가중치 개수가 되고, 

2차, 3차, 4차, ... 차수가 높아질수록 기하급수적으로 피쳐 개수가 늘어나 따라서 가중치 개수가 늘어나고 연산량이 늘어나게 된다.

 

즉, 로지스틱 회귀로 비선형성 분류가 필요한 문제를 푸는 것은 비효율적이다.

 

그렇기에 우리는 선형 데이터를 입력받아 비선형적인 활성화 함수들로 변환해 비선형성을 표현해줄 수 있는, 신경망 구조를 채택해 문제를 해결하였다.

 

 

그러면, 과연 신경망에서는 결정 경계(decision boundary)가 어떻게 나타날까? 

 

로지스틱 회귀에서는 가중치^T * X = 0 의 식이 결정 경계가 된다. 즉, "decision boundary 식을 직접 구할 수 있다."

또한, 2, 3차원이라면 그리는 것도 가능하다.

 

피쳐가 2개인 2차원 decision boundary를 그리면 아래와 같다. (이전 글 참고)

 

 

그럼, 저 데이터 셋을 그대로 신경망으로 해결하면 어떻게 될까?

 

우선 저 결정 경계는, "쎄타가 이미 정해진 후의 결과" 이다. 최적화를 통해 비용함수를 최적화하는 쎄타를 구하여 저 쎄타는 이미 구해진 "창값"인 것이다.

 

이 때, 쎄타가 창값이면 저 안의 식은 x1, x2에 대한 2변수방정식이 되고, 따라서 그래프를 그릴 수 있다.

 

 

신경망도 마찬가지다. 순전파와 역전파, 그리고 gradient descent를 통해 최적의 쎄타값을 정한 후에, 결정 경계를 그리는 거다.

그렇지만 쎄타값이 정해졌다고 해서, x에 대한 decision boundary 식을 구하긴 힘들다.

 


 

 

일단, 쉬운 예시를 위해 위와 같이 피쳐 2개 (x1, x2)가 입력으로 들어오고, 이진 분류를 수행하는 신경망이라고 해보자.

 

https://kr.mathworks.com/matlabcentral/answers/1849028-how-to-plot-decision-boundary-for-trained-pattern-recognition-neural-network-in-matlab

https://stackoverflow.com/questions/54399055/plotting-decision-boundary-for-a-neural-network-with-two-layers

 

등등 여러 자료들을 참고했을 때,

기하적으로는 결정 경계를 근사적으로 그릴 순 있어 보인다.

그 기법으로는 grid를 전 영역에 쫙 펼치고, 각 grid의 격자 값 (x1, x2)를 input으로 하여

그 예측을 구하고, 이를 토대로 0과 1인 지점이 나뉘니

0과 1의 배경색을 다르게 하든 뭐 어떻게 하든 해서 결정 경계를 근사적으로 구할 수 있다.

 

파이썬으로 그려보면 대략 아래와 같다.

 

 

여기서, 시각화하기 쉽게 하려고 피쳐를 2차원으로 잡은거지

3차원, 4차원, 5차원, ... 으로도 뭐 가능은 할 것이다. 그러나 3차원을 넘어서면 그게 기하학적으로 의미가 있을까..?

 

+) TNNC? ?? 뭔지 잘 모르겠는데 어떤 방식으로 더 효율적으로 묘사할 수 있다는 것 같은데...

일단 넘어가자

 


 

그리고, 해석학적으로는 "불가능에 가깝다" 라고 표현하는 게 적절할 듯 하다.

 

GPT 생성

위와 같이 은닉층과 출력층 모두 활성화 함수로 sigmoid를 사용한다면, 단일 은닉층 신경망에서 결정 경계는 위 식을 만족하는 X (우리는 (x1, x2) ) 가 된다.

이 때, sigmoid = 0.5인 지점은 x<-0 인 지점이므로, 따라서

위 식 = 0 이 위 예시에 대한 해석학적 결정 경계가 될 것이다.

 

근데... 일단 저 안에 시그모이드가 하나 더 있는데, 저건 비선형 식이다. 

위 같이 간단한 식이라면 그냥 시그모이드 식에 대입해서 전개해볼 수 있겠지만, 

그렇게 해서 나온 복잡한 식은 미분하기도 어려울거고 당연히 기하학적으로 그리기도 어려울 것이다.

 

물론 이런 간단한 예시 말고, 피쳐 수가 늘어나고 은닉층 수가 늘어나고, 은닉층의 노드 수가 늘어나고 하면

사실상... 구하는 게 불가능하다고 말하는 게 맞는 듯 하다.

 


 

따라서 결국 필요하다면 기하학적으로 grid를 뿌려서 예측값을 일일이 구할 수밖에 없어 보인다. 이는 상당한 연산을 요구한다.

 

그러나... 어찌됐건간에 이건 피쳐가 3개 이하일 때나 뭐 분석해볼 가치가 있지

피쳐가 4개 이상, 즉 입력이 4차원 이상이면 뭐 기하학적으로 그릴 수도 없으니 큰 의미는 없을 것이다.