지시딥 5-6. 신경망 학습 1탄, 2탄

곽정은·2021년 1월 21일
3

스터디

목록 보기
5/19
  • 학습이란 훈련 데이터로부터 가중치 매개변수 최적값을 자동으로 획득하는 것.
  • 학습의 목표란?
    --> 신경망이 학습할 수 있도록 해주는 지표인 손실함수를 배우고, 이 손실함수의 값을 가급적 작게 만드는 가중치 매개변수를 찾는 것.

4.1 데이터에서 학습한다!

  • 신경망의 주요 특징

    데이터를 보고 학습한다. = 가중치 매개변수의 값을 데이터를 통해 자동으로 결정한다.


노트

  • 퍼셉트론도 선형 분이 가능 문제라면 데이터로부터 자동으로 학습이 가능.
  • 선형 분리 가능 문제는 유한 번의 학습을 통해 풀 수 있다는 사실이 '퍼셉트론 수렴 정리'로 증명됨.
  • 다만, 비선형 분리 문제는 자동으로 학습 불가능.

4.1.1 데이터 주도 학습

기계학습

  • 기계학습은 데이터에서 답을 찾고, 패턴을 발견하고, 이야기를 만듦.
  • 그래서 데이터가 가장 중요하며 기계학습의 중심에 데이터가 존재.

기계학습은 사람의 개입을 최소화하고, 수집한 데이터로부터 패턴을 찾으려 시도.
= 사람의 개입을 배제.

  • MNIST 분류 문제는 이미지에서 특징(피처)를 추출하고, 그 특징의 패턴을 기계학습 기술로 학습하는 방법을 사용.
  • 특징(feature; 피처)란 입력 데이터에서 본질적인 데이터를 정확하게 추출할 수 있도록 설계된 변환기.
  • 이미지의 특징은 보통 벡터로 기술하고, 컴퓨터 비전 분야에서는 SIFT, SURF, HOG 등의 특징을 많이 사용함.
  • 이런 특징을 이용하여 이미지 데이터를 벡터로 변환하고, 변환된 벡터를 가지고 지도학습 방식의 대표 분류 기법인 SVM, KNN 등으로 학습할 수 있음.
  • 기계학습에서는 모아진 데이터로부터 규칙을 찾아내는 일을 '기계'가 담당하지만, 이미지를 벡터로 변환할 때 사용하는 특징은 여전히 '사람'이 설계함.
  • 특징과 기계학습을 활용한 접근에도 문제에 따라서 사람이 적절한 특징을 생각해야 함. 그렇지 않으면 좋은 결과를 얻지 못할 수도 있음.

신경망

  • 위 그림에서 회색블록은 사람이 개입하지 않음을 뜻함.

  • 신경망은 이미지를 있는 그대로 학습하며, 이미지에 포함된 중요한 특징까지도 기계가 스스로 학습함. (end to end 머신러닝: 종단간 기계학습, 데이터에서 목표한 결과를 사람의 개입 없이 얻음.)

  • 또한 신경망은 주어진 데이터를 온전히 학습하고 주어진 문제의 패턴을 발견하려고 시도하여, 모든 문제를 같은 맥락에서 풀 수 있음. (Ex. '5' 인식 = '개' 인식 = '사람 얼굴' 인식 등등)

4.1.2 훈련 데이터와 시험 데이터

  • 기계학습 문제는 데이터를 훈련 데이터와 시험 데이터를 나눔.
  • 훈련 데이터만 사용하여 최적의 매개변수를 찾고, 시험 데이터를 사용하여 훈련 모델의 실력을 평가함.

왜 훈련데이터와 시험데이터를 나눌까?
= 범용 능력 획득이 기계학습의 최종 목표이기 때문.
(범용 능력: 처음 보는 데이터로 문제를 올바르게 풀어내는 능력.)

  • 데이터셋 하나로만 매개변수의 학습/평가를 수행한다면, 한 데이터셋에만 지나치게 최적화된 상태인 오버피팅이 올 수 있음.

