[밑시딥 1] Chapter 8. 딥러닝

Seong Woong Kim·2023년 11월 25일

8.1 더 깊게


8.1.1 더 깊은 신경망으로

여기서 사용되는 합성곱 계층은 모두 3x3 크기의 작은 필터로, 층이 깊어지면서 채널 수가 더 늘어나는 것이 특징이다.

  • 합성곱 계층의 채널 수는 앞 계층에서부터 순서대로 16, 16, 32, 32, 64, 64로 늘어간다

또 그림과 같이 풀링 계층을 추가해 중간 데이터와 공간 크기를 점차 줄여간다.

그리고 마지막 단의 완전연결 계층에서는 드롭아웃 계층을 사용한다.

이를 정리하면 이 신경망의 특징은 다음과 같다.

3x3의 작은 필터를 사용한 합성곱 계층
활성화 함수는 ReLU
완전연결 계층 뒤에 드롭아웃 계층 사용
Adam을 사용해 최적화
가중치 초기값은 'He의 초깃값'


8.1.2 정확도를 더 높이려면

데이터 확장data  augmentation^{data\;augmentation}은 입력이미지(훈련 이미지)를 알고리즘을 동원해 인위적으로 확장한다.

입력 이미지를 회전하거나 세로로 이동하는 등 미세한 변화를 주어 이미지의 개수를 늘릴 수 있는데 이는 데이터가 몇 개 없을 때 특히 효과적이다.

이 외에도 다양한 방법으로 이미지를 확장할 수 있다.

  • 예를 들어 이미지 일부를 잘라내는 crop이나 좌우를 뒤집는 flip 등이 있다.

데이터 확장을 동원해 훈련 이미지의 개수를 늘릴 수 있다면 딥러닝의 인식 수준을 개선할 수 있다.


8.1.3 깊게 하는 이유

층을 깊게 하는 것의 중요성

신경망의 매개변수 수가 줄어든다.

  • 층을 깊게 한 신경망은 깊지 않은경우보다 적은 매개변수로 같은 수준 혹은 그 이상의 표현력을 달성할 수 있다.

  • 5x5 합성곱 연산 1회는 3x3 합성곱 연산을 2회 수행하여 대체할 수 있다.
  • 게다가 전자의 매개변수 수가 25개(5x5)인 반면, 후자는 총 18개(2x3x3)이며, 매개변수 수는 층을 반복할수록 적어진다.
    • 그 개수의 차이는 층이 깊어질수록 커짐

💡
작은 필터를 겹쳐 신경망을 깊게 할 때의 장점은 매개변수 수를 줄여 넓은 수용 영역receptive  field^{receptive\;field}을 소화할 수 있다는 데 있다.

  • 수용 영역은 뉴런에 변화를 일으키는 국소적인 공간 영역이다.

게다가 층을 거듭하면서 ReLU 등의 활성화 함수를 합성곱 계층 사이에 끼움으로써 신경망의 표현력이 개선된다.

  • 이는 활성화 함수가 신경망에 비선형 힘을 가하고, 비선형 함수가 겹치면서 더 복잡한 것도 표현할 수 있게 되기 때문

학습의 효율성도 층을 깊게 하는 것의 이점이다.

  • 층을 깊게 함으로써 학습 데이터의 양을 줄여 학습을 고속으로 수행할 수 있다는 뜻

  • 신경망을 깊게 하면 학습해야 할 문제를 계층적으로 분해할 수 있다.

    • 각 층이 학습해야할 문제를 더 단순한 문네로 대체할 수 있다.
    • 예를 들어 처음 층은 에지 학습에 전념하여 적은 학습 데이터로 효율적으로 학습할 수 있다.

또 층을 깊게 하면 정보를 계층적으로 전달할 수 있다는 점도 중요하다.

  • 에지를 추출한 층의 다음 층은 에지 정보를 쓸 수 있고, 더 고도의 패턴을 효과적으로 학습하리라 기대할 수 있다.
  • 즉, 층을 깊이 함으로써 각 층이 학습해야 할 문제를 풀기 쉬운 단순한 문제로 분해할 수 있어 효율적으로 학습하리라 기대할 수 있다.


8.2 딥러닝의 초기 역사


8.2.2 VGG

