관리자

CNN(Convolutional Nerual Network) : 합성곱 신경망

앞서 본 classic한 NN(fully connected netowrk)에서는 한 뉴런이 전 layer의 모든 neuron과 연결되어있다.

CNN에서는 이전 layer의 일부 neuron과만 연결되어 있는 부분이 존재한다.

이런 연산 과정은 filterpooling을 통해 구현하는데, 이것은 조금 더 뒤에서 확인하자.

 

CNN은 이미지, 영상, 음성처럼 데이터량이 많고, locality가 있는 분야에 주로 사용된다.

이러한 분야의 데이터는 classic한 NN을 이용할 경우 몇 가지 문제가 생긴다.

1) 연산량이 너무 많다

2) 데이터가 조금만 변경되어도 다른 것으로 인식해버린다.

    이미지를 예를 들어 생각해보자. A가 쓰인 이미지가 있을 때,  글자의 크기가 커져도, 글자가 회전되어도 모두 A로 인식되어야한다. 

    fully connected network에서는 모든 경우에 대해 데이터를 만들고 학습을 해야한다. 따라서 많은 데이터가 필요하고, 그에 따라 연산량과 학습시간이 증가했다.

 

 

CNN 구조. 연산 과정

이런 한계를 극복하기 위해, 데이터에서 먼저 특징을 추출하고

그 다음에 fully connnected layer를 이용한다.

https://blog.naver.com/laonple/220608018546 참고

 

https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/

 

https://deepestdocs.readthedocs.io/en/latest/004_deep_learning_part_2/0043/

 

 

Convolution(filter)

출처 :  https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/ ("Neural Networks and Deep Learning" by Michael Nielsen)
http://taewan.kim/post/cnn/
http://taewan.kim/post/cnn/
http://taewan.kim/post/cnn/

Pooling

https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/

 

 

출처 및 참고 자료 :

http://taewan.kim/post/cnn/

https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/

https://deepestdocs.readthedocs.io/en/latest/004_deep_learning_part_2/0043/

https://blog.naver.com/laonple/220608018546

뒷 부분의 output은 벡터일수도, 스칼라 값일 수도 있다.
대체로 이런 형태를 갖는 것일뿐, 목적에 따라 다양한 형태를 갖는다.

앞서 neural network에서 학습의 목표는 알맞은 weight를 찾는 것이라 했다.

이번에는 어떻게 알맞은 weight를 계산하는지 다루려한다.

최적의 weight는

1) 계산

2) 실제 값과의 차이만큼 조정

하는 것을 반복함으로써 계산한다.

 

어떻게 계산하는지 - feedforward

실제 값과의 차이만큼 조정 - loss function, backpropagation

 

이렇게 나눌 수 있다.

 

 

Feedforward

3-2. neural network의 구조, activation function에서

neuron 단위에서 연산을 어떻게 이루어지는지 살펴보았다.

이 연산 과정은 input에서 output방향으로, 모든 neuron과 layer에서 일어난다. 이것을 feedfoward라고 한다.

input으로부터 output 방향으로 forward하게 이루어지기 때문에 이런 이름이 붙었다.

 

input이 vector이고 vector연산은 행렬을 통해 쉽게 계산할 수 있다.

따라서 feedforward연산은 다음과 같이 표현할 수 있다.

 

 

출처: https://www.jeremyjordan.me/intro-to-neural-networks/

 

Loss Function / cost function : 손실 함수

loss와 cost는 없어지는 것, 잃는 것, 손실이라는 비슷한 의미를 갖는다.
여기서 잃는다는 것은 정답과의 차이를 의미한다.

 

supervised learning은 정답을 아는 상태에서 학습하는 것이라 했다.

x를 넣어서 계산하면 y값을 얻는다.

이 y 값과 실제 정답인 t의 차이의 합을 loss/cost 라고 한다.

흔히 쓰이는 loss function에는  평균오차제곱(MSE : Mean Squared Errror), cross entropy(교차 엔트로피)가 있다.

 

 

평균 오차 제곱은 아래와 같다.

cross entropy는 아래와 같다.

unsupervised learning에서는 조금 다른 개념을 사용한다.

unsupervised learning은 정답이 없다. 따라서 알고리즘에 따라 loss function을 다르게 정의한다.

 