4.2 손실 함수

  • 신경망 학습에서는 현재 상태를 '하나의 지표'로 표현하고, 그 지표를 가장 좋게 만들어주는 최적의 매개변수 값을 탐색함.
  • 이때 사용하는 지표가 손실 함수(loss function)임.
  • 손실 함수는 신경망 성능의 나쁨을 나타내는 지표로, 현재 신경망이 훈련 데이터를 얼마나 구리게 처리하는지를 나타냄.
  • 손실 함수는 '오차제곱합', '교차 엔트로피 오차' 등을 사용.

4.2.1 오차제곱합

  • 오차제곱합(sum of squares for error, SSE)

E=12k(yktk)2E=\frac{1}{2}\sum_k(y_k-t_k)^2

yky_k : 신경망의 출력(신경망이 추정한 값) (= 소프트맥스 함수의 출력 a.k.a 확률)
tkt_k : 정답 레이블 (= 원-핫 인코딩으로 정답 위치만 1)
kk : 데이터의 차원 수

(각 원소의 출력(추정값))(정답 레이블(참 값))2의 총합(각\ 원소의\ 출력(추정 값))- (정답\ 레이블(참\ 값))^2의\ 총합.

  • 손실 함수의 출력이 작으면 정답 레이블과의 오차도 작음.
  • 오차제곱합이 작다. = 신경망 추론의 정확도가 높다.
  • 제곱을 한 이유는?
    -> 결과가 음수이면 합이 바뀌기 때문.

4.2.2 교차 엔트로피 오차

  • 교차 엔트로피 오차(cross entropy error, CEE)
  • 엔트로피는 무질서의 정도.

E=k(tklogyk)E=-\sum_k(t_k\log y_k)

  • log\log = 밑이 ee인 자연로그(loge\log_e)

  • yky_k : 신경망의 출력(신경망이 추정한 값)

  • tkt_k : 정답 레이블 (= 원-핫 인코딩으로 정답 위치만 1)

  • 오차를 양수로 표현하기 위해 마이너스(-)를 붙임.

실질적으로 정답일 때의 추청의 자연로그를 계산하는 식.
= tkt_k가 1일 때 yky_k의 자연로그를 계산하는 식.
Ex. 신경망의 출력 = 0.6이면, 교차 엔트로피 오차는 log0.6=0.51-\log 0.6 = 0.51


자연로그 계산하는 법

  1. 자연로그를 계산하려면 우선 로그의 의미와 상용로그를 알아야 함.
  2. logab\log_ab밑인 aa를 몇 제곱해야 진수 bb가 나오는지 구하는 것임.
    예를 들어 log10100\log_{10}100이 있다면, 10을 몇 번 곱하면 100이 나오는지 구하는 것임.
    10을 2번 곱하면 100이 나오므로, log10100=2\log_{10}100 = 2.
  3. 이때 밑이 10인 로그를 상용로그라고 함. 상용로그는 밑의 10을 생략하여 표시가 가능. 계산이 어려워서 상용로그 표를 보고 알 수 있음.
  4. 자연로그는 밑이 ee인 로그임. ee는 오일러 상수로 대략 2.7이라고 함.
  5. 로그의 성질 중에 logaN=logbNlogba\log_aN=\frac{\log_bN}{\log_ba} 가 있음. 같은 수를 밑으로 두면, 원래 밑과 진수가 각각 분모와 분자로 들어가는 분수로 표시가 가능함.
  6. 오일러 상수를 밑으로 가진 로그는 밑이 1이 아니기 때문에 계산이 가능함.
  7. loge0.6=log100.6log10e=log0.6loge=log0.6log2.7-\log_e 0.6 = -\frac{\log_{10}0.6}{\log_{10}e} = -\frac{\log0.6}{\log e} = -\frac{\log0.6}{\log 2.7}
  8. log0.6\log0.6은 계산기로 구하면 약 -0.22이고, log2.7\log 2.7은 상용로그표를 보면 약 0.43임.
    (log0.6\log0.6은 진수가 분수라서 나눠서 계산하면 계산기가 필요없지만 귀찮기에 넘어가도록 한다.)
  9. log0.6log2.7=0.220.43-\frac{\log0.6}{\log 2.7}=-\frac{-0.22}{0.43} 임으로 음수와 음수가 만나니 양수가 되어 0.220.43\frac{0.22}{0.43}로 계산할 수 있음.
  10. 따라서 0.220.430.51\frac{0.22}{0.43}≒0.51 임을 알 수 있음.

