Coding Diary.

(Machine Learning) 로지스틱 회귀 경사 하강법 본문

Coding/Machine Learning

(Machine Learning) 로지스틱 회귀 경사 하강법

life-of-nomad 2023. 9. 13. 11:23
728x90
반응형

이전 글에서 로지스틱 회귀의 가설 함수와 손실 함수에 대해 알아보았습니다. 이제 경사 하강법을 알아봅시다.

 

우리가 해야 하는 것은 손실을 최소화하는 것인데 경사 하강법은 그 손실을 최소화하는 하나의 방법입니다. 경사 하강법을 하는 방법은 가설 함수와 손실 함수는 좀 다르지만 선형 회귀와 거의 똑같습니다.

 

처음에는 세타 값들을 모두 0으로 지정하거나 모두 랜덤하게 지정합니다. 어디선가는 시작해야 하기 때문입니다. 그러면 현재 세타 값들에 대한 손실, 즉 현재 가설 함수에 대한 손실을 계산할 수 있습니다. 여기서부터 시작해서 세타를 조금씩 조율하면서 손실을 계속 줄여나가야 하는 것입니다. 예를 들어서 세타0,1,2 이렇게 세타 값이 3개 있다고 가정해봅시다.

앞 글에서 설명한 대로 손실 함수를 세타0에 대해서 편미분하고, 그 결과에 학습률 알파를 곱합니다. 그리고 그 결과를 기존 세타0에서 빼면 됩니다. 똑같이 세타1과 세타2도 업데이트 하면 됩니다. 이렇게 모든 세타값들을 업데이트하면 경사 하강을 한 번 했다고 할 수 있습니다. 그리고 이걸 충분히 반복하면 손실을 최소화할 수 있는 것입니다. 

 

이것은 선형 회귀든 로지스틱 회귀든 똑같이 사용할 수 있는 것입니다. 차이점은 이 손실 함수 J가 다르다는 것입니다. 지금 우리는 로지스틱 회귀를 하는 것이니까 J에 로지스틱 회귀의 손실 함수를 대입해 봅시다. 편미분을 하면 아래와 같이 나옵니다.

이렇게 나옵니다. 신기하게도 선형 회귀에서와 똑같이 나옵니다. 분명 손실 함수가 다른데 편미분을 한 결과는 똑같이 나옵니다. 세타 값이 많아지면 식도 계속 늘어나니까 일반화해서 아래와 같이 표현할 수 있습니다.

j에 0을 넣어서 세타0을 업데이트 하고, j에 1을 넣어서 세타1을 업데이트하고, j에 2를 넣어서 세타2를 업데이트하는 방식입니다. 

 

이렇게 선형 회귀와 거의 똑같은데, 유일하게 다른 것은 이 가설 함수 h입니다. 선형 회귀에서의 가설 함수는 그냥 일차 함수 였지만 로지스틱 회귀에서 가설 함수는 시그모이드 함수입니다. 

h에 이 시그모이드 함수를 대입해서 각 세타값을 업데이트 하면 되는 것입니다.

728x90
반응형