아이공의 AI 공부 도전기

Solution Warning : ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.


저는 이 에러를 from sklearn.neural_network import MLPClassifier를 사용할 때 받게 되었습니다.


외국어가 모국어가 아닌 우리들에게 있어 이런 경고문구가 뜨는 것 자체만으로도 스트레이스 일 것입니다. 사실 이 경고 문구는 단순히 알림의 연락이기 때문에 굳이 신경쓸 필요가 없지만 그럼에도 신경쓰는 것은 사실입니다.

이에 해결책을 제시하면 간단하게 이런 경고 문구는 사라집니다.


해결책

해결법은 MLPClassifier를 선언한 곳에 가서 hyperparameter 인 max_iter의 수치를 높여주면 됩니다. 

가령 예를 들어 선언한 변수가 a라고 한다면

a=MLPClassifier(max_iter=1000)

이런 식으로 숫자를 크게 써주면 됩니다. 물론 너무 크면 시간이 오래걸릴 것입니다.


그럼 왜 이런 문구가 뜨는 것일까요

내용을 잠깐 살펴볼까요 

경고 문구는 "optimizer에서 max iteration이 이미 도달했는데도 수렴하지 않았다"는 내용입니다. 


인공지능을 공부한다라고 하는 사람은 단번에 이해가 됩니다만 그렇지 않은 분을 위해 조금 부연설명을 하자면 MLP는 Multi-Layer Perceptron이라는 약자입니다. 즉 Neural Network의 구조를 가진 형태입니다. 여기에 gradient loss를 가지고 optimizer까지 적용시킨 default 상태이기 때문에 gradient loss가 점차 줄어드는 방향으로 수렴해가는 학습을 할 것입니다. 


학습을 한다는 것은 data를 기반으로 수많은 반복(iter)을 통해서 loss를 줄인다는 의미인데 max_iter가 여기서는 default가 200의 수치입니다. 즉 max_iteration이 너무 적어 아직 수렴점에 도달하지도 않았는데 결과를 도출해야하기 때문에 경고 문구가 뜨는 것입니다.

반복 횟수를 높이면 더 나은 정확도나 다른 척도들을 얻을 수 있는데 굳이 그냥 사용할꺼니?라고 묻는 질문이라고 생각하면 됩니다.


이 상황을 약간의 비유를 하자면 다음과 같습니다.


A라는 과목이 있고 이를 B번 반복하면 100점을 맞을 것 같습니다. 그러나 B-10번의 반복만을 한 상태에서 친구가 묻는 것입니다. 너 조금 더 복습하면 100점 맞을 것 같은데 더 공부하지 그래? 라고 말입니다.


이해가 되셨을지 모르겠네요. 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading