# 기계 학습 (Machine Learning - Deep Learning)
공부 및 정리 중. 우선 ref 들만 정리식으로.
"Machine learning is the science of getting computers to act without being explicitly programmed." 라고 하는데... not explicitly programmed 가 어떤 의미인지 천천히 살펴봅시다. ## PH
  • 2017-06-13 : 더 정리.
  • 2015-12-12 : To SEE. Ref 추가. 약간 더 정리.
  • 2014-04-28 : First Posting.
## TOC ## Overview : Type or Classification ### What is Machine Learning? 따로 설명글을 독창적으로 작성하기는 귀찮고, 잘 정리된 글들 많으니 등을 참조하시길. 아래는 Introduction - What is Machine Learning? 에서 일부를 긁어온것. 전 여기 설명이 잘되어 있다고 느끼니 링크 가셔서 전체 text 를 읽어보시는걸 추천드림.
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 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) 을 생각해볼 수 있다. J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} \Big( h_{\theta}(x^{(i)}) - y^{(i)} \Big)^2 Hypothesis function $h_{\theta}$ 을 적절히 선택해서 parameter set $\theta$ 를 바꿔가면서 cost function 을 최소화해낸다면, 이 hypothesis function 이 다른 input $x$ 에 대해서도 적절한 output $y$ 를 유추해낸다고 볼 수 있다. \underset{\theta}{\min} J(\theta) 라그랑지 승수법 을 이용하면, ($\theta$에 제약조건이 안걸려 있어서 굳이 라그랑지 승수법까지는 필요없긴 하지만...) \frac{\partial J (\theta)}{\partial \theta_k} = 0 만으로 exact 하게 min $J$ set $\theta$ 를 구할수도 있다. 하지만 대부분의 경우 저 식만으로 exact 하게 구하기가 어렵기 때문에 gradient descent 같은 방법으로 수치적으로 찾아가게 된다.
아무튼 여기서 가장 중요한 것은 hypothesis function $h_{\theta}$ 과 parameter set $\theta$ 을 어떻게 잘 design 하느냐이다. 이걸 엉망으로하면 기계가 아무리 많은 training set 으로 learning 을 해도 결과가 엉망이 된다.
### Gradient descent \frac{d \theta_k}{d \tau} = - \alpha(\tau) \frac{\partial J (\theta)}{\partial \theta_k} Descretized version 으로 바꾸면, repeat until convergence: \theta_k := \theta_k - \alpha \frac{\partial J (\theta)}{\partial \theta_k} $J (\theta)$ 가 square error cost function 일 때, \frac{\partial J (\theta)}{\partial \theta_k} = \frac{1}{m} \sum_{i=1}^{m} \Big( h_{\theta} (x^{(i)}) - y^{(i)} \Big) \frac{\partial h_{\theta} (x^{(i)})}{\partial \theta_k} ### Normal equation \frac{\partial J (\theta)}{\partial \theta_k} = 0 을 가지고 exact 하게 푼다고 했을때, 추가로 $h_{\theta}(x)$ = $\theta_0$ + $\theta_1 x_1$ + $\theta_2 x_2$ + $\cdots$ + $\theta_n x_n$ 형태로 linear 하게 나온다고 했을때 위 식은 다음과 같이 표현될 수 있다. X^{T} [X \theta - y] = 0 where $X_{ij} = x_{j}^{(i)}$. 즉, m by (n+1) matrix. (Let $x_0=1$.) 즉 이것을 $\theta$ 에 대해 풀면, \theta = (X^{T} X)^{-1} X^{T} y 와 같은 normal equation 을 얻을 수 있다. Matrix 의 inverse 를 구해야 하기 떄문에 $O(n^3)$ operation 이 필요하단다. (왜지?) ### Classification : Logistic Regression Model Classification 같은 경우 y 값이 0 혹은 1 로 나오는 경우가 많으므로 hypothesis function 을 다음과 같은 형태로 놓고 볼 수 있다. h_\theta (x) = \frac{1}{1+e^{-f_\theta(x)}} 이때 cost function 은 square error cost function 을 쓸수도 있겠지만, 다음과 같이 logistic error function 으로 대체하는 것이 더 좋다고 한다. \mathrm{Cost}(h_\theta(x),y) = - y \; \log(h_\theta(x)) - (1 - y) \log(1 - h_\theta(x)) 이 때 y 값은 항상 0 또는 1 값만을 갖는다. y 가 0 과 1 사이의 값을 가질 수 있다고 할때는 다음과 같은 cost function 을 고려해야 할지도 모른다. \mathrm{Cost}(h_\theta(x),y) = - \log(1 - | h_\theta(x) - y |) 즉 training set 에 y 값이 어떻게 들어가 있는지를 잘 보고 cost function 을 정해야 한다. m 개의 training set (y=0 or 1) 에 대해 summation 하면, J(\theta) = \frac{1}{m} \sum_{i=1}^{m} \Big[ - y^{(i)} \; \log(h_\theta(x^{(i)})) - (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \Big] 이 때 \begin{align*} \frac{J(\theta)}{\partial \theta_k} &= \frac{1}{m} \sum_{i=1}^{m} \Big[ - \frac{y^{(i)}}{h_\theta(x^{(i)})} + \frac{1 - y^{(i)}}{1 - h_\theta(x^{(i)})} \Big] \frac{\partial h_\theta(x^{(i)})}{\partial \theta_k} \\ &= \frac{1}{m} \sum_{i=1}^{m} \Big[ \frac{h_\theta(x^{(i)}) - y^{(i)}}{h_\theta(x^{(i)})(1-h_\theta(x^{(i)}))} \Big] \frac{\partial h_\theta(x^{(i)})}{\partial \theta_k} \end{align*} 여기서 \begin{align*} \frac{\partial h_\theta(x)}{\partial \theta_k} &= \frac{e^{-f_\theta(x)}}{(1+e^{-f_\theta(x)})^2} \frac{\partial f_\theta(x)}{\partial \theta_k} \\ &= h_\theta(x) (1-h_\theta(x)) \frac{\partial f_\theta(x)}{\partial \theta_k} \end{align*} 이므로 \frac{J(\theta)}{\partial \theta_k} = \frac{1}{m} \sum_{i=1}^{m} \Big( h_\theta(x^{(i)}) - y^{(i)} \Big) \frac{\partial f_\theta(x^{(i)})}{\partial \theta_k} 와 같이 간단한 형태로 비슷하게 나오게 된다. Logistic error cost function 으로 쓴 보람이 있다.
Training data 에서 y 값이 0 과 1 사이의값을 가진다고 했을때 ($0 \leq y \leq 1$), cost function 을 중 무엇을 써야 할까? 그냥 을 똑같이 써도 상관 없을까? 우선 y 가 0 과 1 이 아닐때 가 어떻게 그려질지 알아보자.
$\mathrm{Cost}(h_\theta(x),y) = - y \; \log(h_\theta(x)) - (1 - y) \log(1 - h_\theta(x))$
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 가 있는 셈이다.) a_{k}^{(n+1)} = g ( \sum_{i} \Theta_{ki}^{(n)} a_{i}^{(n)} ) where g(z) = \frac{1}{1+e^{-z}} 또한 여기서 $a_{k}^{(1)}$ 들, 즉 input, 만이 자유로운 값을 갖고 나머지 $a_{k}^{(n)}$ 들 (n>1) 은 함수 $g(z)$ 에 의해 0 에서 1 사이의 값만을 갖는다. (input 값들도 0~1 사이 값만 갖도록 normalize 시켜주는게 좋을거 같긴 하다. 그래야 $\Theta$ 들 사이의 normalization 이 이루어지니까.) 이때 원하는 output 이 나오도록 $\Theta$ set 을 찾는것이 주 목표일텐데, cost function 을 어떻게 잡아야 할까? m개의 training set ({$x_1^{(i)}$, $x_2^{(i)}$, $x_3^{(i)}$, ..., $y_1^{(i)}$, $y_2^{(i)}$, $y_3^{(i)}$, ...}) 에 대한 cost function 을 다음과 같이 잡아보자. ($y_k^{}$) J(\Theta) = \frac{1}{m} \sum_{i=1}^{m} \sum_{k} \Big[ - y_k^{(i)} \log ( h_k (\Theta, x^{(i)}) ) - (1-y_k^{(i)}) \log ( 1 - h_k (\Theta, x^{(i)}) ) \Big] ## RRA

    일반적인 정보

  1. Wiki - Machine learning (기계 학습)
  2. Wiki - Deep learning
  3. Lectures

  4. 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에서. 여긴 영어자막이나 토렌트도 링크되어 있는듯.
  5. Coursera - Machine Learning (Stanford), 2014-03, by Andrew Ng
    // 위 유투브 강의하신 분이랑 같은 사람인데, coursera에서도 강의가 있는듯. 이 쪽 강의가 온라인에서 듣기 더 잘되어 있는 듯 하네요. 더 최근 강의이기도 하고. Coursera에 가입하고 수강을 해야하긴 하지만... (지금 수강은 무료인듯.) 관심 있으신 분들은 청강해 보시길.
  6. 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 들도 괜찮은거 같아서 링크. (아마 수강하려면 돈 내야 할듯? 그냥 목차들 훑어보는 것만으로도 공부가 될듯한. 어떤걸 검색해야 할지, 어떤걸 공부해야 할지 어느정도 느낄 수 있을테니까.)
  7. whydsp.org - 기계학습 / 머신러닝 기초 (Machine Learning Basics), 2014-07-30, by 음파선생
    // 글씨가 작아서 보기 힘들긴 하지만, 기초 관련해서 잘 정리해 놓으신듯.
  8. Papers

  9. Research at Google - Research Areas & Publications - Artificial Intelligence and Machine Learning; 구글에서 Machine Learning 관련으로 낸 논문들 리스트인듯.
  10. Related Math

  11. Method of Lagrange multipliers (English), 2014-03-21; and 최적화, 라그랑지 승수법 (Optimization with the Method of Lagrange multipliers), 2014-03-18;
    // 앞쪽의 영어버전이 더 자세히 작성되어 있음. 많은 Machine Learning 알고리즘들이 최적화와 관계가 깊음.
  12. 선형 대수학 간단한 정리들 (Linear Algebra), 2014-03-18;
    // 대부분 알고리즘에서 중요한 수학 중 하나. 통계 관련된 수학들도 중요하고. 대부분 컴퓨터 알고리즘은 연속 함수들도 이산화 된 숫자들로 다루기 때문에 대수학이 중요해짐. 그 중에서도 가장 기본이 선형 대수학이라 링크.
저작자 표시 비영리 변경 금지
신고
Posted by 냥냥 kipid
comments powered by Disqus


티스토리 툴바