Neural Network의 구조

Neural Network의 가장 작은 단위는 neuron이다.
여러 개의 뉴런이 하나의 layer를 이룬다. layer의 수는 1개일 수도 있고 여러 개일 수도 있다.
neural network의 기본 구조는 아래 사진과 같다. 아래는 layer가 2개인 경우이다.

 

input layer(파란 부분)

학습시킬 데이터를 encoding해서 넣는 layer
(x1, x2, x3, x4)가 input data이다.

hidden layer(회색 부분)

일반적으로 layer의 수는 input layer와 output layer를 제외한 hidden layer의 수를 말한다.

 

output layer(초록 부분)

최종 산출물 layer.
(y1, y2, y3, y4)가 (x1, x2, x3, x4)에 대한 output(결과값)이다.

weight(가중치)

layer 사이에서 선으로 연결한 부분이 weight이다.

각 layer의 neuron은 전 layer의 neuron과 연결되어있다.

 

 

neuron에서의 연산

빨간색 선만 확대해서 보면 다음과 같다.

 

 

 

1) = w · x + b 를 계산한다.

   w = weight vector, x = vector x, b = bias 이다.

   w 와 x의 내적을 하고, bias를 더한다. linear transformation이다.

 

2) activation function에 ∑를 넣는다.

 

이것을 모든 neuron과 layer에 대해 반복한다.

 

따라서 실제로는 다음과 같이 연산이 이루어진다.

 

Fully Connected Network

한 뉴런이 그 전 layer의 모든 neuron과 연결되어있기 때문에 Fully Connected Network라고도 한다.

 

activation function(활성함수)

threshold(임계값/기준값)을 기준으로, 값을 정해주는 함수

대표적인 예시로는 step function과 sigmoid가 있다.

 

step function

 

sigmoid function

 

https://commons.wikimedia.org/w/index.php?curid=4310325

인터넷에 neural network를 검색해보면 정말 수 많은 정의가 나온다.
NN을 처음 접하는 사람이라면 이해할 수 없을 것 같은 정의가 많다.
formal한/수학적인 정의를 따르기보단, 나의 언어로 풀어보려고 한다.

 

Neural Network(인공 신경망)

내 나름대로 정의해본 neural network는 아래와 같다.

인간의 뇌가 neuron들이 연결되어 작동하는 것처럼
컴퓨터도 neuron 단위로 연산을 하고, neuron을 연결해서 문제를 해결하는 머신 러닝 기법.

NN의 목표는 문제를 잘 해결하는(원하는 목적을 달성하는) 최적의 neuron 연결 구조와 weight(연결의 가중치)를 찾는 것이다.
여기서 neuron 사이의 연결 구조를 Neural Architecture라고 부른다. 흔히 말하는 모델이 neural architecture이다.
일반적으로는 neural architecture를 고정시킨 상태에서 학습을 통해 weight를 찾는다.
고정시킨다는 것은 프로그래머가 결정한다는 의미이고, 학습을 한다는 것은 data를 input으로 넣어 연산을 수행한다는 것이다.


Neural Architecture의 종류

많은 연구를 통해 다양한 neural architecture가 제시되었다.
각 분야별로 좋은 성능을 보이는 neural architecture가 있다.
대표적으로 image recognition, image processing에는 CNN를 사용하며,
natural language processing에는 RNN이 많이 이용된다.
많이 이용되고 좋은 성능을 보인 경우가 많은 것일 뿐, 절대적인 답은 아니다.

CNN과 RNN에 대해서는 다음에 자세히 다룰 것이다.


neural architecture는 프로그래머/연구자가 시행착오와 휴리스틱으로 결정하는 경우가 일반적이었으나,
최근에는 neural architecture조차 머신 러닝으로 해결하려는 시도가 이루어지고 있다.
이러한 연구 분야를 NAS(Neural Architecture Search)라고 한다.

학습 과정

1. 데이터 인코딩
주로 벡터 / 행렬로 인코딩 한다

2. 학습
-1) feedforward
-2) backpropagation

3. validation
4. model tuning

 

 

참고:
https://en.wikipedia.org/wiki/Artificial_neural_network

+ Recent posts