오늘 로그 마스터했다... 휴;;


  • 위 그림은 자연로그 y=logxy=\log x 의 그래프.
  • x가 1일 때 y는 0이 되고, x가 0에 가까워지면 y값은 점점 작아짐.
  • 교차 엔트로피 오차 또한 정답에 해당하는 출력값이 커질수록 0에 다가가다가, 그 출력이 1일 때 0이 됨.
    (= 정답에 해당하는 출력값이 커질수록 오차는 0에 가까워짐.)

4.2.3 미니배치 학습

  • 학습은 훈련 데이터에 대한 손실 함수의 값을 구하고, 그 값을 최대한 줄여주는 매개변수를 찾는 것.
    --> 이렇게 하려면 모든 훈련 데이터를 대상으로 손실 함수 값을 구해야 함.
    (= 훈려 데이터 양만큼의 손실 함수 값들의 합)

훈련 데이터 모두에 대한 손실 함수의 합을 구하는 방법은 다음과 같음.

  • 교차 엔트로피 오차의 경우,
    E=1Nnk(tnklogynk)E=-\frac{1}{N}\sum_n\sum_k(t_{nk}\log y_{nk})
  • tnkt_{nk}: 데이터가 N개일 때, n번째 데이터의 k번째 값. (= 정답 레이블)
  • ynky_{nk}: 신경망의 출력.
  • 데이터 하나에 대한 손실 함수를 N개의 데이터로 확장하여, 마지막에 N으로 나눠 정규화함.
    (= 평균 손실 함수를 구하는 것.)
  • 평균을 구하는 것의 이점은 훈련 데이터 개수와 상관없이 언제든지 통일된 지표를 구할 수 있다는 것.
  • 데이터가 빅데이터처럼 클 경우, 손실 함수의 합을 구하는 데에 시간이 많이 걸림.
  • 그래서 데이터 일부를 추려 전체의 '근사치'로 이용할 수 있음.
  • 전체 훈련 데이터 중 일부를 무작위로 뽑아 그 일부만 사용하여 학습하는 것을 미니배치 학습이라고 함.
  • 그리고 전체 데이터에서 뽑은 일부를 미니배치라고함.

4.2.4. (배치용) 교차 엔트로피 오차 구현하기

  • 배치용 교차 엔트로피 오차 구하기?
    --> 데이터를 하나씩 처리하여 구현하는 교차 엔트로피 오차 식을 조금 바꿔서 구현하면 됨.

  • 출력값 y가 원-핫 인코딩과 같은 1차원 배열이라면, 숫자 레이블과 같이 2차원으로 바꿔주기 위해 reshape 함수를 사용해서 데이터의 형상을 바꿔줌.

  • 코딩 구현 부분은...

