Code › ai-engineering-study

지도학습부터 강화학습까지

머신러닝이 데이터를 학습하는 여러 방식과 각각의 차이

저번 포스팅에 이어 강의 내용을 또 정리해본다. 정리하면서 강의에서 나오지 않은 내용도 조금씩 찾아보며 추가해보았다. 그냥 정리만 하면 금방 하겠지만 이해하면서 정리하려니 내 이해속도에 발목이 잡힌다. 그래서 언제 다 정리하지?? 하면서도 차근차근 정리해보려고 한다..!

머신러닝은 데이터에서 관계와 규칙을 학습하지만, 모든 모델이 같은 방식으로 배우는 것은 아니다. 입력과 함께 정답을 제공하는지, 데이터 자체에서 풀 문제를 만드는지, 행동의 결과를 점수로 받는지에 따라 지도학습, 비지도학습, 자기지도학습, 강화학습으로 구분할 수 있다.

학습 방식입력정답학습 내용예시
지도학습데이터사람이 제공입력과 정답의 관계집값, 스팸
비지도학습데이터없음데이터 내부 구조고객 군집, 차원 축소
자기지도학습원본 데이터데이터에서 생성일부로 다른 일부 예측가려진 단어
강화학습환경 상태행동 결과 평가더 나은 행동 선택게임, 로봇

표에 적은 데이터와 원본 데이터가 서로 다른 형식을 뜻하는 것은 아닌데, 같은 이미지나 문장도 사람이 정답을 붙이면 지도학습에 사용할 수 있고, 정답 없이 데이터의 구조를 찾으면 비지도학습에 사용할 수 있다. 자기지도학습에서 원본 데이터라고 쓴 이유는 아래 예시에서 조금 더 자세히 설명한다.


지도학습은 입력과 정답의 관계를 배운다

지도학습(supervised learning)은 입력 데이터와 정답 데이터를 함께 사용한다. 고양이와 강아지 이미지를 학습시킨다면 각 이미지와 함께 고양이 또는 강아지라는 label을 제공하고, 모델은 이미지 특징과 정답 사이의 관계를 학습한다.

지도학습은 예측 대상에 따라 회귀와 분류로 나뉜다.

구분예측 대상모델이 찾는 관계예시
회귀연속적인 숫자입력과 숫자 값 사이의 관계집 크기로 가격 예측
분류정해진 클래스클래스를 나누는 경계와 확률스팸 여부, 질병 양성 여부

회귀(regression)는 집값이나 온도처럼 연속적인 숫자를 예측한다. 회귀라는 단어가 많이 나오고 그 뜻이 선뜻 와닿지 않아서 찾아보았다. 19세기 영국에 프랜시스 골턴(Francis Galton)이란 사람이 있었다. 이 사람은 인간의 신체적 특징과 유전을 통계적으로 연구한 인물이다. 그는 부모와 자녀의 키를 조사하면서 키가 매우 큰 부모의 자녀도 평균적으로는 부모보다 작고, 키가 매우 작은 부모의 자녀도 평균적으로는 부모보다 큰 경향을 관찰했다. 자녀의 키가 부모와 똑같이 극단적인 값에 머무르지 않고 전체 집단의 평균 쪽으로 돌아오는 현상을 평균으로의 회귀(regression toward the mean)라고 불렀다.

모든 자녀가 반드시 평균에 가까워진다는 뜻은 아니고, 여러 부모와 자녀를 묶어 비교했을 때 나타나는 평균적인 경향성을 말한다. 골턴은 부모의 키와 자녀의 키 사이에 어떤 관계가 있는지를 수치와 선으로 표현했고, 부모의 키가 주어졌을 때 자녀의 키가 평균적으로 어느 정도일지 설명했다. 이때 사용한 관계 분석에 회귀라는 이름이 붙었고, 이후 입력값과 연속적인 결과값 사이의 관계를 분석하는 방법 전체로 의미가 넓어졌다고 한다.

그래서 머신러닝에서도 집의 면적과 방 개수로 집값을 예측하거나, 오늘의 기상 정보로 내일의 온도를 예측하는 문제 등을 회귀라고 한다. 찾아보는 과정에서 궁금증이 하나 해결되었다!

분류(classification)는 정해진 범주 중 하나를 예측한다. label이 0과 1 같은 숫자로 저장되어 있어도 그 숫자 사이의 연속적인 값을 예측하는 것은 아니다. 0은 정상, 1은 불량처럼 각 숫자가 클래스를 나타낸다면 분류 문제다.


비지도학습은 정답 없이 구조를 찾는다

비지도학습(unsupervised learning)은 정답 없이 입력 데이터만 사용한다. 고객 데이터라면 고객마다 구매 횟수, 평균 결제 금액, 선호 상품 같은 특징이 들어 있고, 이 값들이 비슷할수록 서로 비슷한 고객이라고 판단할 수 있다. 데이터의 분포를 본다는 것은 값이 어느 구간에 많이 모여 있고, 어떤 데이터들이 서로 떨어져 있는지 확인한다는 뜻이다. 이렇게 정답을 주지 않은 상태에서 자연스럽게 나뉘는 그룹이나 반복되는 패턴을 찾는, 즉 데이터의 구조를 찾는 방법이다.

클러스터링(clustering)은 서로 비슷한 데이터를 같은 그룹으로 묶는 방법이다. 고객 군집화에서는 구매 횟수, 평균 결제 금액, 자주 사는 상품 같은 정보를 비교해 비슷한 고객끼리 묶는다. 충성 고객, 할인에 민감한 고객 같은 정답 그룹을 미리 주는 것이 아니라, 데이터의 유사성을 기준으로 그룹을 찾는다. 지도학습의 분류는 미리 정해진 정답 클래스를 맞히지만, 클러스터링은 정답 클래스 없이 그룹을 만든다는 차이가 있다.

