AI tech

밑바닥부터 시작하는 딥러닝 정리 Chapter 8 - 딥러닝

도리컴 2024. 2. 13. 14:58
반응형
  • 딥러닝의 특징과 과제 + 가능성 살펴볼 예정
  • 오늘날의 첨단 딥러닝에 대해

8.1 더 깊게

  • 그동안 배운 기술을 집약하고, 심층 심경망을 만들 예정
  • MNIST 데이터셋 손글씨 숫자인식

더 깊은 신경망으로

  • 아래와 같은 CNN 구성 예정

  •  
    • 여기서 사용하는 합성곱 계층 : 모두 3*3 필터 사용
    • → 층이 깊어지면서 채널 수가 더 늘어남
    • 활성화 함수는 ReLU
    • 풀링 계층 추가 → 중간 데이터 공간 크기 줄여감
    • 마지막 완전연결 계층 → 드롭아웃 계층 사용
    • 초깃값 : He 초깃값
    • 가중치 매개변수 갱신(최적화) : Adam

 

  • 결과부터 말하면, 이 신경망의 정확도는 99.38%
    • 인식하지 못한 이미지들

  •  
    • 인간도 판단하기 어려운 이미지가 많음
    • 이처럼 심층 CNN은 정확도가 높고, 잠재력이 크다는 걸 느낄 수 있다~

정확도를 더 높이려면

  • 다양한 데이터셋 대상으로, 그동안 발표한 기법들의 정확도 순위 정리
    • What is the class of the image (웹사이트)

  •  
    •  
      •  
      •  
        • Neural networks, Deep, convolutional이라는 키워드 돋보임
        • 상위권은 대부분 CNN 기초로 한 기법들 위주임
        • 위 목록의 기법들은 CNN을 그다지 깊이 안씀(합성곱 2개, 완전연결 계층 2개 정도)
        • Note
          • MNIST 데이터셋은 층이 깊지 않아도 현시점 기준 최고 수준의 결과가 나옴
          • 이유 : 손글씨 숫자라는 문제가 비교적 단순하기 때문
          • 나중에 등장하는 대규모 일반 사물 인식
            • 문제가 훨씬 복잡 → 층을 깊게하면 정확도 상승앙상블, 학습률 감소, 데이터 확장(augmentation) → 정확도 업
      • Augmentation소개
        • 입력 이미지를 알고리즘을 동원해서 인위적으로 확장
        • 회전, 세로로 이동 등 미세한 변화 줌
        • 데이터 몇 개 없을 때 효과적인 수단~
        • crop(일부 잘라내기), flip(뒤집기) 등도 있음
        • 밝기 등의 외형 변화, 확대/축소 등의 스케일 변화도 좋음

깊게 하는 이유

  • 층을 깊게 하는 것의 중요성 + 뒷받침하는 데이터 설명 소개
  • ILSVRC로 대표되는 대규모 이미지 인식 대회가 근거
    • 여기 상위 랭크 기법들은 대부분 신경망을 더 깊게 만드는 경향

