기본 콘텐츠로 건너뛰기

딥러닝(Deep Learning) 개요

Deep Learning

이또한.. 여러곳에서 조사한 자료를 나름대로 정리해본 내용입니다 
참고가 될수있길 바라며 공유 ~! 

참고 사이트


1. 사람의 사고방식을 컴퓨터에게 가르치는 기계학습의 한 분야

2. 알고리즘 종류
     가. DNN (Deep Neural Networks : 심층 신경망)
       
          : 입력층과 출력층 사이에 복수개의 은닉 계층들로 이뤄진 인공신경망
          : 복잡한 비선형 관계를 모델링 할 수 있다.  (비선형관계의 예 : 사물식별)
          : 학습결과후 발생한 오류(목표값과 의 오차)를 역전파를 통해 오차범위를 최소화 시킬 수 있는 가중치를 찾으며 학습
          : 역전파 시 가중치를 갱신하면서 최적의 가중치를 찾아야하는데 이때 가중치를 갱신하는 방법이 경사하강법이다.
          : 취약점 1     - Overfitting (과적응 / 사람에 비유하면 고정관념과 비슷) - http://sanghyukchun.github.io/59/
                              - 해결방법 : Regularization 
          : 취약점 2     - 높은 시간복잡도 (오차역전파, 경사하강법의 시간복잡도가 매우 높다)
                              - 심층신경망 학습 시 크기(계층수와 계층당 유닛 수), 학습률(Learning rate), 초기 가중치등 많은 매개변수가 고려되어야는데
                                최적의 매개변수를 찾기위해 매개변수 공간 전부를 확인하는 것은 계산에 필요한 시간과 자원의 제약으로 인해 불가능

     나. CNN (Convolutional Neural Networks : 합성곱 신경망)  ★
          : 쉽게설명하자면 입력 백터를 일정한 크기와 스트라이드 값을 기준으로 샘플링하여 샘플링백터와 필터(W)의 곱을 구하고, 모든 곱의 결과를 인공신경망에 입력하여 결과물을 확인
          : 전처리(preprocess)를 사용하도록 설계된 다계층 퍼셉트론의 한 종류이다. (퍼셉트론 : 최초의 가장 간단한 피드포워드 방식 신경망 모델이다, 신경망의 단위 개념으로도 쓰임)
          : 여러개의 합성곱 게층과 그 위에 올려진 일반적인 인공 신경망 게층들로 이루어져 있으며, 가중치와 통합계층 들을 추가로 활용하다. 
          : 영상, 음성 분야에서 좋은 성능을 보인다. 
          : 표준 역전달을 통해 훈련될 수 있다. 
          : 다른 피드포워드 인공신경망 기법들보다 쉽게 훈련되는편이며, 적은수의 매개변수를 사용한다. 
          : CDBN(Convolutional Deep Belief Network : 합성곱 심층 신뢰 신경망)이 최근에 개발되었으며 CNN과 구조적으로 비슷하고,
            DBN의 선훈련에 의한 장점을 취할 수 있다. 
          : CDBN은 다양한 영상과 신호 처리기법에 사용될 수 있는 일반적인 구조를 제공한다. 

     다. RNN (Recurrent Neural Network : 순환 신경망) ★
          : 문장 인식, 필기체 인식
          : 인공신경망을 구성하는 유닛 사이의 연결이 Directed cycle을 구성하는 신경망을 말한다.
          : 임의의 입력을 처리하기 위해 신경망 내부의 메모리를 활용할 수 있다. 
          : 훈련을위해 경사하강법, Hessian Free Optimization, Global Optimization 방식이 쓰인다. 
          : 많은 수의 뉴런 유닛이나 많은 수의 입력 유닛이 있을경우 훈련이 쉽지 않다. 
    ** LSTM (Long Short Term Memory networks)
          : RNN에서 장기적으로 과거내용을 기억하지 못하는 단점을 극복하는 신경망

     라. RBM (Restricted Boltzmann Machine : 제한 볼츠만 머신) : 비지도 학습

     마. DBN (Deep Belief Networks : 심층 신뢰 신경망)
          : 

     바. DQN (Deep Q-Networks : 심층 Q-네트워크)
          1) 요약
               - Deep Learning + Q-Learning(Reinforcement Learning : 강화학습)
               - 구글 딥마인드에서 개발한 게임 플레이를 학습하는 인공지능 프로그램


