Share           Pin It
개인적으로 전문용어가 어색하게 한글화되는 것을 별로 좋아하지 않는데, regularization도 그런 경우에 속합니다. 적당한 한글 용어를 찾기가 어렵습니다. 인터넷에 검색해보면 '규제화'라고 번역한 경우를 봤는데 페널티로 모델 복잡도를 제어하는 방식에는 유효하지만 다른 방식에는 조금 어색한 표현입니다. '일반화'는 그냥 generalization를 번역한 것 같지만 또 한편으론 학습오류와 테스트오류를 합친 generalization error를 줄인다는 의미처럼 보여서 나름 합당한 면이 있습니다. '정규화'라고 번역한 경우도 있는데 개발자들이 많이 사용하는 regular expression을 정규식이라고 부르니 정규화도 타당한 번역이지만 데이터를 정규 분포를 따르도록 만드는 normalization, 특히 N(0, 1) 분포로 만드는 standardization을 뜻하는 것 같은 느낌이 강합니다. 적당한 한글 용어가 뭔지는 모르겠지만 이번 글에서는 regularization을 다루려고 합니다.

Occam's Razor (오캄의 면도날)라는 유명한 관용구가 있습니다. 일반인들에게는 조디 포스터가 출연한 <콘택트>라는 영화에 언급되면서 유명해진 용어입니다 (물론 일반인들은 인식하지 못하고 놓쳤을 가능성이 높겠지만...). 어떤 현상을 설명하는 두개이상의 주장이 있다면 간단한 쪽을 선택하라, 즉 복잡한 것을 잘라내라는 의미입니다. 다른 많은 분야에서 유용한 원칙이듯이 기계학습에서도 매우 중요한 원칙입니다. 예를 들어, y = ax + b정도의 몇 개의 변수와 간단한 선형식으로 표현이 가능하다면 굳이 더 많은 변수와 다항식이나 log, exp 등의 복잡한 항을 추가하지 않는 것이 바람직합니다. 그렇지만 적은 변수와 간단한 수식으로 표현이 불가능하다면 더 많은 변수와 다양한 표현력을 가진 항을 추가해서 모델의 설명도를 높여야 합니다. 하지만 충분한 설명도를 가지는 모델을 더 이상의 개선없이 복잡하게 만드는 것은 지양해야 합니다.

이런 상황에서 보통 등장하는 이슈가 'bias vs variance', 'training error vs test error', 또는 'underfitting vs overfitting' 논쟁입니다. 세가지가 모두 다른 것을 나타내지만 또 결국 하나로 귀결합니다. 모델이 얼마나 심플하면서 설명력이 있는가의 이슈입니다. 보통 편차bias가 낮은 모델은 학습오류가 낮고 overfitting됐을 가능성이 높고, 역으로 분산variance가 낮은 모델은 학습오류는 다소 높더라도 테스트오류가 낮고 덜 overfitting된 경우입니다. Underfitting인 경우에는 학습오류과 테스트오류가 비슷하겠지만 둘다 일정 수준 이상으로 높을 가능성이 많고 특별한 경우가 아니면 평균과 분산 모두 높을 가능성이 있습니다. 어쨌든 기계학습에서 편차와 분산, 학습과 테스트 오류, 피팅(학습)의 정도를 따지는 것은 너무 복잡하지 않으면서 설명도가 좋은 (낮은 평균과 분산, 작은 학습 및 테스트 오류) 모델을 찾겠다는 의지(?)입니다. 비슷한 성능을 보이는 모델이라면 구조가 간단한 것이 일반적으로 generalization error가 더 적을 가능성이 큽니다. 그리고 그런 모델을 찾는 것이 오캄의 면도날이자 기계학습자들의 목표입니다.

이렇게 모델의 설명도를 유지하면서 모델의 복잡도를 줄이는 것이 regularization이라고 보면 됩니다. 아래에는 일반적인 복잡도를 다스리는 regularization 방식에 대해서 간단히 설명하려 합니다.

1. Early stopping
모델이 복잡해지기 전에 막겠다는 것입니다. 즉, 모델을 만드는 초기 단계부터 계속 검증하면서 모델이 급격하게 복잡해지는 것을 막는 것입니다. 기계학습에서 보통 전체 데이터를 학습데이터 training data와 테스트데이터 test data로 나눠서, 학습데이터로 모델을 학습시키고 테스트 데이터로 학습된 모델을 평가합니다. 하지만 early stopping에서는 전체 데이터를 학습데이터, 검증데이터 validation data, 테스트데이터로 나눕니다. 학습데이터로 모델을 학습시킨 후에 검증데이터로 모델이 너무 복잡한지를 계속 체크하면서 검증데이터의 분산을 낮게 유지시킵니다. 그렇게 학습 및 검증된 모델을 최종적으로 테스트데이터로 모델의 예측력을 평가합니다. 하지만 이 방법의 문제라면 학습, 검증, 평가 데이터로 3등분(보통 7:2:1정도)해야 하기 때문에 데이터량이 조금더 많아야 합니다. 데이터량이 많아서 3등분하더라도 어떻게 나뉘느냐에 따라서 최종 모델의 예측력에 편차가 생길 수 있습니다. 어쨌든 모델을 만드는 초기부터 다양한 반례를 들어가면서 모델이 한쪽으로 치우치지 않도록 만드는 방법입니다.

2. Noisy input
Early stopping에서는 데이터를 3등분할만큼 충분해야 한다는 조건이 있습니다. 하지만 정답이 있는 데이터는 늘 부족합니다. 기계학습 발전 방향의 한축은 부족한 데이터를 극복하는 거였습니다. Bootstrap으로 랜덤 샘플링으로 cross-validation하는 것도 방법이지만, 가용한 데이터에 일부러 노이즈를 줘서 다양한 데이터로 뻥튀기하는 방법도 있습니다. 정답(Y)가 있는 데이터(X)에 약간의 노이즈를 붙여서 X'를 만들었을 때, 노이즈가 크지 않다면 X'의 답은 여전히 Y입니다. 이미지 데이터가 인풋이라면 이미지의 전체 중에서 일부만 crop한다거나 상하좌우로 뒤틀리게 만든다거나 역전 및 회전시킬 수도 있고, 이미지 전체에 랜덤 노이지를 추가할 수 있습니다. 이미지 데이터가 조금 손상됐지만 여전히 그 이미지가 가리키는 객체에는 변함이 없습니다. 이렇게 다양하고 풍성한 noisy 학습데이터(인풋스페이스)로 학습을 시키면 더 전체 데이터로 학습시키는 것과 비슷한 효과를 주게 됩니다. 신생아를 해롭지 않은 세균에 노출시켜서 면역력을 키우는 것과 같은 원리입니다. 하지만 오답 또는 오분류되는 샘플이 뻥튀기됐다면...
 
