2016년 3월 23일 수요일

[머신러닝] Deep Learning Tutorials

이 글은 http://deeplearning.net/tutorial/index.html의 내용을 공부목적으로 번역한 것입니다.
번역이 이상할 수 있고 필요한 내용만 번역되어 있을 수 도 있습니다.

-------------------------------------------------------------------------------------------------------------------------------------

 딥러닝은 머신러닝의 원래 목표중 하나인 인공지능으로 다가게하는 목적으로 소개된 머신러닝 연구의 새로운 분야다.

 딥러닝은 이미지, 소리 그리고 텍스트와 같은 데이터들의 이해를 돕는 다양한계층의 표현과 추상적 개념에 대한 학습이다. 딥러닝 알고리즘에 대한 예제를 보고싶으면 다음을 예를 보면 된다 :



  • The monograph or review paper Learning Deep Architectures for AI (Foundations & Trends in Machine Learning, 2009).
  • The ICML 2009 Workshop on Learning Feature Hierarchies webpage has a list of references.
  • The LISA public wiki has a reading list and a bibliography.
  • Geoff Hinton has readings from 2009’s NIPS tutorial.

  •  여기있는 튜토리얼들은 가장 중요한 몇개의 딥러닝 알고리즘과 그것을 Theano를 이용해 어떻게 작동시킬것인지 소개할 것이다. Theano는 딥러닝 모델을 쉽게 배울수 있게하고 그것들을 GPU에서 훈련시킬수 있도록 선택할 수 있는 파이썬 라이브러리이다.

     이 알고리즘 튜토리얼은 몇가지 전재조건이 있다. 여러분들은 파이썬에 대해 약간 알아야 하고 numpy에 친숙해야한다. 이 튜토리얼이 Theano를 사용하기로 하기로 한 이후부터 여러분들은 먼저 Theano basic tutorial을 읽어야 한다. 이것을 한 후에 표기법과 알고리즘 튜토리얼들에 쓰일 다운로드 가능한 데이터셋 그리고 우리가 최적화를 할 방법인 확률 기울기 하강 (Stochastic Gradient Descent)에 대해 소개된 Getting Started 챕터를 보면된다.

    The purely supervised learning algorithms are meant to be read in order:
    1. Logistic Regression - using Theano for something simple
    2. Multilayer perceptron - introduction to layers
    3. Deep Convolutional Network - a simplified version of LeNet5
    The unsupervised and semi-supervised learning algorithms can be read in any order (the auto-encoders can be read independently of the RBM/DBN thread):
    Building towards including the mcRBM model, we have a new tutorial on sampling from energy models:
    • HMC Sampling - hybrid (aka Hamiltonian) Monte-Carlo sampling with scan()
    Building towards including the Contractive auto-encoders tutorial, we have the code for now:
    Recurrent neural networks with word embeddings and context window:
    LSTM network for sentiment analysis:
    Energy-based recurrent neural network (RNN-RBM):
    Note that the tutorials here are all compatible with Python 2 and 3, with the exception of Modeling and generating sequences of polyphonic music with the RNN-RBM which is only available for Python 2.




    2016년 3월 19일 토요일

    [머신러닝] CNN(Convolution Neural Network)

    Why CNN?




     이미지 인식과 같은 분야에서 MLP(Multi-Layer Perceptron) 또는 multi-layered neural network를 사용하게 되면 MLP는 모든 입력이 위치와 상관없이 동일한 수준의 중요도를 갖는다고 본다. 그렇기 때문에 이를 이용해 fully-connected neural network를 구성하게 되면 파라미터의 크기가 엄청나게 커지는 문제가 생긴다. 이에 대한 해결책으로 탄생한 것이 바로 CNN이다.


    Receptive Field


     수용영역이란 외부 자극이 전체 영향을 끼치는 것이 아니라 특정 영역에만 영향을 준다는 뜻이다. 손가락으로 몸의 여러 부분을 찔러 보았을 때 그것을 느낄 수 있는 범위가 제한적이라는 것을 생각하면 될 것이다. 그리고 어디를 찌르느냐에 따라 느끼는 영역의 크기가 다를 것이다.

     마찬가지로 영상에서 특정 위치에 있는 픽셀들은 그 주변에 있는 일부 픽셀들 하고만 correlation이 높고 거리가 멀어질수록 그 영향은 감소하게 된다. 이를 이용해 영상이나 이미지를 해석하여 "인식 알고리즘"을 수행하고자 할 경우 영상 전체 영역에 대해 서로 동일한 중요도를 부여하여 처리하는 대신에 특정 범위를 한정해 처리를 하면 훨씬 효과적일 것이라 짐작 할 수 있다. 이를 영상에만 한정하는 것이 아니라 locality를 갖는 모든 신호들에 유사하게 적용할 수있다는 아이디어에 기반하여 출현한 것이 CNN이다.

    convolution이란?


     영상 처리 분야에서 convolution은 주로 filter 연산에 사용되며 영상으로부터 특정 feature들을 추출하기 위한 필터를 구현할 때 convolution을 사용한다. 즉 3 by 3 또는 그 이상의 window 혹은 mask를 영상 전체에 대해 반복적으로 수행을 하게 되면, 그 mask의 계수 값들의 따라 적정한 결과를 얻을 수 있다.

     아래 그림을 보면 왼쪽의 전체 이미지에서 노란 부분이 현재 convolution이 일어나고 있는 영역이며, 빨간 글자는 convolution의 kernel에 해당하고, 노란 영역의 mask에 대해 연산을 수행하면 결과는 오른쪽 처럼 4가 나오며 노란 윈도우 영역을 오른쪽으로 이동시켜 다시 결과를 구하면 3이 되며 계속 이동을 시키면서 연산을 하면 최종적인 결과를 얻을 수 있다.





    CNN의 특징



    CNN에서 Convoutional이 붙은 이유는 convolutional 신경망 연산을 한다는 뜻이며, CNN은 기존 multi-layered neural network에 비해 아래와 같은 중요한 특징을 갖는다


     Locality

     CNN은 수용영역과 유사하게 local 정보를 활용한다. 공간적으로 인접한 신호들에 대한 correlation관계를 비선형 필터를 적용하여 추출해 내는데 이러한 필터를 여러 개 적용하면 다양한 local 특징을 추출해 낼 수 있게 된다.

     Shared Weight

     동일한 계수를 갖는 filter를 영상 전체에 반복적으로 적용함으로서 변수의 수를 획기적으로 줄일 수 있으며, topology 변화에 무관한 항상성을 얻을 수 있게된다.



    CNN의 구조


     CNN은 일반적으로 3종류의 계층을 가지고 있다.


    1. Convolution layer : Convolution feature를 추출하는 layer로 의미있는 특징들을 추출하기 위한 층이다.
    2. Pooling layer : 이미지의 특성상 많은 픽셀이 존재하기 때문에 feature를 줄이기 위해 subsampling을 하는 층이다.
    3. Feedforward layer : convolution layer와 pooling layer에서 나온 feature를 이용해서 분류를 하는 층이다.

     CNN 처리 과정은 단순하게 분류기로 구성 된 것이 아니라 특징을 추출하는 단계가 포함되어 있기 때문에, raw image에 대해 직접 operation이 가능하며, 기존 알고리즘과 달리 별도의 전처리 단계를 필요로하지 않는다. 특징 추출과 topology invariance를 얻기 위해 filter와 sub-sampling을 거치며 이 과정을 반복적으로 수행하여 local feature로부터 global 를 얻어낸다.

     대부분의 영상 인식 알고리즘에서는 특징을 추출하기 위해 filter를 사용한다. 보통 5 by 5 나 3 by 3 필터를 사용하는데 필터에 사용하는 계수들의 값에 따라 각각 다른 특징을 얻을 수 가 있다. 일반적으로 이 계수들은 특정 목적에 따라 고정이 되지만 CNN에서 사용하는 계수들은 학습을 통해 결정 된다는 점이 다르다.

     CNN에서는 max-pooling 방식의 sub-sampling 과정을 거친다. 간단히 설명하자면 각 window에서 가장 큰 자극만을 선택하는 것이다. 이 과정(convolution + sub-sampling) 과정을 여러변 거치게 되면 이미지 전체를 대표할 수 있는 global한 특징을 얻을 수 있게 된다. 이렇게 얻은 특징을 학습 시키면 topology 변화에 강인한 인식 능력을 갖게 된다.