층을 깊게 할 때의 이점

  • 신경망의 매개변수 수가 줄어든다~
    • 적은 매개변수로 같은, 혹은 그 이상 수준의 표현력 달성
    • 합성곱 연산에서의 필터 크기에 주목해보자!(예시 1)
      • 핵심 : 출력의 각 노드입력의 어느 영역으로부터 계산되었는가?
      • 위 예시 : 입력의 5*5 영역에서 출력이 계산됨

  •  
    • 합성곱 연산 2번 반복 예(예시 2)
      • 핵심 : 출력은 입력의 5*5부분을 ‘보고’ 계산하게 된다!

  •  
    • 예시 1예시 2 의 파라미터 수를 비교하면?
      • 예시 1 : 5*5 = 25개
      • 예시 2 : 233 = 18개
      • 이 차이는 층이 깊어질 수록 커짐!
    • 작은 필터를 겹쳐 신경망을 깊게 하면 뭐가 좋지?
      • 매개변수 수를 줄임 → 넓은 수용 영역을 소화할 수 있음
        • 수용 영역, receptive filed : 뉴런에 변화를 일으키는 국소적 공간 영역
      • 층이 거듭되면서, ReLU 같은 활성화 함수가 신경망의 표현력 개선됨
        • ‘비선형’ 힘을 가하고, 이게 겹치면서 복잡한 표현이 가능해짐
  • 학습의 효율성이 증가한다~
    • 층을 깊게 한다? → 학습데이터 양을 줄임 → 학습 빠르게 수행 가능
    • 이게 무슨 말? → 7.6 CNN 시각화하기 떠올려보면 됨
      • 7.6에서 했던 말
        • 합성곱 계층이 정보를 계층적으로 추출한다~
        • 에지 등 단순한 패턴에 뉴런이 반응 + 층 깊어지면서 복잡한 것에 반응!
      • 즉, 특정 객체의 특징을 이해하려면 변화가 풍부하고 많은 학습 데이터 필요 → 오래 걸림
      • 층이 깊어지면? → 학습해야 할 문제를 계층적으로 분해 가능하다
      • → 핵심 : 각 층이 학습해야 할 문제가 더 단순해짐
      • 그렇다면, 처음 층에서 적은 데이터로 특정 학습을 효율적으로 할 수 있다!
  • 정보를 계층적으로 전달할 수 있다~
    • 각 층이 학습해야 할 문제를 풀기 쉬운 단순한 문제로 분해하는 걸 기대할 수 있음

8.2 딥러닝의 초기 역사

  • 큰 주목은 어디서? - ILSVRC의 2012년 대회(이미지 인식 기술을 겨루는 장)
    • ILSVRC : ImageNet Large Scale Visual Recognition Challenge)
    • 2012 대회에서 AlexNet이 압도적으로 우승하면서, 이미지 인식의 뿌리를 뒤흔듬
    • 이 때부터 딥러닝 역습의 전환점 → 대회의 주역이 됨
  • ILSVRC 대회를 축으로 최근 딥러닝 트렌드를 살펴볼 예정

이미지넷

  • 100만 장이 넘는 이미지를 담고 있는 데이터셋
  • 각 이미지에는 레이블(클래스 이름)이 붙어 있음
  • ILSVRC는? → 이걸 써서 자웅을 겨루는 천하제일 이미지 인식 기술 대회
  • 시험 항목 중 하나 : classification(1000개의 클래스 분류를 겨룸)
    • 여기서 연도별 최우수 팀의 Top-5 오류를 막대 그래프로 살펴봄

  •  
    •  
      • 주목할 점 : 2012년 이후 선두는 항~상 딥러닝
      • 15년, ResNet 3.5%? → 일반적인 인간의 인식 능력을 넘어섰다 함
      VGG(Visual Geometry Group에서 제안한 CNN 구조)

  •  
    • 합성곱 계층 + 풀링 계층으로 구성된 기본적인 CNN
    • 비중 있는 합성곱, 완전연결 계층 등을 모두 16 or 19층으로 심화한 게 특징(VGG16, VGG19)
      • 핵심 : 3*3의 작은 필터를 쓴 합성곱 계층을 연속으로 거침
      • 2~4회 연속으로 풀링 계층을 두어 크기를 절반으로 줄이는 처리 반복

GoogLeNet

  • 사각형 : 합성곱 계층, 풀링 계층 등의 계층을 나타냄
  • 복잡해 보이지만, 봐온 CNN과 비슷함
  • 세로 방향 깊이 뿐 아니라, 가로 방향도 깊다는 것이 특징
  • 가로 방향에 ‘폭’이 잇음 → 인셉션 구조

  •  
    • 크기가 다른 필터(와 폴링)을 여러 개 적용 → 결과를 결합
    • 이런 인셉션 구조를 하나의 빌딩 블록(구성 요소)로 쓰는 것이 GoogLeNet의 특징
    • 또한, 1*1 크기의 필터를 쓴 합성곱 계층을 많이 사용함
      • 채널 쪽으로 크기를 줄여서 → 매개변수 제거 + 고속 처리에 기여