3. drop-out
복잡한 모델에서 일부 파라메터를 의도적으로 제거하는 방법도 있습니다. 변수가 100개인데, 학습할 때마다 일부 변수의 학습데이터에 null값을 준다거나 일부 모델 파라메터를 0으로 강제하는 방식입니다. 즉, 특정 변수나 일부 파라메터가 없더라도 모델 전체의 설명력은 떨어지지 않도록 학습시키는 것입니다. 인공망에서 일부 은닉층의 몇몇 노드를 불용화해서 다른 남은 노드들만으로도 괜찮은 결과를 만들어내도록 의도적으로 모델을 불구로 만드는 것입니다. (좋은 비유는 아니지만) 100명이 해야할 일을 일부러 평소에 가끔 90명에게 주고 훈련시켜서 갑작스레 몇 명의 결원이 발생해도 시스템은 정상적으로 작동하게 만드는 것과 비슷합니다. 단점이라면 여러 drop-out 조건에서 모델을 학습시켜야 하므로 학습에 소요되는 회수/시간이 늘어난다는 점입니다. 적당히 작은 모델이면 큰 문제가 아니지만 수백 수천대의 컴퓨터를 이용해서 며칠동안 학습시켜야하는 크고 복잡한 모델이라면 모델링 비용이 만만치가 않을 것입니다.

4. 복잡도 패널티
가장 많이 사용하는 방법으로 복잡도에 페널티를 주는 것입니다. 즉, 모델이 복잡해질수록 페널티가 커져서 목적식 loss function이 다시 커지도록 만드는 것입니다. 학습 효과가 페널티 때문에 다시 커지지 않는 범위까지 학습을 시키는 것입니다. 기계학습을 공부하면 L1 regularization과 L2 regularization이라는 용어가 종종 등장하는데, 이것이 모델 복잡도에 대한 페널티를 부여하는 것입니다. 회귀분석 regression에서 L1은 계수의 절대값의 합을 페널티로 제공하는 Lasso regression이고 L2는 계수의 제곱의 합을 페널티로 부여하는 ridge regression이 있습니다. 이런 shrinkage 방식으로 모델을 단순하게 만듭니다. 새로운 변수나 파라메터가 추가될수록 페널티가 커지기 때문에 무제한 늘리지 않는 선에서 모델 복잡도를 결정하게 됩니다. 참고로, 보통의 경우 미분가능 등의 이유로 제곱항을 많이 사용하지만, regression에서 절대값을 사용한 lasso는 때론 feature selection이라는 부가 효과도 있습니다. 

5. Pruning 및 feature selection
이걸 regularization이라고 부르는 것이 맞을지는 살짝 고민되지만, 불필요한 복잡한 가지나 변수 등을 쳐냄으로써 모델의 복잡도를 관리하는 것이니 포함합니다. Pruning은 보통 decision tree에서 많이 사용하는 방식입니다. 즉, decision tree를 100% 분류하도록 leaf node까지 모두 만들면 tree가 매우 커고 복잡해집니다. 그래서 오분류가 별로 크지 않는 선에서 중간 node로 합쳐서 아래쪽의 가지들을 쳐내는 방식입니다. 다른 모델에서도 feature selection 방식을 통해서 불필요한 또는 덜 중요한 변수들을 제거해서 모델을 만듦으로써 모델의 설명도를 어느정도 유지하면서 심플하게 만드는 것입니다.

6. Ensemble 
이건 regularization 방식은 아니지만, 복잡도를 다루는 한 방식이기 때문에 함께 적습니다. 위에서는 모두 복잡도를 줄이는 방식을 설명했는데, 앙상블은 오히려 복잡도를 더 증가시키는 방식입니다. 복잡도를 증가시켜서 복잡도를 낮춘다는 좀 아이러니한 방식입니다. 앙상블은 여러 모델을 만들어 합쳐서 하나의 큰 모델을 만드는 방식입니다. 배깅 bagging이나 부스팅 boosting도 큰 틀에서 앙상블이라 볼 수 있습니다. 앙상블은 개별 모델은 복잡해서 특수한 케이스에 대해서 틀릴 수도 있지만 여러/많은 모델들이 합의해서 결론을 짓기 때문에 틀릴 가능성을 낮추는 것입니다. 개인은 틀려도 집단은 틀리지 않는 일종의 집단지성입니다. 실제 decision tree를 배깅한 random forrest가 classification에서 state-of-the-art가 된 것은 우연이 아닙니다. 그리고 요즘 가장 핫한 deep learning도 매우 많은 선형/비선형 regression을 스태킹 및 앙상블한 것입니다. 모델의 복잡도를 잡는다는 것은 예상치 못한 실패를 막겠다는 것인데, 일부가 실패하더라도 더 많은 나머지가 실패하지 않으리라는 믿음이 앙상블을 만듭니다. 개별 모델의 복잡도는 잡는 것이 아니라 많은 모델을 이용함으로써 개별 모델의 복잡도를 무시하는 것입니다. 하지만, 앙상블의 개별 모델 및 전체 모델도 위에서 설명한 다양한 방식으로 regularization합니다. Deep learning에서도 모델의 강건성 robustness를 높이기 위해서 drop-out하면서 학습시키거나 의도적으로 노이즈를 준 adversarial sample을 이용해서 학습시키는 등의 regularization에 대한 여러 연구가 있습니다.

또 다른 방법들이 더 있겠죠...

Regularization이 모델을 깔금하게 만들면서 일반 오류 (학습오류 + 테스트오류)를 줄이는 좋은 방법입니다. 하지만 이것도 data-poor 시대의 유물이기도 합니다. 최적화 문제에서 가능한 모든 공간을 빠른 시간 내에 탐색할 수 있다면 -- 현실적으로 불가능하지만 -- 복잡한 최적화 알고리즘이 필요없습니다. 학습데이터가 표본 샘플이 아니라 전체 population이라면 오버피팅되는 것에 문제가 없습니다. 어차피 테스트할 샘플도 이미 학습데이터에 포함됐을 것입니다. 앞서 일부러 노이즈 데이터를 만들어내서 모델의 강건성을 높인다고 했듯이 전체 스페이스를 커버할 수 있는 데이터가 있다면 regularization이 필요없습니다. 데이터 디멘즌과 사이즈가 다르면 경험적 직관과 달라질 수 있습니다. 그럼에도 generalization error를 최소화하도록 모델을 regularize하는 것이 여전히 필요합니다.

Regularization를 뜻하는 가장 좋은 한글 용어가 뭔지는 여전히 모르겠으나 현재 문제가 변수 한두개로 해결되는 선형 문제가 아니라면 이 부분에 대해서 미리 공부해두는 것이 좋습니다. 

===
B: https://brunch.co.kr/@jejugrapher
F: https://www.facebook.com/unexperienced

댓글을 달아 주세요

