작성
·
349
0
만약 데이터 건수가 400건이고 100건의 미니배치로 경사하강법을 실시하여 파라미터값들을 수정하는데 여기서 수정 되어지는 값들은 뽑아진 100건의 데이터만 업데이트 되며 이렇게 1epoch를 돌면 전체의 데이터의 파라미터들이 업데이트 되는것으로 이해하고있는데 맞을까요?
아니면 100건의 데이터만 뽑아 전체의 파라미터가 업데이트 되고 또 그다음 배치의 100건으로 전체의 파라미터가 업데이트 되는 걸까요?
답변 1
2
안녕하십니까,
이게 academic한 원론적인 부분과 실제 tensorflow와 같은 deep learning framework이 사용하는 방식에 약간의 차이가 있습니다.
먼저 원론적인 미니배치를 기준으로 말씀 드리면 데이터 건수가 400건이고 100건의 미니 배치로 경사하강법을 적용해서 update될 weight값을 계산하는 것입니다. 100건의 데이터가 업데이트 되는게 아니라 weight가 update되는 것입니다. 그러니까 weight update계산을 전체 데이터 건수가 아니라 샘플링으로 100건만 가지고 update될 weight값을 계산하는 것입니다.
여기서 약간 혼돈되는 것이 epoch와 iteration입니다. 원론적인 미니배치는 첫번째 iteration시 weight를 update할 때 무작위로 400건중에 무작외로 100건을 뽑아서 weight update값을 계산하고 update적용, 두번째 iteration 시에 다시 무작위로 100건을 뽑아서 weight update 값 계산및 적용, 세번째, 네번째 iteration시에도 유사하게 무작위로 100건을 뽑습니다. 이걸 iteration이라고도 표현할 수 있고, epoch라고도 표현할 수 있습니다.
하지만 tensorflow와 같은 deep learning framework에서는 다릅니다. 위와 같은 iteration을 tensorflow는 step으로 간주합니다. 즉 첫번째 epoch의 첫번째 step에서는 400건중 100건을 뽑아서 weight update 계산 및 적용, 두번째 step에서 나머지 300건 중 100건을 뽑아서 weight update 계산 및 적용, 세번째 step에서 나머지 200건중 100건으로 weight update 계산 및 적용, 마지막 네번째 step에서 나머지 100건으로 weight update 계산 및 적용을 합니다. 이렇게 400건 모두에 대해서 weight update를 적용했으면 이제 두번째 epoch에서 동일한 방식을 또 반복합니다.
아래에 비슷한 내용을 질문하신 분이 있어서 답변을 달아놓은 내용이 있으니 참조하시기 바랍니다.
https://www.inflearn.com/questions/216570
답변감사합니다.!!
미니배치에서 500건중 100건으로 1_iteration 돌리면 그 해당하는 100건에 대해서(100건의 데이터 기반으로 손실함수의(?)편미분 w(1), w(2), w(3)....) 전체 w가 갱신이 되며 그후 선택되지않은 400건중 또 100건으로 전체 w가 갱신이되며 이것을 5번하여 전체 데이터를 한번 돌았으면 1epoch가 된다고 이해하면 잘 이해하고있는 걸까요?!