4.2.5 왜 손실 함수를 설정하는가?

  • 숫자 인식을 할 때, 우리의 목표는 높은 정확도를 끌어내는 매개변수를 찾는 것.
  • 그런데 왜 정확도라는 지표를 두고 손실 함수의 값이라는 우회적인 방법을 택할까?
    --> 정확도를 지표로 하면 매개변수의 미분이 대부분의 장소에서 0이 되기 때문.
  • 신경망 학습에서는 최적의 매개변수(가중치, 편향)를 탐색할 때, 손실 함수의 값을 가능한 작게 하는 매개변수 값을 찾으려고 노력함.
  • 이때 매개변수의 미분(기울기)을 계산하고, 그 미분 값을 단서로 매개변수의 값을 서서히 반복하는 과정을 반복함.
  • 가중치 매개변수에 대한 손실 함수의 미분이란 '가중치 매개변수의 값을 아주 조금 변화시켰을 때, 손실 함수가 어떻게 변하나'라는 의미.
  • 미분 값이 음수라면, 그 가중치 매개변수를 양의 방향으로 변화시켜 손실 함수의 값을 줄이기 가능.
  • 하지만 미분 값이 0이라면, 가중치 매개변수를 어느 방향을 움직여도 손실 함수의 값은 줄어들지 않음. 그러면 가중치 매개변수의 갱신은 거기서 멈춤.

  • 정확도를 지표로 삼으면 매개변수의 미분이 대부분의 장소에서 0이 되는 이유는 무엇일까?
    --> 정확도를 지표로 삼으면 불연속적인 값으로 나와서 약간의 조정으로는 정확도 개선이 안되기 때문. (하단 예시 참고)

    Ex. 한 신경망이 100장의 훈련 데이터 중 32장을 올바로 인식한다고 하자.

    • 이때 정확도는 32%.
    • 만약 정확도가 지표였다면 가중치 매개변수의 값을 조금 바꿔도 정확도는 그대로 32%일 것.
    • 즉, 매개변수를 약간만 조정해서는 정확도가 개선되지 않고 일정하게 유지됨.
    • 만약 정확도가 개선된다고 하더라도 그 값은 연속적이지 않고 33%, 34%와 같이 불연속적인 값으로 바뀌어버릴 것.
  • 이와 다르게 손실 함수를 지표로 삼으면, 현재 손실 함수의 값은 0.92543...과 같은 수치로 나타나며, 매개변수의 값이 조금 변하면 그에 반응하여 손실 함수의 값도 0.93432...과 같이 연속적으로 변화함.

  • 종합해보면 정확도는 극미한 변화에는 거의 반응을 보이지 않고, 반응이 있더라도 그 값이 불연속적으로 갑자기 변화하기에 지표로 사용하지 않는 것.
  • 정확도를 지표로 사용하지 않는 이유는 '계단 함수'를 활성화 함수로 사용하지 않는 이유와 그 결이 같음.
  • 계단 함수의 미분은 0을 제외하고 대부분의 장소에서 0임.
  • 그 결과, 계단 함수가 매개변수의 작은 변화가 주는 파장을 말살
    --> 손실 함수의 값에 아무런 변화가 나타나지 않기 때문에 활성화 함수로 계단함수를 사용하면,
    손실 함수를 지표로 삼는 것이 아무런 의미가 없게 됨.
  • 이와 다르게 시그모이드 함수의 미분은 출력(세로축의 값)이 연속적으로 변하고 곡선의 기울기도 연속적을 변함.
  • 즉, 시그모이드 함수의 미분은 어느 장소라도 0이 되지는 않음.
  • 기울기가 0이 되지 않기 때문에 신경망이 매개변수의 갱신을 멈추지 않고 올바르게 학습할 수 있는 것.

4.3 수치미분

  • 경사법에서는 기울기 값을 기준으로 나아갈 방향을 정함.
  • 수치 미분: 아주 작은 차분으로 미분하는 것. 근사치로 계산하는 방법.
  • 해석적 미분: 고등학교에서 배우는 미분으로 오차값을 포함하지 않는 진정한 미분.

4.3.1 미분

  • 미분: '특정 순간'의 변화량. 어떤 함수의 접선의 값을 구하는 것.
    (= 곡선에 가장 가까운 직선을 구하는 것.)

df(x)dx=limh0f(x+h)f(x)h\frac{df(x)}{dx}=\lim_{h \rightarrow 0} \frac{f(x+h)-f(x)}{h}

  • 좌변인 df(x)dx\frac{df(x)}{dx} 은 f(x)의 x에 대한 미분으로, x에 대한 f(x)의 변화량을 나타냄.
  • 즉, x의 작은 변화가 함수 f(x)를 얼마나 변화시키느냐를 의미.
  • 이때 시간의 작은 변화, 즉 시간을 뜻하는 h를 한없이 0에 가깝에 한다는 의미를 limh0\lim_{h \rightarrow 0}로 나타냄.

