본문 바로가기
Study/DL

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

by hyeon827 2024. 1. 18.

더 깊은 신경망으로(손글씨 숫자를 인식하는 심층 CNN)

  • 합성곱 계층 모두 3x3 크기의 작은 필터,  활성화 함수는 ReLU
  • 층이 깊어지면서 채널 수가 더 늘어남(16,16,32,32,64,64)
  • 풀링 계층을 추가하여 중간 데이터의 공간 크기를 점차 줄여감
  • 마지막 단의 완젼연결 계층에서는 Dropout 계층 활용
  • 가중치 초깃값은 He 초깃값 사용, Adam을 사용해 가중치 매개변수를 최적화

정확도 99.38%

 

정확도를 더 높이려면 -> 앙상블 학습, 학습률 감소, 데이터 확장

 

데이터 확장

  • 손쉬운 방법이면서도 정확도 개선에 아주 효과적
  • 이미지를 일부 잘라냄 (crop)
  • 좌우를 뒤집 (flip)
  • 회전에 의한 변형(rotate)
  • 이동에 의한 변형(translation)
  • 크기수정(rescale)
  • 밝기변화(lighting condition) 등

 

층을 깊게 하는 이유(이론적인 근거는 아직 부족)

  • ILSVRC로 대표되는 대규모 이미지 인식 대회 상위기법 = 딥러닝(신경망을 더 깊에 만드는 방향)
  • 층을 깊게 하면 정보를 계층적으로 전달할 수 있음(각 층이 학습해야 할 문제를 '풀기 쉬운 단순한 문제'로 분할)
  • 더 적은 매개변수로 같은(혹은 그 이상) 표현력을 얻을 수 있음

 

[5x5 합성곱 연산 1회]

  • 매개변수 25개

  [3x3 합성곱 연산 2회]

  • 출력 데이터는 입력 데이터 5x5 영역을 '보고' 계산(즉, 대체 가능)
  • 매개변수 3x3x2 = 18
  • 차이 9개 -> 층이 깊어질수록 차이는 더욱 커짐

최근 딥러닝 트렌드

  • 2012년 이후 선두는 항상 딥러닝 방식
  • 2012년의 AlexNet이 오류율을 크게 낮췄고, 그 후 딥러닝을 활용한 기법이 꾸준히 정확도 개선해옴
  • 특히 2015년에는 150층이 넘는 심층 신경망인 ResNet이 오류율을 3.5%까지 낮춤

VGG

  • 합성곱 계층과 풀링 계층으로 구성되는 '기본적인' CNN
  • 다만, 비중 있는 층(합성공 계층과 완전연결 계층)을 모두 16층(혹은 19층)으로 심화한 게 특징
  • 3x3의 작은 필터를 사용한 합성곱 계층을 연속으로 거침
  • 합성곱 계층을 2~4회 연속으로 풀링 계층을 두어 크기를 절반으로 줄이는 것을 반복
  • 2014년 대회에서 2위를 했지만, 구성이 간단하여 응용하기 좋아 많은 기술자들이 즐겨 사용

GoogLeNet

  • 2014년 ILSVRC 대회 우승 모델
  • 세로 방향 깊이뿐 아니라 가로 방향도 깊다는 점이 특징
  • 가로 방향에 '폭'이 있고 이를 인셉션 구조라고 함

  • 인셉션 구조는 크기가 다른 필터(와 풀링)을 여러 개 적용하여 그 결과 결합
  • 해당 구조를 하나의 빌딩 블록(구성요소)으로 사용
  • 1x1의 필터를 사용한 합성곱 계층을 많은 곳에서 사용
  • -> 채널 크기를 줄이는 것으로, 파라미터 수가 과도하게 늘어나는 것을 방지

 

ResNet

  • Microsoft 팀이 개발한 네트워크
  • 톱-5 오류율이 겨우 3.5%라는 경이적인 결과(2015 ILSVRC 대회 우승)
  • 딥러닝 학습에서 층이 지나치게 깊으면 학습이 잘 되지 않고, 오히려 성능이 떨어지는 경우 존재
  • ResNet은 이런 문제를 '스킵 연결' 로 해결 (물론 층을 깊게 하는 데는 여전히 한계)

  • 스킵 연결이란, 입력 데이터를 합성곱 계층을 건너뛰어 출력에 바로 더하는 구조
  • 역전파 때 스킵 연결이 심호 감쇠를 막아줌
  • =상류의 기울기를 그대로 하류로 보냄
  • =기울기가 작아지거나 지나치게 커질 걱정 없이 앞 층에 '의미있는 기울기' 전달 기대

  • ResNet = 복잡한 네트워크 + 깊지 않은 네트워크(합성곱 계층 2개층마다 건너뜀)

 

*참고

 

전이학습

  • 학습된 가중치를 다른 신경망에 복사한 다음, 그 상태로 재학습 수행
  • 보유한 데이터셋이 적을 때 특히 유용한 방법

 

풀어야 할 숙제

  • AlexNet를 예시로 오랜시간을 합성곱 계층에서 소요(GPU 95%, CPU 89%)
  • 딥러닝 과제 = 합성곱 계층에서 이뤄지는 연산 어떻게 고속으로 효율적으로 하느냐

