본문 바로가기

About my life/Undergraduate Researcher

Convolutional Neural Networks (CNN)

728x90
반응형

CNN : 인공 신경망 (ANN)의 한 종류로 , 흔히 이미지 인식 및 처리 (to analyze visual imagery)에 사용되고, CNN의 구조를 잘 보면 특정 자극에 대한 시각 피질의 뉴런 반응과 유사하다고 한다. _ Wikipedia

-> input -> padding -> convolution -> pooling -> convolution -> ㆍㆍㆍ -> flattening -> output

-> 특정 자극에 대한 시각 피질의 뉴런 반응을 인공적으로 유사하게 만든 신경망이라 이해하겠다.

-> +) 이미지에서 픽셀 단위 한 개가 중요한 게 아니라 어떤 뭉쳐있는 픽셀들이 특징점이 있는 것이므로 (개의 머리,몸통 등) convolution layer 할 때 filter, stride 를 잘 선정해주는 것으로 이해했다.

 

 

 

Convoultion : 합성곱 이라는데 합성곱이 뭘까.

-> 이건 정의인데 convolution 계산과 어떤 게 연관되어 있는 건 지 잘 모르겠으니 일단 받아들이자. 적분한 값이 f * g 랑 같다고 한다.

 

 

 

 

Convolutional Layer : sliding window 방식으로 이동해가며 합성곱을 한다는데, 대응되는 숫자끼리 곱한 뒤 모든 숫자를 더해주면 된다고 한다. (필터를 stride 1로 convolution 한 결과가 특성임)

-> bias 도 넣는다고 함.

-> 이게 합성곱 식이랑 무슨 연관이 있는 지 모르겠지만 convolution 계산 원리는 알겠다.

 

-> 이동하는 방향의 수에 다라서 1D, 2D, 3D 로 나뉜다고 함.

 

 

 

 

 

Stride : filter를 input에 적용할 때 움직이는 간격이라고 한다.

-> stride : 3 인 경우 stride가 4가 아니라 3이 맞는 건가 의문이 든다.

-> +) 게시글 작성자 분께서 stride 3 (x) stride 4  (o) 라고 답변해주셨다. 따라서 의문점 해결

 

 

 

 

Padding : 위에 그림에서 stride 1이라 가정했을 때, 끝까지 convolution 한다고 생각해봐요. 중심부는 4번 겹쳐지는데 모서리 부분은 더 적게 겹쳐지는 부분들이 있죠 ? 그러면 모든 정보를 공평하게 계산한게 아니죠. 따라서 padding 을 통해 이를 해결한다고 이해했어요.

-> 정보 손실도 그렇지만, convolution 할 수록 행렬 크기가 작아짐을 방지하는 것도 있다고 하네요.

 

 

 

 

 

Pooling Layer : convolution 이랑 무슨 차이인가 했더니만, pooling 은 filter를 이용해서 하는 게 아니라 그냥 그 입력 데이터 그 이미지 그 자체를 조금 덜 표현하는 대신에 크기를 조금 줄인 이미지 그런 느낌 ? 당연히 overfitting problem 해결도 어느정도 되겠지 ?

-> Max pooling , Average pooling 이 있는데 Max pooling 성능이 더 좋다고 함.

-> 어떤 데이터의 특징점들은 어느정도 유지하되, 그 데이터의 크기를 조금 줄이는 방법

 

 

 

 

Flattening Layer : flatterning layer의 목적은 어떤 특성이 추출되면 fully connected layer 로 추출된 이미지를 분류하기 위함이라고 한다.

-> convolution 하여 추출된 특징들을 neural network에 넣기 전에 형식 변환해주는 느낌으로 이해하겠다.

 

 

 

결론 : 

- CNN 목적,원리는 이해했음

- Convolution 합성곱 이라는 단어가 와닿지 않아, 실제로 구현해보거나 수학적인 이해가 필요함.

- 위 정보를 쉽게 설명해주신 YJJo께 감사합니다. 

 

 

Ex) 1D CNN

1차원 CNN은 주로 텍스트 분석, 시계열 분석을 하는데 주로 많이 사용된다고 함.

여기서 헷갈렸던 개념이 kernel_size와 filters의 개념인데

 

tensorflow model을 학습시킬 때 , 

x = tf.keras.layers.Conv1D(filters = 32, kernel_size=4, strides = 1, padding = 'valid', activation='relu')(x)

위와 같은 형식으로 학습시키게 되어있다. 

위의 경우 kernel_size가 4인 32개의 서로 다른 필터를 생성한다는 것임.

 

 

Reference 

https://yjjo.tistory.com/8

https://stackoverflow.com/questions/46503816/keras-conv1d-layer-parameters-filters-and-kernel-size

728x90
반응형

'About my life > Undergraduate Researcher' 카테고리의 다른 글

[Journal] Outline  (0) 2023.06.26
webots simulation DQN  (0) 2023.03.02
Webots error  (1) 2023.02.14
Present Path  (0) 2023.02.08
Long Short-Term Memory (LSTM)  (0) 2023.02.06