수치미분 개선점 2가지

1. h 값

  • 극한은 인간의 정신이 만든 개념이라서 종이와 펜으로 푸는 계산에서는 쉽게 구현이 가능.
    하지만 코드로 표현할 때는 h가 0이 되면 분모가 0이 되어 계산이 어렵기 때문에
    0과 가까운 아주 작은 값을 대입해 줌.
  • 하지만 10e-50과 같은 너무 작은 값을 대입하면 반올림 오차(rounding error) 문제를 일으킴. 반올림 오차는 작은 값(가령 소수점 8자리 이하)이 생략되어 최종 계산 결과에 오차를 생기게 함.
  • 그래서 미세한 값 h로 10410^{-4}를 사용하기를 추천함.

2. 함수 f의 차분(임의 두 점에서의 함수 값들의 차이)

  • x+h와 x 사이의 함수 f의 차분을 계산하고 있지만, 애당초 이 계산에는 오차가 있음.
  • 위 그림처럼 '진정한 미분'은 x 위치의 함수의 기울기(접선)에 해당하지만, 이번 구현에서의 미분은 (x+h)와 x 사이의 기울기에 해당함. (\neq 진정한 미분)
  • 왜냐하면 h를 무한히 0으로 좁히는 것이 코드로는 불가능하기 때문임.
  • 수치 미분에는 오차가 포함됨. 이 오차를 줄이기 위해 중앙차분을 사용하기도 함.
  • 후진차분법: 아주 작은 값의 바로 이전 f(x)값과의 차이를 이용하는 미분법.
    f(x)limx0f(x)f(xx)xf\prime(x) \cong\lim_{\triangle x \rightarrow 0} \frac{f(x)-f(x-\triangle x)}{\triangle x}
  • 전진차분법: 아주 작은 값의 바로 이후 f(x)값과의 차이를 이용하는 미분법. (일반적인 미분)
    f(x)limx0f(x+x)f(x)xf\prime(x) \cong\lim_{\triangle x \rightarrow 0} \frac{f(x+\triangle x)-f(x)}{\triangle x}
  • 중앙차분법(중심차분법): 바로 이전과 이후를 구해 2로 나눠주는 미분법.
    f(x)limx0f(x+x)f(xx)2xf\prime(x) \cong \lim_{\triangle x \rightarrow 0} \frac{f(x+\triangle x)-f(x-\triangle x)}{ 2 \triangle x}

4.3.2 수치 미분의 예

  • Ex. y=0.01x2+0.1xy=0.01x^2+0.1x라는 함수를 x=5, 10일때, 해석적 미분과 수치 미분으로 나타내보자.
  1. 해석적 미분으로 식을 미분하면 다음과 같다.
    df(x)dx=0.02x+0.1\frac{df(x)}{dx}=0.02x+0.1
    x=5일 때, 0.2
    x=10일 때, 0.3
  1. 수치 미분으로 식을 미분하면 다음과 같다.
    (자세한 계산 과정 생략)
    x=5일 때, 0.19...
    x=10일 때, 0.29...
  • 위 해석적 미분과 수치 미분을 비교해보면 그 오차가 매우 작음을 알 수 있음.

  • 그래서 위에서 구한 수치 미분 값을 기울기로 하는 직선을 그려보면, 오차가 아주 작아 함수의 접선에 해당함을 알 수 있음.

4.3.3 편미분

  • 편미분은 변수가 여럿인 함수에 대한 미분.
    --> 함수의 변수가 2개 이상의 함수에서 변수 1개의 변화에 따른 기울기를 알고 싶을 때 필요.
  • Ex. f(x0,x1)=x02+x12f(x_0,x_1)=x_0^2+x_1^2 라는 식을 미분해보자.

  • 이 함수의 그래프는 3차원으로 그려짐.

  • 주의할 점은 변수가 2개이기 때문에 어떤 변수에대한 미분인지를 구별해야 함.

  • 수식으로는 fx0\frac{∂f}{∂x_0}이나 fx1\frac{∂f}{∂x_1}으로 적음.

Ex. f(x0,x1)=x02+x12f(x_0,x_1)=x_0^2+x_1^2 라는 식이 있다고 하자.
x0=3x_0=3, x1=4x_1=4 일 때, x0x_0에 대한 편미분 fx0\frac{∂f}{∂x_0}를 구하라.

  • 풀이
  1. x1=4x_1=4로 고정시킨 새로운 함수를 정의.
  2. f(x0)=x02+42f(x_0)=x_0^2+4^2를 미분.
  3. f(x0)=2x0f'(x_0)=2x_0.
  4. x0=3x_0=3를 미분된 식에 대입하면 답은 6.
  • 수치미분과 해석적 미분의 값은 차이가 거의 없음.
  • 편미분 문제는 변수가 하나인 함수를 정의하고, 그 함수를 미분하는 형태로 구현하여 풀면 됨.
  • 즉, 구하고자하는 미지수에 초점을 두고 나머지 미지수는 상수로 간주하는 것.

4.4 기울기

  • 앞에서는 x0,x1x_0, x_1의 편미분을 변수별로 따로 계산했음.
  • 만약 두 변수의 편미분을 동시에 계산하고 싶다면 어떻게 해야할까?
  • x0=3,x1=4x_0=3, x_1=4일 때, (x0,x1)(x_0, x_1) 양쪽의 편미분을 묶어서 (fx0,fx1)\left(\frac{∂f}{∂x_0}, \frac{∂f}{∂x_1}\right)을 계산한다고 할때, (fx0,fx1)\left(\frac{∂f}{∂x_0}, \frac{∂f}{∂x_1}\right)처럼 모든 변수의 편미분을 벡터로 정리한 것을 기울기(gradient)라고 함.
  • (x0,x1)(x_0, x_1)의 각 점에서 기울기를 계산할 수 있는데,
    그 모든 f(x0,x1)=x02+x12f(x_0,x_1)=x_0^2+x_1^2의 기울기를 그림으로 표현하면 다음과 같음.
    (기울기 결과에 마이너스를 붙인 벡터를 그림.)

  • 기울기 그림은 방향을 가진 벡터(화살표)로 그려짐.

  • 그림을 보면 기울기는 함수의 '가장 낮은 장소(최솟값)'을 가리키는 것으로 보임.

  • 정확히 기울기는 각 지점에서 낮아지는 방향을 가리키는 것이고, 더 정확히 말하자면 기울기가 가리키는 쪽은 각 장소에서 함수의 출력 값을 가장 크게 줄이는 방햠임.

  • 또 '가장 낮은 곳'에서 멀어질수록 화살표의 크기가 커짐을 알 수 있음.

4.4.1 경사법(경사 하강법)

  • 기계학습 문제 대부분은 학습 단계에서 최적의 매개변수를 찾아냄.
  • 신경망 역시 최적의 매개변수를 학습할 때 찾아야 함.
    (최적: 손실 함수가 최솟값이 될 때의 매개변수의 값.)
  • 하지만 매개변수 공간이 광대하여 어디가 최솟값이 되는 곳인지를 짐작하기 어려움.
  • 이런 상황에서 기울기를 이용해 함수의 최솟값을 찾으려는 것이 경사법.
  • 다만 주의할 점은 기울기가 각 지점에서 함수의 값을 낮추는 방안을 제시하는 지표라는 것이지
    기울기가 가리키는 곳에 정말 최솟값이 있는지, 그쪽이 나아갈 방향인지는 보장하지 않음.
  • 실제로 복잡한 함수에서는 기울기가 가리키는 방향에 최솟값이 없는 경우가 대부분임.

