2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

강의자료/머신러닝

3.2 경사 하강법

원당컴1 2024. 5. 20. 09:21

https://wondangcom.tistory.com/2769

 

머신러닝 목차

머신러닝 1. 머신러닝 소개 1.1 인공지능이란 (혼공머신) - 4차산업 혁명 시대에 꼭 필요한 인공지능에 대해 알아 보자. 링크 : https://wondangcom.tistory.com/2771(2024.3.7) 1.2 머신러닝을 사용하는 이유 (핸

wondangcom.tistory.com

 

1. 경사하강법의 기본 개념

1.1 기울기(gradient)란

기울기(gradient)는 함수의 변화율을 나타내는 개념이다. 이것은 주로 미분을 통해 구한다.

기울기는 다음과 같이 정의 된다.

  • 단변수 함수의 기울기:
    • 단변수 함수의 경우 기울기는 해당 지점에서의 미분값(도함수)이다. 즉 함수의 x의 변화에 따른 y의 변화율이다.
    • 기울기가 양수인 경우, 함수는 증가하는 방향으로 변화한다.
    • 기울기가 음수인 경우, 함수는 감소하는 방향으로 변화한다.
  • 다변수 함수의 기울기
    • 다변수 함수의 경우, 기울기는 각 변수에 대한 편미분값(편도함수)의 벡터이다. 이 벡터는 해당 지점에서의 함수의 변화율이다.
    • 기울기 벡터의 방향은 가장 빠르게 증가하는 방향을 가르킨다.
    • 경사하강법과 같은 최적화 알고리즘에서 기울기를 활용하여 함수의 최솟값을 찾는다.

 

1.2 기울기를 이용한 최적화 방법

1. 산을 내려가는 사람

  • 만약 여러분이 산 꼭대기에서 산을 내려가야 한다고 가정해 보자.
  • 어떤 방향으로 내려가야 할까? 기울기가 가장 큰방향(가파른 경로)로 내려 가는 것이 가장 빠르게 산 아래로 내려갈 수 있다.
  • 이 때 산의 기울기는 여러분이 내려가는 방향을 가르킨다. 기울기가 크면 빠르게 내려가고 작으면 천천히 내려간다.

2. 함수의 기울기

  • 함수도 위와 비슷하다. 함수는 어떤 곡선처럼 생겼다.
  • 함수의 특정 지점에서 기울기를 계산하면 그 지점에서의 변화율을 알 수 있다.
  • 기울기가 큰 지점은 함수가 급격히 변화하는 지점이며 기울기가 작은 지점은 변화가 더 완만한 지점이다.

3. 경사하강법에서의 기울기 활용

  • 경사하강법은 함수의 최솟값을 찾는 알고리즘이다.
  • 기울기를 활용하여 함수의 최솟값을 찾는다. 기울기가 작아지는 방향으로 조금씩 이동하면서 최솟값을 찾아간다.

 

1.3 경사 하강법의 역할과 활용

1. 최적화의 목적

  • 머신러닝 모델은 최적의 매개변수를 학습해야 한다. 이 매개변수는 손실 함수가 최솟값일 때를 찾는 것이다.
  • 하지만 매개변수의 공간이 넓고 복잡하기 때문에 어디가 최솟값인지 한번에 알기 어렵다.
  • 이런 상황에서 기울기를 이용하여 함수의 최솟값을 찾는 것이 경사하강법 이다.

2. 경사하강법의 활용

  • 경사하강법은 딥러닝 모델 학습에서 매우 중요하다.

 

2. 경사하강법의 단계별 절차

1. 초기화 단계 :

  • 먼저 초기값으로 변수 x를 선택한다. 이 초기값은 알고리즘 성능에 영향을 미친다.

2. 기울기 계산 단계 :

  • 현재 위치 x₀에서 함수 f(x)의 기울기를 구합니다. 이를 ∇f(x)로 표현한다.
  • 기울기는 함수의 변화율을 나타내며, 어느 방향으로 움직여야 최솟값을 찾을 수 있는지 알려 준다.