합성곱 계층과 풀링 계층으로 구성되는 기본적인 CNN이다.

  • 비중 있는 층(합성곱 계층, 완전연결 계층)을 모두 16층(혹은 19층)으로 심화한 것이 특징임

3x3의 작은 필터를 사용한 합성곱 계층을 연속으로 거친다.

합성곱 계층을 2 ~ 4회 연속으로 풀링 계층을 두어 크기를 절반으로 줄이는 처리를 반복한다.

그리고 마지막에는 완전연결 계층을 통과시켜 결과를 출력한다.

구성이 간단하여 응용하기 좋다.


8.2.3 GoogLeNet

세로 방향 깊이 뿐만 아니라 가로 방향도 깊다는 점이 특징이다.

  • 또한 가로 방향에 이 존재하며, 이를 인셉션 구조라 함

인셉션 구조란 크기가 다른 필터와 풀링 여러 개를 적용하여 그 결과를 결합하는 것이다.

  • 이러한 인셉션 구조를 하나의 빌딩 블록으로 사용함

GoogLeNet에서는 1x1 크기의 필터를 사용한 합성곱 계층을 많은 곳에서 사용하는데, 이는 매개변수 제거고속 처리에 기여한다.



8.2.4 ResNet

ResNetResidual  Network^{Residual\;Network}은 마이크로소프트 팀이 개발한 네트워크이다.

딥러닝 학습에서는 층이 지나치게 깊으면 학습이 잘 되지 않고 오히려 성능이 떨어지는데, ResNet은 이런 문제를 스킵 연결Skip  Connection^{Skip\;Connection}로 해결했다.

스킵 연결이란 입력 데이터를 합성곱 계층을 건너뛰어 출력에 바로 더하는 구조를 뜻한다.

"층의 깊이에 비례해서 성능을 향상시킬 수 있는 것이 ResNet의 핵심이다.

  • 스킵 연결은 층이 깊어져도 학습을 효율적으로 할 수 있도록 도와주는데, 이는 역전파 때 스킵 연결이 신호 감소를 막아주기 때문이다.
  • 즉, 층을 깊게 할수록 기울기가 작아지는 기울기 소실 문제를 스킵 연결이 줄여주는 것임


💡
전이 학습transfer  learning^{transfer\;learning}

  • 학습된 가중치(혹은 그 일부)를 다른 신경망에 복사한 다음, 그 상태로 재학습fine  tuning^{fine\;tuning}을 수행한다.
  • e.g.
  • VGG와 구성이 같은 신경망을 준비하고, 미리 학습된 가중치를 초깃값으로 설정한 후, 새로운 데이터셋을 대상으로 재학습fine tuning을 수행

보유한 데이터 셋이 적을 때 특히 유용함



8.3 더 빠르게 (딥러닝 고속화)

딥러닝 프레임워크 대부분은 GPU를 활용해 대량의 연산을 고속으로 처리할 수 있다.


8.3.1 풀어야 할 숙제

딥러닝에서 어떠한 처리에 시간이 소요되는지 나타낸 그래프는 다음과 같다.

AlexNet에서는 오랜 시간을 합성곱 계층에서 소요한다.

합성곱 계층에서 이뤄지는 연산을 어떻게 고속으로 효율적으로 하느냐가 딥러닝의 과제라고 할 수 있다.


8.3.2 GPU를 활용한 고속화

GPU는 원래 그래픽 전용 보드에 이용해왔습니다. 그러나 최근에는 그래픽 처리뿐 아니라 범용 수치 연산에도 이용한다.

GPU 컴퓨팅의 목적 : GPU는 병렬 수치 연산을 고속으로 처리할 수 있으니, 그 압도적인 힘을 다양한 용도로 활용하자는 것

  • GPU로 범용 수치 연산을 수행하는 것을 GPU 컴퓨팅이라고 함

딥러닝에서는 대량의 단일 곱셉-누산(또는 큰 행렬의 곱)을 수행해야 한다.

딥러닝 연산에서는 GPU를 이용하면 놀라운 정도로 빠르게 결과를 얻을 수 있다.

  • GPU는 작은 단위로 계산하기보다는 큰 덩어리를 한 번에 계산하는 데 유리하기 때문.