Share           Pin It
데이터 마이닝이나 머신러닝, 인공지능 AI 등에 관한 심도깊은 얘기는 다루지 않는다. 내가 그런 심도깊은 일을 하고 있지 않기 때문이기도 하거니와 그런 내용은 학교에서 정식으로 배우거나 많은 연구 논문을 읽으면서 터득해야할 영역이다. 개인적인 요청이 있다면 그걸 위해서 가이드해줄 수는 있지만 이 티스토리에서 그걸 해결해줄 수는 없다. 하지만 2017년에는 공부 좀 하기로 마음을 먹었으니 필요하면 특별한 주제에 맞춰서 또는 머신러닝 알고리즘의 전반적인 것에 대해서 종종 다루려 한다. 계획이 그렇다는 것이지 몇 번을 다룰지는...

최근이라 적고 작년 2016년에 가장 큰 이슈가 됐던 강화학습과 GAN (Generative Adversarial Networks)에 대한 소개 또는 개념적 이해를 돕기 위해서 글을 적는다. 남들이 이해하도록 돕는다기보다는 스스로 정리하고 넘어가고 싶었다.

알파고 AlphaGo가 이세돌 9단을 4대1로 꺾은 이후로 가장 떠오른 단어 또는 개념은 강화학습 Reinforcement learning이다. 물론 알파고가 딥러닝 Deep learning에 기반한 인공지능 AI Artificial Intelligence지만, 딥러닝이나 AI라는 단어는 그전부터 언론에도 많이 등장했었다. 단지 알파고 충격 전에는 이런 용어에 대한 소비 니즈가 없었기 때문에 일반인들은 무시했을 뿐이다. 다른 것보다 강화학습이 더욱더 부각됐다는 의미다.

그런데 강화학습이라는 게 전혀 새로운 개념이 아니다. 사실 기계학습 Machine learning이라 부르는 대부분의 알고리즘 (또는 학습법)은 강화학습에 기반을 두고 있다. 강화학습은 어떤 액션에 대한 반응에 따라서 그 액션의 정당성을 얻느냐 못 얻느냐가 판별하고, 정당성을 얻은 액션은 향후에도 계속 하도록 장려받도록 훈련받는 것이다. 애완견에서 '앉어'라고 말한 후에 개가 실제로 앉으면 '간식'을 준다. 처음에 개는 앉어 명령어와 간식 사이의 연관성을 모른다. '앉어' 명령어에 우연히 앉아서 간식을 얻었다면, 그리고 반복적으로 '앉어' 후에 간식을 계속 받아먹는다면 개는 '앉어'와 '간식' 사이의 인과성을 발견한다. '앉어' 명령어에 앉으면 간식을 얻는다를 학습한 것이다. '앉어'는 액션이고 '간식'은 리워드다. 역으로 어떤 액션을 피하게 하는 페널티도 비슷한 메커니즘이다.

기계학습에서는 이런 과정을 데이터로 한다. 특히 지도학습 Supervised learning이 그렇다. Y = f(X)에서 f() 함수 (또는 모델)을 유추할 때, 주어진 X에 대해서 정답 Y를 뱉어내면 f() 함수를 제대로 유추한 것이고 그렇지 못하면 해당 유추를 무시하면 된다. 정답 Y가 있는 많은 학습데이터 training data을 가지고 적절한 f() 함수의 형태나 파라메터를 얻어내는 과정이 보상과 벌로 애완견의 액션을 인지시키는 훈련 과정과 같고 이것이 강화학습이다. 기계학습이란 것이 학습데이터를 잘 설명하는 모델을 만드는 (또는 기계를 학습하는) 것이고, 즉 학습된 기계는 학습데이터에 따라 움직인다. 그래서 학습데이터로 기계를 학습시킨다는 모든 알고리즘이 강화학습이라고 볼 수가 있다. 특히 딥러닝의 기초가 되는 인공신경망 Artificial Neural Networks의 학습과정을 강화학습이라고 말하지만, 다른 기계학습을 강화학습이 아니라고 말하는 것은 좀 이상하다.
** 강화학습에 관해 더 자세한 것은 다음의 텍스트북을 참고하기 바란다. https://webdocs.cs.ualberta.ca/~sutton/book/bookdraft2016sep.pdf

강화학습이라는 것이 기계학습에서 일반적인 것이라면 왜 알파고 이후에 강화학습이 주목을 받은 것일까? 단순히 기계를 학습하는 방법보다는 기계를 학습시키는 정답세트를 얻는 전략적인 과정에서 비롯했다고 본다. 그래서 그냥 강화학습이라고 말하기보다는 자기강화 Self-reinforcement라는 용어를 쓰는 게 맞지 않나?라는 생각을 한다. 기계학습이 결정적으로 실패할 때는 적당히 많은 정답세트가 없을 때다. 아무리 이론적으로 뛰어난 알고리즘이더라도 그걸 학습시킬 데이터가 없다면 기계학습은 실패한다. 기계학습의 승패는 정답세트를 얻느냐의 여부에 달려있다. 알파고가 수십년동안 수집한 대국기보를 가지고 학습했다지만, 그것만으로 인간을 이길 전략을 완벽히 마스터하는 것은 사실상 불가능하다. 현재까지 학습한 것을 바탕으로 사람과 직접 대국하면서 전략을 시험해보고 전략을 수정할 수도 있겠지만, 그럴려면 시간도 많이 걸리고 탑랭크 바둑기사들이 불완전한 기계를 상대해줄 가능성도 낮다. 이 부분에서 딥마인드 DeepMind는 자기강화라는 훌륭한 전략을 사용했다.

알파고 이전에 딥마인드는 오래된 아타리 Atari라는 게임을 학습시키면서 (자기)강화전략을 선택했다. 랜덤이든 어떤 규칙에 따른 것이든 아타리게임의 커서cursor를 이리저리 수없이 많이 옮기면서 점수를 얻는 법을 터득해 나갔다. 즉, 커서를 적당히 옮겨서 떨어지는 볼을 되받아쳤더니 그 볼이 위로 올라가서 벽돌을 부수면서 점수를 얻고, 커서가 볼을 되받아치지 못했을 때는 게임이 끝나버린다. 이런 무수한 임의의 움직임을 통해서 볼을 위로 보내면 점수를 얻고 떨어뜨리면 점수를 얻지 못한다는 것을 학습하고, 커서를 유효하게 움직이는 방법을 터득한 것이다. 수많은 시행착오 끝에 사람보다 더 뛰어난 점수를 얻게 된 것이다. 게임의 최종 점수, 즉 목적 함수가 있었기에 가능한 방법이다. 같은 전략을 바둑에도 적용시켰다. 단 바둑에서는 고득점이 아니라 고승률을 얻도록 목적함수를 설정했다.

