작성
·
33
·
수정됨
0
안녕하세요. 선생님의 강의로 머신러닝 및 딥러닝에 관심을 갖게 되었습니다.
다름이 아니고, CIFAR100 dataset에 대해서 VGGNet이라는 모델을 이용해 훈련을 시켜보고 있는데,
제가 궁금한 것은 Softmax의 Input의 정밀도를 어디까지 유지하면 모델이 잘 학습될 수 있을까?입니다.
아래의 코드는 training부분입니다. 첫 번째 사진처럼 모델을 훈련시키는데, model(images)를 통해 나온 실제 output을 이용하면 모델이 잘 학습이 되는데 (마지막 epoch의 validation accuracy 55, Top-5 Test Accuracy 80%정도), 이 output을 rounding을 하면 소숫점 아래 20째자리까지 반올림을 해서 높은 정밀도를 유지해도 모델 학습이 아예 되지 않는 (모든 epoch가 끝나도 Validation Accuracy가 1%남짓) 문제가 발생합니다.
이러한 문제가 왜 발생하는지, 어떻게 하면 해결할 수 있을지
또 제가 궁금한 Softmax layer에서 요구하는 최소 Input 정밀도에 대해 다른 방법으로 측정할 수 있을지 궁금합니다 ㅠㅠ
감사합니다
답변 2
0
안녕하십니까,
왜 round_to_binary_n_digits()를 적용하시는지요? 이게 softmax 함수나 softmax 결과를 가지고 가공하는 함수로도 보이지 않습니다만,
outputs = model(images) 에서 반환되는 것은 softmax 값이 아닙니다. 그냥 logit 값입니다. Model을 어떻게 만드셨는지 모르지만, 모델에서 별도로 출력을 softmax형태로 만드신건가요? 모델을 softmax 출력값으로 출력하도록 만들면 안되는 건 아닌데, loss에서 문제가 생길 여지가 많습니다.
그리고 Softmax의 Input의 정밀도라는 문구를 잘 이해하지 못했습니다. image나 label tensor의 정밀도가 아니라(즉 float32/64)가 아니라 Softmax Input 정밀도가 Softmax Layer만 통과하는 tensor 의 정밀도를 변화시켜서 테스트 하고자 한다면,( 음... 이런 사례가 없어서), 굳이 왜 이런 생각을 하셨는지 여쭤보고 싶습니다.
그리고 round_to_binary_n_digits()가 어떻게 정밀도를 적용하는 것인지도 잘 모르겠습니다(아니면 Softmax Input 정밀도에서 정밀도가 accuracy(정확도)를 의미하는지, 그럼 해당 함수가 완전히 다른 것이어야 할텐데...)
요약하면 왜 round_to_binary_n_digits() 하실려는 건지, Softmax Input 정밀도가 뭘 의미하는 건지 다시 한번 기재 부탁드립니다.
감사합니다.
0
안녕하세요, baduki991003님, 인프런 AI 인턴입니다.
먼저 머신러닝과 딥러닝에 대해 관심을 가져주셔서 감사합니다. 질문하신 내용은 Softmax 정밀도 관련 문제로 학습 성능이 크게 떨어지는 상황을 설명하셨는데요, 이와 관련된 몇 가지 설명과 해결책을 제시해드리겠습니다.
Softmax의 민감도: Softmax 함수는 출력 값이 다른 입력 값의 지수 차이에 크게 민감합니다. 예를 들어, 작은 입력 차이가 있을 때도 Softmax는 큰 확률 분포 차이를 만들어 낼 수 있습니다. 입력 값의 정밀도를 지나치게 낮추면 모델 결정에 필요한 중요 정보를 잃게 되어, 결국 모델 성능에 큰 영향을 미칠 수 있습니다.
수치적 안정성: Softmax는 각 클래스의 확률 분포를 구하기 때문에, 입력 값의 정밀도가 손실되면 잘못된 클래스 확률이 계산될 수 있습니다. 특히 Top-1, Top-5 같은 정확도가 필요한 문제에서는 이러한 손실된 정밀도가 모델 성능에 직접적인 영향을 미칩니다.
정밀도 유지: 가능하다면 Softmax 입력의 정밀도를 손상시키지 않는 것이 좋습니다. 소숫점 아래까지 반올림을 하는 것은 불필요한 경우가 많으며 모델의 결정적 성능에 악영향을 미칩니다.
수치적 안정화를 위한 기법: Log-Sum-Exp 트릭 등을 사용하여 Softmax의 수치적 안정성을 보장하는 방법을 사용할 수 있습니다.
모델 최적화: 다른 하이퍼 파라미터 최적화 및 정규화 기법을 사용하여 모델의 민감성을 줄이는 방향으로 접근할 수 있습니다.
현재 질문과 유사한 문제를 해결한 게시물을 참고하세요:
- CNN Cifar10 VGG16으로 전이학습 시 val_accuracy가 0.1로 고정되어 나옴
- loss 값의 해석
위 질문들도 정밀도, 모델의 수치적 안정성 및 정확도 개선에 대해 다루고 있으므로 도움이 되실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.