더 깊은 신경망으로(손글씨 숫자를 인식하는 심층 CNN)
- 합성곱 계층 모두 3x3 크기의 작은 필터, 활성화 함수는 ReLU
- 층이 깊어지면서 채널 수가 더 늘어남(16,16,32,32,64,64)
- 풀링 계층을 추가하여 중간 데이터의 공간 크기를 점차 줄여감
- 마지막 단의 완젼연결 계층에서는 Dropout 계층 활용
- 가중치 초깃값은 He 초깃값 사용, Adam을 사용해 가중치 매개변수를 최적화
정확도를 더 높이려면 -> 앙상블 학습, 학습률 감소, 데이터 확장 등
데이터 확장
- 손쉬운 방법이면서도 정확도 개선에 아주 효과적
- 이미지를 일부 잘라냄 (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
'Study > DL' 카테고리의 다른 글
[밑시딥2] Chapter 2. 자연어와 단어의 분산 표현 (0) | 2024.01.20 |
---|---|
[파이썬 딥러닝 파이토치] PART 4. 컴퓨터 비전 (0) | 2024.01.19 |
[모두를 위한 딥러닝 시즌2] lab 10-2. MNIST CNN (0) | 2024.01.15 |
[밑시딥1] Chapter 7. 합성곱 신경망(CNN) (1) | 2024.01.15 |
[파이썬 딥러닝 파이토치] Part 4. CNN (0) | 2024.01.14 |