제가 이해한 바로는 day 1 ~ day4의 데이터가 주어짐.
저도 여러분들처럼 생각하는데 제가 해석이 잘못된것인지, 아니면 데이터가 워낙 소수여서 저렇게 쓴것인지 좀 헷깔리네요.
1일차를 1day라 하고
all samples in day 4는 4일간의 모든 이라는 의미같고
cross validation 4등분을 하고 3세트로 학습하고 1세트로 테스트하는 걸 4번하는거잖아요
그 4번은 서로 다른 4개의 모델이 만들어지고요.
그래서 4개의 모델의 성능을 평균내면 우리가 학습하는 이 방법 (뭐 200 에폭, batchsize, agumentation 등)이 그 정도의 성능을 낸다고 말할 수 있는거죠.
고정되지 않고, 랜덤하게 복원추출하는 방식으로 4번 할 수도 있는거죠. (근데 그러면 안쓰이는 데이터가 꽤 있을 수 있으니)
저 데이터셋에서 + 저 모델과 학습방식을가지고
랜덤하게 75%쯤 train set으로 쓰면 xx% 쯤 성능이 나온다는 것을4회의 독립적인 모델링 후 평가를 통해 얻고
마지막으로 전체 데이터셋을 학습하면
테스트 셋은 없지만, 대충 xx%쯤 성능이 나올 것이라고 '기대'할 수 있는거죠.
저는 4 days 랑 다르게, day 4의 의미는, 말그대로
4번째 날짜에 test set을 두고
모델 파라미터가 학습된것으로 이해되고,
model 1 : (day1day2,day3) 학습. (day4) 테스트.
model 2 : (day2,day3,day4) 학습. (day1) 테스트.
model 3 : (day1,day3,day4) 학습. (day2) 테스트.
model 4 : (day1,day2,day4) 학습. (day4) 테스트.
의 평가를 가지고, 4개 모델을 성능평가한 후,
최종성능결과는 4개의 도합 평균을 의미.
이렇게 이해하고 있습니다.
각설, 제이지님과 저의 공통으로 이해한 바로는,
"결국 위 언급되는 최종 test set은 training set의 일부로써 활용되고 있다."
이렇게 해석되는 것 같고, 이 내용을 좀 더 확장해보면,
"이는 training 을 정당화하는 과정에서, 데이터 편향성이 들어갈 수 밖에 없는 cheating 이다."
최종적으로 이렇게 생각해보고 있습니다.
제가 이 데이터셋으로 다른 접근방법을 읽어봐도
이렇게 4 Fold로 진행된 것들이 너무 많이 있었습니다.
그래서, 모델 정당화를 위해서는
이렇게 접근하는 것이 진짜 맞는 방법인가..?
라는 생각을 하게 되었습니다.
아직 다른 분들께 의견을 여쭙지 않아서,
제가 이해한 바가 잘못된 것인지.
아니면, 이러한 편향성이 맞지만,
데이터가 소수이니 어쩔수 없이 저렇게 확인하는 것이 맞는지..
이런 내용들을 여쭤보고 싶었습니다!!
너무 긴긴 고민끝에 답답하여 질문드렸습니다.
중간까지도 답변 주시고, 도움 주신분들 너무 감사드립니다.
결론부터 말씀드리면 치팅이 아니라고 생각해요.
제가 영어를 잘하는건 아니라..
제가 이해하는 마지막 문장은
모델 4개는 각각 독립적으로 학습되었고(이 부분은 동의하시는 것 같고), 그건 마치 4일차의 모든 샘플들을 고정된 테스트 셋으로 평과한 것과 같은 효과가 있다.
라고 해석하였고,
제가 이해하고 있는 cross validation의 개념과 맞다고 생각합니다.
예를 들어 데이터셋으로 어떻게 train set, test set을 나누냐에 따라 성능이 조금씩 다르겠죠 (train set이 test set을 잘 설명할 수 있게 선택될 수록 성능이 좋다든가.)
그럼 0.75 : 0.25 로 100번 독립시행을한다고치면 성능은 조금씩 다르겠죠.
평균치가 의미하는 것은 저 데이터셋을 3:1로 train test split 했을 때, 기대되는 성능일거고요.
그걸 100번까지하면 꽤 신뢰도가 생기겠지만, 100번 하는 건 비효율적일 수 있으니 적당한 횟수가 필요하고 가장 효과적인 방법이 뭘까 라는 고민에서 나온 방법이라고 생각합니다.
(고정된 fold로 나누면 안쓰이는 데이터는 없으니. 복원 추출 방식은 안쓰이는 데이터가 꽤 많죠. 동일하게 4번 모델을 학습 및 평가 한다고 했을 떄.)
어떤 모델도 train set과 test set을 중복하여 사용하지 않았고,
데이터셋 전체에 대해 평가를 했으니,
모든 데이터에 대해 그 데이터를 학습하지 않고 평가한 '효과'를 가져와서 치팅이라고 볼 순 없죠.
저 방식의 가치 또는 의미는 데이터셋이 충분하지 않아 최대한 많은 데이터를 학습데이터에 쓰고싶고. 그러면 전체 데이터셋을 학습시켜버리면 모델의 성능을 평가할 방법이 없으니.
독립 시행 방식을 통해. 전체 데이터셋을 학습했을 때의 성능을 추정하는 것이고.
독립 시행을 하는 방법 중 데이터셋을 전부 평가해볼 수 있는 효과적인 방법으로 제시하는거죠.
다양한 방법을 사용해 볼 수 있겠죠.
전체 데이터셋을 100 fold로 나누고
랜덤하게 80개를 선택해서 train, 나머지 20개를 test에 쓰는 걸 여러번 해서 성능을 평균내서 나온 값이 xx%라면
우리의 방법으로 이 전체 데이터셋을 학습했을 때 (평가할 데이터는 없지만)
대충 xx%쯤 나올 것이다.
그리고 1번의 75:25로 train, test를 했을 때 얻게되는 성능이 우연히 잘 나눠져서 성능이 좋은 것이 아니라는 주장도 설득력이 생기는거죠.
데이터셋이 충분히 크면 75:25로 train, test를 해도, 결과로 나온 성능이 우연히 잘 나눠져서 나온 성능일 확률이 적잖아요.
답변들 감사합니다.
말장난 같겠지만, 여기서의 cheating이라는 것은,
model이 테스트 데이터를 그대로 학습에 사용했다.
라는 논지로 이해를 하고 있었습니다.
그러면, 여기서 Cross Validation을 사용하게 된다면,
현재 테스트에 사용되는 모든 데이터에 한하여
학습에 편향 없이 잘 나타날 수 있겠다.
이렇게 이해를 하게 되었습니다.
그래서 제가 다르게 생각하고 있는 것은,
제안되는 model은 데이터 내에서 설명력이야 가질수는 있겠지만,
unseen data에서는 일반화시킬 수 있을지는 장담을 못한다.
이렇게 이해하게 되었어요.
물론, 단순히 우연히 나눠버린 test 데이터에서도 마찬가지겠지만요...
4개의 모델과
원문에는 없지만, 제가 표현한대로 전체 데이터셋에 대해 학습한 모델(테스트X)까지 5개의 모델 전부 테스트 데이터를 학습에 사용하진 않았으므로 치팅은 아니라고 생각했습니다.
제안되는 model은 데이터 내에서 설명력이야 가질수는 있겠지만,
unseen data에서는 일반화시킬 수 있을지는 장담을 못한다.
이 부분은 저도 동의해요.
그치만 이건 모든 모델이 같은 상황인거죠.
unseen data에 대해 일반화를 장담할 수 있는 모델은 없고
모두 추정인거니까요.
그렇죠. 근데 test data는 cross validation에서도 사용되지 않는 data를 두고 평가를 하지 않나요?
현재 데이터의 학습에 대한 가능성만 평가하는 것도 좋은 논문이 될 수 있을까요?
허허허 곱씹어보면서, 일반화와 cheating 관련 의문이나 경계성은 풀리게 되었습니다. 감사합니다.
네네 글쵸!
좋은 논문인지는 제가 감히 답할 수가 없지만..
우리가 만드는 딥러닝 모델은 현실 함수(또는 모델)를 추정(또는 근사)하는 것이 목표이다.
우리가 가지고 있는 데이터셋 현실에서 추출한 노이즈가 섞인 데이터이다.
데이터셋이 현실을 잘 반영하고 있는 데이터인지(편향되었거나 노이즈가 너무 많진않은지)는 일단 다른 문제이고,
우린 주어진 데이터셋으로 모델을 학습해야하는 상황이다.
test set이 주어지기 전에 모델의 성능이 어느정도인지 말해야하는 상황이다. (test set도 우연히 잘나오고 다음번의 test set 2에서는 성능을 보장할 수 없는것은 마찬가지)
이것이 모든 모델링의 공통의 상황(?)이고, cross valildation은
여러번 독립 시행 및 평가를 해서 모델의 일반화 능력을 더 정확히 추정할 수 있고,
특정 데이터 분할에 의한 편향을 줄이거나 확인할 수 있고,
제한된 데이터셋을 가지고도 모든 데이터를 학습과 검증에 활용할 수 있는 방법론이라는 점에서 가치가 있는 것이라고 생각해요.
정말 시간 써주셔서 감사합니다!!
특히 의료데이터에서는 가용자료가 많이 없으니
Cross Validation을 쓰는 것으로 알고 있었었는데,
이제서야 학문적으로 이해가 되네요...ㅋㅋ
대부분 dataset이 한정적이라서, test가 어떻게 갈리는지에 따라서 변동폭이 너무 크거든요. 공정하게 test를 갈랐다는 것을 증명할 방법도 없기 때문에 k-fold를 더 흔히 쓰는 것 같습니다.
근데 4-fold를 하더라도 높은 성능 나올때까지 계속 돌릴 수 있어서... Nature급 저널에서는 4-fold를 100번 random추출해서 평균내더라구요



