728x90
반응형
공부 및 정리 중. 우선 ref 들만 정리식으로.
"Machine learning is the science of getting computers to act without being explicitly programmed." 라고 하는데... not explicitly programmed 가 어떤 의미인지 천천히 살펴봅시다.
어차피 프로그래밍 된 대로만 돌아갈텐데 explicitly 가 뭔 차이인지는... 아마도 데이터를 쌓으면서 학습 (learning) 을 하고 그 학습 데이터를 바탕으로 돌아가는 알고리즘을 말하는듯? 즉, 학습하는 알고리즘 (Machine이니 학습한다기 보단 데이터를 분석해서 저장한다는 개념, 데이터가 더 쌓이고 바뀌면 꾸준히 update가 일어나는) 이 있고 이 학습으로부터 일을 해내는 알고리즘이 있을듯.
예를 드는것이 이해가 편할텐데, "수신한 이메일이 스팸인지 아닌지를 구분"하는 알고리즘을 생각하면 좋을듯. 기계 학습 (Machine Learning) 이 없는 알고리즘이라면 그저 스팸이 될만한 단어나 이상한 링크, 파일들이 있을때 스팸 처리하는 것이겠지만, 이런 방법만으로는 교묘하게 위장하여 보내는 스팸들은 처리할수가 없기에 사용자가 읽고 스팸처리하는 것들과 스팸통에 있는 메일 중 스팸해제하는 것들을 저장해놓고 분석해서 배우고 이후의 스팸처리에 활용하는 알고리즘을 기계 학습 (Machine Learning) 알고리즘이라고 이해하면 될듯.
뭐 각 회사마다 다양하게 스팸처리 알고리즘을 만들었겠지만, 대충 몇가지 가능한 시나리오들을 추측해 보자면.
- 다수의 사용자들이 스팸처리한 메일계정이라면, 이 계정에서 보낸 메일들은 스팸일 가능성이 클 것이다. 메일 계정별로 얼마나 많은 메일들이 스팸처리 당했는지 저장해놔서 많은 메일들이 스팸처리 당했다면 이후부터 계속 이 계정에서 보내는 메일들은 자동으로 스팸처리 한다.
- 위와 같은 이유로 스팸을 보내는 쪽에서 다수 계정을 이용해서 스팸을 뿌리는 경우도 많음. 이 때는 사용자들이 스팸처리한 이메일들 내용을 분석해서 많이 사용된 단어들을 분석한다던지 하는 방식으로 스팸여부를 결정하는 기계 학습 (Machine Learning) 알고리즘이 가능할듯.
- 사용자마다 스팸이라 느끼는 메일이 다를수도 있기에 "개인화 된 스팸처리"도 기계 학습 (Machine Learning) 알고리즘으로 가능할듯. 이 땐 한 사람만의 데이터로는 적어서 비슷한 사용자를 찾아내는 알고리즘도 필요할듯한.
- 2017-06-13 : 더 정리.
- 2015-12-12 : To SEE. Ref 추가. 약간 더 정리.
- 2014-04-28 : First Posting.
Two definitions of Machine Learning are offered. Arthur Samuel described it as: "the field of study that gives computers the ability to learn without being explicitly programmed." This is an older, informal definition.
Tom Mitchell provides a more modern definition: "A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E."
아래쪽 문장을 간단히 해석해 보자면, "어떠한 임무 (T) 를 수행하는 프로그램의 성능 (P) 이 경험 (E) 과 함께 향상될때, 우리는 이 프로그램이 경험 (E) 으로부터 배운다고 이야기한다.". 즉 이것저것 데이터들/경험들을 프로그램에 잘 먹여서, 프로그램 성능을 향상시키는 것을 프로그램을 가르치는거다라고 이야기 할 수도 있다. (기계 입장에서는 배우는거, 우리 입장에서는 가르치는거)
여기서 말하는 가르친다는건 coding 을 한다는거랑은 다른 의미. (Machine learning code 는 사람이 직접 짜긴 해야지.) 이 이야기를 첫번째 문장이 한거라 볼 수 있음. Not explicitly coded/programmed.
### By learning type
Machine learning 은 learning type 에 따라 크게 supervised 와 unsupervised learning 으로 나눌수 있다고 한다.
예전에 쓴 글인데, 오개념 같음. :: 크게 supervised 와 unsupervised learning 으로 나눌수 있다고는 하는데, 내 개인적인 의견으로 모든 learning 은 supervised learning 일수밖에 없음. Unsupervised 로 무언가 해냈다고 할지라도 feedback 을 받아야 제대로 해냈는지 아닌지 판단이 될테니... 뭐 그런 의미로 supervised 와 unsupervised 란 이름을 붙인건 아니고, 한단계 낮은 단계에서 supervised 인지 unsupervised 인지에 따른 분류이긴 함. 헷갈릴 수 있는 개념 및 naming 같아서 우선 짚고 넘어감.
생각해보면 사람 + 어떤 지적 생명체든지간에 learning 의 과정은 다른것들과의 interaction 을 통해서 이루어지기 마련임. 혼자서 자율적으로 지식을 쌓을수는 있겠지만, 반드시 다른 지적 생명체와의 소통/feedback 을 통해서 "검증"을 받아야만 제대로 배웠는지 아닌지를 판단할 수 있을테니. 다르게 말하자면, 뭐 혼자서도 (독립적으로) 많은걸 해낼수 있고 결과에 대한 자기확신이 갈수는 있을텐데, 이걸 남들에게 팔아먹으려면/인정받으려면 interaction 이 있어야 한다는 뜻.
Supervision 이 감독/감시/지휘의 의미에서 확장해서 검증/검수 등의 의미도 가진다고 단어를 해석할 여지도 있기에... 여기선 제한된 의미에서의 supervision 으로서 분류 naming 에 쓰인 것.
#### Supervised learning
The computer is presented with example inputs and their desired outputs, given by a "teacher", and the goal is to learn a general rule that maps inputs to outputs .
어떤 code 인지간에 input 이 들어왔을때 특정 output 을 내놓은 function 이라고 바라볼 수 있다. 이러한 input 이 들어왔을땐 이러한 output (desired output) 이 나오도록 하는 code 를 찾고 싶다고 했을때, "teaching data" 로서 {input, output} set 를 우선 준비해놓고 machine 을 가르치는 것을 "Supervised learning" (기계 입장에서는 배우는 거니까) 이라 한다.
"Teaching data" (Training Data) 에 없는 input 에 대해서도 적절한 output 을 내도록 만드는게 목표다.
대표적인 예로는 "문자 인식 (필기 인식 : Optical Character Recognition)", "음성 인식 (Voice recognition)", "사진/동영상 인식 및 분석 (Computer Vision : 여기서 더 확장되면 자율주행 자동차 같은것들로 발전됨)", "기계번역 (Machine translation)", "이메일 스팸처리" 등이 있겠다.
#### Unsupervised learning
No labels are given to the learning algorithm, leaving it on its own to find structure in its input. Unsupervised learning can be a goal in itself (discovering hidden patterns in data) or a means towards an end .
"Teaching data" (Training data) set 없이 스스로 깨우치도록 만드는 것을 "Unsupervised learning" 이라고 말한다. 스스로 깨우치도록 만든다는게 좀 교묘한 말이긴 한데, 아무튼 당장은 대충 "Supervised learning" 과는 다른 형태/방식으로도 기계가 learning 할수 있고, 그런 방식을 "Unsupervised learning" 이라고 부르는구나 정도만 알아두자. (예제도 이것저것 보고, 실제로 다뤄봐야만 제대로 이해가 갈테니.)
"Unsupervised learning" 의 가장 간단한 예로 clustering algorithm 이 있다. 예를 들자면, 뉴스 기사들을 자동으로 카테고리화 (categorize) 한다고 했을때, 기사에 등장하는 단어들로 기사 A 와 기사 B 가 비슷한 category 에 있는 놈인지 완전히 다른 category 에 해당하는 기사인지 판단하는 식이다. 점점 데이터가 쌓이면서 clustering 하다보면 특정 기사들이 한군데로 묶일텐데 이렇게 묶인 카테고리에 naming 을 하는건 사람이 supervise 할지라도, 묶는 과정 자체는 알고리즘만 잘 만든다면 unsupervised 도 된다.
또다른 예로는 DNA clustering, dimensionality reduction, recommender systems, deep learning 등이 있다고 한다. (이것들이 왜 unsupervised 인지는 아직은 잘 모르겠다. 차차 이런것들에 대해 배우다보면 왜인지 알게 되겄지?)
#### Reinforcement learning
강화 학습도 있다는데... 이건 뭘까나?
### By deepness
Learning 의 복잡도(?)에 따라서도 아래와같이 구분하는거 같기도 하다. (별 중요한 이야기 아닌거 같으니 패스. 아마도 Deep learning 을 강조하기/돋보이게하기 위해 도입된 개념인듯도.)
#### Shallow learning (e.g. SVM : Support Vector Machine)
#### Deep learning (e.g. DNN : Deep Neural Network)
## Model and Cost function
m개의 training set 을 가지고 있다면, 다음과 같은 cost function (squared error cost function) 을 생각해볼 수 있다.
아무튼 여기서 가장 중요한 것은 hypothesis function $h_{\theta}$ 과 parameter set $\theta$ 을 어떻게 잘 design 하느냐이다. 이걸 엉망으로하면 기계가 아무리 많은 training set 으로 learning 을 해도 결과가 엉망이 된다.
### Gradient descent
Training data 에서 y 값이 0 과 1 사이의값을 가진다고 했을때 ($0 \leq y \leq 1$), cost function 을 과 중 무엇을 써야 할까? 그냥 을 똑같이 써도 상관 없을까? 우선 y 가 0 과 1 이 아닐때 가 어떻게 그려질지 알아보자.
y 값이 $0<y<1$ 로 정해져 있을때 cost function 을 minimum 으로 만드는 $h_\theta(x)$ 값은?
\frac{\partial \mathrm{Cost}(h_\theta(x),y)}{\partial h_\theta(x)} = - y \frac{1}{h_\theta(x)} + (1 - y) \frac{1}{1 - h_\theta(x)} = 0
인 지점들과 boundary (h=0,1) 의 cost function 값들을 비교해 봐야한다. 미분값이 0 인 지점은 $h=y$ 인 지점임을 알 수 있고 이 때의 cost function 값은
\mathrm{Cost}(h_\theta(x)=y,y) = - y \log(y) - (1 - y) \log(1 - y)
이고, h=0 인 지점에서의 cost function 값은
\mathrm{Cost}(h_\theta(x)=0,y) = - y \log(+0) - (1 - y) \log(1 - 0) = \infty
, h=1 인 지점에서의 cost function 값은
\mathrm{Cost}(h_\theta(x)=1,y) = - y \log(1) - (1 - y) \log(1 - 1) = \infty
임을 알 수 있다. 따라서 $h=y$ 일 때 minimum 값 $−y\log(y)−(1−y)\log(1−y)$ 를 가짐을 알 수 있다. 이 함수는 0 과 1 에서 기울기가 $\infty$ 인 함수이다. $h=y$ 일 때에도 cost function 이 0 이 나오지는 않지만, minimum 값은 나오므로 써도 될거 같기도 하다.
조금 꼼꼼히 따져보자면, $0<y<1$ 일때 h가 0 혹은 1 을 예측하면 cost function 이 $\infty$ 로 발산 (diverge) 하는것을 알수 있는데 이건 문제가 없을까?
예를 들자면, y 가 0.01 로 주어졌을때에도 h 가 0 을 예측하면 cost 가 발산한다는 이야기다. 영 좋아보이지 않는다.
다른 대안으로 을 쓰는게 좋지 않을까? 아니면 미분이 쉽도록
\mathrm{Cost}(h_\theta(x),y) = - \log(1 - (h_\theta(x) - y)^2)
를 쓰는것이 좋아보인다. m 개의 training set 에 대해 summation 하면,
J(\theta) = \frac{1}{m} \sum_{i=1}^{m} \Big[ - \log( 1 - \big( h_\theta(x^{(i)}) - y^{(i)} \big)^2 ) \Big]
따라서
\begin{align*}
\frac{J(\theta)}{\partial \theta_k}
&= \frac{1}{m} \sum_{i=1}^{m} \Big[ \frac{2 \big( h_\theta(x^{(i)}) - y^{(i)} \big)}{1 - \big( h_\theta(x^{(i)}) - y^{(i)} \big)^2} \Big] \frac{\partial h_\theta(x^{(i)})}{\partial \theta_k}
\end{align*}
여기서 를 대입하면,
\begin{align*}
\frac{J(\theta)}{\partial \theta_k}
&= \frac{1}{m} \sum_{i=1}^{m} \Big[ \frac{2 \big( h_\theta(x^{(i)}) - y^{(i)} \big)}{1 - \big( h_\theta(x^{(i)}) - y^{(i)} \big)^2} \Big] h_\theta(x) (1-h_\theta(x)) \frac{\partial f_\theta(x^{(i)})}{\partial \theta_k}
\end{align*}
이전 결과 보다는 복잡하게 나왔지만, 식 모양이 복잡하다고 나쁜 알고리즘이란건 아니니까 잘 판단해서 사용하자.
### Neural Networks
인간의 뇌를 모방한 것이라고 하는데, 실제로 뇌도 이런식을 동작하는지는 잘 모르곘음. 아무튼 여러개의 layer 를 두고 logistic regresssion 을 하는것을 neural network 라고 하는듯.
우선 $x_1$, $x_2$, $x_3$, ... 같은 input 이 들어오고, $h_1 (\Theta, x)$, $h_2 (\Theta, x)$, $h_3 (\Theta, x)$, ... 같은 output 이 나온다고 할때, 중간 layer 들에는 $a_{1}^{(l)}$, $a_{2}^{(l)}$, $a_{3}^{(l)}$, $a_{4}^{(l)}$, ... 등이 있다고 하자.
$x_k$ 을 $a_k^{(1)}$ 으로 표기하고, $h_k$ 를 $a_k^{(L)}$ 이라고 표현하자. (Systematic 하게. L개의 layer 가 있는 셈이다.)
- Wiki - Machine learning (기계 학습)
- Wiki - Deep learning
- Youtube - Course | Machine Learning (Stanford), 2008-07-22, by StanfordUniversity; Lecture by Professor Andrew Ng for Machine Learning (CS 229) in the Stanford Computer Science department.; Lecture 1~20까지. 강의 하나당 1시간 정도 분량인듯. 강의 리스트 및 간단한 설명은 see.stanford.edu - Lecture list - artificial intelligence | machine learning에서. 여긴 영어자막이나 토렌트도 링크되어 있는듯.
- Coursera - Machine Learning (Stanford), 2014-03, by Andrew Ng
// 위 유투브 강의하신 분이랑 같은 사람인데, coursera에서도 강의가 있는듯. 이 쪽 강의가 온라인에서 듣기 더 잘되어 있는 듯 하네요. 더 최근 강의이기도 하고. Coursera에 가입하고 수강을 해야하긴 하지만... (지금 수강은 무료인듯.) 관심 있으신 분들은 청강해 보시길. - Coursera - Build Intelligent Applications - Master machine learning fundamentals in five hands-on courses., by Emily Fox and Carlos Guestrin (Amazon Professor of Machine Learning)
// 이 course 들도 괜찮은거 같아서 링크. (아마 수강하려면 돈 내야 할듯? 그냥 목차들 훑어보는 것만으로도 공부가 될듯한. 어떤걸 검색해야 할지, 어떤걸 공부해야 할지 어느정도 느낄 수 있을테니까.) - whydsp.org - 기계학습 / 머신러닝 기초 (Machine Learning Basics), 2014-07-30, by 음파선생
// 글씨가 작아서 보기 힘들긴 하지만, 기초 관련해서 잘 정리해 놓으신듯. - Research at Google - Research Areas & Publications - Artificial Intelligence and Machine Learning; 구글에서 Machine Learning 관련으로 낸 논문들 리스트인듯.
- Method of Lagrange multipliers (English), 2014-03-21; and 최적화, 라그랑지 승수법 (Optimization with the Method of Lagrange multipliers), 2014-03-18;
// 앞쪽의 영어버전이 더 자세히 작성되어 있음. 많은 Machine Learning 알고리즘들이 최적화와 관계가 깊음. - 선형 대수학 간단한 정리들 (Linear Algebra), 2014-03-18;
// 대부분 알고리즘에서 중요한 수학 중 하나. 통계 관련된 수학들도 중요하고. 대부분 컴퓨터 알고리즘은 연속 함수들도 이산화 된 숫자들로 다루기 때문에 대수학이 중요해짐. 그 중에서도 가장 기본이 선형 대수학이라 링크.
일반적인 정보
Lectures
Papers
Related Math
728x90
반응형