3 용어 정리
     1) Back Propagation (역전파)
          : 신경망을 훈련시키기 위해 사용하는 기술 , 전방형(Feedforward networks)학습방식을 보완하기 위해 사용
          : 입력 층 > 신경망 > 출력 층 순으로 진행된 학습에서 나온 결과값과 목표값의 오차를 계산하고, 오차를 출력층에서 입력층까지 거꾸로 전파하면서 가중치를 수정하는 과정
          : 역전파 알고리즘에서 가중치 갱신을 위해 사용하는 방법으로 Gradient Descent가 있다. 

     2) Gradient Descent (경사하강)
          : 기울기를 계산하고 낮은 기울기 방향으로 weight(가중치)를 갱신하면서 최적의 weight(가중치)를 찾아가는 알고리즘
          : 파라미터 W에 대한 error를 계산하는 함수 ( = Loss function = Cost function )를 정의하고 함수의 결과값이 최소화 되는 방향을 찾아서 점점 나아가는것 

     3) Stochastic Gradient Descent
          : Gradient Descent가 모든 데이터에 대해 기울기를 게산하는 단점을 개선하는것을 개선한 알고리즘

     4) Minibatch
           : stochastic gradient descent를 수행하는 단위 (데이터 N의 크기)

     5) Momentum
           : Local Minima에 덜 빠지기 위해 Learning Rate에게 관성을 부여하는 개념 
         
     6) Regularization
           : 빠르게 Overfitting 하는 문제를 막기위해 얻은 Gradient에 일종에 패널티를 두어 조금만 반영시키는 방식,
           : Overfitting는 Weight의 절대값이 매우 클 때 일어나므로 Weight의 증가 속도를 늦춘다.
           : witght decay, sparsity, dropout 등의 Regularization 방법들이 있다.

     7) Overfitting
          : 과적응 이라고 표현하며 DNN(Deep Neural Network : 심층신경망)의 문제점중에 하나
          : 이 과적응 현상을 극복하기 위해 Regularization(정규화) 로직이 도입된다.

     8) Cost Function (비용함수)
          가. Cross-Entropy
               : 기대값과 실제 연산값의 차가 클수록 큰 결과가 나오고 항상 양수 이기때문에 비용함수로 사용가능
               : MSE보다 빠른 속도로 학습 진행, 학습결과는 MSE와 비슷 

          나. MSE (Mean Square Error) - 평균제곱오차
               :  활성함수로 Sigmoid함수 사용시 학습속도 저하를 발생시킴 (Cross-Entropy 사용을 통해 해결가능)


     9) Activation Function (활성함수)
          가. Sigmoid (시그모이드) 함수 
               : 대표적인 활성함수 ( 0 ~ 1 까지로 매핑), 미분 가능
               : y = F(x) 로 결과값 y를 다음레이어로 보내는 함수 F를 의미한다. 
               : 시그모이드 함수를 쓸 경우 0 또는 1 만이 아니라 [0,1]의 범위로 나타낼 수 있다.

딥러닝 (히든레이어가 많은) 의경우 시그모이드를 사용시 1보다 작은 수가 계속 곱해지므로 레이어가 많을수록 역전파를 통한 가중치 조정이 어려워진다 이것에 대한 해결책은 렐루 이며  딥러닝 즉 히든레이어가 많아질경우 무조건 렐루를 쓰며 최종 레이어단에서는 시그모이드 또는 소프트맥스를 사용해서 출력범위를 축소한다 
             

          나. Tanh (하이퍼볼릭 탄젠트) 
               : -1 ~ 1 까지로 매핑, 시그모이드의 범위를 확장

          다. Softmax
               : 가설(wx+b)의 결과 값이 여러게 나올경우, 여러 값의 총합이 1로 떨어지도록 0 ~ 1사이 값으로 표현
                    : 나온 값중에 가장 높은 확률의값만 뽑아낼때는 argmax 사용 
               : DNN의 마지막 output 노드에서 Classification(분류)을 하고자 할 때 사용된다. 
               : 마지막 레이어에서 Softmax로 One of K coding을 함
                 (여러개의 시그모이드값들을 다 더한걸로 각각의 시그모이드값을 나누어 합치면 1이 되는 확률로 해석)

          라. ReLU (Rectified Linear Unit) - 정류된 선형 유닛 ?

          마. PReLu
     
          바. Maxout



