[머신러닝 기초] 퍼셉트론부터 CNN 구조까지
ML

[머신러닝 기초] 퍼셉트론부터 CNN 구조까지

About Perceptron

퍼셉트론이란? 다수의 신호를 입력으로 받아 하나의 결과를 내보내는 알고리즘이다. 퍼셉트론 신호는 1 또는 0의 두가지 값을 가질 수 있다. 즉, 어떠한 임계값을 기준으로 하여 신호를 활성화하거나, 비활성화할 수 있다. 다수의 입력을 받는 퍼셉트론의 그림을 보자면 다음 그림과 같다. 

여기서 x는 입력값을 의미하며, W는 가중치, y는 출력값이다. 그림 안의 원은 인공 뉴런에 해당한다고 볼 수 있다. 각각의 인공 뉴런에서 보내진 입력값 x는 각각의 가중치 W와 함께 종착지인 인공 뉴런에 전달된다. 각 입력값에는 가중치가 존재하는데, 이때 가중치의 값이 크면 클수록 해당 입력 값이 중요하다는 것을 의미한다. 입력값과 가중치가 곱해져 인공 뉴런에 보내지면 그 값이 임계치를 넘는 경우에 인공 뉴런은 출력 신호로서 1을 출력하고, 그렇지 않을 경우에는 0을 출력한다. 

 

위 그림의 퍼셉트론은 단층 퍼셉트론이라고 한다. 단층 퍼셉트론은 값을 보내는 단계인 입력층과 값을 받아서 출력하는 출력층의 두 단계로만 이루어진다. 

다층 퍼셉트론은 단층 퍼셉트론 중간에 층을 더 추가하였다는 점이 차이점이라고 볼 수 있다. 이렇게 입력층과 출력층 사이에 존재하는 층을 은닉층(hidden Layer)이라고 부른다.

출력층으로 가기 전, 비선형 함수를 통해 값을 활성화하는 과정을 거친다. 이러한 Input에서부터 Output을 도출해내는 과정을 간략히 그림으로 살펴보자면 다음 그림과 같다.

(직접 그린거라 좀 구린 점 이해 부탁..)

 

여러개의 입력을 받아, 입력들에 대해 각각의 가중치를 주고, 그들의 합을 어떠한 Non-Linearity Function을 통해 Output으로 도출해나가는 것이다.

이 과정에서 Non-Linearity Function이 Activation Function (즉, 활성함수)으로서 작용하게 된다.

 


About Activation Function

활성함수는 우선, 어떠한 값을 활성시킬 수 있도록 도와주는 함수라고 이해해보았다. 즉, 입력값이 주어졌을 때, 함수 내의 어떠한 기준치 이상의 값을 해당 입력이 갖는다면, 그 값을 활성화시키며, 만약 그렇지 않다면 비활성화시키는 것이다.

활성함수에는 여러 종류가 있는데, 그 중에서 3가지만 이야기해보자.

첫번째로 Sigmoid 함수이다. 시그모이드는 함수는 결과를 참/거짓으로 나타내는 것이 아닌, 참에 가까워지면 0.5~1 사이에서 1에 가까운 값으로, 거짓에 가까우면 0~0.5 사이의 값을 리턴한다,

두번째는 tanh이다. 이는 0을 기준으로 sigmoid와 거의 유사한 형태를 띈다.

마지막으로는 많이 사용되는 ReLu함수이다. ReLu함수는 입력이 0을 넘을 때엔 입력값을 그대로 유지하고, 아닌 경우에는 비활성화한다.

 

뉴럴 네트워크에서 신경망이 깊어질수록 학습이 어렵기 때문에 전체 레이어를 한번만 계산한 후, 그 계산 값을 재활용하여 계산하는 Back propagataion이라는 방법을 사용하는데, sigmoid함수를 activation함수로 사용할 경우, 레이어가 깊어지면 역전파가 제대로 작동하지 않기 때문에 (Gradient Vanishing) ReLU를 주로 사용한다.

 

여기서, 활성함수는 모두 비선형함수인 것을 확인할 수 있는데, 그 이유는 다음 이미지를 통해 확인할 수 있다.

이미지 출처 -  studymachinelearning.com/activation-functions-in-neural-network/

 

활성함수가 선형일 때와 비선형일 때 구분지을 수 있는 것들을 그래프로 표현한 이미지이다. 만약 두번째 그래프에서 나타난 두가지 네모와 더하기 모양을 선형함수로 구분지어야한다면, 하나의 함수로는 정확히 구분지을 수 있는 방법이 없을 것이다. 더 유연하고, 잘 구분짓기 위해 비선형함수를 활성함수로서 택한다고 생각하였다.

즉, 비선형함수를 활성함수로 택함으로써 더 복잡한 것도 구분지을 수 있게 되는 것이다.

 


About Neural Network

