코세라 앤드류 응 AI 강의 리뷰

[인공지능 강의 리뷰] 8 - 로지스틱 회귀 경사 하강법(Logistic Regression Gradient Descent)

파요요요 2022. 5. 16. 22:00
로지스틱 회귀 - 경사 하강법

Welcome back. In this video, we'll talk about how to compute derivatives for you to implement gradient descent for logistic regression

이번 시간에는,   로지스틱 회귀(Logistic regression)에서 경사 하강법(Gradient descent)을 적용시키기 위해

도함수(Derivates)를 계산하는 방법에 대해 이야기해 봅시다.

That is, the key equations you need in order to implement gradient descent for logistic regression.

도함수는 로지스틱 회귀(Logistic Regression)에서 경사 하강법을 (Gradient Descent)를 적용시키기 위해서 필요한 핵심 방정식(equations)입니다.

The key takeaways will be what you need to implement. That is, the key equations you need in order to implement gradient descent for logistic regression. In this video, I want to do this computation using the computation graph.

또한, 도함수의 연산을 저번 시간에 배운 계산 그래프(Computation Gragh)를 이용하여 연산하려고 합니다.


로지스틱 회귀 요약

​z = w.t * x + b

y-hat = sigmoid (z)

Loss(a, y) = -(ylog(a) + (1-y) log(1-a))이며,

We've described the four propagation steps of how you actually compute the loss on a single training example, now let's talk about how you can go backwards to compute the derivatives

저희는 손실을 계산하는 방법에 대한 4가지 순방향(Forward) 연산 단계를 배웠습니다.

기울기(도함수)를 활용하는 경사 하강법을 이용하기 위해서,

왼쪽 -> 오른쪽으로 계산하는, 역전파(Backward Propagation) 연산을 통해 도함수를 연산해 봅시다.


로지스틱 회귀 도함수

하나하나 뜯어보겠습니다.

로지스틱 회귀 도함수

L( a, y) = - ( y log(a) + (1-y) log ( 1 - a) ) 이 방정식을 a에 대해 미분해 봅시다.

d L( a, y) = - ( y/a + (y-1) / (1-a) ) d a

d L(a, y) / d a = - y / a + ( 1 - y) / ( 1 - a)가 됩니다.

--> 참고) a에 관해 미분하기 때문에, 우변의 y는 상수 취급입니다.

여기서 d L(a, y) / d a를 변수 이름 da로 표현하겠습니다

로지스틱 회귀 도함수

마찬가지로,

a = δ(z)를 z에 대해서 미분해 줍시다.

(시그 로이드 함수를 까먹으신 분은 아래의 그림을 참고하세요!)

a = 1 / ( 1 + e ^ ( -z) )

d a = - e ^ ( - z) / { ( 1 + e ^ ( -z) } ^ 2 d z

이렇게 계산해도 되지만 너무 복잡하기에,

미적분에 익숙하지 않은 저희는 d a / d z = a ( 1 - a) 라 하고 계산하겠습니다.

d L(a, y) / d z = a - y 가 되고, 코딩을 위해 d L(a, y) / d z를 변수 이름 dz로부르겠습니다.

출처:  https://m.blog.naver.com/zzoyou_/222014804966

로지스틱 회귀 도함수

동일한 괴정으로,

d L( a, y) / d w1 = x1 *dz이고, d L( a, y) / d w1을 변수 이름 dw1이라 하겠습니다.

-----> 주의 * 여기서 dz는 d L(a, y) / d z를 뜻하는 변수 이름 dz입니다.

마찬가지로 , 변수 이름 dw2 = x2 * dz ,변수 이름 db = dz입니다.

이렇게 하여,

매개변수 w , b

학습률 α(learning late)만 조절해 준다면,

경사 하강법(Gradient Descent)을 적용시킬 준비가 다 된 것입니다.

역방향 계산을 통해서 도함수를 구하고 나서,

경사 하강법을 통해서 매개 변수 w, b를 업데이트해 주고,

다시 순방향 계산으로 로지스틱 회귀 - 비용(손실) 함수 계산을 하는 과정을 반복하여서,

y-hat과 y의 오차를 점점 더 줄여 나아가는 것입니다.

반응형

여러 개를 훈련할 떄의 경사하강법

But training logistic regression model, you have not just one training example given training sets of M training examples. In the next video, let's see how you can take these ideas and apply them to learning, not just from one example, but from an entire training set.

위의 예시는 신경망이 하나인 단일 트레이닝 예시였지만,

실제 딥러닝에서는 신경망이 여러 개이기에,

전체 트레이닝 예시에서는 어떻게 학습하는지 알아보겠습니다.

여러 개를 훈련할 때의 로지스틱 회귀

단일 트레이닝 예시와 그리 다른 점은 없습니다.

단지 트레이닝 예시가 m 개이기에,

m 개의 손실 함수의 총합을 구하여, m으로 나누어 주어 평균을 구해주면,

Cost function J (비용 함수)의 값이 됩니다.

그 후 , 역방향 계산을 통해 도함수(Derivatives) 값의 평균을 구해주고,

경사 하강법(Gradient descent)을 통해 변수를 업데이트해주면 됩니다.


여러 개를 훈련 시킬때의 로지스틱 회귀 + 경사하강법

위와 같이 계산하게 됩니다.

프로그래밍에서는, 반복을 나타내는 for 구문을 통해서 총합을 구하여 연산하게 됩니다.

하지만, 딥러닝(Deeplearning)에서는 엄청나게 큰 데이터 세트를 훈련시키고

수 억 개의 신경망들을 이용하기 때문에,

for 구문을 사용하게 되면 연산량이 너무 많아져 알고리즘의 성능이 떨어지게 됩니다.

이러한 for 구문을 사용하지 않는 방법이 있는데,

그것이 "vectorization(벡터화)"입니다.

프로그래밍 연습을 하기 전에, 벡터화(Vectorization)에 대해 먼저 알아봅시다.


다음 시간에는,   프로그래밍에서 for 반복 구문을 사용하지 않고,

총합을 구하여 알고리즘의 성능을 높이는 Vectorization(벡터화)에 대해 알아봅시다.

이 내용들은 모두 coursera에서 앤드루 응 교수님의 강의를 요약정리 및 쉽게 재 풀이하여 적은 글이며,

내용에는 생략되거나 변형된 부분이 많으니 직접 강의를 들어보시는 걸 추천드립니다!

이 글은 상업적 목적이 아닌, 한국에서 인공지능을 배우고 싶은 분들을 위해 적은 교육적 목적에서 작성하였습니다.

반응형