23.11.05 21:46 작성
·
449
0
추가로 질문 드리고 싶습니다
1.SGD시 1건의 데이터는 모든 피쳐를 포함한 1건의 데이터(RM, LSTAT의 경우 2개의 W를 가지는 2개의 열방향 데이터)인것인가요? 맞다면 1000번의 iteration시 동일한 데이터로 1000번 학습을 하는건가요? 아니면 열방향으로 순차대로 학습을 하는건가요?(예를 들면 600개의 데이터가 있다고 하면 1번부터 600번까지...)
2.미니배치에서 Batch size만큼 학습데이터를 순차적으로 학습시킬때, Batch size는 순서대로(600개의 데이터가 있다면 1~30번, 31~60번...이렇게 정직하게 가져 오는건가요?? 아니면 1, 5, 8, 11, 50, 100 과 같이 랜덤하게 선택하되, Batch size만 지키는 것인가요??
진짜 감사드립니다...강의 계속 보고 있습니다!!
답변 2
0
0
2023. 11. 06. 18:20
안녕하십니까,
잘 듣고 계시다니, 저도 기분이 좋군요.
원론적으로(맨 처음 SGD가 제안되었을 때는 성능상의 이슈로) SGD는 전체 데이터에서 단 한건의 데이터만 가지고 Gradient를 계산하는 방식입니다. 그러니까 100건의 학습 데이터라면 모든 피처를 포함한 단 한개의 데이터만을 random 하게 선택해서 가중치를 계산하고 이를 모델 전체에 가중치를 Update하는 방식입니다. 다만 이 한 건의 데이터는 iteration 마다 random 하게 다르게 선택되어 계산됩니다. 만약 1000번의 iteration 이라면 100개의 데이터 중에 1건을 선택하되, 1000번 iteration 마다 다른 데이터를 선택하게 됩니다. (물론 random 이기 때문에 1000번 iteration중 동일한 데이터가 발생할 확률은 있습니다)
질문중에 열방향이라는 의미를 잘 이해하지 못했습니다. 만약 특정 피처를 하나씩 선택하는 것을 의미하는 거라면, 그건 아니고, 전체 피처들을 선택하는 것입니다.
Mini-batch 방식으로 학습을 할 때는 학습 데이터를 원래 순서대로 가져오는 방법이 있고, 섞어서 가져오는 방법도 선택할 수 있습니다. 다만 이걸 iteration 시에 결정하는 것은 아니고, epoch를 수행 할 때마다 학습 데이터 전체를 shuffle(원본 학습 데이터를 섞음)해서 Mini-batch를 할 것인지, shuffle하지 않고(원본 학습데이터의 순서를 그대로) Mini-batch를 할 것인지 선택할 수 있습니다. 나중에 keras의 모델 학습 시 해당 기능을 수행하는 API에 대해서 말씀 드릴 것입니다.
감사합니다.