안녕하세요~ 오늘도 달려보는 부스트캠프입니다.
아래 모든 내용은 부스트캠프 AI Tech 프리코스에서 가져왔습니다.
경사하강법은 미분을 사용하는 방식으로 오차를 수정합니다.
미분은 학교에서도 배우듯이 아래와 같은 공식으로 표현되고,
$$ \displaystyle \lim_{ h\to 0}\frac{f(a + h)-f(a)}{h}$$
그 점에서의 접선의 기울기, 순간변화율을 보여줍니다.
미분하는 법은 다 아실테고, 파이썬으로는 sympy.diff라는 라이브러리로 쉽게 합니다.
경사하강법
경사하강법이란 이 미분값을 이용하여 오차를 수정하는 방식이라고 했는데요.
함수의 특정한 점에서 움직이려면 어떻게 해야 할까요?
그 점에서의 미분값을 더해주면 증가하는 방향으로 이동하고,
미분값을 빼주면 감소하는 방향으로 이동합니다.

특정한 점(x, f(x))에서 미분값이 음수일 경우,
x + f'(x)를 해주게 된다면 왼쪽으로 이동하게 될 것이고, 그러면 함수를 따라 올라가는 형태가 될 것입니다.
미분값을 더하는 걸 경사상승법, 빼는 걸 경사하강법이라고 합니다.
우리는 오차함수(loss function)에서의 극소값에 도달하려고 하기 때문에 경사하강법을 씁니다.
var = init # 랜덤한 지점
grad = gradient(var) # 그 점에서의 미분값
while (abs(grad) > eps): # 미분값이 0이 나오기 힘들기 때문에 최소값 eps를 정해줌
var = var - lr * grad # lr = 학습률
grad = gradient(var)
위 코드는 간단하게 경사하강법을 하는 법을 소개한 코드입니다.
함수에서 점을 임의로 찾고, 그 점에서의 미분값을 구합니다.
그리고 그 점에서 미분값(에 학습률이라는 가중치를 둡니다)을 빼주는 걸 반복하다 보면 극소값에 도달하게 됩니다.
만약, 함수값이 벡터여서 다변수 함수 형태라면,
편미분을 사용해 특정 방향으로 이동하게 해줍니다.
각 변수 별로 편미분을 계산한 그래디언트 벡터를 이용하면 똑같이 경사하강법이 가능합니다.
이 밑에 쓰는 부분은 예전에 글로 쓴 적 있는 활성화 함수나 역전파 알고리즘에 대해 다루기 때문에
가볍게 복습해본다는 생각으로 적어보겠습니다~
O = w * X + b
위의 선형 함수가 기본적인 신경망의 구조를 가지게 됩니다.
X라는 입력 데이터에 w 가중치를 관여하고 b라는 bias를 추가하게 되면
O라는 출력을 내놓게 됩니다.
Softmax
Softmax 함수는 이진 분류가 아닌 다중 분류를 할 수 있게 해주는 함수입니다.

출력을 내보내는 마지막 층에 넣는 편이고, 마지막에 다중 클래스에 대한 확률벡터를 내보내게 됩니다.
추론을 하는 경우에는 결과값만 가져오면 되기 때문에 그 확률벡터에서 가장 확률이 높은 것을 가져오는 원핫 벡터를 씁니다.
활성화 함수들은 입력과 출력 사이에 사용하게 되는데요.
원래 있던 선형모델을 비선형적인 함수를 거치게 해 새로운 잠재벡터를 만들게 됩니다.
비선형함수이고 이를 통해 더 정확하고 다채로운? 결과를 얻어낼 수 있습니다.

시그모이드나 하이퍼볼릭, 렐루 함수가 있는데 요새는 렐루가 많이 쓰입니다.
이런 선형모델과 활성화 함수를 여러 층으로 합성한 함수들을 신경망, MLP이라고 부릅니다.
층을 깊게 쌓을수록 목적함수를 근사하기 쉽기 때문에 효율적인 학습이 가능합니다.
역전파 알고리즘은 각 층에 사용된 파라미터를 학습시키는 과정입니다.

역순으로 한 단계별로 순서대로 그래디언트를 계산해야 합니다.
이 과정은 합성함수의 미분법에서 쓰는 연쇄법칙을 이용합니다.
(신경망도 다양한 함수를 거치는 일종의 합성함수이기 때문에)

예를 들어 이 시그모이드 함수에 대해 역전파 과정을 구하기 위한 미분을 해보겠습니다.
x가 4가지 계산을 통해 시그모이드 함수가 되었는데 이것을 역으로 돌아가며 미분을 해볼 수 있습니다.
$$ y = \frac{1}{a}$$
라고 하면
$$\frac{\delta y}{\delta a} = -\frac{1}{a^{2}}$$
이기 때문에
$$-\frac{\delta L }{\delta y} y^{2}$$
가 되고,
분모에 있는 1 + exp(-x) 부분도 b로 두고 편미분하면
$$-\frac{\delta L }{\delta y} y^{2}e^{-x}$$
가 되고 마지막 -x 부분만 c로 두고 편미분하면 - 가 또 곱해져
$$\frac{\delta L }{\delta y} y^{2}e^{-x}$$
라는 결과를 얻게 됩니다.
'CS > AI' 카테고리의 다른 글
| [ML] AutoGrad, Optimizer, 데이터셋과 데이터 로더 (0) | 2025.07.08 |
|---|---|
| [ML] CNN과 RNN 첫걸음 (0) | 2025.07.01 |
| [ML, DL] 간단한 합성곱 신경망의 개념과 AlexNet (0) | 2025.06.20 |
| [ML] SGD, Adam, Dropout (0) | 2025.06.15 |
| [ML] 퍼셉트론, 활성화 함수 그리고 역전파 (0) | 2025.05.13 |
