신경망을 학습시켰을 때 가장 실망스러운 순간은 목적함수에 따른 손실값이 줄지 않을 때이다.
그런데 이것의 원인이 될 수 있는 후보는 너무나도 많다!
문제가 데이터인지, 코딩 모듈인지, 모델인지, 이론인지 하나씩 다 경험적으로 확인해봐야 한다.
블랙박스를 다루고 있으므로 우리는 답도 보이지 않는 끔찍한 디버깅의 심연 속으로 빠지곤 한다.
하지만 만약 당신의 신경망의 출력을 까보았을 때, 출력값이 타겟의 평균에 수렴하고 있다면 희망이 있다.
보통 손실값이 줄지 않는 경우 신경망의 출력을 까보게 된다.
많은 경우, 이 신경망은 정답의 평균값을 내고 있다.
이는 우리가 오지선다에서 3번으로 그냥 찍어버리는 것에 비유할 수 있다.
신경망의 입장에서는 도저히 파악이 안 되는 데이터가, 정답을 보니 1~5까지의 실수로 표현되는 걸 봤다고 하자.
그러면 그냥 1~5의 평균인 3으로 찍는 것이 현명한 것이다. 그것이 당장 손실값이 가장 작은 방법이다.
신경망이 데이터 파악을 못했다는 것은 무엇을 의미할까?
패턴 파악을 못 했다는 것이다.
왜 패턴 파악을 하지 못했을까?
문제는 미니배치에 있다.
사실, 미니배치를 도입하는 것은 신경망에게 하나의 학습 트릭이다.
만약 미니배치를 도입하지 않고 아예 전체 데이터에 대해서 배치 학습을 통째로 할 수 있다면, 신경망은 손실값을 거의 무조건 줄여나갈 수 있다. (손실값이 0이 아닌 수에 수렴하더라도 일단은 첫 손실값보다 금방 훨씬 줄어들 것이다.)
경사하강은 수학적으로 그렇게 되게끔 되어있다.
하지만 이미지 십만장이 넘어가는 학습 데이터를 통배치 학습 시키기엔 컴퓨팅 메모리가 현저히 부족하다.
이에 샘플 일부만 취해서 계속 학습하는 미니배치라는 방법이 고안되었다.
그런데 미니배치를 도입하면, 손실함수가 매 미니배치마다 바뀌게 된다. (아래 사진의 우측처럼)
만약 한 미니배치의 샘플 수가 너무 작아버리면, 손실함수의 모양이 계속해서 휙휙 바뀌게 된다.
결국 신경망은 학습 방향이 안정적이지 못하고 계속해서 진동하게 된다.
그 진동이 다다르는 곳은 결국 여러 미니배치들의 타겟값 평균이 되어버리는 것이다.
미니배치를 충분히 키워준다면 이런 상황은 면할 수 있다.
더욱 손실함수의 변동폭이 작아지고 학습 방향이 안정적이게 되기 때문이다.
6하원칙과 논문의 구성 (1) | 2022.10.02 |
---|---|
통계학 공부노트 [1편] (3) | 2022.09.29 |
Python 내에서 GPU 메모리 확인하는 법 (2) | 2022.03.22 |
리눅스 (우분투) 파일을 삭제해도 용량이 늘지 않을 때 (1) | 2021.10.14 |
[python] 리스트 인덱스 정렬 (0) | 2020.11.04 |
댓글 영역