기본적으로 사람들의 기보를 통해서 합습한 알파고와 그것의 클론을 만들어서 둘 사이에 대국을 펼친다. 완벽한 계산에 따라서 움직일 수 없으니 적당히 임의의 움직임도 가지는 전략을 갖는다. 그 둘의 대국에서 승리한 쪽의 전략은 받아들이고 패한 전략은 약화시킨다. 그렇게 한번더 승리한 전략을 가진 새로운 알파고가 만들어진다. 새로운 알파고는 이전 버전과 다시 대국을 펼친다. 새 버전의 알파고도 여러 전략으로 자신과 싸워서 이기는 전략을 취하고 지는 전략은 버린다. 이런 과정을 수만번, 수십만번 반복하면서 이기는 또는 빈틈없는 전략을 찾아가는 과정이 (자기)강화학습과정이다. 사람과 직접 대국하지 않고 (정답세트 데이터가 없이) 바둑에서 이기는 전략을 찾아간 것이다. 알파고에서 자기강화의 개념을 빼버리고 단순히 강화학습이라고 설명하면 안된다는 걸 말하고 싶었다.
** 알파고의 강화학습은 알파고 논문을 보면... http://airesearch.com/wp-content/uploads/2016/01/deepmind-mastering-go.pdf

여담. (일반적인) 강화학습에서 초기값와 임의성은 전역최적화 Global optimization 때문에 매우 중요하다.

2016년도 초반에는 자기강화학습이 유명해졌다면 후반에는 GAN이라는 게 주목받았다. 2016년 12월에 열린 NIPS 학회에서 GAN이 튜토리얼로 소개됐는데, 앞서 설명한 알파고의 자기강화전략과는 또 다른 재미있는 전략으로 정답세트 없이 (또는 적은 정답세트로) 기계를 효과적으로 학습시키는 전략을 소개했다. GAN은 Generative Adversarial Networks의 약어인데, 각각이 중요한 의미를 가진다. 먼저 Network는 그냥 신경망이나 아니면 일반 모델정도로 이해해도 충분한 것 같다.

기계학습에서 Generative라는 용어가 등장하면 Discriminative라는 용어도 함께 등장한다. 이 두 용어의 개념을 여러 번 찾아보고 이해하려 했지만 논문을 읽을 때는 '아 이런 개념이었구나'라고 하다가 또 금새 '두개의 차이가 뭐지?'라고 하곤 했다. 모든 기계학습은 generative거나 discriminative다. 그냥 사전을 찾아보면 '생성적인'과 '식별하는'정도의 뜻을 가졌는데, 이것만으로 무슨 개념인지 이해하기 어렵다. 앞서 설명했듯이 기계학습은 주어진 데이터를 바탕으로 학습한다. Discriminative는 주어진 그 데이터의 현상만을 가지고 판별하는 것이라면, generative는 그 데이터 이면에 현재 이런 현상을 만든 이유 (또는 모델, 함수)가 있다고 가정하고 그 이유를 찾는 것이다. 설명이 좀 거시기하다. 예를 들어, 주어진 데이터만으로 'X > 5이면 Y = 1이고 X <= 5이면 Y = 0이다' 식으로 규칙 (바운더리)를 찾아내면 discriminative 방식이다. 하지만 generative는 X가 어떤 함수 -- 보통은 분포 distribution -- g(z)에 따라서 생성됐다고 가정하고 g(z)의 모형과 파라메터를 찾는 것이다. 클러스터링에서 가장 기본이 되는 k-means 알고리즘은 discriminative이고, 보통 gaussian 분포로 가정해서 EM expectation maximization 알고리즘으로 그 분포의 파라메터를 찾아가는 알고리즘은 generative다.
** GAN의 generative의 의미가 일반적으로 기계학습에서 사용하는 generative인지 여부는 좀 헷갈린다. (좀더 공부한 후에...)

마지막으로 adversarial이 GAN의 핵심이다. Adversarial은 반대의 또는 대립관계가 있는 등으로 해석할 수 있다. 알파고의 강화학습은 똑같은 목적을 가진 알파고와 알파고 클론 간의 경쟁을 통해서 더 나은 전략을 찾아가는 과정인데, GAN은 서로 다른 목적을 가진 기계끼리 경쟁하면서 더 나은 전략을 찾아가는 과정이다. 대표적으로 위조범G과 위작감별사D다. 예를 들어, 피카소의 그림은 매우 비싸게 팔린다. 만약 명화위조범이 피카소의 화풍으로 왁벽히 똑같은 그림을 그려서 그걸 피카소가 직접 그린 그림이라고 판매를 한다면 어떻게 될까? 반대편에서는 구입하기 전에 그 그림이 진품인지 위작이지를 알고 싶어할 것이다. 그래서 GAN은 위작을 만드는 generator G와 위작을 판별하는 discriminator D를 별도로 학습시켜서, G는 D를 속이도록 D는 G의 속임수를 찾아내도록 만드는 것이다. 자기강하학습에서는 자기 자신과 싸우면서 더 좋은 전략을 찾아가지만, GAN에서는 자신과 경쟁 관계가 있는 상대방과 경쟁하면서 전략을 향상시키는 것이다. 게임이론에서 말하는 내쉬평형을 찾는 일이라서 어렵다고 한다. 그리고 아직은 초기라서 연구하고 해결해야할 것들이 많고, 새로운 아이디어가 쏟아져나오고 있다고 한다.
** GAN에 대한 더 자세한 설명은 NIPS 2016 Tutorial 논문 참조: https://arxiv.org/abs/1701.00160

기계학습의 승패는 양질의 정답세트를 얻느냐 못 얻느냐에 달려있다. 하지만 양질의 정답세트를 얻는 것이 때로는 불가능하고 가능하더라도 리소스가 많이 들어간다. 그래서 제한된 학습데이터로 더 좋은 알고리즘을 만드는 것이 많은 연구자들의 목표였다. 아니면 비지도학습 unsupervised learning처럼 애초에 정답세트가 없이 제한된 범위 내에서 문제를 해결하려고 노력중이다. 중간에 semi-supervised learning이 존재해서 적은 양의 정답세트로 나름 괜찮게 작동하도록 학습시키는 방법도 있다. 하지만 결국 더 많은 정답세트를 이길 수는 없다. 그런 측면에서 알파고가 채택한 자기 자신과 싸우면서 더 좋은 전략을 찾아가는 방식이나 GAN이 채택한 경쟁 관계의 상반된 모델을 만들어서 전략을 수정해가는 방식이 참 흥미롭다.

