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

swlee님의 프로필 이미지
swlee

작성한 질문수

딥러닝 CNN 완벽 가이드 - Fundamental 편

안녕하세요.

해결된 질문

작성

·

817

0

안녕하세요.

강의 내용에 따라 CIFAR10 데이터셋을 사용하여 동일한 모델에 이리저리 바꿔가며 성능 테스트를 하고 있는 중에 궁금한 사항이 생겨 질문드립니다. 

우선,  동일한 모델 (= 강의 예제 모델, lr=0.001, epochs=30, He Normal) 에 BN 적용 여부로 나눠서 train, val acc & loss 그래프를 그려봤습니다.

                           

                         [ BN 미적용 ]                                                                                          [ BN 적용 ]

결과는 보시는바와 같이 BN 미적용한 모델이 적용한 모델보다 loss 수렴이 안정적입니다.  하지만 Test 결과는 BN 적용한 모델이 평균적으로 (3회 기준) 약 0.05 ~ 0.06 (5 ~ 6%) 정도 accuracy 값이 높게 나왔습니다. 그렇다고 한다면 train과 validation의 loss 값이 안정적으로 수렴한다고해서 무조건적으로 모델 성능이 높게 나오는건 아니라는 건가요 ?

그리고 위 BN 적용 그래프에서 loss 값이 수렴하지 않고 변동성이 심한 경우는 lr 값이 너무 커서 minima 를 찾지 못해 제대로 학습이 안되는 경우에도 비슷한 결과를 얻었습니다. 그럼 BN 적용하게 된다면 기본적으로 lr 값을 기존 값 대비 낮추는게 모델 성능 향상에 일반적으로 도움이 되나요 ? 

답변 1

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

먼저, loss가 낮다고 무조건 정확도 성능이 좋아지지 않습니다. 물론 loss가 낮으면 예측 성능이 일반적으로 좋지만, 반드시 그렇지는 않습니다.

예측을 이미 0.9 정도로 확실하게 했지만, Gradient Descent는 불확실한 예측을 개선하려 노력도 하지만,  확실한 예측을 더 확실하게, 예를 들어 0.9->0.99 정도로 하면서 더 Loss를 줄이려고도 합니다. 때문에 loss가 낮다고 100% 예측 성능이 좋아지지는 않습니다.

잘 아시다시피, learning rate 는 일반적으로 클 수록 학습 데이터에서 수렴이 불안정적입니다.  그리고  batch normalization은 큰 learning rate에서도 상대적으로 안정적으로 수렴시키는 효과가 있습니다.  일반적으로는 학습데이터에서 loss수렴이 안정적이면 검증 데이터에서 loss수렴도 비교적 안정적이지만 반드시 그렇지 않을 수도 있습니다(결국 loss 수렴은 학습 데이터가 기준이기 때문입니다)

learning rate가 크게 좋은지, 작은게 좋은지는 일반적으로 모델 구조나 데이터에 달려 있습니다. BN을 적용할 경우 learning rate를 반드시 작게 줄 필요는 없습니다. 다만 해당 Custom 모델과 Cifar 10 모델에서는 0.001 보다 좀 더 작은 learning rate가 성능 향상 효과가 있는 것으로 보입니다.

추가적으로 kernel_initializer glot_uniform으로 변경해서도 함 테스트 해보시지요(개인적으로 저도 궁금하군요)

감사합니다.

swlee님의 프로필 이미지
swlee
질문자

답변 감사드립니다. 

모델 성능 향상에 대해서 일반적으로 정해진 가이드 라인이 없는 것 같아서 초보자들에게는 큰 장벽으로 다가오는 것 같습니다.

한 가지 더 궁금한 점이 있는데 위 BN 적용 하였을 시, validation loss 값이 상대적으로 요동치는 이유를 알 수 있을까요 ?

권 철민님의 프로필 이미지
권 철민
지식공유자

1. 모델 성능 향상에 대해서 일반적으로 정해진 가이드 라인이 없는 것 같아서 초보자들에게는 큰 장벽으로 다가오는 것 같습니다.

=> 네,  너무 케이스가 다양하기 때문에 명확하게 정해진 가이드 라인은 없지만, 좀 더 강의를 수강해 보시면, 어디에 초점을 맞춰야 할지 아실수 있을 것입니다. 경험적인 요소가 필요합니다(모델 성능 향상은 전문가도 어려워 하는 문제입니다).

2. 한 가지 더 궁금한 점이 있는데 위 BN 적용 하였을 시, validation loss 값이 상대적으로 요동치는 이유를 알 수 있을까요 ?

=> 이전 답변에서도 말씀드렸지만, batch normalization은 큰 learning rate에서도 상대적으로 안정적으로 수렴시키는 효과가 있습니다.  하지만 이는 학습 데이터 기준입니다. 일반적으로는 학습데이터에서 loss수렴이 안정적이면 검증 데이터에서 loss수렴도 비교적 안정적이지만 반드시 그렇지 않을 수도 있습니다(결국 loss 수렴은 학습 데이터가 기준이기 때문입니다).

그리고 그림을 자세히 보시면 BN을 적용하지 않았을 경우는 validation loss는 더 이상 성능 향상이 어려운것이지, 이게 Loss의 변동이 없다고, 최적으로 수렴하고 있다고 보기는 어렵습니다. 반면에 BN 어느정도 loss 변동은 있지만 다시 최적으로 loss를 더 개선하는 노력을 보이고 있습니다. 변동에 대한 부분은 iteration을 지금보다 더 증가시켜서 보셔야할 필요가 있어 보입니다.

또한 보다 여러가지 데이터 세트로  테스트가 필요해 보이며, CIFAR10 데이터 세트 검증 세트 Loss기준으로 BN이 검증시 Loss 값이 상대적으로 요동친다고 판단하기는 어려울 수 있습니다. 

swlee님의 프로필 이미지
swlee

작성한 질문수

질문하기