while (1): study();

Ch7. 합성곱 신경망 본문

독서

Ch7. 합성곱 신경망

전국민실업화 2021. 7. 22. 02:11
728x90

 이미지 처리의 기반은 CNN 아키텍처이며, CNN 아키텍처는 합성곱 연산을 사용합니다. 이는 필터와 입력 데이터에 대해서 대응하는 위치의 원소끼리 곱한 후 총합을 구하는 것입니다. 이 계산을 단일 곱셈-누산(FMA; Fused Multiply-Add)라고 합니다.

 엄밀히 말하면 딥러닝에서의 연산은 교차상관이라고 부르는 것이 맞다고 합니다. 필터를 플리핑(Flipping)하면 합성곱 연산, 그렇지 않으면 교차상관입니다. 하지만 딥러닝에서 그렇게 엄밀히 구분하여 부르는 듯 하지는 않다고 하네요.

 합성곱 연산을 수행하면 출력의 크기는 다음과 같이 계산됩니다. H, W는 입력의 높이와 너비, FH, FW는 필터의 높이와 너비, OH, OW는 출력의 높이와 너비, P는 패딩, S는 스트라이드를 의미합니다.

$$OH = {H + 2P - FH \over S} + 1$$

$$OW = {W + 2P - FW \over S} + 1$$ 

이 때 ${H + 2P - FH \over S}$나 ${W + 2P - FW \over S}$가 정수가 아니라면 예외 처리를 해주던가, 혹은 반올림하여 정수로 바꾸어 주어야 합니다.

 

단순히 4차원 배열에 대해서 원소마다 순회하는 것은 매우 비효율적인 일이기 때문에, 여기서는 일종의 트릭을 사용합니다. 4차원 배열을 펼쳐 2차원 배열로 만든 뒤, 필터와 내적을 수행하고 다시 4차원 배열로 복구하는 것입니다.

def im2col(input_data, filter_h, filter_w, stride=1, pad=0) :
    N, C, H, W = input_data.shape
    out_h = (H + 2 * pad - filter_h) // stride + 1
    out_w = (W + 2 * pad - filter_w) // stride + 1

    img = np.pad(input_data, [(0, 0), (0, 0), (pad, pad), (pad, pad)], 'constant')
    col = np.zeros((N, C, filter_h, filter_w, out_h, out_w))

    for y in range(filter_h) :
        y_max = y + stride * out_h
        for x in range(filter_w) :
            x_max = x + stride * out_w
            col[:, :, y, x, :, :] = img[:, :, y :y_max :stride, x :x_max :stride]

    col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N * out_h * out_w, -1)
    return col

이와 같은 코드로 배열을 펼칠 수 있으며, 뭉치는 작업은 반대 방향으로 진행하면 됩니다. 결과적으로 CNN은 층이 깊어질수록 이미지의 더 상세한 정보들을 이해할 수 있도록 학습됩니다.

 CNN을 활용하면 모델은 지금까지보다 월등히 높은 정확도를 보입니다.

 


이번 챕터는 실험을 하거나 한다기보다는 깔끔하게 정리하는 느낌으로 포스팅을 작성했습니다. 챕터 8은 옛날 이야기이기도 하고, 정말 대부분 알던 내용이라 볼 게 없네요. 애초에 이미지 처리에는 관심이 없기도 하고.. 2권의 자연어 처리로 어서 넘어가고 싶은 마음이네요.

 그렇다고 해도 정말 많은 것들을 배운 책입니다. 지금까지 놓치고 있던 것들도 이번에 다시 잡게 된 것 같은 기분입니다. 2권으로 들어가기 전에, 우선 1권 내용을 좀 정리하고, 언급된 논문들 중 흥미로운 것들 좀 읽어보고, 미뤘던 코딩테스트 공부도 좀 해보고 2권에 본격적으로 들어갈 예정입니다.

728x90

'독서' 카테고리의 다른 글

Ch2. 자연어와 단어의 분산 표현  (0) 2021.07.25
Ch1. 신경망 복습  (0) 2021.07.24
Ch6. 학습 관련 기술들  (0) 2021.07.21
Ch5. 오차역전파법  (0) 2021.07.19
Ch4. 신경망 학습  (0) 2021.07.18
Comments