나는 여전히 웹개발자이지만, 회사에 부쩍 딥러닝 과제가 많아져서 딥러닝 공부가 많이 필요하게 됐다. 밑바닥부터 시작하는 딥러닝 책이 좋다고 해서 천천히 하나하나 공부해보려 한다.
이전에 훈련과 손실함수에 대해서 알아봤습니다. 결국 훈련은 손실함수의 값이 최저가 되는 지점을 찾기 위해 진행됩니다.
이전까지는 데이터 한개에 대해서 어떻게 학습하는지 배워봤지만 실무에서는 데이터가 일반적으로 아주 많습니다. 때때로 데이터가 너무 많을 때는 데이터의 일부를 추려 전체의 근사치로 활용하는 경우가 있는데 이를 미니배치 라고 합니다.
미니배치의 원리는 많은 설문조사 등에서 활용되고 있습니다.
훈련 데이터가 100개가 있다면, 100개의 손실함수의 평균 값이 최저가 되는 지점을 찾아야 할 것입니다. 이제 이 방법을 알아보겠습니다.
위는 크로스 엔트로피 함수의 배치 수식입니다. n은 전체 데이터의 개수입니다. 모든 데이터에 대한 손실함수의 합을 구하고 그것을 n으로 나누어 정규화한 것입니다.
np.random.choice 함수는 지정 범위의 값을 랜덤으로 10개 집어줍니다. 위의 경우에는 np.random.choice(60000, 10) 의 뜻은 0 이상, 60000 미만의 숫자를 랜덤하게 10개 고르는 코드입니다.
이전에 1개만 처리하던 코드와 달라진 점은 크게 2가지 정도가 있다.
모든 손실함수의 결과를 더하고 총 배치 사이즈로 나누는 것으로 배치학습을 구현해봤습니다. numpy의 마법에 감사하고, 배치 작업은 I/O의 부담을 덜어주고 CPU와 GPU위주의 연산을 하게 도와준다는 것에 주목합시다.