ResNet

  • 마이크로소프트 팀이 개발한 네트워크
  • 지금까지 보다 층을 더 깊게 할 수 있는 특별한 ‘장치’가 특징

개요

  • 층이 지나치게 깊으면 학습이 잘 안되고, 오히려 성능이 떨어지는 경우가 많음
  • 이를 해결하기 위해, ResNet에서 스킵 연결(skip connection)을 도입
    • 핵심 : 층의 깊이에 비례해서 성능을 향상 시킬 수 있게 한다~
  • 스킵 연결이란? → 입력 데이터를 합성곱 계층을 건너 뒤어 출력에 바로 더하는 구조

  •  
    • 왜 층이 깊어져도 학습을 효율적으로 할 수 있나?
      • 역전파 때 스킵 연결이 신호 감쇠를 막아주기 때문
      • 입력 데이터를 ‘그대로’ 흘리는 역할을 해주는데, 핵심은 상류의 기울기에 아무런 수정도 가하지 않는다는 것!
      • 그래서 스킵 연결로 앞 층의 의미있는 기울기가 전해지리라 기대할 수 있는 것
  • VGG 기반으로 스킵 연결을 도입해서 층을 깊게 했음!

  •  
    • 합성곱 계층을 2개 층마다 건너뛰면서 층을 깊게 함
    • 실험 결과 : 150층 이상도 정확도가 계속 오른다~ + ILSVRC top-5 3.5% 달성

추가 정보(transfer learning에 대해)

  • 학습한 가중치 값들은 실제 제품에 활용해도 효과적이고, 실제 이용 중
  • 이를 전이 학습(transfer learning)이라 부름! → 학습된 가중치 복사 + 재학습(파인튜닝)
  • 보유한 데이터셋이 적을 때 특히 유용한 방법임

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

  • GPU님 등장 - 대량의 단순 연산 고속으로
  • 최근 프레임워크 - 학습을 복수의 GPU와 여러 기기로 분산 수행하기 시작

풀어야 할 숙제

  • 먼저 어떠한 처리에 시간이 소요되는 지를 알아보자

  •  
    • AlexNet은 오랜 시간을 합성곱 계층에서 씀
    • GPU에선 전체의 95%, CPU에선 전체의 89% (ㄷㄷ)
    • 즉, 합성곱 계층에서의 연산을 어떻게 고속으로, 효율적으로 하느냐가 과제임
    • 근데? → 합성곱 계층에선 단일 곱셈-누산 주로 수행 → 대량의 단일-곱셈 누산을 빠르게 하는 게 관건!

GPU를 활용한 고속화

  • 원래는 그래픽 전용 보드에 이용했으나, 최근 범용 수치연산에도 이용
  • 병렬 수치 연산의 압도적인 힘을 다양한 용도로 활용하자! → GPU 컴퓨팅의 목적
  • GPU 컴퓨팅 : GPU로 범용 수치 연산을 수행하는 것을 의미
  • GPU로 어느 정도까지 빨라질까?

  •  
    • CPU 40일 걸릴거 GPU로 6일 만에!
    • cuDNN 딥러닝 최적화 라이브러리로는 더 빨라진다~(cuDNN은 CUDA 위에서 동작)
  • GPU는 주로 엔비디아, AMD 두 회사가 제공
    • 딥러닝과 더 친한 쪽은 아직까지는 엔비디아
    • 엔비디아 GPU 컴퓨팅용 통합 개발환경 → CUDA 사용
  • 합성곱 계층의 연산은 im2col을 통해 큰 행렬곱으로 변환할 수 있었음
    • 이건 GPU로 구현하기에도 적합하다~

