관리 메뉴

HeeJ's

[07] 신경망 학습 (2) 본문

<Machine Learning>

[07] 신경망 학습 (2)

meow00 2020. 11. 14. 16:11

기울기

: 모든 변수의 편미분을 벡터로 정리한 것

 

def numerical_gradient(f, x):
	h = 1e-4 #0.0001
    grad = np.zeros_like(x)
    
    for idx in range(x.size):
    	tmp_val = x[idx]
        #f(x+h) 계산
        x[idx] = tmp_val + h
        fxh1 = f(x)
        
        #f(x-h) 계산
        x[idx] = tmp_val - h
        fxh2 = f(x)
        
        grad[idx] = (fxh1 - fxh2 ) / (2*h)
        x[idx] = tmp_val #값 복원

return grad

기울기 파이썬 구현

 

# np.zeros_like(x) -> x와 형상이 같고 원소가 모두 0인 배열 생성

 

numerical_gradient(f, x)의 인수인 f는 함수이고, x는 넘파이 배열이므로 넘파이 배열 x의 각 원소에 대해 수치 미분을 구한다.

 

 

기울기란 함수의 '가장 낮은 장소(최솟값)'를 가리키는 것과 같다고 할 수 있다.

하지만 정홛히 실제로는 각 지점에서 낮아지는 방향을 가리킨다.

=> 기울기가 가리키는 쪽은 각 장소에서 함수의 출력 값을 가장 크게 줄이는 방향이다.

 

 

경사법 (경사 하강법)

 

일반적인 기계학습 문제의 손실 함수는 매우 복잡해 매개변수의 공간이 광대하여 어느 값이 최소값인지 짐작할 수 없다.

이러한 상황에서 기울기를 잘 이용해 함수의 최솟값(가능한 한 작은 값)을 찾으려는 방식

주의할 점은 각 지점에서 함수의 값을 낮추는 방안을 제시하는 지표가 기울기라는 것이다.

하지만 기울기가 가리키는 곳에 정말 함수의 최솟값이 있는지를 보장할 수는 없다.

 

실제로 복잡한 함수에서는 기울기가 가리키는 방향에 최솟값이 없는 경우가 대부분이다.

 

* 함수가 극솟값, 최솟값, 안장점이 되는 장소에서 기울기가 0이다.

극솟값 - 한정된 범위에서의 최솟값인 점
안장점 - 어느 방향에서 보면 극댓값이고 다른 방향에서 보면 극솟값이 되는 점(다변수함수의 그래프에서 나타난다)

 

기울어진 방향이 꼭 최솟값을 가리키는 것은 아니지만, 그 방향으로 가면 함수의 값을 줄일 수 있다

최솟값이 되는(가능한 한 작은 값이 되는) 장소를 찾는 문제에서는 기울기 정보를 단서로 나아갈 수 밖에 없다.

 

경사법

현 위치에서 기울어진 방향으로 일정거리 이동 -> 이동한 곳의 기울기를 구해 기울어진 방향으로 이동 -> 반복

=> 함수의 값을 점차 줄인다.

 

기계학습을 최적화하는데 흔히 사용하는 방법이다.

 

경사법을 수식으로 표현

 

여기서 eta는 갱신하는 양을 나타낸다. (학습률)

: 한 번의 학습으로 얼마만큼 학습해야 할지, 즉 매개변수 값을 얼마나 갱신하느냐를 정함

학습률의 값을 0.01이나 0.001 등으로 미리 정해두어야 한다. 값이 너무 크면 정확한 장소를 찾아갈 수 없음

 

def gradient_descent(f, init_x, lr=0.01, step_num=100):
	x = init_x
    
    for i in range(step_num):
    	grad = numerical_gradient(f, x)
        x -= lr * grad
    return x

경사 하강법 파이썬 구현

 

# f : 최적화하려는 함수

# init_x : 초깃값

# lr : leraning rate, 학습률

# step_num : 경사법에 따른 반복 횟수

 

여기서, 학습률이 너무 크다면 큰 값으로 발산해버리고, 너무 작으면 갱신되지 않은 채로 끝이 난다.

 

신경망 학습에서도 기울기는 필요하다. (가중치 매개변수에 대한 손실 함수의 기울기)

 

정리 || 신경망 학습의 절차

 

전제 - 신경망에는 적용 가능한 가중치와 편향이 있고, 이를 훈련 데이터에 적응하도록 조정하는 과정을 '학습'이라 함

1단계 - 미니 배치

: 훈련 데이터 중 일부를 무작위로 추출. 선별된 데이터들을 미니배치라고 함.

미니배치의 손실 함수 값을 줄이는 것이 목표.

2단계 - 기울기 산출

: 미니배치의 손실 함수 값을 줄이기 위해 각 가중치 매개변수의 기울기룰 구함.

기울기는 손실 함수의 값을 가장 작게 하는 방향을 제시

3단계 - 매개변수 갱신

: 가중치 매개변수를 기울기 방향으로 갱신

4단계 - 반복

: 1~3단계 반복

 

=> 미니 배치를 무작위로 선정하기 때문에 확률적 경사 하강법이라고 부른다.

 

 

'<Machine Learning>' 카테고리의 다른 글

[08] Metadata, 메타 데이터  (0) 2022.02.08
[06] 신경망 학습 (1)  (0) 2020.11.04
[05] 항등 함수와 소프트맥스 함수  (0) 2020.10.07
[04] 신경망(2)  (0) 2020.10.07
[03] 신경망(1)  (0) 2020.09.30