본문 바로가기
혼공학습단 머신러닝+딥러닝

[3주차] 분류 알고리즘과 손실함수

by 알래스카코코넛 2024. 1. 19.
반응형

Ch.4 다양한 분류 알고리즘

이번주는 깊게 파기보다는 얕고 넓게 정리할 예정입니다. 인턴 자소설 무한 생성 중 + 주인장 자취방 이사 준비로 상당히 시름시름 코코넛 상태에요... 모두 건강관리 열심히 하십쇼 

4-1. 로지스틱 회귀

이름에서 회귀니까 이번에도 예측 모델을 배우겠구나! 하신 분들, 훌륭하지만 아닙니다. 로지스틱 회귀는 이름은 회귀지만 분류 모델입니다. 갑자기 돌발적인 변화구니까 잘 기억해둡시다. 로지스틱 회귀란, 로지스틱 함수(=시그모이드 함수)를 사용해서 분류를 실행하는 분류 모델으로, 쉽게 말해 로지스틱 함수에 특성값을 대입해서 결과를 도출하는 분류 방식을 사용합니다. 

 

출처: 링크드인

 

 이 그래프가 시그모이드 함수입니다. z = 0일 때 0.5의 결과값을 가지고, z가 양의 방향으로 커지면 1에 무한이 가까워지며, 음의 방향으로 커지면 0으로 무한히 커집니다. 즉, 무슨 숫자를 대입하더라도 0~1 사이의 값을 가집니다. 여기서 떠오르는 사안이 있습니다... 0~1사이면 확률이겠죠? 즉, 시그모이드 함수는 확률을 계산할 때 아주 용이하며 또 자주 사용합니다. 

 

 또, 값이 0~1 사이면 뭘 하기 좋을까요? 반으로 가르기 딱 좋겠네요. 0.5를 기준으로 그보다 크면 1로, 작으면 0으로 취급할 수 있습니다. tmi로, 정말정말 희귀하게 일어나지만 0.5면 sklearn은 0으로 판단합니다. 이처럼 2가지로 갈라서 분류하는 모델을 이진 분류 모델이라고 합니다. 바둑의 검정/하양, 동전의 앞/뒤, 정답/오답을 구분하는 것도 이진 분류라고 할 수 있습니다. 이전에 했던 농어/빙어 분류도 역시 이진분류입니다. 그리고 이진분류에서 0으로 나타나면 음성클래스, 1로 나타나면 양성클래스라고 합니다. 

 

 그런데 세상은 컴퓨터랑 달라서 둘로만 나누기는 어렵습니다. 3, 4, 5... 등등이 있죠. 이처럼 둘 이상의 클래스로 분류하는 방법을 다중 분류라고 합니다. 그래서 사실 이진 분류도 엄밀히 말하면 다중 분류의 한 종류입니다. 

 

이 단원은 코드로 하기보다는 개념 정리만 마지막으로 하고 넘어가겠습니다.

로지스틱 회귀 로지스틱 함수를 사용하는 분류 모델
로지스틱 함수 시그모이드 함수라고도 하며, 0과 1 사이의 값을 반환한다. s자 모양으로 생겼다. 
이진 분류 데이터를 양성 클래스나 음성 클래스, 2가지 중 하나로 분류
다중 분류 둘 이상의 클래스로 분류
소프트맥스 함수  다중 분류에서 여러 선형 방정식의 출력 결과의 합이 1이 되도록 정규화하는 함수 

 

여기서 기본미션: 로지스틱회귀가 이진 분류에서 확률을 출력하기 위해 사용하는 함수는 무엇일까요?의 답이 나왔습니다. 로지스틱 함수(=시그모이드 함수)입니다. 소프트맥스 함수는 확률을 출력하는게 아니라, 확률(결과)의 합이 1이 되도록 정규화하는 함수라는 함정이 있었네요. 

4-2 확률적 경사 하강법 

왜 4-1 부분에 코드 안 올리고 간단히 넘어가냐고요? 위에 말한 것처럼 체력이 지금 간당간당한 상태라... 험험 

이번주 3컷 요약

 

 데이터가 한 번에 100 퍼센트가 주어지지 않고, 조금씩 지속적으로 업데이트 된다면 머신러닝을 어떻게 할까요? 

1. 모든 데이터가 도착할 때까지 기다린다

2. 도착하는 데이터를 순차적으로 훈련시킨다

 

