T'SPACE

다채로운 에디터들의 이야기

컴퓨터공학/인공지능

합성곱과 ReLU, Convolution

Tonny Kang 2024. 8. 6. 16:26
반응형

신경망의 특징 추출: 컨볼루션, ReLU, 그리고 최대값 풀링


신경망에서 특징 추출은 이미지의 중요한 특성을 뽑아내는 과정입니다. 이는 다음과 같은 세 가지 기본 작업으로 이루어집니다:

  1. 특정 특징을 위해 이미지를 필터링 (컨볼루션)
  2. 필터링된 이미지에서 그 특징을 감지 (ReLU)
  3. 이미지를 압축하여 특징을 강화 (최대 풀링)

아래 그림은 이 과정을 시각적으로 보여줍니다. 이 세 가지 작업이 원본 이미지에서 특정 특성(이 경우에는 수평선)을 어떻게 분리해내는지 확인할 수 있습니다.

일반적으로, 네트워크는 한 이미지에서 여러 특징을 병렬로 추출합니다.

728x90

컨볼루션을 이용한 필터링


컨볼루션 레이어는 필터링 작업을 수행합니다. Keras 모델에서 컨볼루션 레이어를 다음과 같이 정의할 수 있습니다:

from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([
    layers.Conv2D(filters=64, kernel_size=3), # 활성화 함수는 없음
    # 다른 레이어들 추가
])

이 파라미터들은 레이어의 가중치활성화와의 관계를 통해 이해할 수 있습니다.

가중치


신경망이 훈련 중에 학습하는 가중치는 주로 컨볼루션 레이어에 포함되어 있습니다. 이 가중치를 커널이라고 부르며, 작은 배열로 표현할 수 있습니다.

커널은 이미지를 스캔하면서 픽셀 값의 가중합을 생성합니다. 이렇게 해서 커널은 편광 렌즈처럼 특정 정보 패턴을 강조하거나 감소시키는 역할을 합니다.

커널은 컨볼루션 레이어가 다음 레이어와 어떻게 연결되는지를 정의합니다. 예를 들어, 위의 커널은 출력의 각 뉴런을 입력의 9개 뉴런과 연결합니다. kernel_size를 설정하여 이러한 연결을 형성하는 방법을 정의합니다. 대부분의 경우, 커널은 홀수 크기(예: kernel_size=(3, 3) 또는 (5, 5))를 가지며, 이는 단일 픽셀이 중심에 오도록 합니다.

컨볼루션 레이어의 커널은 어떤 종류의 특징을 생성할지를 결정합니다. 훈련 중 신경망은 분류 문제를 해결하기 위해 필요한 특징을 찾으려고 합니다. 이는 커널의 최적 값을 찾는 것을 의미합니다.

반응형

활성화


신경망의 활성화특징 맵이라고 부릅니다. 이것은 필터를 이미지에 적용한 결과로, 커널이 추출한 시각적 특징을 포함합니다. 아래는 몇 가지 커널과 그들이 생성한 특징 맵입니다.

커널의 숫자 패턴을 통해 어떤 종류의 특징 맵을 생성하는지 알 수 있습니다. 일반적으로, 컨볼루션이 입력에서 강조하는 것은 커널의 양수 값의 모양과 일치합니다. 위의 왼쪽 및 가운데 커널은 모두 수평 모양을 필터링합니다.

filters 파라미터를 통해, 컨볼루션 레이어에 몇 개의 특징 맵을 출력으로 생성할지 지시할 수 있습니다.

ReLU로 감지


필터링 후, 특징 맵은 활성화 함수(activation function)를 통과합니다. Rectifier function은 다음과 같은 그래프를 가집니다:

ReLU 함수가 부착된 뉴런을 Rectified Linear Unit이라고 부릅니다. 그래서 Rectifier function을 ReLU 활성화 또는 ReLU 함수라고도 합니다.

ReLU 활성화는 별도의 Activation 레이어로 정의할 수 있지만, 대부분 Conv2D의 활성화 함수로 포함시킵니다.

model = keras.Sequential([
    layers.Conv2D(filters=64, kernel_size=3, activation='relu')
    # 다른 레이어들 추가
])

활성화 함수는 픽셀 값을 중요도에 따라 점수 매기는 것으로 생각할 수 있습니다. ReLU 활성화는 음수 값을 중요하지 않다고 판단하고 0으로 설정합니다.

다른 활성화 함수와 마찬가지로 ReLU 함수도 비선형입니다. 이는 네트워크의 모든 레이어의 총 효과가 단일 레이어만으로 얻을 수 있는 것과 다르다는 것을 의미합니다. 비선형성은 네트워크가 깊이 들어가면서 특징이 흥미롭게 결합될 수 있도록 보장합니다.

예제 - 컨볼루션과 ReLU 적용


필터링 단계를 위해 커널을 정의하고 이를 컨볼루션으로 적용해보겠습니다. 이 경우 커널은 "엣지 검출" 커널입니다. tf.constant로 정의할 수 있으며, 이는 Numpy의 np.array와 유사하게 텐서를 생성합니다.

import tensorflow as tf

kernel = tf.constant([
    [-1, -1, -1],
    [-1,  8, -1],
    [-1, -1, -1],
])

plt.figure(figsize=(3, 3))
show_kernel(kernel)

이제 커널을 적용해보겠습니다.

image_filter = tf.nn.conv2d(
    input=image,
    filters=kernel,
    strides=1,
    padding='SAME',
)

plt.figure(figsize=(6, 6))
plt.imshow(tf.squeeze(image_filter))
plt.axis('off')
plt.show();

다음은 ReLU 함수로 감지하는 단계입니다. 이 함수는 파라미터가 없기 때문에 훨씬 간단합니다.

image_detect = tf.nn.relu(image_filter)

plt.figure(figsize=(6, 6))
plt.imshow(tf.squeeze(image_detect))
plt.axis('off')
plt.show();

이제 우리는 특징 맵을 생성했습니다! 이러한 이미지는 신경망의 분류 문제를 해결하는 데 사용됩니다. 특정 특징은 자동차에 더 특징적일 수 있고, 다른 특징은 트럭에 더 특징적일 수 있습니다. 신경망의 훈련 과정에서 이러한 특징을 찾는 것이 목표입니다.

반응형