강화학습이나 GAN까지는 아니더라도 부족한 정답세트를 극복하기 위한 다른 여러 방법들이 있다. Semi-supervised 중에 하나인 active learning (다른 의미로 사용되는 경우도 있음)도 일종의 앙상블 방법인데, 두개의 다른 learner가 서로 다른 결과를 예측하면 어느 예측이 맞는지 사람에게 확인받아서 모호한 케이스에 대해서 정답세트를 추가하는 방식이다. 위에서 설명한 것보다는 좀더 아날로그적인 방식이지만 액티브러닝을 소개받았을 때도 참 재미있다고 생각했었다. 일반적으로 두개의 classifier가 같은 답을 내놓으면 그게 정답이겠거니라고 생각하겠지만, 역으로 둘다 틀린 답변을 내놓았을 가능성도 있다. 그래서 둘이 다른 판정을 내린 사안에 대해서만 다시 슈퍼바이저 (인간)이 투입돼서 정답 여부를 가늠하는 겁니다. (처음 적을 때 이 문단은 없었지만, 함께 언급해도 괜찮을 것 같아서 추가함)

당장 내가 하고 있는 업무에서 자기강화방식이나 GAN방식을 사용할 수 있을지? 또는 어떻게 사용할 수 있을지는 아직 잘 모르겠다. 내가 앞으로 머신러닝 분야에서 더 깊은 연구를 하거나 새로운 알고리즘을 개발할 가능성은 낮지만, 다른 차원의 문제에서 이런 비슷한 전략으로 문제를 해결하는 실마리를 얻을 수 있지 않을까?라는 생각에서 좀 길게 글을 적었다.

===
B: https://brunch.co.kr/@jejugrapher
F: https://www.facebook.com/unexperienced


댓글을 달아 주세요

  1. Favicon of http://jyyang.tistory.com BlogIcon acon 2017.04.24 14:12 신고 Address Modify/Delete Reply

    흔히 기계학습에서는 Supervised Learning, Unsupervised Learning, Reinforcement Learning으로 나누는걸로 알고 있는데요, RL은 엄밀히 말하면 지도학습이나 비지도학습과는 다른 분류로 나눠야 하는 것 아닌가요?

    • Favicon of http://bahnsville.tistory.com BlogIcon Bahniesta 2017.04.24 15:20 신고 Address Modify/Delete

      일반적으로 RL을 별도의 분류로 보는 건 맞지만, 그냥 RL을 리워드(함수)도 결국 슈퍼바이즈드의 라벨과 큰 차이가 없을 수도 있습니다. 관점의 차입니다. 특히 말하고 싶었던 것은 강화 프로세스가 요즘 언급되는 RL만을 의미하는 것은 아니라는 것입니다.

Share           Pin It
인간과 기계를 구분하는 것은 지능이 아니라 마음이다.

알파고와 이세돌 9단의 대국은 대한민국을 다른 — 좋은 의미든 나쁜 의미든 — 단계로 이끌고 있다. 내심 이 9단의 (완벽한) 승리를 바랬건만, 그렇지 못했던 것이 오히려 우리에게 큰 자극제가 됐다. 정부 주도의 이상한 움직임을 예상 못했던 것도 아니지만, 어쨌든 이번 대국을 통해서 우리는 더 전진하리라 믿는다. 이미 시작된 혁명을 가까이서 목격했고 여유는 없어도 늦지 않게 준비해나갈 수 있다.

세계의 곳곳에서 이미 시작된 혁명이지만 이번 대국을 통해서 이제서야 대한민국이 각성했다고 본다. 지금 세계적으로 일으나는 움직임 그리고 앞으로 대한민국을 뒤덮을 이 거대한 움직임을 지능혁명이라 명명할 것이다. 지능혁명이란 지능의 폭발적 증가를 뜻한다. 농업 기술의 발전으로 농업 생산물의 폭발적 증가를 일으킨 것이 농업혁명 (또는 제1의 물결)이었고, 증기기관의 발명과 함께 생산성의 폭발이 산업혁명 (제2의 물결)이었고, 그리고 컴퓨터의 발전과 함께 이뤄진 정보 통신의 발달 그리고 소프트웨어와 서비스 중심의 개편이 정보혁명 (제3의 물결)이었다. 그렇다면 인공지능의 발달로 인한 새로운 사회로의 전환을 지능혁명이라 명명하는 것이 틀린 표현은 아니다.

그런데 궁금한 점이 하나 있다. 분명 현재 그리고 향후 몇 년 동안 인공지능의 급진적인 발전을 목도할 것인데, 이 지능혁명은 인류에게 어느 수준의 혁명으로 불릴 것인가다. 지능혁명은 정보혁명 이후의 메이저 변혁 (제4의 물결)인가? 아니면 그저 정보혁명의 마이너 버전업 (제3.x의 물결)이 될 것인가?가 궁금하다. 스마트폰의 등장으로 촉발된 모바일 중심으로의 변화는 분명 정보혁명의 마이너 버전이었다. 그래서 나는 모바일혁명을 제3.1의 물결정도로 부른다. 그러면 지능은 단순히 정보혁명의 연장선상에 있는 제3.2의 물결일까? 아니면 정보혁명 다음의 거대한 물결, 즉 제4의 물결일까?

해커주의와 메이커스 운동에 따라서 정보혁명 이후의 세상을 다시 자급 사회로의 회귀를 예측했었는데, 그런 흐름의 겻갈레로 지능의 발전을 목도하고 있다. 어쩌면 지능혁명이 자급사회로의 회귀를 부추길 가능성이 있다. 지능의 폭발로 인한 로봇의 인간 대체 현상이 가속화됐을 때 잉여 노동력은 무엇을 해야할까? 혁명의 과실을 모두 고르게 나눈다면 큰 문제가 없을지 모르겠으나, 항상 그렇듯이 (소수 인간의 욕심으로) 인공지능과 로봇의 혜택을 모두가 고르게 누리지는 못할 것이다. 연명하기 위해서 다시 밭을 갈고 낚시/수렵을 하게 되는 인류의 모습을 상상하게 된다. 단순히 예술활동이 아닌 진짜 생존을 위해서… (고르게 혜택을 누리는 경우에도 자연주의가 도래할 가능성이 높다고 본다.) 어차피 그 때가 되면 인간이 산업에 영향을 줄 수 있는 부분은 거의 없다.

놀라운 컴퓨팅 파워에 인간의 창의성과 직관이 도전받고 있다. 바둑을 통해서 전략 게임이 직관이 아니라 계산에 압도되는 것을 이미 확인했다. 직관이 우리를 미지의 세계로 이끌었는데, 이젠 모든 상황에 대한 계산이 우리를 뻔한 미래로 이끌고 있다. 계산이 직관을 이기는 세상이 우리 곁으로 왔다. 지난 모든 혁명은 분명 인류에게 큰 기회였고 도움이었는데, 지금의 변화는 우리에게 어떤 새로운 기회를 가져다 줄 것인가? 어쩌면 일말의 기대마저 무너뜨리는 것은 아닐까?라는 두려움이 앞선다.