CUDA는 엔비디아의 GPU 컴퓨팅용 통합 개발 환경이다.

cuDNN은 CUDA 위에서 동작하는 라이브러리로, 딥러닝에 최적화된 함수 등이 구현되어 있다.


8.3.3 분산 학습

뛰어난 신경망을 만들려면 시험을 수없이 반복해야 하고, 그러려면 1회 학습에 걸리는 시간을 최대한 단축하고 싶다는 요구가 필연적으로 생겨난다.

  • 그래서 딥러닝 학습을 수평 확장scale  out^{scale\;out}하자는 아이디어(즉, 분산 학습)가 중요해지는 것

현재 대부분의 딥러닝 프레워크는 GPU를 활용하여 대량의 연산을 고속으로 처리해주며, 학습을 복수의 GPU와 여러 기기로 분산 수행한다.

여러 기기를 연결하여 GPU를 100개까지 사용하니 하나일 때보다 56배 빨라졌다.


8.3.4 연산 정밀도와 비트 줄이기

계산 능력 외에도 메모리 용량버스 대역폭 등이 딥러닝 고속화에 병목이 될 수 있다.

메모리 용량 면에서는 대량의 가중치 매개변수와 중간 데이터를 메모리에 저장해야 한다는 것을 생각해야 한다.

버스 대역폭 면에서는 GPU의 버스를 흐르는 데이터가 많아져 한계를 넘어서면 병목이 된다.

이런 경우들을 고려하면 네트워크로 주고받는 데이터의 비트수는 최소로 만드는 것이 바람직하다.

컴퓨터에서 실수를 표현하는 방식으로 32비트 단정밀도singleprecision^{single-precision}64비트 배정밀도doubleprecision^{double-precision} 부동소수점 등의 포맷이 있다.

딥러닝은 16비트 반정밀도halfprecision^{half-precision}만 사용해도 학습에 문제가 없다고 알려져있다.



8.4 딥러닝의 활용


8.4.1 사물 검출

사물 검출은 이미지 속에 담긴 사물의 위치와 종류(클래스)를 알아내는 기술이다.

R-CNN 방식으로 사물 검출을 수행하는 방식이 유명하다.

R-CNN의 처리 흐름은 다음과 같다.

먼저 사물이 위치한 영역을 찾아내고, 추출한 각 영역에 CNN을 적용하여 클래스를 분류하는 것이다.

여기서 이미지를 사각형으로 변형하거나 분류할 때 SVM을 사용하는 등 실제 처리 흐름은 다소 복잡하지만 큰 틀에서는 이 두가지 처리(후보 영역 추출과 CNN 특징 계산)로 구성된다.

후보 영역 추출(사물처럼 보이는 물체를 미리 찾아 처리)에서는 컴퓨터 비전 분야에서 발전해온 다양한 기법을 사용할 수 있다.


8.4.2 분할

분할segmentation^{segmentation}이란 이미지를 픽셀 수준에서 분류하는 문제이다.

픽셀 단위로 객체마다 채색된 지도supervised^{supervised}데이터를 사용해 학습한다.

그리고 추론할 때 입력 이미지의 모든 픽셀을 분류한다.

신경망을 이용해 분할하는 가장 단순한 방법은 모든 픽셀 각각을 추론하는 것이다.

모든 픽셀을 대상으로 하나씩 추론 작업을 실행한다.

그러나 이런 식으로는 픽셀 수만큼 forward 처리를 해야 하고 긴 시간이 걸리게 된다.

이런 낭비를 줄여주는 기법으로 단 한번의 forward 처리로 모든 픽셀의 클래스를 분류해주는 FCNFullyConvolutionalNetwork^{Fully Convolutional Network} 기법이 고안되었다.

FCN은 합성곱 계층만으로 구성된 네트워크를 의미한다.

일반적인 CNN이 완전연결 계층을 이용하는 반면, FCN은 이 완전연결 계층을 같은 기능을 하는 합성곱 계층으로 바꾼다.

사물 인식에서 사용한 신경망의 완전연결 계층에서는 중간 데이터의 공간 볼륨을 1차원으로 변환하여 한 줄로 늘어선 노드들이 처리했으나, FCN에서는 공간 볼륨을 유지한 채 마지막 출력까지 처리할 수 있다.

