그러니깐 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이라고 생각될 정도로 찾아내더니 또 이상한 방향으로 가서 다시는 돌아오지 못할 수도 있고 다 말이 되긴하는데
아 뭔가 맘에 안 든단 말이지...쩝
바로 그런 당신을 위해
나도 모름... ㅠ
나랑 비슷하네.. 나도 loss와 backward로 파라미터를 업데이트하는 과정을 수학적으로 엄밀하게 파고 싶은데 그걸 하나하나 분석하고있으면 뒤쳐질까봐 못하고있음
이거 엄밀하게 다루는 분야가 convex optimization 이 쪽인거 같고 내가 뭐 놓치는게 있나 이 쪽도 공부 조금 했는데.. 다시 생각해보니 단 하나의 값으로 모든 parameter들이 update되는게 말이 되는거 같은게, loss w.r.t each parameter니깐 단 하나의 loss값이라 하더라도 모든 parameter들의 gradient는 다 다르니깐 말이 되는거 같은데
딱히 loss 공간이 부드럽다는 보장이 없으니, 얘를 부드럽게 해주는걸 써야겠지 resnet이 이런걸 잘한다고 얼핏 들었는데 나도 정확히는 모르겠네
그건 이제 skip connection을 쓸 수 있는 분야에선 그게 되는거고 거의 필수적인 수준인데, 내가 하는 프로젝트는 skip connection을 쓸 수 있는 분야가 아니라서
그리고 무슨 말을 하고 싶은진 알겠지만.. 네트워크의 목적함수가 loss의 minimization인 것을 감안하면 당연히 하나의 값으로 나와야 정상이라고 생각해 그리고 loss 공간이 네트워크 파라미터에 대해 convex하다는 보장도 없고, 실제로도 convex하지 않으니 당연히 좌충우돌하면서 근방의 최소값을 찾아가야하는게 맞지 않을까? 일관적으로 배우려면 loss 공간이 convex라서 최적점 수렴을 보장하거나 엄청나게 많은 수를 샘플링해서 거의 최적으로 가도록 기대하는 것 말곤 없는듯..
수능 수학 "점수" 조금 올릴려면 어떤 어마어마한 뻘짓을 해야 되는지 생각하면 직관적이지 않음?ㅋㅋㅋ
흠 그래서 이 복잡한 convex surface 속에서 좌충우돌하며 model이 발전하는건 이해가 되는데 딱 하나의 loss 값 <- 이걸로 모든 parameter들이 update되는거 맞는거죠? 각각의 gradient는 다 다를테니깐
궁금한 내용은 아마 loss보다는 아래 논문의 내용인거 같음 ㅇㅇ "Identifying and attacking the saddle point problem in high-dimensional non-convex optimization"
그럼 그냥 모델링(손실 함수 구성 포함)이 잘못된거지. 딥러닝이라고 모델링이 필요없고 다 때려박으면 돌아가는건 아님 - dc App
그리고 고민하는건 1,5,3같은데 하나로 합쳐진 부분을 궁금해하는거 같은데 당연히 1,5,3이 하나로 합쳐질때 1,5,3 에 포함된 요소들 각각 전부 추적됨 - dc App
로스를 역전파해서 분포를 gt 혹은 리얼월드의 분포에 비슷하게 옮겨오는거지
그냥 최적화이론부터 파시는게? loss 를 최소화 시키는 parameter theta를 찾는거에 의심이 있으신데
로스 하나로 그게 되는게 맞냐고 하는데 반대로 말해서 모델의 목적에 맞게 로스를 정의했으면 안될 이유는 뭐임? 디퓨전에서는 noise prediction을 하고 LM에서는 CE를 쓴다. 왜냐면 모델의 학습목표를 그렇게 설정하는게 목표 태스크에 맞으니까 모델링이 잘못된 것을 backprop이 병신이라는 탓으로 돌리는것은 잘못된거같다