3. 매개변수 업데이트 단계:

  • 업데이트 식을 사용하여 매개변수 x를 업데이트
    • x[t] = x[t-1] - η∇f(x[t-1])  ( 이 의미는 현재 위치 t를 바로 전 위치에서 학습률 η * 미분값(기울기) 를 뺀 위치로 이동한다)
    • 학습률 η은 사용자가 정의하는 변수로, 얼마나 큰 단계로 이동할지를 결정

위와 같이 손실율이 곡선을 이룰때 미분한 기울기가 양수라면 왼쪽으로 이동해야 하므로 기울기 * η(학습률) 만큼을 빼고 거꾸로 감소하는 위치에서는 기울기가 음수이기 때문에 기울기* η(학습률) 를 빼면 오른쪽으로 이동하게 되는 원리이다.

 

4. 반복 단계:

  • 위 단계를 반복하여 x 값을 업데이트하고 함수의 값을 점점 줄인다.
  • 기울기가 작아지는 방향으로 조금씩 이동하면서 최솟값을 찾아간다.

5. 수렴 단계:

  • 알고리즘이 수렴하면 최적의 매개변수를 찾았다고 판단

6. 학습률 선택:

  • 학습률 η은 경사하강법의 사용자 정의 변수이다. 보통 0.05 또는 0.1과 같은 작은 값으로 설정

 

3. 경사하강법의 종류

3.1 배치 경사 하강법(Batch Gradient Descent)

1. 정의

  • BGD는 전체 훈련 세트를 사용하여 경사 하강법을 실행하는 최적화 알고리즘.
  • 주로 비용 함수를 최소화하기 위해 반복적으로 모델의 매개변수를 업데이트하는 데 사용된다.

2. 동작방식

  • BGD는 다음과 같은 단계로 동작한다:
    1. 전체 데이터:
      • 훈련 데이터의 전체 집합을 사용하여 기울기를 계산한다.
    2. 기울기 계산:
      • 현재 매개변수에서 손실 함수의 기울기를 구한다.
      • 기울기는 매개변수를 어느 방향으로 업데이트해야 하는지를 나타낸다.
    3. 매개변수 업데이트:
      • 업데이트 식을 사용하여 매개변수를 조금씩 업데이트한다.
      • 학습률(learning rate)을 곱한 기울기만큼 이동한다.
    4. 반복:
      • 위 단계를 반복하여 매개변수를 업데이트하고 손실 함수의 값을 줄인다.
    5. 수렴:
      • 알고리즘이 수렴하면 최적의 매개변수를 찾았다고 판단한다.

3. 장점과 단점

  • 장점:
    • 전체 데이터를 사용하므로 안정적인 방법.
    • 수렴이 빠르게 진행될 수 있다.
  • 단점:
    • 큰 데이터셋에서는 계산 비용이 크다.
    • 지역 최솟값에 빠질 수 있다.

 

3.2 확률적 경사 하강법(Stochastic Gradient Descent)

  1. 정의:
    • SGD는 전체 훈련 세트를 사용하여 경사 하강법을 실행하는 최적화 알고리즘.
    • 주로 비용 함수를 최소화하기 위해 반복적으로 모델의 매개변수를 업데이트하는 데 사용된다.
  2. 동작 방식:
    • SGD는 다음과 같은 단계로 동작합니다:
      1. 무작위 샘플 선택:
        • 훈련 데이터의 일부 샘플을 무작위로 선택.
      2. 나머지 단계는 BGD와 동일
  3. 장점과 단점:
    • 장점:
      • 계산 비용이 작아서 대규모 데이터셋에서 효율적입니다.
      • 지역 최솟값에 빠지지 않을 가능성이 높습니다.
    • 단점:
      • 노이즈가 있는 데이터에서 수렴이 불안정할 수 있습니다.
      • 학습률을 잘 조절해야 합니다.

 