변환(transformation)과 차원 축소도 비지도학습에서 다루는 대표적인 작업이다. 여기서 차원은 데이터 한 건을 설명하기 위해 필요한 값의 개수를 뜻한다. 고객 한 명을 나이, 구매 횟수, 결제 금액으로 표현한다면 세 개의 값이 필요하므로 3차원 데이터다. 고객이 만 명이라고 해서 차원이 만 개가 되는 것은 아니며, 고객 한 명마다 몇 개의 특징을 기록했는지가 차원을 결정한다.

고객 한 명에 대해 나이, 최근 방문 횟수, 구매 횟수, 총결제 금액, 평균 주문 금액, 할인 상품 구매 비율처럼 30개의 특징을 기록했다고 하자. 고객이 만 명이라면 데이터의 모양은 다음과 같다.

차원 축소 전: 고객 10,000명 × 고객마다 특징 30개
차원 축소 후: 고객 10,000명 × 고객마다 새로운 특징 2개 또는 5개

고객 수는 그대로이고, 고객 한 명을 표현하는 값의 개수만 30개에서 2개나 5개로 줄었다. 구매 횟수와 총결제 금액처럼 함께 증가하는 특징이나, 할인 상품 구매 비율처럼 구매 성향을 설명하는 특징을 조합하면 여러 열에 흩어진 정보를 더 적은 수의 새로운 축으로 요약할 수 있다. 두 개의 축으로 줄이면 고객 한 명을 그래프 위의 점 하나로 표시할 수 있고, 비슷한 구매 성향을 가진 고객들이 어느 위치에 모이는지도 확인할 수 있다.


자기지도학습은 데이터에서 정답을 만든다

자기지도학습(self-supervised learning)은 사람이 label을 직접 붙이지 않고, 원래 데이터에 이미 들어 있는 내용을 이용해 맞힐 문제를 만든다. 문장의 일부를 가리는 방식은 자기지도학습에서 사용할 수 있는 대표적인 방법인데 아래와 같다.

원래 문장: 오늘 날씨가 좋다
모델에 넣는 문장: 오늘 [가려진 단어]가 좋다
모델이 맞혀야 할 단어: 날씨

학습용 데이터를 만드는 프로그램은 모델에 문장을 넘기기 전에 “날씨”를 가리고, 원래 단어는 정답으로 따로 보관한다. 모델이 주변 단어를 바탕으로 가려진 자리에 들어갈 단어를 예측하면, 프로그램은 예측한 단어와 보관해 둔 “날씨”를 비교해 오차를 계산한다. 사람이 이 문장에 별도의 정답표를 달지 않아도 원래 문장에 있던 단어를 정답으로 사용할 수 있다는 뜻!

원본 데이터라는 말은 지도학습이나 비지도학습과 다른 종류의 데이터라기 보다, 사람이 별도의 정답을 붙이기 전의 문장이나 이미지 자체를 말한다. 이미지의 일부를 가린 뒤 원래 모습을 예측하거나, 문장의 다음 단어를 예측하는 방식도 같은 원리를 사용한다.

자기지도학습을 비지도학습의 넓은 범주에 포함해 설명하기도 하지만, 무작정 구조만 찾는 방식과 달리 데이터에서 명시적인 예측 문제를 만든다는 특징이 있다. 그래서 현재는 비지도학습과 별도 항목으로 구분해서 설명하는 경우가 많다.


강화학습은 행동과 보상으로 정책을 배운다

강화학습(reinforcement learning)에서 에이전트는 행동을 선택하는 프로그램이고, 환경은 그 프로그램이 움직이는 게임이나 로봇의 주변 상황이다. 환경 상태는 에이전트가 현재 상황을 판단하는 데 사용하는 정보다. 게임이라면 캐릭터의 위치, 남은 체력, 주변 장애물이 상태에 포함될 수 있고, 로봇이라면 센서값이나 관절의 위치가 상태가 될 수 있다.

에이전트는 현재 상태를 보고 이동이나 공격 같은 행동을 선택한다. 환경은 행동 이후의 새로운 상태와 결과 점수를 돌려주는데, 강화학습에서는 이 점수를 보상(reward)이라고 부른다. 정책(policy)은 현재 상태에서 어떤 행동을 선택할지 정하는 방법이며, 에이전트는 경험을 반복하면서 장기적으로 더 높은 점수를 얻는 정책을 학습한다.

현재 상태 관찰
  → 행동 선택
  → 환경이 새로운 상태와 보상 반환
  → 경험을 바탕으로 정책 갱신
  → 반복

게임에서는 현재 화면과 게임 상태를 보고 이동이나 공격을 선택하고, 점수나 승패를 보상으로 받을 수 있다. 정답 행동을 매 순간 알려주는 것이 아니라, 행동 이후에 받은 보상을 통해 어떤 선택이 장기적으로 유리했는지 학습한다.

사람이 시행착오를 통해 배우는 과정과 비슷한 예시로 설명할 수는 있지만, 사람의 학습과 완전히 같다고 볼 수는 없는게 강화학습은 상태와 행동, 보상, 정책이라는 구성 요소를 수학적으로 정의하고 누적 보상을 최적화하는 방식이라 아직까지는 복잡한 인간의 특성과 완전히 동일하다고 보기는 조금 어렵지 않을까?

이번 내용을 정리하면서 지도학습과 비지도학습에 대해 한 단계 더 깊이 생각 해 볼 수 있었다. 아직 정리할게 산더미이지만 하나씩 하니씩 하다보면 어느순간 내재화 되어 있으리라..