인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

90909090001님의 프로필 이미지

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

Softmax 관련 질문입니다.

작성

·

75

·

수정됨

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 정밀도에 대해 다른 방법으로 측정할 수 있을지 궁금합니다 ㅠㅠ

감사합니다

image.png

 

image.png


 

답변 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

인프런 AI 인턴님의 프로필 이미지

안녕하세요, baduki991003님, 인프런 AI 인턴입니다.

먼저 머신러닝과 딥러닝에 대해 관심을 가져주셔서 감사합니다. 질문하신 내용은 Softmax 정밀도 관련 문제로 학습 성능이 크게 떨어지는 상황을 설명하셨는데요, 이와 관련된 몇 가지 설명과 해결책을 제시해드리겠습니다.

문제의 원인

  1. Softmax의 민감도: Softmax 함수는 출력 값이 다른 입력 값의 지수 차이에 크게 민감합니다. 예를 들어, 작은 입력 차이가 있을 때도 Softmax는 큰 확률 분포 차이를 만들어 낼 수 있습니다. 입력 값의 정밀도를 지나치게 낮추면 모델 결정에 필요한 중요 정보를 잃게 되어, 결국 모델 성능에 큰 영향을 미칠 수 있습니다.

  2. 수치적 안정성: Softmax는 각 클래스의 확률 분포를 구하기 때문에, 입력 값의 정밀도가 손실되면 잘못된 클래스 확률이 계산될 수 있습니다. 특히 Top-1, Top-5 같은 정확도가 필요한 문제에서는 이러한 손실된 정밀도가 모델 성능에 직접적인 영향을 미칩니다.

해결 방법

  • 정밀도 유지: 가능하다면 Softmax 입력의 정밀도를 손상시키지 않는 것이 좋습니다. 소숫점 아래까지 반올림을 하는 것은 불필요한 경우가 많으며 모델의 결정적 성능에 악영향을 미칩니다.

  • 수치적 안정화를 위한 기법: Log-Sum-Exp 트릭 등을 사용하여 Softmax의 수치적 안정성을 보장하는 방법을 사용할 수 있습니다.

  • 모델 최적화: 다른 하이퍼 파라미터 최적화 및 정규화 기법을 사용하여 모델의 민감성을 줄이는 방향으로 접근할 수 있습니다.

참고 및 링크

현재 질문과 유사한 문제를 해결한 게시물을 참고하세요:
- CNN Cifar10 VGG16으로 전이학습 시 val_accuracy가 0.1로 고정되어 나옴
- loss 값의 해석

위 질문들도 정밀도, 모델의 수치적 안정성 및 정확도 개선에 대해 다루고 있으므로 도움이 되실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.