일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- BOJ
- 인공지능
- 스트림암호
- 정보보안
- 신경망 학습
- BOF
- 딥러닝
- 파이썬신경망
- 백준알고리즘
- 활성화함수파이썬
- 신경망파이썬
- 머신러닝
- 파이썬
- 소프트맥스함수
- 백준
- c언어
- 달고나bof
- 8086CPU레지스터
- 신경망
- 항등함수
- 신경망구현
- 버퍼오버플로우
- 딥러닝파이썬
- C언어알고리즘
- C언어 알고리즘
- 알고리즘
- FTZlevel10
- C알고리즘
- 보안
- 밑바닥부터시작하는딥러닝
- Today
- Total
HeeJ's
[07] 신경망 학습 (2) 본문
기울기
: 모든 변수의 편미분을 벡터로 정리한 것
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 |