딥러닝 ( Deep Learning ) 이란?
- 2000년대부터 사용되고 있는 심층 신경망 ( deep neural network ) 의 또 다른 이름
영상쪽에서 딥러닝이 알려진 것은 AlexNet 으로부터 시작되었고
우리가 모두 잘 알고있는 Alpha Go 에서부터 딥러닝이 일반적인 용어로 불리게 되었다.
머신 러닝( ML ) vs. 딥러닝 ( DL )
영상을 위주로 머신러닝과 딥러닝의 차이점을 설명하자면
머신러닝 은 입력영상에서 Feature 을 추출해서 영상을 분석 및 비교한다.
이전 머신러닝 강의에서 배웠던 HOG로 특징벡터를 추출해서 SVM 알고리즘에 대입하는 방식으로
영상의 어떤 특징을 추출하여 머신러닝 알고리즘으로 클래스를 구분, 나누는 방식이다.
이 말은 즉슨, 머신러닝을 잘 사용하기 위해서는 특징점을 잘 추출해줘야한다는 것인데 이는 사람이 해야하는 일이다.
따라서 어떤 사람이 어떻게 특징점을 추출했는지에따라 머신러닝의 결과값이 확연하게 차이가 날 수 있다는 뜻이다.
그에반해 딥러닝은 특징점을 사람이 추출하지 않고 입력영상들의 특징점과 분류 자체를
딥러닝 알고리즘이 모두 알아서 해준다.
예를들자면 많은 입력영상과 각각의 해당영상들의 클래스만 잘 입력해준다면
Ex ) 1번이미지 - 오토바이 , 2번이미지 - 트럭, 3번이미지 - 자전거, 4번이미지 - 트럭 ...
해당 영상들의 특징점을 자동으로 추출하여 분류까지 알고리즘이 알아서 진행한다는 의미이다.
물론 연산속도, 빅데이터 필요, 과적합에러등에대한 부가적인 요소들은 붙을수밖에 없다.
따라서 시간이 충분하고 데이터가 충분히 많다고 한다면 기존 머신러닝에 대비해서 효율적으로
데이터를 분류할 수 있다.
그래서 현재는 상업적으로나 아카데미에서도 많이 사용되고 있는 추세이다.
딥러닝 활용
그래서 OpenCV를 사용해서 딥러닝을 사용하고자 할 때 꼭 알고있어야하는 부분만 이번 딥러닝장에서는
설명한다.
신경망 기초 : 퍼셉트론
퍼셉트론 ( Perceptron )
- 다수의 입력으로부터 가중합을 계산하고, 이를 이용하여 하나의 출력을 만들어내는 구조 ( 1950년대 )
n 개의 입력을 받아 각각 w의 가중치를 곱해준뒤 모두 더해준다.
그리고 바이어스라는 값을 더해주면 해당 값을 v로 지정해준다.
그리고 활성화 함수에 해당 v값을 입력시켜준다.
Step Function이 대표적인데 입력이 0보다 작으면 0 , 0보다 크면 1 등의 형식으로 진행된다.
위 방식은 이 전 강의에서 나온 필터링, 템플릿매칭 등의 방법과 아주 유사하다.
그리고 위 방식을 조금 더 간단한 방법으로 바꾼 함수가 있다.
그리고 위 퍼셉트론을 사용하여 간단한 논리 연산자를 만들 수 있다.
퍼셉트론에 의한 OR 연산 구현
위 이미지를 보게되면 사각형과 삼각형을 나누기 위해서
f라는 함수를 하나 만들고 0,0 / 0,1 / 1,0 / 1,1 를 각각 대입해주어서
0이 나오면 0번클래스 1이 나오면 1번 클래스로 분류해주는 방법을 통해 OR 연산자를 만들 수 있다.
그래서 해당 딥러닝 함수 구성을 보게 되면 아래와 같이 구성될 수 있다.
활성화 함수 ( Activation Fuction )
- 생물학적 뉴런 ( neuron ) 에서 입력 신호가 일정 크기 이상일 때만 신호를 전달하는 메커니즘을 모방
- 비선형 함수를 사용
위와같이 3자의 활성화 함수가 사용되고 있는데
최근에는 Sigmoid 는 많이 사용하지 않고 ReLU 함수를 많이 사용한다.
ReLU 함수 사용이 학습에 가장 도움이 되는 것 같다.
퍼셉트론에 의한 XOR 연산을 구현하려면?
- XOR는 단순한 입력, 출력 구조의 퍼셉트론으로 구현 불가 ( Not linear ! )
선형으로 구분할 수 없기때문에
다층 퍼셉트론을 사용하여 해결해야한다. ( Multi-layer Perceptron )
이전 SVM 강의에서 차원을 하나 더 넣어 해결한 것 처럼 퍼셉트론에도 층을 하나 더 넣어 해결이 되는 방식을 사용
( 단층 ) 퍼셉트론 vs. 다층 퍼셉트론 vs. 심층 신경망
- 다층 퍼셉트론( MLP, Multi - Layer Perceptron ) : 은닉층이 한 개 이상
- 심층 신경망 ( DNN , Deep Neural Network ) : 은닉층이 두 개 이상
Single - Layer 는 층이 한개로 구성되어 있는 것 ( Input Layer 제외 )
Multi - Layer 는 hidden layer 가 추가된 다층 퍼셉트론
Deep Neural Network 는 hidden layer 가 하나가 아니라 많아지는 경우의 네트워크로 구성된다.
신경망 학습이란?
- 좋은 가중치 ( weight ) 를 결정하는 방법
신경망 학습 방법
- 학습의 기준이 되는 비용 ( cost ) 또는 손실 ( loss ) 함수를 정의한 후 , 비용을 최소화 하는 방향으로 학습을 진행
- 경사 하강법 ( gradient descent ) 또는 오류역전파 ( error backpropagation ) 알고리즘 사용
경사 하강법 : 그래디언트 반대 방향으로 이동하면서 최솟값 위치를 찾는 방법
오류 역전파 : 미분의 체인룰 ( chain-rule )을 이용하여 전체 가중치를 업데이트 하는 방법
Opencv에서는 위 경사하강법과 오류역전파를 자동으로 결정해주는 알고리즘이 있다.
심층 신경망의 문제점과 해결방안
심층 신경망이 90년대초 영화 ( 터미네이터 ) 에 소개될 정도로 각광을 받고있던 방법이었는데
이 방법이 지속적으로 성장해온 것이 아니라 90년대 중 후반에 침체기가 있었다.
그 이유는 학습이 레이어를 지속적으로 추가하다보니
- 학습이 제대로 안되는 문제
- Vanishing Gradient ( 활성함수 )
- Overfitting ( 과적합 )
- Weight initialization ( Weight 초기화 알고리즘 ) - 학습이 너무 느림
- 하드웨어 성능이 낮음
- Gradient Decent ( 알고리즘 ) - 데이터 셋 부족
에 해당하는 문제를 겪었기 때문인데 아래 사진과 같은 해결방법으로 인해 많이 발전할 수 있게 되었다.
'Program > 딥러닝' 카테고리의 다른 글
[Open CV] 딥러닝 _ GoogLeNet 영상 인식 (0) | 2022.07.22 |
---|---|
[Open CV] 딥러닝 _ MNIST 학습 모델 사용하기 (0) | 2022.07.21 |
[Open CV] 딥러닝 _ OpenCV DNN 모듈 (0) | 2022.07.19 |
[Open CV] 딥러닝 _ 딥러닝 학습과 모델 파일 저장 (0) | 2022.07.18 |
[Open CV] 딥러닝 _ CNN 이해하기 (0) | 2022.07.17 |