사람의 손글씨가 담긴 숫자의 이미지로 어떤 숫자인지를 판별하는 "손글씨 인식" 알고리즘을 작성해보자.
휴리스틱한 규칙(handcrafted rules or heuristics)으로도 만들 수 있지만, 규칙에 위반되는 것이나 조금만 예상 외의 데이터가 들어오면 아주 형편없는 결과를 얻을 것이다.
머신러닝의 관점으로 접근하게 되면 더 좋은 결과를 얻을 수있다. 그전에 머신러닝으로 어떻게 접근하는지 살펴본다.
- 주어진 이미지들, 즉 i 번째의 이미지를
$$x_i$$ 라고 하면, 이들을 모두 모은$$N$$ 개의 데이터를 훈련 세트(training set) 이라고 한다. ($${x_1, \cdots x_N}$$ ) 훈련데이터를 통해서 파라미터를 조정해 적절한 모델을 얻을 것이다. - i 번째의 이미지(
$$x_i$$ )에 해당하는 하나의 숫자 카데고리가 있을 것이다.이를 타겟벡터(target vector)$$t$$ 이라고 한다.
이 머신러닝 알고리즘의 결과물은 어떤 함수
해당 함수
보통 원래 주어진 입력 데이터는 전처리(preprocessed) 혹은 피쳐추출(feature extraction) 과정을 거쳐 새로운 공간(space, 아마 벡터공간?)으로 변형된다. 이를 통해서 조금더 쉽게 패턴인식 문제를 해결하길 기대한다. 위의 예시로 들자면, 이미지라는 그림 파일을 고정된 크기와 스케일링된 숫자로 변환 하는 작업이 전처리과정을 뜻한다. (Mnist 데이터 셋은 0~255 숫자에서 0과 1사이로 노말라이징을 한다.) 새로운 데이터 또한 전처리 / 피처추출 과정을 거쳐야한다. 전처리과정의 장점은 학습을 쉽게 할 뿐만 아니라, 계산을 더 빠르게 하는 것도 있다. 실시간 얼굴인식을 예로 들자면, 새 초마다 엄청만 픽셀을 처리해야하는데, 직접 원본 데이터를 작업하는것 보다는 쓸모없는 정보는 버리고 유용한 피쳐(features) 를 추출해서 빠르게 계산하는 것이 좋다.
하지만 전처리 단계에서 매우 조심스럽게 데이터를 처리해야한다. 그 이유는 보통 선택된 피처들은 기존의 데이터보다 차원이 작기 때문에, 선택과정 중에서 우리가 잡지 못한 정보손실이 일어날 수 있기 때문이다. 만약 우리가 버린 피처가 어떤 일을 수행하는데 중요한 피처였다면, 굉장히 성능에 심각한 영향을 끼치게 된다.
-
지도학습(supervised learning) 문제는 각 입력값(벡터)에 상응하는 타겟값(벡터)가 있는 문제를 말한다.
- 학습목표가 한정된 이산형 카테고리 값이라면 분류(classification) 문제다.
- 학습목표가 연속형 변수라면 회귀(regression) 문제다.
-
비지도학습(unsupervised learning) 문제는 입력값(벡터)에 상응하는 타겟값(벡터)가 없는 문제를 말한다.
- 데이터속에 비슷한 속성을 가지는 그룹을 찾는 문제는 클러스터링(clustering) 이라고 한다.
- 입력 데이터로 변수의 분포를 도출(결정)해내는 문제를 밀도 추정(density estimation) 이라고 한다. (변수
$$\neq$$ 입력데이터) - 고차원 공간(high-demensional space)의 데이터를 2 혹은 3 차원 공간에 투영하여 보여주는 것을 시각화(visualization) 이라고 한다.
-
강화학습(reinforcement learning) 문제는 주어진 상황에서 제일 큰 보상을 얻는 방향으로 제일 적절한 행동(action)을 찾는 문제를 말한다.
- 마찬가지로 최적 결과값을 기계에게 제시하지 않는다.
- 특징 중 하나는 탐색(exploration, 효율적인 새로운 행동을 찾는 것)과 활용(exploitation, 높은 보상을 주는쪽으로 행동하는 것)의 trade-off 문제를 해결하는 것이다.