분산 학습

  • 딥러닝은 많은 시행착오를 동반한다.
  • 뛰어난 신경망을 위해 수없이 많은 실험이 필요하고, 1회 학습 시간을 최대한 단축하고 싶어짐
  • 그래서! → 딥러닝 학습을 수평 확장(즉, 분산 학습) 하자는 아이디어가 중요해짐
  • 최근 다수 GPU아 컴퓨터를 이용한 분산 학습을 지원하는 프레임워크들 나타나는 중
    • 구글의 tensorflow, 마이크로소프트의 CNTK 등 → 분산학습에 중점을 두고 개발
    • 놀라운 성능 보이는 중 → 얼마나?

  •  
    •  
    • → GPU 100개까지 쓰니, 하나일 때보다 56배 빨라짐(7일짜리 작업을 3시간 만에)
  • ‘계산을 어떻게 분산시키느냐’ 가 몹시 어려운 문제임
    • 컴퓨터 사이의 통신, 데이터 동기화 등
    • 그래서 → 텐서플로 같은 좋은 프레임워크에 맡기는 것이 좋다~
    • 기술적인 분산 학습 상세 내용은 텐서플로 기술 논문 등 참고

연산 정밀도와 비트 줄이기

  • 메모리 용량, 버스 대역폭 → 딥러닝 고속화의 병목이 될 수 있다!
    • 메모리 : 가중치 매개변수, 중간 데이터를 저장해야 함
    • 버스 대역폭 : GPU(or CPU)의 버스를 흐르는 데이터가 많아지면 병목 발생
      • 네트워크로 주고 받는 데이터의 비트 수를 최소화 하는 것이 바람직함
  • 비트 를 많이 쓸 수록 계산 오차가 줄어들지만, 비용 및 메모리 사용, 버스 대역폭에 부담을 줌
    • 다행히 딥러닝은 높은 수지 정밀도를 요구하지 않는다!
    • → 무슨 뜻? : 신경망의 입력 이미지에 노이즈가 조금 섞여도 출력 결과가 강건하다~
    • 신경망을 흐르는 데이터를 ‘퇴화’시켜도 출력에 영향이 적음
  • 지금까지의 딥러닝은 16bit 반정밀도(half-precision)만 사용해도 학습에 문제가 없다고 알려짐
    • 32bit single-precision, 64bit double-precision 부동 소수점 등의 포맷이 있음)
  • 딥러닝의 비트 수를 줄이는 연구가 몇 가지 진행 중이다~
    • 중간 데이터를 1비트로?! →
    • 딥러닝 고속화를 위해 비트를 줄이는 기술은 앞으로도 주시해야 함!
      • 특히, 임베디드용으로 이용할 때 중요한 주제

8.4 딥러닝의 활용

  • 지금까지 손글씨 숫자 인식 중심으로 살펴봄 → 사물 인식의 한 분야
  • 온갖 문제에 적용 가능하다! → 이미지, 음성, 자연어 등에서 딥러닝은 뛰어난 성능 발휘
  • 딥러닝이 뭘 할 수 있나? → CV 중심으로 소개할 예정

사물 검출

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

  •  
    • 사물 인식(detection)보다 어려운 문제
      • 인식은 이미지 전체를 대상으로 했지만, 검출에서는 이미지 어딘가의 사물 위치를 알아내야 함
      • 한 이미지에 여러 사물 존재할 수도 있음
  • CNN 기반으로 한 몇 가지 사물 검출 기법이 제안되었고, 성능 향상을 보임!
    • R-CNN 유명

  •  
    •  
      • 주목할 곳 : 2. 후보 영역 추출, 3. CNN 특징 계산
      • 사물이 위치한 영역을 어떻게든 알아내고, 이후 각 영역에 CNN으로 클래스 분류
      • 이미지를 사각형으로 변형 및 분류(SVM, 서포트 벡터 머신) 등 실제 처리 흐름은 복잡
      • → But, 큰 틀에서는 이 두 가지로 구성됨
      • 후보 영역 추출(사물처럼 보이는 물체 찾아 처리)은 어떻게?
        • R-CNN논문에서는 Selective Search 기법 사용
        • 최근, 후보 영역 추출도 CNN으로 처리하는 Faster R-CNN 등장함
          • 모든 일을 하나의 CNN에서 처리하기 때문에 빠름

