기본 콘텐츠로 건너뛰기

딥러닝(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% 수준의 성능 향상 효과가 있다고함 

댓글

이 블로그의 인기 게시물

리눅스 부팅시 스크립트 실행하기

서버를 끄고 켤때  실행되어야할 명령 혹은 프로세스들이 있을것이다. 이것들을 서버를 켜고 매번 직접 실행시켜준다면 누락의 위험도 잇고.. 번거롭기도 하고  그리하여  윈도우즈에서 시작프로그램에 등록하면 컴퓨터가 다 켜졌을때 알아서 실행해주듯이 리눅스에도 이와같은 기능이 있다.  ============================================================= 기본배경지식 리눅스는 부팅이되면서  런레벨에 맞는 작업을 수행하며  각 런레벨의 작업은 아래와 같이 분리된다.  /etc/rc.d/rc0.d           runlevel 0 /etc/rc.d/rc1.d             runlevel 1 /etc/rc.d/rc2.d             runlevel 2 /etc/rc.d/rc3.d             runlevel 3 /etc/rc.d/rc4.d             runlevel 4 /etc/rc.d/rc5.d             runlevel 5 /etc/rc.d/rc6.d             runlevel 6 /etc/rc.d/rc.local         모든 부팅작업이 완료된 다음 마지막에 수행  ============================================================= 부팅시 스크립트 실행하기  방법 1. 난이도 (하),  rc.local 에 등록하기. rc.local 을 편집기로 열어서  vi  /etc/rc.d/rc.local    실행하고자 하는 스크립트를 작성  톰캣을 실행한다고 했을때 예제 : su - root -c /tomcat/bin/startup.sh  위에서 root 부분은 사용자계정으로 실행하고싶을 시 사용자계정을 적용해주면 되고.. 뒤에 톰캣 startup.sh 경로는 본인에 상황에 맞는 경로로 ~  방법 2. 난이도 (중) 서비스로 등록하기  방법2는 .. 조금 내용도 길고 이해가 필요하므로 잘 정리되어있는 이곳을 참조하자.  http

Redhat 7, CentOS 7 이상버전의 locale 설정 (언어설정)

레드햇과, 센트오에스 6점대 버전까지는 /etc/sysconfig/i18n 이곳에 인코딩설정을 해서 처리했었지만 7부터는 i18n을 사용하지 않는다. 필요할법한 명령어들을 정리해봤으니 참고해서 사용하면 되겠다. 1. 현재 언어셋팅상태 확인 env |grep -e LANG -e LC 또는 locale 2. 시스템에서 지원 가능한 캐릭터셋 확인 localectl list-locales 3. 콘솔명령어를 통해 locale설정 변경 localectl set-locale LANG={적용할 캐릭터셋} ex) localectl set-locale LANG=ko_KR.euckr 4. 캐릭터셋 수동설정 vi /etc/locale.conf 로 파일을 연다음 아래 내용을 작성 LANG={적용할 캐릭터셋} ex) LANG=ko_KR.euckr 설정 완료후 재부팅시 locale명령을 통해 원하는 캐릭터셋이 유지되는지 확인

vscode (visual studio code) 한글 인코딩 설정

1. 파일 -> 기본설정 -> 설정 에서 나오는 설정화면 우측에 아래 두개 내용을 추가 "files.encoding" : "EUC-KR" , "files.autoGuessEncoding" : true 위에는 항상 EUC-KR 로 인코딩하겠다는 기본설정을 바꾸는 내용이며 아래는 현재 파일에 알맞은 인코딩을 알아서 찾겠다는 내용이라고 한다 끝 !