etc/구글 머신러닝 부트캠프

[DSL] Structuring Machine Learning Projects Week 1 : ML Strategy (1)

uyt8989 2022. 7. 5. 01:04

어느덧 세 번째 강의를 시작했다. 이번 강의는 실제로 머신 러닝 프로젝트를 구성하는 경우에 도움을 받을 수 있는 내용인 것 같다. 

 

1. Orthogonalization

머신 러닝 모델을 짤 때 모델을 더 개선하기 위해서 사용하는 방법은 정말 다양하다. 강의에서 언급된 방법은 한 이 정도 되는 것 같다.

그리고 이 방법들로 얻을 수 있는 효과도 조금씩 다르다. 그런데 한번 방법을 적용했는데, 한 번에 여러 가지 효과가 나타난다면 모델을 내가 원하는 방향으로 조정하기가 상당히 쉽지 않을 것이다. 예를 들어, 원하는 효과를 위해서 어떤 파라미터를 하나를 조정했는데 다른 수치가 감소할 수도 있다. 그래서 orthogornalization(직교화)이 중요하다. 한 번에 하나만! 이 핵심 아이디어다. 어찌 보면 선택과 집중이라고 볼 수도 있을 것 같다.

 

머신 러닝은 학습 데이터, 검증 데이터, 테스트 데이터, 현실 세계, 총 네 가지 영역에서 좋은 성능을 내도록 튜닝되어야 한다.  그리고 어떤 방법을 적용하느냐에 따라 효과가 미묘하게 다르다. 예를 들어서, 학습 데이터의 성능을 높이고 싶다면 신경망의 크기를 키우거나 Adam 알고리즘을 적용하는 등의 방법을 사용할 수 있다.

앤드류 응 교수님은 특히 early stopping을 언급하시면서 본인은 잘 사용하지 않는다고 하셨다. 그 이유는 early stopping은 검증 데이터에 대한 성능을 높이기 위해서 학습을 조기 중단하기 때문이다. 따라서 충분히 학습 데이터에 대해서 성능을 높일 수 있음에도 그러지 못하게 되기 때문에 orthogornality가 저해된다고 볼 수 있다. 그래서 검증 데이터에 대한 성능을 높이기 위해서는 보통 다른 방법을 사용하시는 것 같았다. 

 

2. Setting Up your Goal

뭐든지 좋은 결과를 얻기 위해서는 목표를 잘 정하고 시작하는 게 정말 중요하다. 열심히 달려도 결국엔 틀린 방향이었다면 다시 달려야 한다.  머신 러닝도 똑같다. 검증 데이터에 대해 좋은 결과를 얻기 위해, 평가 지표를 개선하기 위해서 모델을 계속 수정한다. 그런데 검증 데이터의 분포가 다른 데이터들과 다르거나, 뭔가 잘못된 평가 지표였다면 노력이 물거품이 되어버린다. 그래서 시작 전에 내가 정확히 어떤 모델을 개발할 것인지를 확실히 정하고, 어떤 지표, 데이터를 목표로 할지 세심히 선정해야 한다.

 

우선, 평가 지표를 고르는 법부터. 강의에서는 처음에 f1 score에 대해 설명한다. 물론 다른 평가 지표도 많지만 강의에서는 이 지표와 평균 정도를 예로 사용했다. 이 지표는 정확도와 재현율의 조화 평균으로 구한다. 

그리고 평가 지표를 optimizing과 satisficing, 두 가지 타입(?)으로 나눈다. 전자는 지표가 좋으면 좋을수록 좋은 거고, 후자는 어느 정도 수준 이상만 되면 그 이상으로 개선은 의미가 없는 지표다. 그래서 만약 N개의 평가 지표가 있다면, 1개만 optimizing이고 나머지는 satisficing으로 선정한 이후에 optimizing 지표를 계속 개선해나가는 방식으로 모델을 튜닝한다.

 

그다음은 검증 데이터와 테스트 데이터에 관한 내용이다. 만약 둘의 분포가 다르다면 열심히 검증 데이터에 모델을 맞춰놨더니 테스트 데이터에서 영 좋지 못한 성능을 보일게 뻔하다. 그래서 둘의 분포를 맞춰주는 게 중요하다.

 

그리고 요새는 데이터의 양이 하도 커져서 전체 데이터의 비율을 학습 데이터에 몰아주는 편이다. 테스트 데이터는 어느 정도 합리적인 수준의 데이터만 해도 무방하다.

 

3. Comparing to Homan-level performance

요새는 하도 머신 러닝, 딥 러닝 성능이 좋아져서 사람 뺨친다. 예전에는 이세돌 님이 알파고를 이길 수 있었지만, 지금 알파고 2(?)는 절대 못 이길 거라는 소문을 어디서 들었다. 그래서 머신 러닝 모델은 진짜 사람의 성능(?)과 비교하고는 한다. 여기서 새로운 용어인 베이즈 에러가 등장한다. 아무리 별 생쇼를 해도 이 오차보다는 더 줄일 수 없는 오차를 말한다. 수학적 이론을 기반으로 만들어진 개념이지만, 내 수학 실력이 짧아서 온전히 이해하기는 벅차다.

아무튼 이 베이즈 에러의 proxy로 사람이 직접 했을 때의 오차를 사용한다. 그리고 모델의 성능이 이것보다 낮은 경우엔 사용할 수 있는 최적화 기법들이 꽤나 명확하다. 우선, avoidable bias라는 개념이 새로 등장한다. 얘는 아까 말한 베이즈 에러와 훈련 데이터 오류의 차이다. 직관적으로 이해하면 훈련 데이터에 대해서 베이즈 에러까지 다가갈 수 있을 여지가 남아있다는 것이다. 그리고 이전처럼 모델의 variance는 훈련 데이터와 검증 데이터의 오류 차이로 생각한다. 둘 중 어느 쪽이 더 큰지를 비교해서 bias를 해결해야 할지, variance를 해결해야 할지 정할 수 있다. 하지만 사람의 성능을 뛰어넘게 되는 경우에는 이게 굉장히 모호해진다. 

요새 모델이 사람보다 더 정확한 분야로 광고, 추천, 물류, 대출 등이 있다. 얘네가 특히 정확한 이유는 우선 데이터가 음성이나 자 언어처럼 sequential 한 데이터가 아니라 구조화된 데이터를 사용하기 때문이다. 그리고 사람이 볼 수 있는 양을 훌쩍 넘어선 양의 데이터를 사용해서 학습하기 때문이다. 

 

이번 강의는 모델을 만드는 과정에서 어느 방향으로 나가야 할지를 결정할 수 있는 사항들에 대해서 배울 수 있었다. 아마 다음 주차도 비슷한 걸 배우지 않을까 하고 생각한다.

 

* Courera의 Deep Learning Sepcialization 강의를 수강하는데 도움이 되고자 작성한 요약문입니다. 틀린 내용 있다면 정정해주시면 감사하겠습니다.