내가 다시 보려고 만든 “밑바닥 부터 시작하는 딥러닝” 정리 2

책 “밑바닥부터 시작하는 딥러닝 1권” 내용 중 다시 보려고 만든 자료입니다. (챕터 4)

chapter 4

  • 챕터 4의 주제는 신경망 학습이다. 여기서 학습이란 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것을 뜻한다.
  • 이번 챕터에서는 신경망이 학습할 수 있도록 해주는 지표인 손실 함수를 소개한다. 이 손실 함수의 결괏값을 가장 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표이다.

chapter 4.1 : 데이터에서 학습한다.

  • 신경망은 이미지를 ‘있는 그대로’ 학습한다. 신경망은 이미지에 포함된 중요한 특징까지도 “기계”가 스스로 학습할 것이다.
  • 딥러닝을 종단간 기계학습이라고 한다. 데이터(입력)에서 목표한 결과(출력)를 사람의 개입 없이 얻는다는 뜻을 담는다.
  • 신경망의 이점은 모든 문제를 같은 맥락에서 풀 수 있다는 점에 있다.
  • 어떤 객체를 인식하든, 세부사항과 관계없이 신경망은 주어진 데이터를 온전히 학습하고, 주어진 문제의 패턴을 발견하려 시도한다.
  • 즉, 신경망은 모든 문제를 주어진 데이터 그대로를 입력 데이터로 활용해 ‘end-to-end’로 학습할 수 있다.

chapter 4.2 : 손실 함수

  • 신경망도 ‘하나의 지표’를 기준으로 최적의 매개변수 값을 탐색한다. 신경망 학습에서 사용하는 지표는 손실 함수라고 한다.
  • 일반적으로는 오차제곱합과 교차 엔트로피 오차를 사용한다.

  • 오차 제곱합
    • 가장 많이 쓰이는 손실함수는 오차제곱합(SSE, sum of squares for error)이다.

200x100

yk 는 신경망의 출력(신경망이 추정한 값), tk는 정답 레이블, k는 데이터의 차원 수

  • 교차 엔트로피 오차

200x100

여기서 log는 밑이 e인 log함수, yk는 신경망의 출력, tk는 정답 레이블

실질적으로 정답일 때의 추정(tk가 1일때의 yk)의 자연로그를 계산하는 식이 된다.

  • 미니배치 학습

200x100

데이터가 N개라면 tnk는 n번째 데이터의 k번째 값을 의미합니다.(ynk는 신경망의 출력, tnk는 정답레이블)

평균 손실 함수를 구하는것.

  • 그러나, 학습 데이터의 양이 매우 방대해지면 손실 함수의 합을 구하는데 시간이 좀 걸린다. 이 많은 데이터를 대상으로 일일이 손실 함수를 계산하는 것은 현실적이지 않다.
  • 데이터를 일부를 추려 전체의 ‘근사치’로 이용할 수 있다. 신경망 학습에서도 훈련데이터로부터 일부만 골라 학습을 수행하는데 이 일부를 미니배치라고 한다.
  • 예를 들어, 60000만장의 훈련 데이터 중에서 100장을 무작위로 뽑아 그 100장만을 사용하여 학습하는 것이다. 이러한 학습 방법을 미니배치 학습이라고 한다.

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

  • 왜 굳이,,, 손실 함수를 사용할까 ? ‘정확도’라는 지표를 놔두고 ‘손실 함수의 값’이라는 우회적인 방법을 택하는 이유는 뭘까 ?
  • 이 의문은 신경망 학습에서의 ‘미분’의 역할에 주목한다면 해결된다. 신경망 학습에서는 최적은 매개변수(가중치와 편향)를 탐색할 때 손실 함수의 값을 가능한 작게 하는 매개변수 값을 찾는다.
  • 가중치 매개변수의 손실 함수의 미분이란 ‘가중치 매개변수의 값을 아주 조금 변화 시켰을 때, 손실 함수가 어떻게 변하나’라는 의미이다.
  • if 미분 값 < 0 ( > 0 ) , 가중치 매개변수를 양의 방향(음의 방향)으로 변화
  • if 미분 값 = 0 , 가중치 매개변수를 어느 쪽으로 움직여도 손실 함수의 값은 줄어들지 않는다. = 가중치 매개변수의 갱신은 멈춘다.

  • “정확도를 지표로 삼아서는 안 되는 이유는 미분 값이 대부분의 장소에서 0이 되어 매개변수를 갱신할 수 없기 때문이다.”
  • 그러면 대부분의 장소에서 0이 되는 이유는 무엇일까? 정확도가 55% 였을때, 매개변수를 약간만 조정해서는 정확도가 개선되지 않고 일정하게 유지된다. 또는 개선된다 하더라도 55.2334%와 같이 연속적인 변화가 아니라 54%, 56%처럼 불연속적인 띄엄띄엄한 값으로 바뀐다.

  • 반면에 손실함수를 지표로 삼는다면, 매개변수의 값이 조금 변하면 그에 반응하여 손실 함수의 값도 연속적으로 변화한다.

  • 정확도는매개변수의 미소한 변화에는 거의 반응을 보이지 않고, 반응이 있더라도 그 값이 불연속적으로 갑자기 변화한다. (계단함수를 사용하지 않는 이유이기도 하다.)