노트

  • 함수가 극솟값, 최솟값, 안장점(Saddle point)이 되는 장소에서는 기울기가 0.

  • 극솟값: 국소적인 최솟값, 즉 한정된 범위에서의 최솟값인 점.

  • 안장점: 어느 방향에서 보면 극댓값이고, 다른 방향에서 보면 극솟값이 되는 점.

  • 경사법은 기울기가 0인 장소를 찾지만 그것이 반드시 최솟값이라고 할 수는 없음.
    --> 극솟값이나 안장점일 가능성이 존재.

  • 또, 복잡하고 찌그러진 모양의 함수라면 평평한 곳(진보가 없이 평평한 모양을 보임.)으로 파고들면서 고원(plateau; 플래토)이라 하는 학습이 진행되지 않는 정체기에 빠져 스스로 학습을 종료할 수 있음.


  • 기울어진 방향이 꼭 최솟값을 가리키는 것은 아니나, 그 방향으로 가야 함수의 값을 줄일 수 있음.
  • 그래서 최솟값이 되는 장소를 찾는 문제(혹은 가능한 한 작은 값이 되는 장소를 찾는 문제)애서는 기울기 정보를 단서로 나아갈 방향을 정해야 함.
  • 경사법(gradient method): 현 위치에서 기울어진 방향으로 일정 거리만큼 이동하고,
    다음 이동한 곳에서도 마찬가지로 기울기를 구하고 이동하기를 반복해서 함수의 값을 점차 줄이는 것.
    --> 신경망에서 많이 사용함.
  • 경사 하강법(gradient descent method): 최솟값 찾기.
  • 경사 상승법(gradient ascent method): 최댓값 찾기.
  • 위 두 경사법의 차이는 부호에 있기에 하강이냐, 상승이냐는 본질적으로 중요하진 않음.
  • 경사법을 수식으로 나타내면 다음과 같음.

x0=x0ηfx0x_0=x_0-\eta\frac{∂f}{∂x_0}
x1=x1ηfx1x_1=x_1-\eta\frac{∂f}{∂x_1}

  • η\eta는 갱신하는 양으로 신경망 학습에서의 학습률(learning rate)를 뜻함.
  • 학습률은 한 번의 학습으로 얼마만큼 학습해야 할지, 즉 매개변수 값을 얼마나 갱신하느냐를 정하는 것.
  • 위 식은 1회에 해당하는 갱신이며, 이 단계를 반복함.
    --> 즉, 변수의 값을 갱신하는 단계를 여러 번 반복하면서 서서히 함수의 값을 줄이는 것.
  • 변수가 늘어도 같은 식(각 변수의 편미분 값)으로 갱신하게 됨.
  • 학습률 값은 0.01이나 0.001 등 특정 값으로 정해두어야 함.
    • 일반적으로 이 값이 너무 크거나 작으면 '좋은 장소'를 찾아갈 수 없음.
      --> 학습률이 너무 크면 큰 값으로 발산해버리고, 너무 작으면 거의 갱신되지 않기 때문.
    • 그래서 신경망 학습에서는 보통 이 학습률 값을 변경하면서 올바르게 학습하고 있는지를 확인하면서 진행.
  • 경사법으로 f(x0,x1)=x02+x12f(x_0,x_1)=x_0^2+x_1^2의 최솟값을 구하는 그림을 보면 다음과 같음.
  • 초깃값은 (-3.0, 4.0)으로 하고 경사법을 이용해서 최솟값을 찾는 위 갱신 과정 그림을 보면, 함숫값이 진정한 최솟값인 (0, 0)에 가까워지고 있음을 알 수 있음.

4.4.2 신경망에서의 기울기

  • 여기서 말하는 기울기는 가중치 매개변수에 대한 손실 함수의 기울기.

    Ex. 형상이 2x3, 가중치가 WW, 손실 함수가 LL인 신경망이 있다고 하자.

    • 이때 그라디언트(경사)는 LW\frac{∂L}{∂W}로 나타낼 수 있음.
    • LW\frac{∂L}{∂W}의 각 원소는 각각의 원소에 관한 편미분
      --> W를 조금 변형했을 때 손실 함수 L이 얼마나 변하느냐를 나타냄.
    • 이때 중요한 것은 LW\frac{∂L}{∂W}의 형상이 WW와 같다는 것.
  • 신경망의 기울기를 구한 다음에는 경사법에 따라 가중치 매개변수를 갱신하기만 하면 됨.

