Logistic 회귀의 cost function
지금까지 해온 것 처럼 로지스틱회귀의 비용함수 역시 어설프나마 문돌이식 수학으로 이해해 보려고 했다. 그래서
일주일이 넘는 시간을 투자했으나 이번 시도는 앞선 시도들 보다 더 이해하기가 어려운 내용이었다. 때문에 이번
포스팅에서는 로지스틱회귀의 비용함수 이해에 필요한 몇가지 개념에 대한 설명과 지난 일주일간의 검색 과정에서
발견한 몇가지 팁을 설명하는 것 정도로 마무리 해야 할 것 같다.
몇 가지 개념
이미 많은 사람들이 알고 있다시피 기존 선형회귀에서 사용하던 비용함수를 로지스틱회귀에서 그대로 사용할 경우
그래프의 형태가 아래와 같이 표현된다고 한다(함수를 통해 아래 형태의 그래프를 그려보려고 무진 애를 썼으나
결국 실패했다).
선형회귀분석에서 이미 언급했지만 비용 함수라는 것은 예측값과 실제 값의 오차에 대한 제곱 평균을 구하는 것이고
이를 표현하는 함수에 대한 미분을 통해 기울기가 최소가 되는 지점을 찾는 과정이라고 하였다. 그리고 선형회귀분석의
경우 이 비용함수의 그래프가 U자 형으로 하나의 최소 기울기만이 존재하는 형태였다. 그러나 로지스틱회귀의 가설
함수를 선형회귀의 비용함수에 바로 대입하는 경우에는 위의 그래프와 같이 기울기가 0이되는 지점이 다수 발생한다.
하지만 위의 그래프에서 실제로 최솟값을 갖는 위치는 빨간 점으로 표시된 위치이고 이 지점을 global minimum
이라 말하며 파란색 선으로 표시된 위치들은 비록 기울기는 0이지만 진정한 의미에서의 최솟값은 아니며 이 지점을
local minimum으로 부른다. 문제는 컴퓨터는 계산을 하면서 ‘기울기가 0인 지점’만을 찾게 되기에 local minimum
에서 계산을 멈추는 문제가 발생하게 되는 것이다.
이렇게 하나의 최솟값만을 구할 수 있는 형태의 함수를 convex 함수라고 하고 다수의 local minimum이 존재하는
함수를 non-convex 함수라 한다.
이와같은 이유로 해서 로지스틱회귀에서 사용할 비용함수는 convex 함수가 될 수 있도록 다시 만들어져야 한다.
그래서…로지스틱회귀의 비용함수는?
이미 많은 자료들에서 그 내용을 설명하고 있으니 굳이 내가 재차 설명할 필요는 없을 것 같다. 가장 많이 언급되는
홍콩과기대 김성훈 교수님의 슬라이드를 링크하는 것으로 대신한다.
http://hunkim.github.io/ml/lec5.pdf
다만 이 자료에서 주의할 점이 New cost function for logistic
섹션의 함수 표기 중 H(𝑥)는 H(X)로 표기되어야
하는 것이 아닌가 싶은데 바로 다음 장에서 H(𝑥)가 로지스틱회귀 가설함수임을 표시하고 있으므로 그렇게 이해하면
될 것 같다.
결국 실제의 값이 1인 경우와 0인 경우 각각에 대해 로그를 취함으로써 convex 함수 형태를 만들어 비용을 최소화 할
수 있도록 만든 것이다. 간단하게 최종 결과만 보자.
위 식은 다음과 같이 해석된다. 우선 H(𝑥)는 로지스틱회귀의 가설함수임을 주지하자. 그리고 𝑦는 실제의 값이다.
이 실제의 값이 1일 경우 비용함수는 다음과 같이 변한다.
그리고 이 식의 그래프는 다음과 같다.
이 그래프의 x축은 가설함수의 결과 값이고 y축은 비용함수의 결과값이다. 그래프를 보면 직관적으로 알 수 있듯이
가설 함수의 결과 값이 실제 𝑦의 값인 1인 경우 비용 함수는 최솟값 0을 얻을 수 있다. 하지만 가설함수의 결과 값이
0이 될 경우 비용함수의 결과는 ∞에 수렴하게 되어 엄청난 패널티를 받게 되는 것이다.
반대로 실제 𝑦값이 0인 경우는 이와는 반대로 진행된다. 먼저 𝑦가 0인 경우 비용함수는 다음과 같이 변하며
그래프는 다음과 같다.
이 경우에는 𝑦가 1일 때와 그래프 방향이 반대가 되어 가설함수의 결과 0일 경우 0이 1일 경우 ∞가 되어 역시나 최소
비용을 찾아낼 수 있게 되는 것이다.
desmos 살펴보기
사실 앞서 정리한 내용은 이미 많은 곳에서 더 잘 설명을 하고 있는내용이다보니 굳이 또다시 정리하기가 조금 민망할
정도이다. 그래서 더더욱 non-convex 함수를 그래프로 구현해보고자 했는데 수학적 지식이 일천하다보니 실패하고
말았다. 대신에 이 과정에서 좋은 사이트 하나를 발견하여 소개한다. 함수를 그래프로 표현해주는 웹 기반 서비스이며
이름은 desmos이다. 김성훈 교수님의 자료 중 시그모이드 함수와 그래프를 표시한 부분이 바로 desmos 화면이다.
웹 서비스 뿐만 아니라 모바일 앱으로도 같은 서비스를 제공하고 있으며 별다른 비용은 없는 것으로 보인다.
사용법은 비교적 단순한데 아래 동영상을 참고해서 설명을 이해하시도록…
먼저 사이트 접속 후 상단의 ‘Start Graphing’ 버튼을 클릭하면 시작할 수 있다. 회원 가입을 하면 작업했던 그래프를
저장하고 다음에 또 사용할 수도 있다.
우선 시작하게 되면 좌측 영역을 클릭하여 그래프를 그리고자 하는 함수 식을 입력한다. 미지수가 1개인 함수는 바로
그래프가 그려지지만 미지수가 2개 이상인 경우 기본 미지수를 제외한 나머지에 대해서는 직접 값을 조작할 수 있도록
슬라이드를 생성할 수 있도록 해준다. 처음 식인 W = wx + b에 대해 w와 b는 슬라이드를 생성하였다.
슬라이드는 하단의 슬라이드 컨트롤을 클릭하면 값의 범위와 변화 단게를 설정할 수 있다. 최소 -10 ~ 최대 10, 0.1씩
변화와 같은 식으로 설정한다. 그리고 슬라이드 왼편의 플레이 버튼을 클릭하면 범위 내에서 변화 단계만큼씩 자동으로
변화하면서 그래프를 보여준다.
그리고 이미 생성한 함수를 다시 사용할 수 있다. 두 번째 식인 c = (W-r)에서 W는 앞서 생성한 함수이다. 만일
W 함수의 미지수 슬라이드를 변경하면 W를 사용한 c 함수의 그래프도 같이 변화하는 것이 보일 것이다.
이상이 기본적인 사용법이다.
사실 이 서비스를 이용하여 non-convex 그래프를 그려보려 했지만 뭔가 잘 안되었다. 아래 화면은 내가 시도한
흔적이다.
두 번째 이미지가 non-convex 그래프를 시도한 것인데…뭔가 잘못했나보다…ㅠ.ㅠ
정리
이미 이전에도 겪은 바이지만 무리하게 수학적인 이해를 추구하다보니 불필요하게 많은 시간들을 소모하는 경향이
있다. 그렇다고 완벽한 결론을 얻는 것도 아니고. 아무래도 앞으로는 적당히 수위를 조절해 가면서 버릴 것은 버리고
취할 것은 취해야겠다. 뭐 그래도 궁금한 것은 풀고 넘어가야 직성이 풀리니…
그래도 회귀 분석을 진행하면서 많은 수학적 개념에 대해 이해하게 된 것은 나름 성과라면 성과이다. 특히나 로지스틱
회귀의 경우 이후 신경망에 대한 학습에 매우 중요한 단서를 제공하므로 가능하면 꼼꼼히 알아 둘 필요도 있다고 판단
된다. 동영상 강의도 이제 곧 신경망쪽으로 넘어갈테니 기존 내용을 조금 더 훑어보며 복습을 좀 해야겠다.
'Study > 인공지능학습' 카테고리의 다른 글
로지스틱 회귀 비용함수로부터 Cross-entropy 도출하기 (0) | 2017.06.18 |
---|---|
Docker 컨테이너에서 Jupyter kernel 추가하기 (0) | 2017.05.07 |
다항로지스틱회귀 살펴보기 (0) | 2017.04.22 |
TensorFlow(텐서플로우) 살펴보기 - 5 (0) | 2017.04.01 |
자연로그와 자연상수 e 심화학습 (2) | 2017.03.25 |