Code › ai-engineering-study
[AI] 위클리페이퍼 #2 - 학습 방식, 손실 함수, 편향과 분산, k 폴드
머신러닝의 학습 방식과 모델 학습 및 검증 과정에서 확인해야 할 개념을 정리한 두 번째 위클리 페이퍼
위클리 페이퍼 2주차에는 지도학습과 비지도학습, 손실 함수, 편향과 분산, K-폴드 교차 검증을 정리 해 보았다. 이렇게 한 주가 끝나면서 정리하는게 복습도 되고 스스로 어떤 부분을 아는지 모르는지 확인하는 계기도 되어서 모르는 부분은 공부하면서 정리하는 측면에서도 좋은 것 같다 :)
1. 지도학습과 비지도학습의 차이는 무엇인가요?
지도학습은 학습 시 주어지는 데이터에 정답이 같이 주어지고 입력과 정답의 관계를 학습한다. 예를 들면 고양이와 강아지 이미지를 학습시킨다면 각 이미지와 함께 고양이 또는 강아지라는 label을 함께 주며 학습시킨다.
반면 비지도학습은 정답 없이 데이터의 분포를 보고 자연스럽게 나뉘는 그룹이나 반복적인 패턴을 찾는 식으로 학습한다. 정답 없이 입력 데이터만 이용하여 학습하기 때문에 지도학습처럼 정답과 바로 비교해 정확도를 계산하기는 어렵지만, 군집이 얼마나 잘 모이고 분리됐는지 또는 분석 목적에 맞는 결과가 나왔는지 등을 기준으로 평가할 수 있다. 인터넷상의 많은 데이터가 label이 없는 형태로 존재하기 때문에 비지도학습과 자기지도학습도 중요한 학습 방법으로 사용되고 있다.
2. 손실 함수(loss function)란 무엇이며, 왜 중요한가요?
손실 함수란 머신러닝 및 딥러닝 모델이 데이터를 학습하는 과정에서 실제 정답과 모델의 예측값 사이의 오차를 수치로 계산하는 함수다. 이 함수가 중요한 이유는 경사하강법이 손실이 감소하는 방향으로 가중치를 조절하면서 실제 정답에 더 가까운 예측을 하도록 모델을 학습시키기 때문이다.
대표적인 회귀 손실 함수인 평균 제곱 오차(Mean Squared Error, MSE)는 실제값과 예측값의 차이를 제곱한 뒤 전체 데이터에 대해 평균을 낸다.
여기서 는 실제값, 는 모델의 예측값이며, 예측이 실제값에서 멀어질수록 손실이 커진다.
Ridge와 Lasso는 이 손실 함수에 가중치 벌점을 추가한다. 손실과 규제가 연결되는 방식은 스케일링 이후에 규제를 적용하는 이유에 이어서 정리했다.
다만 학습 데이터의 손실이 낮다고 해서 새로운 데이터에서도 항상 성능이 좋은 것은 아니다. 과적합 여부를 확인하려면 검증 데이터의 성능도 함께 확인해야 한다.
3. 모델 학습 시 발생할 수 있는 편향과 분산에 대해 설명하고, 두 개념의 관계에 대해 설명해 주세요.
같은 문제를 서로 다른 학습 데이터로 여러 번 학습한다고 했을 때, 예측값들의 평균이 실제 정답과 대체로 멀리 떨어져 있으면 편향(bias)이 높다고 말한다. 반면 학습 데이터가 바뀔 때마다 같은 입력에 대한 예측값들이 크게 달라진다면 분산(variance)이 높다고 말한다.
활쏘기와 과녁으로 예시를 들어보면 가장 중앙의 과녁 영역이 정답이라고 했을 때, 예측값들의 무게중심인 평균이 과녁 중앙의 정답값 근처에 있다면 편향이 낮다고 하고 이 예측값들이 서로 조밀하게 몰려 있으면 분산이 낮다고 한다.
이를 모델 학습 시의 의미로 적용해보면, 데이터셋의 변화에 따라 나타나는 수많은 예측선들의 평균적인 위치를 평균 예측선으로 나타낼 수 있다. 이 선이 실제 정답의 흐름인 최적선과 멀리 떨어져 있으면 편향이 높은 모델이며 과소적합(underfitting)이 발생하기 쉽다. 반대로 개별 데이터셋으로 만든 각 예측선들이 평균 예측선으로부터 변화가 심하다면 분산이 높은 모델이며 과적합(overfitting)이 발생하기 쉽다.
편향과 분산은 모델의 복잡도가 달라질 때 한쪽이 낮아지면 다른 한쪽이 높아지기 쉬운 트레이드오프 관계에 있다. 제곱 오차를 기준으로 보면 예측 오차에는 편향의 제곱과 분산뿐 아니라 데이터 자체에서 발생하는 줄일 수 없는 잡음도 포함된다. 따라서 모델 학습의 목표는 편향과 분산 중 하나만 낮추는 것이 아니라, 새로운 데이터에서도 오차가 작도록 균형을 잡는 것이다.
만약 모델이 과소적합이라면 훈련 데이터에서도 예측을 잘 못하고 테스트 데이터에서도 예측을 잘 못한다. 한마디로 멍청한 모델이라고 할 수 있다. 반면 모델이 과적합이라면 훈련 데이터에서는 극도로 예측을 잘하지만 테스트 데이터에서는 예측을 잘 못한다. 훈련 데이터에만 존재하는 우연한 패턴과 잡음까지 맞추도록 학습했기 때문이다.
간단한 예를 들면 하필 주어진 데이터에서는 10억짜리 아파트에 모두 노란 커튼이 달려 있었는데, 테스트 데이터로 10억짜리 파란 커튼 집을 돌려봤더니 노란 커튼이 없다는 이유로 싼 아파트라고 잘못 예측해버리는 경우가 있을 수 있다.
4. K-폴드 교차 검증에서 K의 값을 선택할 때 고려해야 할 점은 무엇인가요?
먼저 K-폴드는 전체 데이터셋을 K개의 묶음인 폴드(fold)로 균등하게 나눈 후, 검증 데이터로 사용할 폴드를 계속 바꿔가면서 총 K번 평가하는 방식이다. 매번 모델을 처음부터 다시 학습하며, 한 폴드를 검증에 사용하고 나머지 K-1개 폴드를 학습에 사용한다. 이렇게 얻은 K개의 평가 결과를 평균 내어 모델이 새로운 데이터에서도 성능을 유지하는지 확인한다.
여기서 K값을 선택할 때 고려해야 할 점은 데이터의 개수와 연산 속도다.
먼저 데이터의 개수 관점에서 봤을 때 데이터 개수가 작고 K값도 작으면, 한 번의 학습에 사용하는 데이터가 충분하지 않을 수 있다. 예를 들어 데이터가 30개인데 K가 2라면 총 2번의 평가가 이루어지고, 하나의 폴드에는 15개의 데이터가 들어간다. 한 폴드를 검증에 사용하면 나머지 15개의 데이터로만 학습해야 하므로 학습 데이터가 부족해질 수 있다.
반대로 K를 무작정 크게 잡으면 연산 측면에서 문제가 생긴다. 예를 들어 100만 개의 데이터가 있을 때 K를 10으로 잡으면, 폴드 하나에는 10만 개의 데이터가 들어간다. 매 평가마다 9개 폴드인 90만 개로 학습하고 10만 개로 검증하며, 이를 10번 반복한다. 모델이 학습 데이터를 한 번씩 처리한다고 단순 계산하면 총 학습 데이터 처리량은 900만 개다.
K를 5로 잡으면 폴드 하나에는 20만 개가 들어가고, 매 평가마다 4개 폴드인 80만 개로 학습한다. 이를 5번 반복하므로 같은 기준으로 계산한 총 학습 데이터 처리량은 400만 개다. 실제 연산 비용은 모델과 학습 방식에 따라 단순히 데이터 개수에 비례하지 않을 수 있지만, K가 커질수록 모델을 다시 학습하는 횟수와 전체 계산 비용이 증가한다.
100만 개의 데이터를 기준으로 두 경우를 비교하면 다음과 같다.
한 칸의 [학습] 또는 [검증]은 폴드 1개를 뜻한다.
K = 5각 폴드: 20만 개
1회차 [검증][학습][학습][학습][학습]
2회차 [학습][검증][학습][학습][학습]
3회차 [학습][학습][검증][학습][학습]
4회차 [학습][학습][학습][검증][학습]
5회차 [학습][학습][학습][학습][검증]
한 번 학습: 80만 개
총 학습 데이터 처리량: 80만 × 5회 = 400만 개
K = 10
각 폴드: 10만 개
... = 중간 학습 폴드 6개 생략
1회차 [검증][학습][학습] ... [학습]
2회차 [학습][검증][학습] ... [학습]
...
10회차 [학습][학습][학습] ... [검증]
한 번 학습: 90만 개
총 학습 데이터 처리량: 90만 × 10회 = 900만 개
K가 10이면 한 번 학습할 때 사용하는 데이터도 더 많고, 모델을 처음부터 학습하는 횟수도 두 배로 늘어난다. 그래서 이 예시에서는 K가 5일 때보다 전체 학습 데이터 처리량이 2.25배가 된다.
반대로 K를 5로 잡으면 K를 10으로 잡을 때보다 이 단순 계산에서의 학습 데이터 처리량이 절반 이하 수준으로 줄어든다. 따라서 현업에서는 데이터의 개수와 연산 속도, 인프라 비용을 함께 보고 K 수치의 트레이드오프를 잘 생각해서 정해야 한다.