분할

  • 이미지를 픽셀 수준에서 분류하는 문제
  • 픽셀 단위로 객체마다 채색된 지도(supervised) 데이터를 사용해 학습 + 추론 시 모든 픽셀 분류

  • 픽셀 수준에서 분류를 적용하려면 어떻게 할까?
    • 가장 단순한 방법 - 모든 픽셀 각각 추론 / 당연히 긴 시간 걸림
    • 낭비를 줄여주는 기법으로 FCN 고안됨
      • Fully Convolutional Network : 단 한번의 forward 처리로 모든 픽셀 클래스를 분류해 줌

  •  
    •  
      •  
        • ‘합성곱 계층만으로 구성된 네트워크’
        • 즉, FCN은 완전연결 계층을 같은 기능을 하는 합성곱 계층으로 모두 바꿔줌
        • 이점 : 공간 볼륨을 유지한 채, 마지막 출력까지 처리할 수 있음
        • 이렇게 마지막에 공간 크기를 확대함으로 인해,
          • 이중 선형 보간(bilinear interpoation)에 의한 확대를 의미
        • → 줄어든 중간 데이터를 입력 이미지와 같은 크기로 단번에 확대 가능

사진 캡션 생성

  • CV와 NLP를 융합한 재미있는 연구~
  • 사진을 주면, 그 사진을 설명하는 글(사진 캡션)을 자동 생성
  • 멀티모달 처리(multimodal processing) 연구임 → 최근 주목 받는 분야

  • 예시 : 첫 번째 사진을 보고, “비포장 도로에서 오토바이를 타는 사람” 문장 생성함
  • 대표적인 모델 : NIC(Neural Image Caption)
    • 심층 CNN + RNN(Recurrent NN)으로 구성됨
    • RNN : 순환적 관계를 맺는 신경망 → 자연어나 시계열 데이터 등 연속 데이터 다룰 때 활용

  •  
    • CNN으로 사진에서 특징 추출 → 이걸 RNN에 넘김
    • RNN은 특징을 초깃값으로 받아서 텍스트를 ‘순환적’으로 생성
    • 기본적인 구성은 이렇게 2개의 신경망을 조합한 구성임
    • 사진, 자연어 등 여러 종류의 정보를 조합하고 처리하는 것 → 멀티모달 처리 라고 함!

8.5 딥러닝의 미래

  • 딥러닝의 가능성과 미래를 느낄 만한 연구 소개
  • 여기서 언급한 것들은 모두 unsupervised learning임
    • Deep Belief Network, Deep Boltzmann Machine이 대표적
    • 최근엔 활발하게 연구되지 않는 느낌이지만, DCGAN 등이 시선 끌면서 새로운 도약 기대됨

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

  • 딥러닝을 통해 화가처럼 ‘그림을 그리는’ 연구
  • 두 이미지를 입력해서 → 새로운 그림 생성
  • 콘텐츠 이미지와 스타일 이미지 제공 → 둘을 조합해서 생성
  • A Neural Algorithm of Artistic Style 논문이 이 기법을 담음
    • 발표되자마자 전 세계 이목 끔

