그러니깐 model이 있고, data가 있으면, y_true와 y_pred가 나오잖아


그리고 내가 쓰는 loss에 맞춰 loss_fn(y_true, y_pred)라는 값이 나오겠지?



그러고나면 optimizer와 learning_rate를 어떻게 줬냐에 따라 backpropagation을 통해 parameter들이 수정update이 된다 - 알겠어 그래





근데도 뭔가 와닿지가 않아 이게


뭔 소리냐면 한 번에 training에 투입되는 양, batch_size=1이든 그 이상이든 이게 case가 한 개가 아니고 여러 개잖아.

늘 그렇진 않지만 내 case에는 batch_size=1이더라도 case는 여러 개거든. 아 크게보면 뭐 하나로 볼 수도.



여튼 결국 마지막엔 y_true.shape == y_pred.shape에 따라(내 case엔 (1, 5, 3)) loss matrix가 나오고 이걸 평균을 내든 weighted mean을 내든 "딱 하나의 수 = loss 값"이 나오는데

겨우 이 값 하나가 model이 어떤 방향으로 발전해나가야하는지를 충분히 알려줄 수 있는게 맞는건가?


생각해보면 가능할수도? gradient가 neg.인지 pos.인지에 따라 앞으로갈지 뒤로갈지를 알려주는 그런 역할을 하는거니깐.

그리고 얼마만큼 그 방향으로 나아갈지를 알려주는게 learning_rate이고..





근데 그래도 이 다차원의 parameter 공간을, 겨우 이거 하나 값 = loss 값으로 나아갈 방향을 정할 수가 있다는건가?


흠...


왜 이런 생각이 들었냐면 내가 지금 해보고 있는 프로젝트가 있는데, loss를 아무리 잘 잡아줘도, custom으로 잘 써줘도 영...


model을 올바른 방향으로 최적화하고 있다기보다는, 거의 뭐 좌충우돌 천방지축으로 돌아다니면서 local min.이든 global min.이든 찾아가고 있다랄까...


그니깐 어쩌다가 찾긴하는데, 거의 뭐 술취한 아저씨마냥 워킹하다 찾는 그런 느낌?


근데 말이 안 되진 않아 또 생각해보면.

깔끔한 convex surface가 아니라 복잡미묘한 convex surface니깐 뭐 잠깐?은(잠깐 치고도 좀 길긴 해 5~10 epochs 정도? 총 60 epochs 중) 결과가 반대방향으로 나올수도 있고, 단 2번의 epoch만에 의도한대로 슈퍼 local min, 거의 global min이라고 생각될 정도로 찾아내더니 또 이상한 방향으로 가서 다시는 돌아오지 못할 수도 있고 다 말이 되긴하는데



아 뭔가 맘에 안 든단 말이지...쩝