3.3 미니 배치 경사하강법(Mini-Batch Gradient Descent)

  1. 미니 배치(Mini-Batch):
    • 전체 훈련 데이터를 작은 묶음으로 나눕니다. 이 묶음을 미니 배치라고 합니다.
    • 예를 들어, 1024개의 훈련 데이터가 있고 미니 배치 크기를 64로 설정하면, 한 미니 배치에는 64개의 데이터가 들어갑니다.
  2. 동작 방식:
    • MBGD는 다음과 같은 단계로 동작합니다:
      1. 미니 배치 선택:
        • 무작위로 미니 배치를 선택합니다.
      2. 나머지 단계는 BGD와 동일
  3. 장점과 단점:
    • 장점:
      • 연산량이 적어서 대규모 데이터셋에서 효율적입니다.
      • 지역 최솟값에 빠지지 않을 가능성이 높습니다.
    • 단점:
      • 노이즈가 있는 데이터에서 수렴이 불안정할 수 있습니다.
      • 학습률을 잘 조절해야 합니다.

 

 

4. 경사하강법 실습 코드

# Let's create a simple example of gradient descent optimization for a quadratic function f(x) = x^2 + 5x + 10.

# Define the quadratic function
def f(x):
    return x**2 + 5*x + 10

# Define the derivative of the function (gradient)
def df(x):
    return 2*x + 5

# Initialize the parameter (starting point)
x = 0

# Set the learning rate
learning_rate = 0.1

# Number of iterations
num_iterations = 100

xlist=[0]
# Gradient Descent optimization
for i in range(num_iterations):
    gradient = df(x)
    x -= learning_rate * gradient
    xlist.append(x)

print(xlist)
# Print the result
print(f"Optimal x value: {x}")
print(f"Optimal function value: {f(x)}")

위의 함수는 (f(x) = x^2 + 5x + 10) 의 최솟값을 찾아가는 예제 코드이다. 

df(x)는 함수를 미분하는 함수이고 x=0 부터 시작해서 -0.5,-0.9 .... 와 같이 찾아 가는 것을 알 수 있다.

마지막에 -2.49 값을 찾는 것을 알 수 있다.

그래프로 그려 보자.

# Generate x values for plotting
x_values = np.linspace(-7, 2, 100)

# Calculate y values for the quadratic function
y_values = x_values**2 + 5*x_values + 10

# Calculate y values for the linear regression line
y_pred = 0.02*x_values + 3.75

# Plot the quadratic function
plt.plot(x_values, y_values, label='Quadratic Function')

# Plot the linear regression line
plt.plot(x_values, y_pred, color='red', label='Linear Regression Line')

# Add labels and title
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Gradient Descent Optimization')

# Add legend
plt.legend()

# Show the plot
plt.show()

기울기가 2x+5 의 값에 x가 -2.49 일때 0.02가 나오고 y 절편은 3.75이므로 그 값을 사용했다.

정확히 찾는 것을 확인할 수 있다.

 

5. 요약

  • 목적: 비용함수의 최솟값을 찾는 것.
  • 단계:
    1. 초기화: 매개변수 초기값 설정.
    2. 기울기 계산: 현재 위치에서 손실 함수의 기울기 구함.
    3. 매개변수 업데이트: 학습률과 기울기를 이용하여 매개변수 업데이트.
    4. 반복: 위 과정을 반복하여 최솟값 찾음.
    5. 수렴: 알고리즘이 수렴하면 최적 매개변수로 판단.

경사하강법은 기울기를 활용하여 함수의 최솟값을 찾는 방법 이다

 

인천 검단 원당컴퓨터학원[T032-565-5497]

#정보올림피아드

#검단신도시코딩

#원당동코딩

#마전동코딩

#왕길동코딩

#당하동코딩

#아라동코딩

#풍무동코딩

#불로동코딩

#검단동코딩

#검암동코딩

 
사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기