이미지 생성

  • 아무런 입력 이미지 없이도 새로운 이미지를 그려내는 연구도 진행 중
  • 학습 시에는 대량의 이미지를 쓰지만, 학습이 끝나면 아무런 이미지 없이 새로운 이미지 생성
  • ‘침실’ 이미지를 생성! - DCGAN

  • DCGAN에 대해
    • 핵심 : Generator, Discriminator로 불리는 2개의 신경망을 이용
    • 생성자 → 진짜와 똑같은 이미지 생성
    • 식별자 → 그것이 진짜인지(생성자가 생성 or 실제 촬영 이미지)를 판정
    • 둘을 겨루도록 학습
      • 더 정교한 가짜 생성자와, 더 정확한 간파를 하는 감정사로 성장
    • GAN : 둘의 능력을 부지런히 갈고닦게 한다~
      • 절차탁마해서 성장한 생성자는 최종적으로 진짜와 착각할 정도의 이미지를 그려낸다?!

자율 주행

  • 눈앞으로 다가옴 - 사람 대신 컴퓨터가 자동처를 운전하는 기술
  • 자동차 제조업체, IT기업, 대학, 연구소 등 뛰어든 곳이 많음
  • 주위 환경을 올바르게 인식하는 기술이 가장 중요한 문제라고 함
    • 딥러닝이 이 부분에서 큰 역할을 해줄 것으로 기대 중
    • SegNet이라는 CNN 기반 신경망 예시로 듦

  •  
    •  
      • 입력 이미지를 픽셀 수준에서 분할 및 판정하고 있음
      • 향후 한층 정확해지고 빨라지면 자율 주행이 일상에 파고들 수 있을 것이다~

Deep Q-Network(강화 학습)

  • 컴퓨터도 시행착오 과정에서 스스로 학습하게 하려는 분야가 있다!
  • ‘가르침’에 의존하지 않는 강화 학습(reinforcemnt learning)
  • 에이전트 라는 것이 환경에 맞게 행동을 선택
  • 그 행동에 의해 환경이 변한다는 것이 기본적인 틀
  • 환경이 변화하면? → 에이전트는 어떠한 보상을 얻음
  • 더 나은 보상(reward)을 받는 쪽으로 에이전트의 행동 지침을 바로잡는 것이 목표

  •  
    • 주의 : 보상은 정해진 것이 아니다! → ‘예상 보상’
    • 즉, 불명확한 상황에서는 명확한 지표로부터 역산해서 ‘예상 보상’을 정해야 함
    • Deep Q-Network(일명 DQN) : 딥러닝을 사용한 강화 학습
      • Q학습이라는 강화 학습 알고리즘을 기초로 함
        • 최적 행동 가치 함수로 최적의 행동을 정함!
        • 이 함수를 CNN으로 비슷하게 흉내내어 사용하는 원리
      • 실현 사례
        • 비디오 게임을 자율 학습 시켜서 사람을 뛰어넘는 수준의 조작을 실현
        • 게임 영상 프레임을 입력해서, 최종적으로는 게임을 제어하는 움직임에 대해
          • 핵심 : 여기 DQN에서의 입력데이터는 비디오 게임의 영상 뿐이었음→ 구성을 변경하지 않고, 팩맨이나 아타리 등 많은 게임 학습 가능
          • → DQN의 응용 가능성을 현격히 높였다 할 수 있음
          • 알파고도 강화 학습~(자기 자신과 맞붙는 훈련)
        • → 각 동작의 ‘가치’를 출력함

8.6 정리

  • (약간) 깊은 CNN 구현(손글씨 숫자 인식)
  • 네트워크를 깊게 하는 동기를 이야기하고, 현재 더 깊은 층을 향해간다는 설명
  • 딥러닝 트렌드 및 실제 활용 예, 고속화를 위한 연구 및 연구 사례 소개
  • 딥러닝 분야는 새로운 연구가 꼬리를 물고 발표되는 중임
  • 이 책을 통해 딥러닝을 더 잘 이해하고 재미를 알아준다면 좋겠다

반응형