GPU를 활용한 고속화

  • GPU를 그래픽 처리 뿐 아니라 범용 수치 연산에도 이용(GPU 컴퓨팅)
  • 딥러닝에서는 대량의 단일 곱셈-누산을 수행해야 함
  • 대량의 병렬 연산은 GPU 특기(CPU는 연속적인 복잡한 계산을 잘 처리)

  • CPU에서는 40여 일이나 걸리지만 GPU로는 6일까지 단축
  • cuDNN(CUDA 위에서 동작)이라는 딥러닝에 최적화된 라이브러리 이용하면 더욱 빨라짐 확인

분산 학습

  • 딥러닝 계산을 더욱 고속화하고자 다수의 GPU와 기기로 계산을 분산
  • 구글의 텐서플로와 마이크로소프트의 CNTK 가 분산 학습 지원
  • GPU 100개를 사용하니 하나일 때보다 56배 빨라짐(7일-> 3시간)

연산 정밀도와 비트 줄이기

  • 메모리 용량 면에서는 대량의 가중치 매개변수와 중간 데이터를 메모리에 저장해야 함
  • 버스 대역폭 면에서는 GPU의 버스를 흐르는 데이터가 많아져 한계를 넘어서면 병목이 됨
  • => 네트워크로 주고받는 데이터의 비트 수를 최소로 만드는 것이 바람직
  • 실험을 통해 신경망이 가지고 있는 견고성(노이즈가 조금 섞여있어도 출력 결과가 달라지지 않음)에 따라 딥러닝은 16비트 반정밀도만 사용해도 학습에 문제없다고 알려짐
  • 실제로 엔비디아의 2016년 GPU인 파스칼 아키텍처는 16비트 반정밀도 지원(앞으로 표준적으로 이용되리라 생각)

 

딥러닝의 활용

 

사물 검출

이미지 어딘가에 있을 사물의 위치를 알아내야 하기에 사물 인식보다 어려운 문제

 

   [R-CNN 활용]

  • 먼저 사물이 위치한 영역을 찾아내고, 추출한 각 영역에 CNN 적용하여 클래스 분류
  • R-CNN 논문에서는 후보 영역 추출을 Selective Search 기법 사용
  • 최근에는 후보 영역 추출까지 CNN으로 처리하는 Faster R-CNN 기법 등장(속도 측면에서 아주 빠름)

분할

  • 이미지를 픽셀 수준에서 분류하는 문제
  • 픽셀 단위로 객체마다 채색된 지도데이터 사용해 학습
  • 추론할 때 입력 이미지의 모든 픽셀을 분류

   [FCN 활용] -Fully Convolutional Network

  • 합성곱 계층만으로 구성된 네트워크
  • 단 한번의 forward 처리로 모든 픽셀의 클래스를 분류
  • 완전연결계층 존재 X -> 1차원으로 변환하지 않아 공간 볼륨을 유지한 채 마지막 출력까지 처리
  • 역합성곱을 통해 FCN의 마지막에 이중 선형 보간에 의한 선형 확대(입력이미지와 같은 크기까지 단번에 확대)

 

사진 캡션 생성 

  • CV+NLP 융합기술. 사진만 보고 캡션을 생성

   [NIC 모델] -Neural Image Caption

  • 심층 CNN과 자연어를 다루는 순환신경망(RNN)으로 구성
  • CNN으로 사진 특징 추출 -> RNN에 전달 -> 텍스트를 순환적으로 생성

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

 

딥러닝의 미래

 

이미지 스타일(변환)

  • 딥러닝을 활용해 화풍을 적용한 그림을 창조
  • 스타일 이미지 + 콘텐츠 이미지로 새로운 그림을 창조

 

이미지 생성

  • 대량의 이미지 학습 후, 아무런 입력 이미지 없이 새로운 그림을 그려냄

    [DCGAN 기법으로 생성]

  • 생성자와 식별자로 불리는 2개의 신경망 이용
  • 생성자가 진짜와 똑같은 이미지를 생성
  • 식별자는 그것이 진짜인지(생성자가 생성한 이미지인지, 아니면 실제로 촬영된 이미지인지) 판정
  • 둘을 겨뤄 생성자는 더 정교한 가짜 이미지 생성기술 학습하고 식별자는 더 정확하게 간파할 수 있도록 성장
  • 최종적으로 생성자가 진짜와 착각할 정도의 이미지 생성

 

자율 주행

주위 환경 인식하는 기술에 딥러닝이 큰 역할을 함

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

 

Deep Q-Network (강화학습)

 

[강화학습]

  • 에이전트가 환경에 맞게 행동을 선택하고, 그 행동에 의해서 환경이 변한다는 게 기본적인 틀
  • 환경이 변화하면 에이전트는 어떠한 보상을 얻고 더 좋은 보상을 받기 위해 스스로 학습

 

[DQN]

  • 딥러닝을 사용한 강화학습
  • Q학습이라는 강화학습 알고리즘 기초 -> 최적 행동 가치 함수로 최적인 행동을 정함
  • 이 함수를 딥러닝(CNN)으로 비슷하게 흉내내어 사용하는 것이 DQN