FCN은 마지막에 공간 크기를 확대하는 처리를 도입했다는 것도 특징이다. 이 확대 처리로 인해 줄어든 중간 데이터를 입력 이미지와 같은 크기까지 단번에 확대할 수 있따.

FCN의 마지막에 수행하는 확대는 이중 선형 보간에 의한 선형확대이다.

FCN에서는 이 선형 확대를 역합성곱 연산으로 구현해내고 있다.


8.4.3 사진 캡션 생성

NIC(Neural Image Caption): 심층 CNN과 자연어를 다루는 순환신경망(Recurrent Neural Network)으로 구성된다.

RNN: 순환적 관계를 갖는 신경망으로 자연어나 시계열 데이터 등의 연속된 데이터를 다룰 때 많이 활용한다.

멀티모달 처리(multimodal processing): 사진이나 자연어와 같은 여러 종류의 정보를 조합하고 처리하는 것



8.5 딥러닝의 미래

8.5.1 이미지 스타일(화풍) 변환

두 이미지(콘텐츠 이미지, 스타일 이미지)를 입력해서 새로운 그림을 생성하는 연구이다.

네트워크의 중간 데이터가 콘텐츠 이미지의 중간 데이터와 비슷해지도록 학습한다.

스타일 이미지의 화풍을 흡수하기 위해 스타일 행렬이라는 개념을 도입하고 스타일 행렬의 오차를 줄이도록 학습한다.


8.5.2 이미지 생성

DCGAN(Deep Convolutional Generative Adversarial Network)

  • 이미지를 생성하는 과정을 모델화한다.
  • 생성자(generator)와 식별자(discriminator)로 불리는 2개의 신경망을 이용한다.
  • 생성자 는 진짜와 똑같은 이미지를 생성하고 식별자 는 그것이 진짜인지(생성 이미지인지, 촬영된 이미지인지)를 판정한다. 생성자와 식별자가 겨루도록 학습시켜 최종적으로 생성자는 진짜와 착각할 정도의 이미지를 그려낸다.

8.5.3 자율 주행

안전한 주행 영역을 올바로 인식(주위 환경 인식)

SegNet : CNN 기반 신경망. 입력 이미지를 분할(픽셀 수준에서 판정)한다.


8.5.4 Deep-Q-Network(강화학습)

컴퓨터도 사람과 같이 시행착오 과정에서 스스로 학습하게 하려는 분야가 있는데 이를 강화학습reinforcement  learning^{reinforcement\;learning}이라 한다.

강화학습에서는 에이전트라는 것이 환경에 맞게 행동을 선택하고 그 행동에 의해서 환경이 변한다는 게 기본적인 틀이다.

강화학습의 목적은 더 나은 보상을 받는 쪽으로 에이전트의 행동 지침을 바로잡는 것이다.

강화학습에서 주의할 점은 보상이 정해진 것이 아니라 예상 보상이라는 점이다.

딥러닝을 사용한 강화학습 중 Deep Q-Network라는 방법이 있다.

  • 이는 Q학습이라는 강화학습 알고리즘을 기초로 한다.

Q학습에서는 최적 행동 가치 함수로 최적인 행동을 정한다.

이 함수를 딥러닝(CNN)으로 비슷하게 흉내 내어 사용하는 것이 DQN이다.



8.6 정리

  • 수많은 문제에서 신경망을 더 깊게 하여 성능을 개선할 수 있다.
  • 이미지 인식 기술 대화인 ILSVRC에서는 최근 딥러닝 기반 기법이 상위권을 독점하고 있으며, 그 깊이도 더 깊어지는 추세다.
  • 유명한 신경망으로는 VGG, GoogLeNet, ResNet이 있다.
  • GPU와 분산 학습, 비트 정밀도 감소 등으로 딥러닝을 고속화할 수 있다.
  • 딥러닝(신경망)은 사물 인식뿐 아니라 사물 검출과 분할에도 이용할 수 있다.
  • 딥러닝의 응용 분야로는 사진의캡션 생성, 이미지 생성, 강화학습 등이 있다. 최근에는 자율 주행에도 딥러닝을 접목하고 있어 기대된다.
profile
성장과 연구하는 자세를 추구하는 AI 연구개발자

0개의 댓글