지능혁명 — 이게 맞다면 — 은 앞으로 어떻게 진행될까? 딥블루나 왓슨이 그랬듯이 알파고를 지능형 머신이라고 부르는 것이 맞을까?라는 의문이 여전히 있다. 알파고가 여전히 생각하는 기계 (thinking machine)이 아니라 계산하고 평가하는 기계이기 때문이다. 그런데 이젠 연산이 생각을 앞선 세대가 됐다. 딥블루와 왓슨으로 미국인들이 자각했듯이 알파고로 이젠 한국인들이 자각했다. 물론 자각했다고 제대로 된 미래를 계획할 수 있다는 얘기는 아니다. 구글/알파벳이 싼값에 알파고를 내세워서 마케팅을 잘했다는 비아양도 있지만, 알파고가 대한민국에서 많은 대한국민들이 보는 앞에서 이9단을 꺾은 것은 우리에겐 분명 행운이었다. 다른 나라 땅에서 다른 나라 사람을 이겼다면 지금처럼의 충격과 각성이 없었을 것이다. 그저 4년마다 돌아오는 월드컵 이벤트보다 우리에게 영향을 주지 않았을 것이다.

하지만 알파고는 우리 모두에게 두려움을 줬고 어떤 이들에게는 희망을 줬다. 인공지능이나 머신러닝 쪽으로 공부해보고/시켜보고 싶어한다는 얘기가 SNS에 전파되는 것을 여러 번 봤다. 이전 글에서 밝혔듯이 우리는 이젠 알파고키즈를 기다리고 있다. 그들이 이룩할 혁명적 발전, 즉 지능혁명을 기대한다. 3.2가 될지 4.0이 될지 여전히 알 수는 없지만 4.0이 될 가능성이 더 높아보인다. 우리는 근본적으로 변할 것이다. 원하든 원치 않든… 바라건대 수동적으로 이끌려갈 것이 아니라 능동적으로 이끌어갈 수 있기를… 

혁명은 이미 시작됐고, 우린 지금 그 한 가운데 놓여있다. 외롭지 않기를...

===
B: https://brunch.co.kr/@jejugrapher
F: https://www.facebook.com/unexperienced


댓글을 달아 주세요

Share           Pin It
다음 검색에서 '데이터마이너'라는 검색어가 갑자기 많이 들어온 날이 있었다. 강풀 작가의 '마녀'라는 작품 속에서 PC 캡쳐 화면과 함께 주인공이 데이터마이너가 됐다라는 짧은 문구가 등장했던 때다. 해당 캡쳐 화면에는 SAS라는 데이터분석툴 아이콘도 있었고 지금은 없어진 마이피플 아이콘도 등장했다 (유료화로 화면캡쳐는 생략. 9화였음.). 강풀 작가님이 웹툰을 그리기 위해서 예전 같은 팀의 팀원에게 자문을 얻었는데, 그 분의 (의도된) PC화면으로 유추된다. 당시에 내가 서울에서 근무했다면 미팅에 함께 참석했지 않을까?라는 생각도 해본다.

빅데이터, 데이터 사이언스, 인공 지능, 딥러닝, 머신러닝 (기계학습) 등의 많은 용어/개념들이 버즈buzz되고 있지만 관련 분야의 사람들이 아니라면 여전히 데이터마이닝 또는 데이터마이너라는 용어가 생소한 것 같다. 그래서 데이터마이닝/너에 대한 지극히 개인의 의견을 적으려 한다.

데이터마이너는 무엇을 하는 사람인가? 데이터를 보는 사람이다. 왜 데이터를 보는가? 데이터에 내재한 패턴 pattern을 찾거나 규칙 rule을 만들기 위해서다. 그런 패턴이나 규칙은 왜 찾고 만드는가? 문제를 해결하기 위해서다. 그렇다. 내가 생각하는 데이터마이닝은 여러 문제와 관련된 데이터를 관찰함으로써 규칙을 찾고 적용해서 문제를 해결하는 것이다. 문제를 해결하는 접근법은 다양하겠지만 데이터에 근거를 둔다는 점에서 다른 것들과 차별점이다. 물론 데이터가 데이터마이너만의 것은 아니다.

문제를 해결하기 위해서 데이터를 본다라고 표현했지만 때로는 문제를 찾아내기 위해서 데이터를 보는 경우도 종종 있다. 즉, 주어진 문제를 해결하기 위해서 근거 데이터를 수집하고 추론하는 것도 마이너의 일이지만, 이미 가진 데이터에서 시스템에 내재된 문제점을 찾아내는 것도 마이너의 역할이다. 그래서 단순히 수학적, 공학적 기술/기법 뿐만이 아니라, 다양한 경험과 (잡) 지식이 마이너에게 요구된다. 마이너가 활용할 수 있는 데이터는 단순히 시스템 구동에 필요한 데이터 (보통 DB나 텍스트 형태)나 시스템이 찍어내는 로그에만 한정된 것이 아니다. 

머신러닝 (또는 인공지능)은 데이터마이닝과 밀접한 관계가 있지만 같다라고 말하기는 어렵다. 밴다이어그램을 그린다면 상당한 공통 영역이 존재하지만 또 다른 영역이 분명 있다. 머신러닝은 특정 미션을 완수하기 위해서 근거 데이터로 학습시켜서 모사하는 것이 목적이다. 주어진 데이터 이상의 추론이 가능하다면 인공지능이라고 불러도 좋다. (Exploitation vs Exploration) 머신러닝/인공지능은 '기계를 사람처럼'이 모토이자 목적이다. 데이터마이닝은 많은 머신러닝 기술을 활용하지만 엄격함을 요구하지는 않는다. 인간 친화적이라고 표현하면 좋을 듯하다. 머신러닝에 일부러 모호함을 추가하는 연구도 진행되고 있지만...

데이터마이닝을 잘 하기 위해서 다양한 수학, 통계 지식이 필요하고, 고도의 알고리즘들도 만들어졌다. 그러나 그런 지식이나 알고리즘은 데이터를 잘 보기 위한 보조 기능을 하는 것일 뿐이다. 많은 지식과 알고리즘을 알고 있다고 뛰어난 데이터마이너가 되지는 않는다. 데이터를 잘 보는 능력과 그걸 돕는 기술을 많이 아는 것은 분명 같지 않다. 원시적이지만 -- 한계도 분명한 -- 텍스트나 엑셀의 테이블에 펼쳐진 (적은/제한된 양의) 수치나 데이터를 눈으로 확인해서 패턴/규칙을 발견할 수 있다면 HDFS에 쌓인 수 테라바이트의 데이터를 고도의 알고리즘으로 확인하는 것보다 더 낫다. 좀 극단적으로 표현했지만, 데이터마이닝은 기계가 이해하는 규칙이 아나라 사람이 이해하고 설명가능한 규칙을 찾는 것에 더 가깝다고 생각한다. (엄격함을 덜 요구한다는 의미도 이의 연장선에서 말한 것이다.)

