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부분을 ‘보고’ 계산하게 된다!
- 합성곱 연산 2번 반복 예
-
예시 1
과예시 2
의 파라미터 수를 비교하면?예시 1
: 5*5 = 25개예시 2
: 233 = 18개- 이 차이는 층이 깊어질 수록 커짐!
- 작은 필터를 겹쳐 신경망을 깊게 하면 뭐가 좋지?
- 매개변수 수를 줄임 →
넓은 수용 영역
을 소화할 수 있음- 수용 영역, receptive filed : 뉴런에 변화를 일으키는 국소적 공간 영역
- 층이 거듭되면서, ReLU 같은 활성화 함수가 신경망의 표현력 개선됨
- ‘비선형’ 힘을 가하고, 이게 겹치면서 복잡한 표현이 가능해짐
- 매개변수 수를 줄임 →
- 학습의 효율성이 증가한다~
- 층을 깊게 한다? → 학습데이터 양을 줄임 → 학습 빠르게 수행 가능
- 이게 무슨 말? → 7.6 CNN 시각화하기 떠올려보면 됨
- 7.6에서 했던 말
- 합성곱 계층이 정보를
계층적으로
추출한다~ - 에지 등 단순한 패턴에 뉴런이 반응 + 층 깊어지면서 복잡한 것에 반응!
- 합성곱 계층이 정보를
- 즉, 특정 객체의 특징을 이해하려면 변화가 풍부하고 많은 학습 데이터 필요 → 오래 걸림
- 층이 깊어지면? → 학습해야 할 문제를 계층적으로 분해 가능하다
- → 핵심 : 각 층이 학습해야 할 문제가 더 단순해짐
- 그렇다면, 처음 층에서 적은 데이터로 특정 학습을 효율적으로 할 수 있다!
- 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%? → 일반적인 인간의 인식 능력을 넘어섰다 함
-
-
- 합성곱 계층 + 풀링 계층으로 구성된 기본적인 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)보다 어려운 문제
- 인식은 이미지 전체를 대상으로 했지만, 검출에서는 이미지 어딘가의 사물 위치를 알아내야 함
- 한 이미지에 여러 사물 존재할 수도 있음
- 사물 인식(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의 응용 가능성을 현격히 높였다 할 수 있음
- 알파고도 강화 학습~(자기 자신과 맞붙는 훈련)
- → 각 동작의 ‘가치’를 출력함
- Q학습이라는 강화 학습 알고리즘을 기초로 함
- 주의 : 보상은 정해진 것이 아니다! →
8.6 정리
- (약간) 깊은 CNN 구현(손글씨 숫자 인식)
- 네트워크를 깊게 하는 동기를 이야기하고, 현재 더 깊은 층을 향해간다는 설명
- 딥러닝 트렌드 및 실제 활용 예, 고속화를 위한 연구 및 연구 사례 소개
- 딥러닝 분야는 새로운 연구가 꼬리를 물고 발표되는 중임
- 이 책을 통해 딥러닝을 더 잘 이해하고 재미를 알아준다면 좋겠다
반응형