강화학습에서는 보상과 벌칙이란 상태값이 주어져 있습니다. 직접적으로 정답을 처음에 주는 것이 아니라, 어떤 상태에서 취한 행동이 잘된 행동이면 보상을 주고, 잘못된 행동이라면 벌칙을 부여합니다.
학습 대상은 시행착오를 통해 스스로 벌칙을 최소화하고 보상을 최대화하도록 행동을 학습하게 됩니다. 학습대상이 이용할 수 있는 정보는 보상 뿐이기 때문에, 학습목적에 알맞는 보상을 설정하는 것이 제일 중요한 task가 되겠습니다.
비디오 게임을 예로 들었을때, 강화학습에서는 학습하는 객체를 에이전트(Agent)라고 부릅니다. 위 그림의 마리오를 보면 에이전트(사람)는 동전을 넣고 레버를 조작하면서 마리오를 움직여서 버섯 몬스터를 없애서 게임이 끝났을 때 최종 점수를 받게됩니다. 처음에는 게임에 익숙하지 않은 에이전트가 버섯과 부딪혀서 죽거나, 뛰어가다 점프를 안하고 구덩이에 빠져서 죽는경우가 있습니다. 계속해서 투입되는 동전을 보면서 부딪혀서 죽거나, 장애물을 피해야 안 죽는 것을 인식하게 됩니다. 따라서 먼저 계속 투입되는 동전을 아까워하며 점점 조작에 익숙해집니다. 조작이 익숙해지면 최대한 죽지않고 빠르게 스테이지를 클리어 하는 법을 터득하게 됩니다. 에이전트는 동전(벌칙)의 투입을 최소화하면서, 점수(보상)을 최대화하도록 레버 조작이라는 행동을 학습하게 되는 것입니다.
이처럼 강화학습은 직접적으로 정답을 주지는 않지만 주어진 보상을 최대화할 수 있도록 시행착오를 통해 행동을 최적화할 수 있습니다.
머신러닝을 실제로 적용하려면 머신러닝에 사용할 알고리즘을 선택해야 합니다. 지난 포스트에서 설명한 것과 같이 머신러닝은 회귀, 분류, 군집화 등 3가지 종류의 문제를 해결할 수 있는데, 이들 문제에 적합한 각각의 알고리즘이 있습니다. 한 가지 알고리즘으로 모든 종류의 문제를 해결할 수 없고, 알고리즘마다 특성이 달라서 원하는 것이 무엇인지를 명확하게 하고, 그 결과를 얻기 위해서는 어떤 종류의 문제에 속하는지 판별한 다음 머신러닝에 적용할 알고리즘을 선택해야 합니다.
적합한 알고리즘을 선택하기 위해서는 데이터의 크기와 데이터 타입 (문자, 숫자, 이미지 등), 데이터가 선형인지 비선형인지 등의 요소를 고려해야 합니다. 데이터에 대한 사전 지식 즉, 도메인 지식(Domain Knowledge)이 별로 없다면 최적의 결과를 보여주는 알고리즘을 선택하는 데 있어서 많은 시간과 노력을 필요로 할 수도 있습니다.
다음 그림은 파이썬의 유명한 라이브러리인 Scikit-learn에서 제공하는 알고리즘 Cheat-sheet으로 머신러닝을 이용해 원하는 결과를 얻기 위한 일반적인 절차를 보여주고 있습니다. 'Start'부터 시작해서 표시된 질문에 대한 응답으로 다음 과정이 차례로 제시되어 초심자들에게 어떤 머신러닝 알고리즘을 처음에 적용하고, 결과가 좋지 않은 경우 다음에 어떤 알고리즘을 적용해야 하는지를 알기 쉽게 표현하고 있습니다.
이외에도 많은 종류의 알고리즘이 있으므로 자신이 다루는 데이터 특성에 적합한 알고리즘을 선택해야 좋은 결과를 빨리 얻을 수 있습니다.
머신러닝 알고리즘은 수학적 이론과 그 내용을 아는 것은 특별한 경우가 아니라면 충분조건이지 필요 조건은 아닙니다. 예측을 위한 모델링은 사람이 직접 하는 것이 아니라 머신러닝 알고리즘 스스로 만들어 가도록 설계되어 있기 때문입니다. 따라서 해당 머신러닝 알고리즘을 사용하는 개발자는 머신러닝 알고리즘의 개념과 사용법, 알고리즘의 특성을 알고 이해하는 것이 중요합니다.
머신러닝으로 해결하려는 문제에 효과가 있다고 알려진 알고리즘이 없다면, 적용할 수 있는 모든 머신러닝 알고리즘을 하나씩 적용해 시행착오를 거쳐 가장 좋은 성능을 보여주는 것을 채택해 사용하면 됩니다.
※ 오늘은 '머신러닝 알고리즘'에 대하여 알아보았습니다.
이 포스트는 학부에서 제공하는 기본적인 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 인공지능, 머신러닝 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.
신경망 연구가 암흑기를 맞이한 이유로 사고 범위 문제를 해결하는 컴퓨팅 연산 성능의 한계를 맞았습니다. 1990년대에는 컴퓨팅 연산 성능도 더욱 향상되었습니다. 사실 컴퓨팅 연산 성능이 향상된 이유는 신경망 연구 때문이 아닙니다. 1990년대 후반 고속 인터넷망 보급과 함께 대용량 이미지나 동영상 등이 만들어지기 시작했고, 이를 처리하거나 분석할 필요성이 생겼기 때문입니다.
이미지는 색상 수에 따라 처리해야 할 데이터양이 늘어나게 됩니다. 그리고 이미지와 음성으로 구성하는 동영상은 다양한 데이터들을 한꺼번에 처리합니다.
그런데 대용량 이미지나 음성 데이터 분석은 컴퓨터 한 대의 컴퓨팅 연산 성능으로 처리하기가 어렵습니다. 그 결과 하드웨어와 소프트웨어 모두를 고려하는 데이터 분산 처리 기술을 주목하기 시작합니다.
하드웨어의 관점에서는 OpenMP나 그래픽 카드의 GPU를 이용하는 GPGPU(General-Purpose computing on Graphics Processing Units) 관련 기술인 CUDA (Compute Unified Device Architecture)이 나오면서 주목을 받기 시작했습니다. 이를 이용하면 개인도 슈퍼컴퓨터와 비슷한 멀티 코어 컴퓨팅 또는 이기종 컴퓨팅 환경을 구축할 수 있게 되었습니다.
소프트웨어 관점에서는 명령 실행 분산 처리를 관리하는 구조가 발전했습니다. 즉, 미리 설정한 컴퓨터 자원을 사용하고, 네트워크로 작업을 관리하며, 자유자재로 자원을 늘리거나 줄일 수 있습니다. 대표적인 예로는 구글 파일 시스템에서 촉발된 맵리듀스(MapReduce) 아키텍처와 야후가 중심이 되어 개발한 하둡(Hadoop) 등이 있습니다.
무어의 법칙에 따른 하드웨어 성능 향상과 분산 처리 기술이 결합하면서 2000년대 중반부터 다시 신경망 연구가 활발해졌습니다. 2006년 오토인 코더(Autoencoder)의 등장과 함께 딥러닝의 시대로 연결됩니다. 최신 딥러닝 연구에서 주목하는 것은 심층 신경망(Deep Neural Network)입니다. 심층 신경망은 딥러닝을 할 수 있을 정도의 깊은 계층으로 구성된 신경망을 말하며 보통 계층이 5개 이상이면 심층 신경망이라고 부릅니다. 2000년대 이전에는 컴퓨터 연산 성능의 한계로 심층 신경망 구성 자체가 어려웠지만 2010년 이후에는 계층이 100개 이상인 신경망을 구축할 수 있게 되었습니다.
인공지능 연구는 앞에서 설명한 신경망 외에도 통계 모델링을 중심으로 한 머신러닝 알고리즘이 있습니다. 이 연구는 신경망 연구만큼 주목받지는 않았지만 착실히 발전한 분야입니다. 그리고 컴퓨팅 연산 성능을 개선하는 분산 처리 기술또한 같이 발전하게 됩니다.
통계를 이용해 문제를 해결하는 방법은 크게 어떤 기준으로 데이터를 나누는 분류(Classification)와 데이터로 앞으로 필요한 결과를 예측(Prediction)으로 나눌 수 있습니다. 통계 기반 머신러닝은 이 분류와 예측을 프로그램화한 것으로 분류와 예측을 주어진 데이터를 자동으로 계산해 특징량 (feature)을 추출합니다.
추출한 특징량은 구성 요소와 기여도를 사람이 직접 확인하는 등의 추가 분석을 거쳐 통계 모델링을 하면 자동 처리에 이용할 수 있습니다.
이러한 머신러닝 시스템의 대표적인 예로는 추천 엔진과 로그 데이터, 온라인 데이터를 이용한 이상 탐지 시스템 등이 있습니다.
통계 기반 머신러닝 연구가 활발해진 계기는 1990년대 베이즈 정리를 출발점에 둔 베이즈 통계학의 재조명입니다. 앨런 E. 겔펀드(Alan E. Gelfand)와 에이드리언 F. M. 스미스 (Adrian F. M. Smith)는 1990년 [Sampling-Based Approaches to Calculating Marginal Densities] 에서 현대 베이즈 통계 계산의 핵심이 되는 마르코프 연쇄 몬테카를로 방법의 초기 형태를 제안했습니다. 이는 현재 우리가 연구하는 머신러닝 알고리즘의 기반이 되기도 했습니다.
2000년대에는 베이즈 필터를 이용한 머신러닝 시스템을 도입했습니다. 이 시스템을 이용한 대표적인 예로는 이메일 스팸 판정, 음성 입력 시스템의 노이즈 줄이기, 발음 식별 처리 등이 있습니다.
군집화는 데이터를 유사한 특성을 가진 무리(Cluster)로 묶는 것을 의미합니다. 군집화는 비지도 학습에서 사용하는 것으로 출력데이터 없이 입력 데이터만으로 이뤄지며, 일반적으로 데이터의 특성을 파악하거나 이해하기 위해 많이 적용되고 있습니다.
예를 들어, 마케팅 캠페인을 진행하는데 어떤 특성을 가진 사람들이 마케팅 캠페인에 반응하는지를 알고 싶다고 가정을 해봅시다. 마케팅 캠페인을 처음 시행해서 연관성 있는 데이터는 가지고 있지만, 어떤 기준으로 대상자를 선정하는 것이 좋을지 모른다면 이러한 문제를 해결하는 데 군집화가 효과적으로 적용될 수 있습니다.
군집화는 주어진 데이터들의 유사도를 계산해 비슷한 특성이 있다고 판단되는 것끼리 군집으로 분류하는 것으로, 이러한 작업을 효율적으로 할 수 있습니다. 마케팅에 반응한 사람들의 데이터를 모아 군집화를 실시하면 유사한 특성을 가진 사람들을 묶어 몇 개의 군집인지 알 수 있고, 각각의 군집에 속한 사람들의 공통점을 파악하면 원래의 문제인 마케팅에 반응하는 사람들의 유형과 그들의 특성을 발견할 수 있습니다.
군집화를 실시해 위의 그림과 같은 결과를 얻었다면 잠정적으로 마케팅 캠페인에 반응하는 사람의 군집은 2개가 되므로 이들 군집에 속한 사람들의 특성을 분석하면 됩니다.
군집 문제의 예는 아래와 같습니다.
* 유사한 음악 취향을 가진 사용자를 묶습니다.
* 천문학 데이터를 이용해 유사한 특성을 가진 별을 찾습니다.
* 전자상거래 사용자가 좋아할 만한 물건을 추천합니다.
※ 오늘은 '군집화(Clustering)'에 대하여 알아보았습니다.
이 포스트는 학부에서 제공하는 기본적인 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 인공지능, 머신러닝 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.
분류는 단어가 의미하는 대로 데이터를 나누는 것을 의미합니다. 분류에 대한 이해를 하기 위해서 아이리스의 예제를 한번 살펴보겠습니다.
꽃잎의 너비와 높이 데이터를 이용해 주어진 아이리스가 Sentosa, Virginica, Versicolor 3 종류 중 어떤 품중에 속하는지를 판별해야 한다고 가정을 해봅시다. 이 문제는 저번 포스트에서 설명한 회귀와는 다르게 어떤 값을 예측하는 것이 아니고 어떤 종류에 속하는지를 파악하는 문제입니다. 회귀 문제와 마찬가지로 분류 역시 산점도를 그려 아이리스 품종별로 꽃잎의 너비와 높이가 어떤 관계가 있는지를 파악해야 합니다.
위의 그림을 살펴보면 Sentosa 품종은 화면에 네모로 왼쪽 아래에 위치하고, Virginica는 원으로 오른쪽 위에 위치하며, 그 중간에 삼각형으로 Versicolor 품종이 있음을 알 수 있습니다. 해결하려는 문제는 주어진 꽃잎의 너비와 데이터만으로 어떤 품종인지를 파악하는 것이므로 3가지 품종을 구분하는 방법이 필요합니다. 만약 어떤 모델이 있고 이 모델을 이용해 꽃잎의 너비와 높이에 따라 품종을 구분할 수 있게 된다면 새로운 데이터로 너비와 높이 데이터만을 입력해도 품종을 구분할 수 있습니다.
위의 그림과 같이 2개의 선을 이용해 Sentosa, Virginica, Versicolor로 영역을 나눈 다음 새롭게 주어진 데이터가 3개의 영역 중 어디에 위치하는지를 안다면 자연스럽게 아이리스 품종을 분류할 수 있습니다. 따라서 분류는 주어진 데이터들을 이용해 아이리스를 잘 구분 지을 수 있는 2개의 'Y = aX + b ' 를 찾는 것이라 할 수 있습니다.
분류는 이와 같은 과정을 거쳐 데이터를 구분할 수 있게 하는 것으로 머신러닝에서 매우 광범위하게 사용되고 있기도 합니다. 회귀는 연속적인 데이터(Continuous Data)에 적용할 수 있지만, 분류는 범주형 데이터 (Categorical Data)에 적용할 수 있습니다.
분류 문제의 예는 아래와 같습니다.
* 스팸메일 분류
* 이미지 인식
* 음성 인식
* 질병 발생 여부 판별
※ 오늘은 '분류(Classification)'에 대하여 알아보았습니다.
이 포스트는 학부에서 제공하는 기본적인 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 인공지능, 머신러닝 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.
1980년대에는 반도체 개발 비용이 낮아지면서 CPU, RAM, 캐시 메모리 용량이 늘어난 대규모 직접회로를 만들 수 있게 되었습니다. 이를 통해 메인 연산 영역에서 다룰 수 있는 데이터의 단위가 달라지고 연산 속도가 빨라졌습니다. CPU 역사에서 자주 언급하는 무어의 법칙이 이때 유명해졌습니다.
이러한 성능 향상을 그냥 두고 볼 연구자들이 아닙니다. 이번에는 국가 차원에서 "컴퓨터의 성능 향상을 고려하는 새로운 인공지능 연구" 라는 관점으로 연구가 이뤄졌습니다. 이는 2차 인공지능 붐으로 연결 되었습니다.
2차 인공지능 붐은 신경망 연구가 발전했던 시기입니다. 2차 인공지능 붐 전의 신경망 연구에서는 단순 퍼셉트론을 이용한 패턴 인식 알고리즘을 만들었습니다.
그러나 다음 2가지의 문제로 인기가 시들해진 상태였습니다.
1. 명제 중 1개만 참일 경우를 판단하는 배타적 논리합을 다룰 수 없음
2. 앞에서 설명한 사고범위 문제를 계산할 정도로 컴퓨터 연산 수준이 높지 않음
그런데 2차 인공지는 붐 때는 퍼셉트론의 다중화 (다층 퍼셉트론)와 오차역전파법으로 2가지 문제점을
해결할 수 있게 되었습니다.
하지만 실제 연구한 결과 1980년대의 컴퓨터 연산 성능으로는 사고범위 문제를 해결하기 어렵다는 한계에 도달했습니다.이렇게 1990년대의 인공지능 연구는 암흑기를 맞이합니다.
1950년대 이후 다수의 조건 분기를 사용하는 규칙 기반 자동 판정 프로그램이 발전하기 시작했습니다.
(자동 판정 프로그램은 오늘날까지도 규칙 기반을 기본으로 발전해오고 있었습니다.)
그리고 이 프로그램은 규칙을 이용해 새로운 사실을 탐색하는 추론 엔진과 이를 기반으로 일반인도 기계가 판단한 지식 탐구의 결과를 참고할 수 있도록 하는 전문가 시스템 (expert system)이 등장했습니다. 전문가 시스템은 전문가가 실행하는 조건 판단을 프로그램화해 문제를 처리하는 시스템으로 유명한 전문가 시스템으로는 Dendral이 있습니다. 또한 전문가 시스템은 상용 시스템에 통합되어 1970년대에는 의료현장에서 사용하는 MYCIN 같은 전문가 시스템이 시범적으로 운영되기도 했습니다.
Dendral은 1965년 Stanford 대학의 에드워드 파이겐바움 (Edward Feigenbaum)등이 개발하기 시작한 인공지능 프로젝트입니다. 아직 알려지지 않은 유기화합물에 질량 분석법을 적용해 화합물의 구조를 파악해서 분석합니다. 원래 화학자가 해야할 일을 자동화한 세계 최초의 전문가 시스템으로 알려져 있습니다.
이 시기부터 1차 인공지능 붐이 시작되었습니다.
1차 인공지능 붐과 함께 인공지능이 풀어야 할 과제도 논의되기 시작했습니다. 이중 주목할만 한 것으로 1969년 존 매카시(John McCarthy)와 패트릭 헤이즈(Patrick John Hayes)가 제기한 사고범위 문제(frame problem)가 있습니다. 인공지능은 제한된 범위에서만 정보를 처리하므로 실제 발생하는 문제를 모두 처리할 수 없다는 것이 핵심입니다.
회귀는 연속적인 숫자(Continuous Number) 변수들 강의 상관관계를 파악하는 것으로, 특히 종속변수와 독립변수(Independent Variable) 사이의 연관성을 분석하는 것을 주된 목적으로 합니다. 회귀에 대한 이해를 돕기 위해 주택가격에 대한 한 가지 예를 들어 보겠습니다.
살고 있는 집을 팔고 싶은데 도대체 얼마를 받아야 하는지를 알고 싶다고 가정합니다. 그런데 팔려는 집과 동일한 크기의 주택은 사례가 없어서 주택가격을 얼마로 결정해야 하는지 애매하다면 다른 크기의 주택가격 데이터와 회귀 분석을 통해 합리적인 주택가격을 산정할 수 있습니다.
회귀분석을 시작할 때 가장 먼저 해야 할 일은 데이터의 상관정도를 직관적으로 파악하게 종속변수와 독립변수의 산점도(Scatter Plot)를 그리는 것입니다.
위의 그림에서도 알 수 있듯이 주택가격과 크기는 일정한 관계, 즉 선형적인 관계가 있음을 쉽게 파악할 수 있습니다. 해결하고 싶은 문제는 크기에 따른 주택가격인데, 산점도를 보면 크기가 클수록 가격이 높아지는 선형적인 관계가 있으므로 다음과 같은 모델(수식)을 떠올릴 수 있습니다.
Y=aX+b
Y는 주택가격으로 '종속변수'라 하고, X는 크기로 '독립변수'라고 합니다. 가정한 모델이 1차 함수이므로 'a'는 기울기, 'b'는 절편을 의미하고 있습니다. 주어진 데이터를 이용해 a 값과 b값을 찾게 된다면 주택 가격 결정을 위한 모델을 완성할 수 있고, 완성된 모델의 X에 팔려는 집의 크기를 입력하면 주택가격을 알 수 있습니다. 프로그램을 이용해 a의 값이 0.65, b의 값이 0.89일 때 앞서 보았던 산점도를 가장 잘 표현할 수 있다면 '주택가격 = 0.65 X 크기 + 0.89라는 관계가 성립한다고 할 수 있습니다.
이제 주택가격과 크기의 관계를 알았으니 크기만 알면 앞의 식에 넣어 적절한 주택가격이 얼마인지를 산정할 수 있게 됩니다.
이처럼 주어진 변수 간의 상관관계를 파악하는 것이 회귀입니다. 회귀의 문제의 예는 다음과 같습니다.
1. 과거의 온도 데이터를 이용해 내일 온도를 예측합니다.
2. 주식시세 정보를 이용해 미래의 주식가격을 예측합니다.
3. 유동인구, 날씨, 가격정보 등을 이용해 음식점의 매출을 예측합니다.
4. 구매자의 나이와 연 소득을 이용하여 특정 제품의 판매량을 예측합니다.
※ 오늘은 '회귀(Regression)'에 대하여 알아보았습니다.
이 포스트는 학부에서 제공하는 기본적인 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 인공지능, 머신러닝 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.
자동차 자율주행, 고양이 사진인식, 이미지 자막 넣기 (Image Captioning)등 최근 머신러닝이 보여주는 엄청난 성과를 보면 머신러닝이 고도의 수학적 배경과 정교한 알고리즘으로 무장해 내가 원하는 많은 문제를 해결할 것으로 믿을 수도 있습니다. 하지만 아직까지 머신러닝이라는 마법으로 해결할 수 없는 문제가 많지 않으며, 그마저도 엄청난 노력과 시간을 대가로 요구합니다.
머신러닝을 적용해 무언가에 대한 결과를 얻는 것은 생각보다 많은 시간이 필요합니다. 하나의 완성물을 얻으려면 수십 번, 수백 번 반복을 통해 조금씩 개선해가고, 때에 따라서 모델을 새롭게 만들거나 전혀 새로운 시각으로 접근해야 합니다. 더욱 머신러닝으로 특정문제를 해결하려면 그 특정 문제를 머신러닝에 적합한 형태로 바꿔야 원하는 결과를 얻을 수 있습니다. 따라서 머신러닝을 제대로 활용하려면 머신러닝이 잘 할 수 있는 것과 그렇지 않은 것을 아는 것이 중요합니다.
스팸메일을 필터링하고, 글자와 음성을 인식하는 머신러닝을 보면 다양한 일을 처리할 수 있을 것이라 생각하겠지만, 크게 3 가지 종류의 일을 처리할 수 있습니다. 변수 간의 관계를 파악하는 회귀(Regression), 데이터를 분류하는 분류(Classificaiton), 데이터를 연관있는 것끼리 묶어주는 군집화(Clustering)이 있습니다.
머신러닝은 이 3 가지를 이용해 다양한 문제를 해결합니다. 회귀와 분류는 모든 머신러닝 알고리즘의기본이 되는 중요한 개념입니다.
※ 오늘은 '머신러닝이 할 수 있는 것'에 대하여 알아보았습니다.
이 포스트는 학부에서 제공하는 기본적인 강의와 책들을 토대로 알기 쉽게 내용을 작성하였습니다. 하지만 계속 더 유익하고 논문 및 전문 서적을 읽어가며 더 추가돼야 할 내용이 있으면 인공지능, 머신러닝 포스트와 콘텐츠들을 계속 고도화하는 방식으로 진행하려고 합니다.