R이나 SAS 등의 통계분석툴이나 파이썬이나 자바같은 프로그래밍 언어, 또는 Mahout이나 Spark MLlib 같은 (오픈소스) 라이브러리에 능한 것도 데이터마이너의 필수 덕목이 됐지만, 데이터를 보는 눈이 없다면 무용지물이다. 파리를 잡기 위해서 소잡는 칼을 휘두르는 모양새다. 수학이나 알고리즘 지식, 그리고 프로그래밍 스킬보다 도메인 지식 또는 비즈니스 로직을 개인적으로 더 중요하게 생각하는 이유도 데이터가 만들어지고 활용되는 곳을 잘 알아야지 데이터를 더 잘 볼 수 있기 때문이다. 물론, 때론 도메인 지식 (또는 지식 편향)이 데이터를 객관적으로 보는 것에 장애가 된다. 수학/통계/알고리즘과 프로그래밍 스킬, 그리고 도메인 지식은 데이터마이너가 되기 위한 일종의 트리니티라서 고른 역량이 필요하지만, 그렇지 않다면 각각의 능력을 가진 사람들을 모은 그런 팀을 구성하는 것이 필요하다. (그리고 모든 개발자들이 그렇듯이 영어를 읽고 이해하는 능력인 필수다. 유학 또는 취업으로 외국에 가지 않는 이상 영어를 듣고 말하고 쓸 기회는 별로 없지만 영어 문서를 읽어야할 일은 흔하다.)

수학이나 프로그래밍보다 도메인 지식이 더 중요하다고 얘기하는 가장 큰 이유는 우리가 일상에서 만나는 마이닝 문제 또는 해결책이 그렇게 복잡하지 않다는 점이다. 아주 간단한 연산으로 해결되는 경우가 많다. 물론 음성 인식이나 이미지 처리, 기계 번역과 같이 복잡한 태스크를 해결하기 위해서 사용되는 다양한 딥러닝 및 관련 기술들을 온전히 이해하고 구현하기 위해서는 수학과 프로그래밍 스킬이 필요하다. (딥러닝이 구조적으로 복잡해 보이지만 요소요소를 보면 사실 복잡한 연산은 아니다.) 하지만 일상에서 데이터를 가지고 하는 문제들은 그저 데이터를 연결하고 순위를 매기는 것에 불과한 경우가 허다하다. 대표적으로 추천 및 개인화 시스템이라는 것도 아이템과 아이템, 사용자와 아이템, 그리고 사용자와 사용자를 잘 연결시켜서 기준에 따라서 정열해서 상위 N개를 보여주는 것에 불과하다. 특히 독립적인 데이터 샘플이 많아지는 경우라면 더더욱 그렇다. 정성적인 추천의 품질을 가르는 것은 결국 도메인 지식이다. (정량적 지수는 다를 수 있다.) 흔히 말하는 클러스터링, 클래시피케이션 및 레그레션 등의 모든 개념들도 결국 데이터를 연결하고 나열하는 것, 또는 이를 잘 하도록 돕는 것 그 이상도 이하도 아니다.

야구 투수에 비유하면, 데이터마이너의 특기는 강속구가 아니라 제구력이다 (Control Artist). 데이터마이너는 데이터를 보는 사람이고 데이터에서 규칙을 찾는 사람이라는 정의의 연장선에서 생각하면 된다. 완벽한 모델을 찾고 모든 파라메터를 자동으로 최적화하려는 것도 연구의 한 축이겠지만, 여전히 대부분의 알고리즘들이 사람의 손을 타기 마련이다 (Human Intervention). 만능의 인공지능이 등장하지 않은 이상, 어떤 모델 또는 방법론을 선택하고 필요한 다양한 파라메터를 얼마나 잘 설정하느냐가 평범한 마이너와 좋은 마이너의 차이를 가른다. 도메인 지식과 경험이 중요하다는 이유도 제어 능력의 차이를 주기 때문이다. 딥러닝과 같은 강력한 한방 (강속구)를 가졌더라도 제어 능력이 없으면 의미가 반감된다.

데이터 엔지니어도 아닌 사이언티스타라는 사람의 입에서 경험 (또는 경험에 따른 감 — 고급지게 표현해서 인사이트)이 중요하다고 말하는 것이 참 이상할 법하다. 그건 내가 사이비라서 그렇기도 하지만, 실제 그렇기 때문이다. 문제 상황에서 가설을 세우고 데이터로 검증하기 때문에 데이터 사이언스라 불린다. 문제를 인식하고 적절한 가설을 세우고 실험 계획을 통해서 필요한 데이터를 모으고 분석 및 검증으로 얻은 결과를 해석해서 액션을 취하는 일련의 과정이 필요하다. 매우 간단한 과정이지만 이를 어떻게 실행하느냐에 따라서 투입되는 비용과 시간, 반복 그리고 승패가 결정된다. 이때 필요한 것이 -- 천재가 아닌 이상 -- 경험이다. 어차피 초보 마이너나 베테랑 마이너가 가지고 있는 기본 기술셋은 비슷하다.

이전 글에도 적었지만 데이터 문제가 아주 정확한 모델과 설정값을 요구하는 것 같지만 대부분의 경우 설명하기 쉬운 단조로운 모델과 설정하기 쉬운 근사값이 필요한 경우가 많다. 그리고, 경험이 쌓인다는 것 그리고 감이 생긴다는 것은 그저 오랜 시간동안 많은 데이터를 다뤘다고 해서 얻어지는 것은 아니다. 어쩌면 내가 이 글을 적으면서 그냥 데이터마이너라고 적었지만 실제 의미는 시니어 데이터마이너를 뜻했던 것 같다. 그냥 기계적으로 데이터를 분석하는 사람이 아니라 데이터로 생각하고 데이터와 함께 숨쉬는 사람을 생각했던 것이다. 오해를 막기 위해서 경험은 깊은 수학적 지식과 다양한 프로그래밍 연습 위에 쌓인다.

훌륭한 데이터마이너는 데이터를 잘 보는 사람이다. 특별한 재능과 기술을 가진 사람이 아니라 그저 데이터 위에 노는 사람이다.

P.S., 딱 4년 전인 2012년 3월 9일에도 같은 제목의 글을 적었습니다. http://bahnsville.tistory.com/546

===
B: https://brunch.co.kr/@jejugrapher
F: https://www.facebook.com/unexperienced


댓글을 달아 주세요

Share           Pin It

14편의 글로 추천시스템을 마무리하려고 했었는데, 하나가 더 생각나서 글을 적습니다. 깊게 들어가면 어려워지는 문제지만, 이 그레서는 아주 피상적으로만 적겠습니다.

데이터마이닝하면 머신러닝이 같이 떠오른데 그러면 머신러닝은 추천 시스템에서 어떤 역할을 하느냐?라는 질문을 할 수 있습니다. 그래서 준비했습니다. 그러나 모든 디테일은 생략합니다. 구체적으로 어떤 머신러닝 알고리즘들이 추천시스템에 활용되고 있는지는 Netflix에서 나온 Mining Large Streams of User Data for Personalized Recommendations을 참조하세요.