선택지가 이진분류네요. 정답은 당연히 2입니다. 귀찮은 머신러닝 엔지니어는 1번을 하고싶었겠지만, 1번을 했다가는 이전에 아무것도 안하다가 3일 밤을 새야 할 수도 있어요. 그러니 꼬박꼬박 성실하게 순차적으로 데이터를 훈련시키는게 좋을 것 같습니다. 이런 훈련 방식을 점진적 학습이라 하며, 대표적인 예시로 확률적 경사 하강법(Stochastic Gradient Descent)이 있습니다. 

 

이름 '확률적' + '경사' + '하강법' 에서 알 수 있듯이, '랜덤하게 평평하지 않은 길을 내려온다'라는 방식으로 이루어지는 알고리즘입니다. 특히 확률적 경사 하강법의 목표는 가장 빠르게 산을 내려올 수 있는 방법인 제일 가파른 길을 찾는 것입니다. 대신 가파른 길을 찾으니 조금씩 조금씩 내려와야지, 점프하면서 내려오면 진짜 구르면서 내려올 수 있으니 주의해야 합니다. 만약 내려왔는데, 가장 아래 지점에 도착하지 않았다면 다시 정상부터 돌아가서 내려가는 길을 찾습니다. 이 길을 찾기 위해 훈련 세트를 1번 모두 사용하는 과정을 에포크라고 합니다. 

 

 이대로도 괜찮지만, 끝없는 발전을 추구하는 머신러닝 엔지니어들은 여기서 파생된 또 다른 경사 하강법을 개발했습니다. 기존의 확률적 경사 하강법은 1개의 샘플을 꺼내서 학습하고, 또 1개를 꺼내서 학습하고... 이런 방식을 반복하는데, 이걸 무작위의 몇 개의 샘플을 꺼내는 방식으로 바꾸었습니다. 이 방식을 미니배치 경사 하강법이라고 하며, 실무에 많이 쓰이니 잘 기억해두면 좋습니다.  

 

 마지막으로, 배치 경사 하강법은 한 번에 전체 샘플을 모두 사용합니다. 단, 시간, 컴퓨터 성능, 전기, 인력...등등 자원을 상당히 많이 소요하니 배치 경사 하강법은 잘 사용되지 않습니다. 물론 이 말이 배치 경사 하강법이 가장 안좋은 알고리즘이라는 건 아닙니다. 절대적으로 강력하거나 약한 알고리즘이란 없으며, 데이터의 종류나 크기 등에 따라 선택하기 나름입니다.

 

 손실 함수는 확률적 경사 하강법이 최적화할 대상으로, 클수록 많은 최적화가 필요합니다. 이진 분류에는 로지스틱 손실 함수(=크로스 엔트로피 손실 함수), 회귀 문제는 평균 제곱 오차 손실 함수(MSE)를 대부분 손실 함수로 사용합니다. 사실 깊게 알 필요는 없고, 최적화를 위해 저런 함수를 사용하는구나~정도만 아셔도 입문자 입장에서는 크게 문제되지 않습니다. 

 

 마지막으로, 머신러닝의 최대 목표 과대적합/과소적합을 에포크 조정을 통해 방지하는 방법을 정리해봅시다. 과대적합은 과도하게 모델이 학습한 거고, 과소적합은 과소하게 학습한 거였죠? 그러면 에포크(학습 횟수)를 어떻게 조정하면 과대적합 또는 과소적합이 방지될까요? 한 10초 생각해보면 알 수 있습니다. 과도하게 학습하지 않도록 학습 횟수를 적게 잡으면 과대적합 방지, 많이 잡으면 과소적합이 방지될 것입니다. 

 

에포크와 과대적합/과소적합의 관계

 

주황색 선이 테스트 세트 그래프, 파란색이 훈련 세트 그래프입니다. 150 이후에는 에포크가 늘어남에 따라 테스트 세트/훈련 세트의 간격이 커지니 점점 과대적합이 일어나고, 100 전, 특히 0~50 사이에는 정확도가 훅훅 떨어져 있는 과소적합이 일어난 것을 볼 수 있습니다. 그러니 적절한 에포크를 알아내는 것이 경사 하강법에서는 중요한 과제입니다. 

 

어라 몰랐는데 위에 저 그래프가 선택 미션이었네요. 야호! 그럼 이번 주차는 조금 짧은 분량이지만 이걸로 마치겠습니다. 조금 쉬고 건강한 코코넛으로 돌아오겠습니다.

키위.. 아니고 코코넛 이름을 알래스카키위로 바꿀까

 

반응형