chapter 4.4.1 : 경사법(경사 하강법)

  • 기계학습 문제 대부분은 학습 단계에서 최적의 매개변수를 찾아낸다. 신경망 역시 최적의 매개변수(가중치와 편향)를 학습시에 찾아야 한다. 여기에서 최적이란 손실 함수가 최솟값이 될 때의 매개변수 값이다.
  • 그러나 일반적 문제의 손실 함수는 매우 복잡하다. 이때 기울기를 잘 이용해 함수의 최솟값(또는 가능한 한 작은 값)을 찾으려는 것이 경사법이다.
  • 경사법은 현 위치에서 기울어진 방향으로 일정 거리만큼 이동한다. 그런 다음 이동한 곳에서도 마찬가지로 기울기를 구하고, 또 그 기울어진 방향으로 나아가기를 반복한다. 이렇게 해서 함수의 값을 점차 줄이는 것이 경사법이다.
  • 경사법을 수식으로

200x200

η(에타)는 갱신하는 양을 나타낸다. 이를 신경망에서는 학습률이라고 한다.

한번의 학습으로 얼마만큼 학습해야 할지, 즉 매개변수 값을 얼마나 갱신하느냐를 정하는 것이 학습률이다.

chapter 4.4.1 : 신경망에서의 기울기

  • 신경망 학습에서도 기울기를 구해야 한다. 여기서 말하는 기울기는 가중치 매개변수에 대한 손실 함수의 기울기이다.

200x200

가중치가 W, 손실 함수가 L

가중치를 조금 변경했을 때, 손실 함수 L이 얼마나 변화하느냐를 나타낸다.

chapter 4.5 : 학습 알고리즘 구현하기

  • 전제 : 신경망에는 적용 가능한 가중치와 편향이 있고, 이 가중치와 편향을 훈련 데이터에 적응하도록 조정하는 과정을 ‘학습’이라고 한다. 신경망 학습은 다음 4단계로 수행한다.
  1. 미니배치 : 훈련 데이터 중 일부를 무작위로 가져옵니다. 이렇게 선별한 데이터를 미니배치라 하며, 그 미니배치의 손실 함수 값을 줄이는 것이 목표다.
  2. 기울기 산출 : 미니배치의 손실 함수 값을 줄이기 위해 각 가중치 매개변수의 기울기를 구합니다. 기울기는 손실 함수의 값을 가장 작게 하는 방향을 제시합니다.
  3. 매개변수 갱신 : 가중치 매개변수를 기울기 방향으로 아주 조금 갱신합니다.
  4. 반복 : 1~3 단계를 반복합니다.
  • 이는 경사 하강법으로 매개변수를 갱신하는 방법이며, 이때 데이터를 미니배치로 무작위로 선정하기 때문에 확률적 경사 하강법(SGD)라고 부릅니다. ‘확률적으로 무작위로 골라낸 데이터’에 대해 수행하는 경사하강법이라는 의미이다.

  • 수치 미분 방식으로 매개변수의 기울기를 계산하는 방법을 사용했다. chapter 5에서는 이 기울기 계산을 고속으로 수행하는 기법을 설명한다. 그 방법은 오차역전파법이다. 오자역전파법을 사용하면 수치 미분을 사용할 때와 거의 같은 결과를 훨씬 빠르게 얻을 수 있다.

chapter 4.5.3

  • 에폭 : 에폭은 하나의 단위입니다. 1에폭은 학습에서 훈련 데이터를 모두 소진했을 때의 횟수에 해당한다. 예를 들어, 훈련 데이터 10000개를 100개의 미니배치로 학습할 경우, 확률적 경사하강법을 100회 반복하면 모든 훈련 데이터를 소진한게 된다. 이 경우 100회가 1에폭이 된다.