Collaborative Filtering 알고리즘을 설명하면서 모델기반 CF를 잠깐 언급한 적이 있습니다. 여기서 모델이란 머신러닝을 통해서 학습된 모델을 의미합니다. 그러니 당연히 모델기반 CF에는 머신러닝이 사용됩니다. 그러면 메모리기반 CF나 다른 CBF 등에는 머신러닝이 사용되지 않았느냐?고 묻는다면, 위에 소개한 넷플릭스 케이스를 읽어보면 무시히 많은 알고리즘들이 사용되었다는 것을 알 수 있습니다. 구체적인 알고리즘을 명시하지는 못하겠지만, 추천 시스템 곳곳에 머신러닝 알고리즘들이 사용되고 있음을 설명해드리겠습니다.

추천 시스템에 사용된 유사도나 평가방법에 사용된 metric들이 모두 머신러닝의 기법/결실이라는 것은 굳이 따로 설명하지 않아도 될 듯합니다.

유저기반 CF 방식에서 가장 유사한 사용자 k명을 뽑아서 그들이 좋아하는 아이템들을 추천해줍니다. 여기서 k명을 선정하는 방식이 데이터마이닝 또는 머신러닝을 배울 때 가장 먼저 등장하는 k-NN (k-Nearest Neighborhood) 방식입니다. kNN이 특정 데이터 포인트에서 가장 가까운 k개의 데이터 포인트를 선별해서 그것들의 공통/다수 클래스를 타겟 데이터포인트레 라벨링하는 방식입니다. 당연히 가장 유사한 아이템을 뽑는 것도 kNN입니다.

LDA를 사용하면 유저와 아이템을 동시에 클러스터링 clustering 할 수 있다고 했습니다. 굳이 LDA를 사용하지 않더라도 유저의 아이템 점수들을 벡터로 클러스터링 방식으로 유저 세그먼테이션이 가능합니다. 비슷하게 아이템 세그먼테이션도 가능합니다. 이렇게 1차로 세그먼트를 나눈 후에, 개별 세그먼트별로 추천 알고리즘을 적용할 수 있습니다. 데이터를 어떻게 표현하느냐의 문제일 뿐, 모든 클러스터링 알고리즘들이 추천 시스템에 그대로 이용될 수 있습니다.

단순히 보면 추천 시스템은 유저의 아이템에 대한 선호도를 측정하는 것이고, 그래서 레이팅을 예측하거나 선호확률을 구합니다. 조금 다르게 생각해보면 특정 아이템을 좋아한다 또는 아니다, 즉 1과 0으로 분류하는 클래시피케이션 classification 문제입니다. 조금 더 세밀하게 쪼개면 좋아한다 그저그렇다 아니다 등으로 분류/예측합니다. 문제를 어떻게 모델링하느냐에 따라서 다양한 클래시피케이션 알고리즘들을 활용할 수 있습니다. 모델기반CF가 다양하게 등장하는 이유도 그렇습니다. 지금 추천 문제는 클래시피케이션 문제라고 말하고 있는 겁니다.

클러스터링과 클래피케이션 다음으로는 당연히 회귀분석 regression도 생각해볼 수 있습니다. 여러 곳에 회귀분석이 필요하겠지만, 가장 간단히 사용되는 곳은 바로 다양한 추천 알고리즘들의 결과를 하나로 합쳐서 하이브리드로 만들 때 필요합니다. CF와 CBF를 각각 하나씩 사용했다면 최종 예측값은 R = w0 + w1*CF + w2*CBF (w1+w2=1)와 같은 선형식을 만들 수 있고, 적절한 웨이트값 w1/w2를 찾는 방식은 회귀분석의 least square 등을 사용해서 구할 수 있습니다.

랭킹에서 사용되는 다양한 알고리즘들도 그대로 추천에 활용됩니다. 이전 글에서 검색엔진의 인풋은 키워드지만, 추천 시스템의 인풋은 유저 또는 아이템이라는 점만 다를 뿐 추천시스템도 검색엔진과 다를 바가 없다고 말했습니다. 검색랭킹의 알고리즘과 추천 랭킹 알고리즘이 다를 바가 없다는 말입니다. 검색엔진에서 페이지랭크의 개념은 유저와 아이템으로 묶인 네트워크에서 유사하게 적용될 수 있습니다. 페이지랭크의 연결성과 추천에서의 연결성이 본질적으로 같습니다.

문제와 해법이라는 이분법적 프레임에서 보면, 추천 시스템에서는 다양한 추천 알고리즘이 해법이 되고 책, 상품, 뉴스 등의 피추천 아이템/서비스 분야는 문제가 됩니다. 그러나 더 아래 단계를 생각해보면 다양한 머신러닝 알고리즘들이 해법이 되고 추천 시스템 (알고리즘)은 그것들의 문제입니다. 즉, 수학/머신러닝 알고리즘이 추천 시스템에 해법을 제공해주고, 그 추천 시스템이 다른 서비스의 해법을 제공해주는 재귀적 과정입니다. 서비스를 다루는 사람이 단순히 그것의 해결책에만 몰두할 것이 아니라, 그 해결책을 해결해주는 해결책에도 관심을 가져야 한다는 이상한 논리를 펼치고 있습니다. 어쨌든 기본은 중요하니까요.

모든 문제는 여전히 더 나은 해결책을 원합니다.


추천시스템 전체 목록

  1. 추천 시스템과의 조우 (PR시리즈.1)
  2. 추천 시스템을 위한 데이터 준비 (PR시리즈.2)
  3. 추천대상에 따른 추천 시스템의 분류 (PR시리즈.3)
  4. 알고리즘에 따른 추천 시스템의 분류 (PR시리즈.4)
  5. 추천 시스템을 위한 유사도 측정 방법 (PR시리즈.5)
  6. 추천 시스템의 성능 평가방법 및 고려사항 (PR시리즈.6)
  7. 추천 시스템에서의 랭킹과 필터링 문제 (PR시리즈.7)
  8. 추천 시스템의 쇼핑하우 적용예 (PR시리즈.8)
  9. 개인화 추천 시스템에 대하여 (PR시리즈.9)
  10. 추천 시스템의 부작용 - 필터버블 (PR시리즈.10)
  11. 추천 시스템의 레퍼런스 (PR시리즈.11)
  12. 추천 시스템에 대한 잡다한 생각들 (PR시리즈.12)
  13. 추천 시스템을 위한 하둡 마훗 사용하기 (PR시리즈.13)
  14. 추천 시스템에 대해서 여전히 남은 이야기들 (PR시리즈.14)
  15. 추천 시스템과 머신러닝 (PR시리즈.15)

==

페이스북 페이지: https://www.facebook.com/unexperienced

댓글을 달아 주세요