https://wondangcom.tistory.com/2769
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는 다음과 같은 단계로 동작한다:
- 전체 데이터:
- 훈련 데이터의 전체 집합을 사용하여 기울기를 계산한다.
- 기울기 계산:
- 현재 매개변수에서 손실 함수의 기울기를 구한다.
- 기울기는 매개변수를 어느 방향으로 업데이트해야 하는지를 나타낸다.
- 매개변수 업데이트:
- 업데이트 식을 사용하여 매개변수를 조금씩 업데이트한다.
- 학습률(learning rate)을 곱한 기울기만큼 이동한다.
- 반복:
- 위 단계를 반복하여 매개변수를 업데이트하고 손실 함수의 값을 줄인다.
- 수렴:
- 알고리즘이 수렴하면 최적의 매개변수를 찾았다고 판단한다.
- 전체 데이터:
3. 장점과 단점
- 장점:
- 전체 데이터를 사용하므로 안정적인 방법.
- 수렴이 빠르게 진행될 수 있다.
- 단점:
- 큰 데이터셋에서는 계산 비용이 크다.
- 지역 최솟값에 빠질 수 있다.
3.2 확률적 경사 하강법(Stochastic Gradient Descent)
- 정의:
- SGD는 전체 훈련 세트를 사용하여 경사 하강법을 실행하는 최적화 알고리즘.
- 주로 비용 함수를 최소화하기 위해 반복적으로 모델의 매개변수를 업데이트하는 데 사용된다.
- 동작 방식:
- SGD는 다음과 같은 단계로 동작합니다:
- 무작위 샘플 선택:
- 훈련 데이터의 일부 샘플을 무작위로 선택.
- 나머지 단계는 BGD와 동일
- 무작위 샘플 선택:
- SGD는 다음과 같은 단계로 동작합니다:
- 장점과 단점:
- 장점:
- 계산 비용이 작아서 대규모 데이터셋에서 효율적입니다.
- 지역 최솟값에 빠지지 않을 가능성이 높습니다.
- 단점:
- 노이즈가 있는 데이터에서 수렴이 불안정할 수 있습니다.
- 학습률을 잘 조절해야 합니다.
- 장점:
3.3 미니 배치 경사하강법(Mini-Batch Gradient Descent)
- 미니 배치(Mini-Batch):
- 전체 훈련 데이터를 작은 묶음으로 나눕니다. 이 묶음을 미니 배치라고 합니다.
- 예를 들어, 1024개의 훈련 데이터가 있고 미니 배치 크기를 64로 설정하면, 한 미니 배치에는 64개의 데이터가 들어갑니다.
- 동작 방식:
- MBGD는 다음과 같은 단계로 동작합니다:
- 미니 배치 선택:
- 무작위로 미니 배치를 선택합니다.
- 나머지 단계는 BGD와 동일
- 미니 배치 선택:
- MBGD는 다음과 같은 단계로 동작합니다:
- 장점과 단점:
- 장점:
- 연산량이 적어서 대규모 데이터셋에서 효율적입니다.
- 지역 최솟값에 빠지지 않을 가능성이 높습니다.
- 단점:
- 노이즈가 있는 데이터에서 수렴이 불안정할 수 있습니다.
- 학습률을 잘 조절해야 합니다.
- 장점:
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. 요약
- 목적: 비용함수의 최솟값을 찾는 것.
- 단계:
- 초기화: 매개변수 초기값 설정.
- 기울기 계산: 현재 위치에서 손실 함수의 기울기 구함.
- 매개변수 업데이트: 학습률과 기울기를 이용하여 매개변수 업데이트.
- 반복: 위 과정을 반복하여 최솟값 찾음.
- 수렴: 알고리즘이 수렴하면 최적 매개변수로 판단.
즉 경사하강법은 기울기를 활용하여 함수의 최솟값을 찾는 방법 이다
인천 검단 원당컴퓨터학원[T032-565-5497]
#정보올림피아드
#검단신도시코딩
#원당동코딩
#마전동코딩
#왕길동코딩
#당하동코딩
#아라동코딩
#풍무동코딩
#불로동코딩
#검단동코딩
#검암동코딩
'강의자료 > 머신러닝' 카테고리의 다른 글
3.4 규제 (11) | 2024.05.30 |
---|---|
3.3 다항회귀 (5) | 2024.05.23 |
3.1 선형 회귀 (7) | 2024.05.09 |
2.1 데이터 다루기 - 데이터 전처리 필요성 (9) | 2024.05.02 |
2.1 데이터 다루기 - 산점도 그려 보기(캐글 데이터셋 남자와 여자 분류) (3) | 2024.04.25 |