LSTM 사용
활성함수는 렐루 
마지막엔 소프트맥스 

렐루들 사이에 드랍아웃 도입해서 오버핏팅 예방 

훈련이아닐때 드랍아웃값은 1로 지정 (아웃없이 전부 활용하도록) 

이런 네트워크를 여러개 독립적으로 만들어서 


각각의 결과를 총합해서 최종결과 도출하는 방식이 앙상블인데 2~5% 수준의 성능 향상 효과가 있다고함 

댓글

이 블로그의 인기 게시물

웹 개발하면서 보안을 유지하기 위한 기본지식

몇개월전에 만들었던 웹기반 (HTML5, CSS3, Flash Player(VideoJS)) VOD플레이어에서 보안이슈가 발생했다. 웹또한 서버를통해 통신을하지만 사용자의 PC에서 실행되는만큼 클라이언트의 개념이 있으며 Javascript 야말로 클라이언트에서 작업하게 되는 영역이라는 점에서 보안상에 이슈 발생.  이유인즉슨  무료로 제공되고 있는것과 유료로 제공되고있는 서비스에 대하여  javascript 단에서 서비스 허용여부를 결정하게될경우  해킹을 통해 이부분을 우회하여 서비스이용이 가능했다는점.. 모든 인증이나, 중요데이터는 java 로 코딩해서 서버단에서 결단이 나도록 했어야했는데 이건 너무 기본적이면서도 아쉬운 실수를 저지르고 말았다..  하하..  많은 분들이 이런 부분을 간과할수도있을듯하여 작성해봅니다.  요즘 보안이슈가 많을탠데 모두들 보안 화이팅 ! 

Android 스마트폰 기본 웹브라우저(Chrome:크롬) 호출하는 스키마(URL Scheme)

신용카드결제 페이지 주소를 카톡으로 던졌을때 카톡 내부에서 결제가 이루어지다보니 결제완료까지 정상적으로 처리되지 않는 경우가 발생한다더라 그래서 생각해본게.. 1) 카카오통 채팅방  2) 링크 전송  3) 링크를 클릭하면 스마트폰애 내장된 웹브라우저를 실행하는 URL스키마 실행  4) 실행된 웹브라우저에서 결제페이지로 이동 이 절차를 거치면 카톡 외부로 나와서 독립적인 웹브라우저상에서 결제를 진행하기때문에 정상처리가 가능할것이라고 판단 찾다 찾다가.. 알아낸것이 안드로이드 (가능) - 롤리팝부터 크롬 브라우저가 기본앱이다 - 크롬을 호출방법 intent://www.naver.com#Intent;scheme=http;package=com.android.chrome;end  아이폰 (조건부 가능) - 사파리를 호출하는 앱스키마가 없으며, 사파리를 통해서 검색어를 입력한 검색기능만 가능 - 크롬브라우저 앱이 설치되어있을경우 아래와같이 호출 가능 googlechrome:////www.naver.com <사용법> < html > < body > < script >      var currentOS = "else" ;      var mobile = ( /iphone | ipad | ipod | android/ i .test(navigator.userAgent.toLowerCase()));      if (mobile) {          var userAgent = navigator.userAgent.toLowerCase();          if (userAgent.search( "android" ) > - 1 )             currentOS = "android" ;          else if

tomcat 80포트 사용설정 및 GET방식 인코딩설정

톰캣 7.0 기준 server.xml 원본에 작성되어있는 내용중에서 아래와같은 내용이있다. <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />   1. 80포트 사용설정 외부에서 웹서버에 접근했을때 주소뒤에 www.xxx.com:8080   처럼 8080포트를 쓰지않는 방법은 두가지가 있는것같다.    - 첫번째 방법 - server.xml 수정 <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />    - 두번째방법은 내가 작성한 리눅스 iptable를 수정하는것. 80포트로 들어온내용을 8080으로 리다이렉트시켜서 톰캣설정 변견없이 작동하게하는것이다. http://blog.naver.com/cyk7890/40189933263   2. GET 방식 한글인코딩 설정 - URIEncoding="UTF-8" 추가 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />