본문 바로가기
코딩 독학/앤드류응 딥러닝 Course1 (미래연구소 14기)

C1W2L4 ~ C1W2L9

by 효니루 2020. 10. 7.

futurelab.creatorlink.net/

C1W2L4.  Gradient Descent (경사하강법)

이제까지 Binary classification에서 주어진 데이터를 가지고 임의로 설정한 가중치 (w,b)에 대한 선형예측함수를 만들고, 이함수의 결괏값을 binary classification에 적용하기 위해 한차례 더 시그모이드함수에 넣어서 예측값 y_hat을 구했다.

 

실제결괏값 y와 우리가 임의로 설정한 가중치 (w, b)로 설정한 예측모델함수에 의한 결괏값 y_hat의 오차를 나타내는 오차함수 J(w,b)가 있다. 이것이 가장 작아지는 (w,b)를 구하는 것이 목표이다. 

 

 

x축이 w, y축이 b, z축이 J(w,b)인 3차원그래프를 그려보면 다음과 같다.

특별히 한지점이 볼록한 최솟값을 갖게 하기 위해 찾은 함수가 J(w,b)함수이다. J(w,b)가 가장 최솟값, 아래지점에 도달하기 위해서 일단 (w,b)값을 초기화시킨다. 초기화시키는 값은 마음대로 해도 되지만 통상적으로 (0, 0)을 사용한다. 그리고 기울기가 가장 가파른 길을 따라서 경사하강법을 반복하여 가장 아래지점에 도달하는 순간의 (w, b)를 구하면된다.

 

이를 이해하기 위해 2차원 평면에서 다시 생각해보자.

매개변수 b를 제외하고 w, J(w)로만 이루어진 2차원평면에서 생각해보자. 경사하강법을 반복할때마다 w값을 새로 갱신하는 공식은 왼쪽과 같다. := 왼쪽의 w는 새로갱신될 w를 의미하고, 오른쪽w는 이전의w로 오른쪽식의 결괏값으로 갱신한다는 의미다.

α : 학습률(learning rate), 경사하강법 반복시 한단계의 크기를 결정

dJ(w)/dw : 코딩에서는 dw로 표기한다. 해당지점의 기울기

초기 w값이 최저점에서 오른쪽에 있었다면 기울기는 양수이므로 (학습률도양수) 왼쪽으로 이동하게 되고, 그반대일 경우는 오른쪽으로 이동하여 결과적으로 최저점에 수렴하게 된다. 단, 학습률이 너무크다면 최저점을 넘어 반대쪽으로 이동해버리거나 오히려 발산할수 있으므로 적절한 학습률을 선택해야 하고 이에 대해서는 뒤에서 알아보기로 한다.

 

다시 3차원 평면으로 돌아오면 

w와 b를 왼쪽 식과같이 갱신하면서 경사하강법을 반복하게 된다.

w := w - αdw

b := b - βdw

 


C1W2L7, L8 Computation graph / Derivatives with Computation graph

 

Backward propagation을 이해하기 위해 Computation graph(계산그래프)를 이용해 개념을 잡고 가자. 

 

a, b, c라는 변수를 넣어 3(a+bc)를 결괏값으로 갖는 함수 J를 합성함수 꼴로 세분화하여 계산그래프로 나타내면 아래와 같다.

 

 

여기서 우리의 목적은 변수 (a,b,c)를 변화시켜 최종값 J가 최소(또는 최대)가 되는 변수의 값을 찾는 것이다. 그렇다면 (a, b, c) 각각의 변수를 변화시켰을 때 J값이 얼마나 변화하는지 서로의 관계를 도함수를 통해 알아내야 한다.

 

강의에서는 오른쪽부터 왼쪽으로 한단계씩 도함수를 구해 최종 dJ/da, dJ/db, dJ/dc를 구해줬다.

단계별로 도함수를 구하지 않고 J(a,b,c) = 3(a+bc) 에서 (a, b, c) 각각에 대하여 미분을 해도 도함수를 구할 수 있지만, 단계가 복잡해지면 그게 불가능하기 때문에 역전파의 개념을 설명하기 위해 그렇게 한듯!

 

코드로 구현할 때는 최종값에 대한 도함수일 경우 dJ/dvar = dvar 로 나타낸다.  dJ/da = da , dJ/db = db 이런식!

 

C1W2L9 Logistic regression Gradient Descent

위의 개념을 바탕으로 binary classification에서 로지스틱회귀의 경사하강법을 코드로 구현해보자.

a는 로지스틱회귀의 출력값, y는 실제레이블값 (0 또는 1)

a는 시그모이드함수에 z값을 넣은 결괏값이겠고, z는 가중치 (w, b)에 대한 예측함수에 실제데이터피처값인 x를 대입해 얻은 값이다. 

a와 y의 오차를 구하는 오차함수식은 가장 아랫줄과 같다.

 

피처값이 x1, x2 두개인 단일데이터샘플에서 로지스틱회귀와 경사하강법을 해보자.

 

가중치 w1, w2, b를 조정하여 손실함수 L(a, y)의 최솟값을 구해야 한다. 첫 역전파 단계에서 L(a, y)에서 a에 대해 미분하면 저런 식이 나온다. (실제로 미분해서 구해보면 저렇게 나옴!)

 

 

 

 

두번째 역전파로 dz를 구하기 위해 dL/dz 를 dL/da x da/dz 로 나누고 값들을 대입하면

dz = a - y 가 나온다.

 

 

마지막으로 w1, w2, b와 L의 도함수를 구하면 왼쪽과 같다.

 

 

  ** 부연설명을 하자면, dL/dw1 = dL/dz * dz/dw1 = dz * x1   이고, dz는 dL/dz를 코드로 나타낸것이다.

최종적으로 가중치를 이렇게 업데이트할 수 있다.

 

 

 

 

 

 

로지스틱회귀를 훈련시키기 위해 m개의 훈련샘플 전체를 이와같이 적용해야 한다. 이에 대해서는 다음포스팅에서 ~ 👍💕

'코딩 독학 > 앤드류응 딥러닝 Course1 (미래연구소 14기)' 카테고리의 다른 글

C1W3L6~L7  (0) 2020.10.13
C1W2L1 ~ C1W2L4  (0) 2020.10.09
C1 W2 L13 ~ L14  (0) 2020.10.09
C1W2L10 ~C1W2L12  (0) 2020.10.07

댓글