딥러닝

[DL Study] 4. Cost gradient descent

jun1-cs 2025. 4. 29. 22:01

 

1. 손실함수, Cost function

손실=cost,loss,error

 

Ex) 문자 2 사진을 받았을 때 이를 벡터로 변환하고 분석해, 무슨 숫자인지 맞춘다.

x벡터에 대해 세타 벡터(L개의 레이어에 대한 weight와 bias들)를 곱한다-> output벡터 y hat이 나온다. y hat을 라벨링된 데이터의 y값, 정답 값과 비교(y값을 one-hot-coding을 이용해 대응되는 target 벡터로 변환)해 파라미터 세트인 세타를 평가한다.  

 

-> 평가방법

1) MSE(mean squared error) 사용해 output과 target을 비교한다. 

(y1 hat - y1)^2 값의 평균이 최소가 될수록 output이 잘 나온 것이다. 

 

2)Total Cost

y1, y1 hat 사이의 차이가 최소가 되어야 한다!

그런데 x1, y1은 test data이고 cost는 y1 hat에 의해 결정되는데 이는 세타 파라미터에 의해 결정된다. 따라서 yi,yi hat 사이의 차이값인 cost는 C(세타)이고, 이 cost값들을 모든 test data에서 구하고 더한 값인 total cost가 최소가 되도록 하는 세타를 찾고자 한다. 

->모든 xi-yi test data에 대해 세타(weight,bias로 구성된 파라미터벡터) 를 이용해 yi hat(output)을 얻는 상황에서, 정답과 모델의 output 사이의 Cost function을 파라미터에 대한 C(세타) 함수로 표현한다.

 

2. 경사하강법, Gradient Descent

Total Cost 값을 최소화시키는 파리미터 세트인 세타벡터를 Cost function이 인자로 가진다. 

그러면 3차원 공간을 상상해보자. xy평면 상의 한 점 당 하나의 파라미터 세트 경우가 대응된다고 볼 수 있다.

이 때 xy평면 상 하나의 점에 대한 Cost function 함수값은 C(세타)이다. 이를 모든 점들에 대해 그래프로 함숫값들을 이어서 그린다면 곡면이 나온다.

->이 세타-Cost function 곡면에서의 극솟값 지점을 찾아야 한다. 

->세타t 를 안다면, 세타t+1로 업데이트할 때 gradient descent를 이용해 극솟값 방향으로 파라미터를 업데이트한다.

=>Gradient descent = -gradient(C(theta))

 

3. 학습속도, learning rate

그러면 (새로운 세타)=(세타)-gradient(C(세타)) 이렇게만 계산해서 세타를 업데이트할 것인가?

10000개의 test data가 있다면 일부 데이터만 가지고(예를 들면 100개의 데이터) 손실함수를 계산하고 gradient descent를 계산해 파라미터를  업데이트한다. 이렇게 하면 파라미터의 일부분만을 이용해 연산하여 전체파라미터를 업데이트하는 것이므로 '한번의 업데이트'가 매우 정확할 수는 없다. 그러므로 gradient(C(세타))에 학습속도 (제타)를 곱한다면, 파라미터가 업데이트되는 속도를 적절히 조절할 수 있을 것이다! 

->파라미터 업데이트가 매번 정확하지는 않으므로 업데이트의 속도를 gradient 벡터에 학습속도 스칼라를 곱함으로써 조절할 수 있다.

 

결론: output과 target의 차이인 손실함수를 최소화도록 파라미터를 업데이트한다. 손실함수의 기울기의 반대방향으로 파라미터를 조정한다.