퍼셉트론은 가중치(w,b)를 수동적으로 지정해줘야하지만, 신경망은 스스로 학습해 그 값을 찾아낼 수 있다. 즉, Multi-Output Perceptron의 확장으로서 Input Layer에서부터 Output Layer까지 퍼셉트론이 행했던 과정을 여러 층을 통해 수없이 많이 행하는 것이다.

 

 


Convolutional Neural Network

CNN은 전통적인 신경망 앞에 여러 계층의 Convolutional Layer를 붙인 모양이 된다. 그 이유를 간략히 요약하자면 Convolutional Layer를 통해 입력받은 이미지에 대한 특징을 추출하게 되고, 이렇게 추출된 특징을 기반으로 기존의 Neural Network를 이용해서 분류를 해내기 때문이다.

이미지 출처:  https://www.analyticsvidhya.com/blog/2020/10/what-is-the-convolutional-neural-network-architecture/

 

특징 추출 단계(Feature Extraction)

  • Convolutional Layer: 필터를 통해 이미지의 특징을 추출
  • Pooling Layer: 특징을 강화시키고 이미지의 크기를 줄임 (Conv와 Pooling을 반복하면서 이미지의 특징을 추출)

이미지 분류 단계 (Classficiation or Regression)

  • Flatten Layer: FC 네트워크 형태로 변경 (입력 데이터의 shape 변경만 수행)
  • Softmax Layer: 분류 수행

 


About Convolutional Layer

Convolutional Layer는 Input data로부터 특징을 추출하는 역할을 한다. 이 레이어는 특징(Feature)을 추출하는 기능을 하는 필터와, 필터의 값을 비선형 값으로 바꾸어주는 Activation function으로 이루어진다.

Filter

필터는 필터에서 알고자 하는 특징이 해당 데이터에 존재하는지의 여부를 검출해주는 함수이다. 아래 그림과 같이 생긴 곡선을 검출해주는 필터가 있다고 할 때, 해당 필터는 좌측에 해당하는 행렬로 정의할 수 있다.

이 필터를 쥐 그림의 좌측 상단 이미지 부분에 적용해본다면, (Conv연산을 수행한다면) 매우 큰 값이 나올 것이다. 하지만 전혀 관련이 없는 이미지에 적용한다면 결과값이0에 수렴하게 나온다.

이미지는 https://bcho.tistory.com/1149

즉, 필터는 입력받은 데이터에서 해당 특성을 갖고 있으면 큰 값을 결과값으로 얻고, 아니면 0에 가까운 값을 얻게 되어 해당 데이터가 그 특성을 가진지에 대한 여부를 판단할 수 있도록 한다.

따라서 우리는 각기 다른 특징을 추출하는 필터를 조합하여 네트워크에 적용한다면, 주어진 Input Data가 어떤 특징을 갖고 있는지를 판단할 수 있다.

 


About Padding, Stride, Activation Map

  • Stride - 필터를 적용하는 간격

  • Feature/Activation Map - 필터를 적용해서 얻어낸 결과물
  • Padding - 결과값의 소실을 막기 위해 입력값 주위로 0을 넣어 결과값이 작아지는 것을 방지하는 기법


About Pooling

Convolutional Layer를 거쳐 추출된 특징들은 필요에 따라 Pooling 하는 과정을 거친다. 어느 정도 특징이 추출되었으면 이 모든 특징을 갖고 판단하기보다는 적절한 기준에 의해 눈에 띄는 특징들을 이용하는 것이다. 따라서, 추출된 Activation map을 인위로 줄이는 작업을 하는데, 이를 pooling이라고 한다.

 

Max Pooling

위와 같은 데이터가 주어져있을 때, stride가 2인 2x2필터를 통해 max pooling을 해보자. 즉, 이 과정은 맥스 풀링의 특징인 큰 값이 다른 특징들을 대표한다는 개념을 기반하여 2x2 필터 내의 값들 중 가장 큰 값을 추출해내는 것이다.

이러한 pooling 과정을 통해 우리는 overfitting도 방지할 수 있습니다. (풀링 과정은 데이터의 크기를 줄이고 싶을 때 선택적으로 사용한다.)

 


About Fully-Connected Layer

Fully-Connected Layer은 앞에서 처리된 결과를 가진 모든 노드를 연결시켜 1차원 배열로 풀어 표시한다. 따라서 이 1차원 배열에 담긴 정보를 이용해 분류가 수행된다.  

Convolutional 계층에서 특징이 추출되었다면, 이 추출된 특징 값을 기존 뉴럴 네트워크에 넣어 분류하는 작업을 거친다. (Classification / Regression) 그래서 최종 네트워크의 모양은 다음과 같다.

 

  • 참고자료

MIT - Intro To Deep Learning

혁펜하임 - [딥러닝] CNN

모두를 위한 머신러닝/딥러닝

bcho.tistory.com/1149