안녕하세요? Justkode 입니다. 오늘은 머신 러닝의 기본 개념에 대해 공부 해 보는 시간을 가져 보도록 하겠습니다.
머신 러닝 학습의 종류는 두 종류가 있습니다.
첫 번째는 지도 학습입니다. 지도 학습은 훈련 데이터로 **Feature(특징)**와 Target(결과) 쌍이 주어지며, 훈련 데이터로부터 하나의 함수(모델)를 유추해내기 위한 기계 학습의 하나의 방법입니다. 가장 기본적인 형태이며, Feature를 모델에 삽입하여 나오는 결과 값과 실제 결과를 비교 하는 방식으로 학습 합니다. 다시 한번 직관적으로 설명 드리자면, 주어진 데이터를 통해 결과 값을 예측하는 함수를 만든다라고 할 수 있을 것 같습니다.
x1, x2는 Feature, y는 Target
다음은 지도 학습의 종류 대해서 알아 보겠습니다.
회귀의 예시
분류의 예시
두 번째는 비지도 학습입니다. 비지도 학습은 훈련 데이터로 Feature(특징) 만이 주어 집니다. "아니, 이게 무슨 의미가 있나?" 하실 수도 있지만, 비지도 학습은 데이터간 숨겨진 구조를 찾는 데 사용 됩니다.
예시를 들자면 다음과 같습니다.
군집의 예시
차원 촉소의 예시
우리가 모델을 학습 시키기 위한 Dataset은 다음과 같이 분류 할 수 있습니다.
Overfitting이란, 훈련 세트에 대해서는 모델이 높은 정확도를 보이나, 테스트 세트에 대해서는 낮은 정확도를 보일 때를 말합니다. 다시 말하면, 일반화 성능이 떨어짐을 의미하며, 이를 해결하기 위해선 검증 세트를 이용하여, 여러 가지 모델에 대해 일반화 성능을 평가 한 후, 일반화 성능이 더 좋은 모델을 선택하여 학습하거나, Feature의 갯수를 최소화 하거나, 더 많은 데이터 셋사용, 더 단순한 모델 사용 등이 있겠습니다.
파란색이 일반화 면에서 이상적, 빨간색처럼 Noisy한 데이터 까지 캐치 할 필요는 없다.
우리가 학습이 잘 되었는지, 안 되었는지 어떻게 판단 할 수 있을가요? 이는 각 목적에 맞는 **비용 함수 (Cost Function)**를 사용 함으로써 알 수 있습니다. (혹은 이는 **Loss Function(손실 함수)**라고도 불립니다.)
만약 우리가 회귀에 대해서 학습이 잘 되었는지 수치적 평가를 하고자 합니다. 그럴 때는 어떻게 하면 될까요? 답은 정답과 예측 값의 제곱의 합을 더함으로써, 수치의 차가 적으면 적을 수록, 학습이 잘 되었다고 판단 할 수 있습니다.
MSE (Mean Square Error)
혹은 이제 분류에 대해서 학습이 잘 되었는지 수치적 평가를 하고자 할 때는요? 그럴 때는, 해당 문제를 답으로 예측한 확률과 실제 분류의 차이 값에 로그를 씌운 값을 더함으로써 가능 합니다.
Cross-Entropy Loss, C는 클래스의 갯수, t_i는 참이면 1, 아니면 0, s_i는 예측한 확률
군집이 잘 되었는지는 어떻게 판단 할 수 있을까요? 이는 아마 군집들의 평균값과 군집 샘플과의 거리의 합이 될 수도 있겠네요.
아무튼 이런 식으로, 모델이 잘 학습 되었는지에 대한 평가를 통해, 이를 줄여 나가는 방식으로 학습하면 될 것입니다. 그런데 어떻게 학습 하냐고요..?
1강때 진행 했던 **계산 그래프(Computational Graph)**를 기억 하시나요? 계산 그래프를 이용해서, 우리는 손실 함수를 줄이는 방향으로 값을 이동하면, 이에 맞는 파라미터 또한 같이 계산 그래프에서 전달된 미분 값을 바탕으로 파라미터 값을 변경 해 주면 될 것입니다.
Cost Function의 미분을 구한 후, 경사를 따라 내려 감.
구한 미분 값을 바탕으로, 이를 파라미터에 전달함.
사실, 경사 하강법을 하는 방법은 매우 다양합니다. 우리가 정직하게 내려 가면, 그것은 극소에서 멈출 가능성이 높습니다.
손실 함수 그래프가 이렇게 생겨 버리면..? 생각보다 킹받는 상황.
극소값에서 멈추지 않게 하기 위해, 다음과 같이 여러개의 경사 하강법을 사용 할 수 있습니다.
다양한 경사 하강법
학습을 할 때, 행렬 연산을 한꺼번에 하느냐, 나누어서 하느냐에 따라 경사 하강법의 종류가 달라집니다.
배치 경사 하강법
확률적 경사 하강법
미니 배치 확률적 경사 하강법
고로 기계학습의 학습 과정은 다음과 같습니다.
이번 시간에는 머신 러닝의 필수 기본 개념에 대해서 배워 보았습니다. 다음 시간에는 선형 회귀와 로지스틱 회귀에 대해 이론을 알아 보고, scikit-learn
으로 실습 하는 시간을 가져 보도록 하겠습니다.