4.5 학습 알고리즘 구현하기

<신경망의 학습 절차>

  • 전제
    신경망에는 적용 가능한 가중치, 편향이 존재. 학습이란 이 가중치, 편향을 훈련 데이터에 적응하도록 조정하는 과정.

<신경망 학습의 절차>

  • 1단계: '미니배치'
    훈련 데이터 중 일부를 무작위로 선별한 데이터를 '미니배치'라고 하며, 그 미니배치의 손실 함수 값을 줄이는 것이 목표.
  • 2단계: '기울기'
    미니배치의 손실 함수 값을 중리기 위해 각 가중치 매개변수의 기울기를 구함. 기울기는 손실 함수의 값을 가장 작게 하는 방향을 제시.
  • 3단계: '매개변수 갱신'
    가중치 매개변수를 기울기 방향으로 아주 조금 갱신.
  • 4단계: '반복'
    1~3 단계를 반복.
  • 이는 경사 하강법으로 매개변수를 갱신하는 방법.
    --> 데이터를 무작위로 선정해서 확률적 경사 하강법(Stochastic gradient descent)이라고 부름.
    ('확률적으로 무작위로 골라낸 데이터'에 대해 수행하는 경사 하강법이라는 의미)

4.5.2 미니배치 학습 구현하기

  • 미니배치 학습이란?
    --> 훈련 데이터 중 일부를 무작위로 꺼내고, 그 미니매치에 대해서 경사법으로 매개변수를 갱신하는 것.

  • 학습 횟수가 늘어가면서 손실 함수의 값은 줄어듦.
    --> 신경망의 가중치 매개변수가 서서히 데이터에 적응하고 있음을 의미.
    --> 학습이 잘되고 있다는 뜻.

4.5.3 시험 데이터로 평가하기

  • 훈련 데이터의 손실 함수 값이 작아지는 것은 신경망 학습이 잘 이루어지고 있다는 증거.

  • 하지만, 이 결과만으로는 다른 데이터셋에도 비슷한 결과를 도출할 지는 알 수 없음.
    --> 훈련 데이터 외의 데이터를 올바르게 인식하는지, 즉 오버피팅이 되었는지 확인해야 함.

  • 에폭(epoch)은 단위, 1 에폭은 훈련 데이터를 한 번 다 돌았을 때 횟수에 해당.

  • 오버피팅이 되는 순간을 찾아 학습을 중단하는 기법을 '조기 종료'라고 함. 이외에도 '가중치 감소', '드롭아웃' 등으로 오버피팅을 예방할 수 있음.

4.6 정리

이번 장에서 배운 내용
- 기계학습에서 사용하는 데이터셋은 훈련 데이터와 시험 데이터로 나눠서 사용.
- 훈련 데이터로 학습한 모델의 범용 능력을 시험 데이터로 평가함.
- 신경망 학습은 손실 함수를 지표로, 손실 함수의 값이 작아지는 방향으로 가중치 매개변수를 갱신.
- 가중치 매개변수를 갱신할 때는 가중치 매개변수의 기울기를 이용하고, 기울어진 방향으로 가중치의 값을 갱신하는 작업을 반복.
- 아주 작은 값을 주었을 때의 차분으로 미분하는 것을 수치미분이라고 함. --> 컴퓨터에 극한의 개념을 도입하지 못한 한계
- 수치 미분을 이용해 가중치 매개변수의 기울기를 구할 수 있음.
- 수치 미분을 이용한 계산에는 시간이 걸리지만, 오차역번법은 기울기를 빠르게 구할 수 있음.

출처


이게 이번에 왜 이렇게 긴가했더니 1탄, 2탄을 한번에 정리해버렸군요...
이런!

profile
인공지능 냉각시스템 개발기업 전략기획

1개의 댓글

comment-user-thumbnail
2021년 2월 23일

정리가 너무 완벽하네요 👍️👍️👍️👍️
다음장도 기대할게요 ㅎ.ㅎㅎ.ㅎ.ㅎ

답글 달기