심층학습
배경
- 1980년대 깊은 신경망 아이디어 등장
- 한계
- 경사 소멸 문제 (gradient vanishing)
- 작은 훈련집합(어려운 데이터 수집)
- 과다한 연산과 시간 소요 (낮은 연산의 범용 컴퓨터, 값비싼 슈퍼컴퓨터) (심층학습을 받쳐주지 못하는 하드웨어)
- 성공배경
- 혁신적 알고리즘 등장
- 합성곱 신경망 (Convolutional neural networks, CNN) 구조
- 경사 소멸 문제 해결을 위한 ReLU 활성함수
- 과잉적합을 방지하는데 효과적인 다양한 규제 기법
- 층별 예비학습(pretraining) 기법 개발
- 값싼 GPU 등장 (하드웨어 보안)
- 학습 데이터 양과 질 향상
- 혁신적 알고리즘 등장
고전적 다층 퍼셉트론과의 비교
- 전통적 다층 퍼셉트론
- 은닉층은 특징 추출기
- 얕은 구조 (제한적 특징 추출)이므로 가공하지 않은 획득한 원래 패턴을 그대로 입력하면 낮은 성능
- 따라서 사람이 수작업 특징을 선택(feature selection)하거나 추출(feature extraction)하여 신경망에 입력
- ↓학습집합
패턴 -> 특징 추출 -> 분류 (얕은 신경망) -> 부류
- 심층학습
- 학습에 의해 자동적으로 데이터로부터 특징(data-driven features) 추출 <- 표현 학습representation learning
- 특징 벡터를 인공 신경망의 입력으로 줌 <- 종단간 학습(end-to-end learning)
- ↓학습집합
패턴 -> 특징 + 분류 (얕은 신경망) -> 부류 - 깊은 신경망의 구조와 동작은 Multi Layer Perceptron과 같다.
깊은 신경망 표현 학습(representation learning / 특징 학습 feature learning)
낮은 단계 은닉층은 선이나 모서리와 같은 간단한(저급) 특징 추출
높은 단계 은닉층은 추상적 형태(abstractive representation)의 복잡한(고급) 특징 추출
역사적 고찰
- 퍼셉트론 -> 다층 퍼셉트론 -> 깊은 다층 퍼셉트론
활성함수 : 계단 함수 시그모이드 함수 ReLU와 변형들
목적함수 : MSE MSE 교차 엔트로피 또는 로그우도 - 합성곱 신경망(CNN)의 부상 -> 완전 연결을 부분 연결로 바꾸자! (깊은 다층 퍼셉트론의 파생형이라 할 수 있음)
왜 심층학습은 강력한가?
- 전체 깊은 신경망을 동시에 최적화 (종단간 학습 end-to-end)
- 깊이의 중요성
- ex) 점선이 20개 노드를 가진 은닉층 하나 짜리 신경망이라고 하면
실선은 각각 10개 노드를 가진 은닉층 두 개 신경망이라고 할 수 있다. 즉, 더 정교한 분할이 가능해진다.
- ex) 점선이 20개 노드를 가진 은닉층 하나 짜리 신경망이라고 하면
- 계층적 특징(hierarchical features)
- 깊은 신경망에서는 층의 역할이 잘 구분됨
- 그러나 얕은 신경망은 하나 또는 두 개의 은닉층이 여러 형태의 특징을 모두 담당
(깊은 신경망은 은닉층 수가 많은 것. 얕고 넓은 신경망은 1~2개의 은닉층 내부에 굉장히 많은 노드가 있는 것)
컨볼루션 (합성곱) 신경망 Convolutional neural network, CNN
- 구조
- 컨볼루션층 (CONV)
- 선형함수인 컨볼루션과 비선형 함수인 활성함수 조합
- 학습에 의해 결정된 복수의 커널들 (혹은 필터들)에 대응되는 특징들 추출
- 각 층의 입출력 특징 형상이 유지된다.(특징맵)
- 영상의 공간 정보를 유지하며 공간적으로 인접한 정보의 특징을 효과적으로 인식
- 각 커널(필터)은 파라미터를 공유함으로써 완전 연결 신경망 대비 학습 파라미터가 매우 적음
- 풀링층 (POOL)
- 컨볼루션의 얻어진 특징을 통계적으로 압축 (최근에는 쓰지 않음)
- 특징을 요약하고 강화함
- (CONV - RELU) - (CONV - RELU) - POOL - .... - FC
- 컨볼루션층 (CONV)
- 활용 분야
- 분류 (classification)
- 검색 (retrieval)
- 비슷한 사진 출력을 보여줌.
- ex) 구글 검색엔진
- 검출 (detection)
- 분할 (segmentation)
- 검출의 상위호환. 클래스를 픽셀 단위로 구분해준다.
- DMLP(Deep Multi Layer Perceptron)와 CNN 비교
- DMLP
- 완전 연결(fully connection) 구조. 높은 복잡도
- 학습이 매우 느리고 과잉적합 우려
- CNN
- 컨볼루션 연산을 이용한 부분연결 (희소 연결) 구조로 복잡도 크게 낮춤
- 이미지이기 때문에 부분연결을 통해서도 성능이 좋을 수 있다.
- 이미지에는 지역성이 있기 때문에. 가까운 픽셀끼리가 먼 픽셀끼리보다 특징적으로 유사할 것.
- 지역성을 중첩해서 전체의 shape을 만들어 나간다.
- 컨볼루션 연산은 좋은 특징 추출
- 특징
- 격자(grid) 구조 (영상, 음성 등)를 갖는 데이터에 적합
- 수용장(receptive field)은 인간시각과 유사
- 가변 크기 입력 처리 가능
- 컨볼루션층에서 보폭을 조정하거나, 풀링층에서 커널이나 보폭을 조정해 특징 맵 크기 조절
- 컨볼루션 신경망 예제 https://transcranial.github.io/keras-js/#/
- 컨볼루션 연산을 이용한 부분연결 (희소 연결) 구조로 복잡도 크게 낮춤
- DMLP
컨볼루션층
컨볼루션은 해당하는 요소끼리 곱하고 결과를 모두 더하는 선형 연산이다.
연산은 다음과 같다.
u는 커널(kernel/필터 filter), z는 입력, s는 출력 (특징 맵 feature map)
컨볼루션 연산 그림 예)
덧대기(Padding)
가장자리에 영상의 크기가 줄어드는 효과 방지 (각 층 입출력의 특징형상 유지)
편향(bias) 추가
커널에 편향 추가
가중치 공유(weight sharing / parameter sharing)(묶인 가중치)
모든 노드가 동일 커널 사용
즉, 가중치를 공유하므로 매개변수는 3개에 불과하다.
∴ 모델 복잡도가 크게 낮아진다.
다중 특징 맵 추출
커널의 값에 따라 커널이 추출하는 특징은 달라진다.
∵ 하나의 커널만 사용하면 너무 빈약한 특징이 추출
그래서 실제로는 수십~수백 개의 커널을 사용한다.
특징 학습
커널을 사람이 설계하지 않고, 학습으로 찾음
DMLP와 마찬가지로 오류 역전파로 커널 학습
병렬분산 구조
각 노드는 독립적으로 계산 가능하므로 병렬 구조
+ 노드는 깊은 층을 거치며 전체에 영향을 미치므로 분산 구조
큰 보폭(stride)에 의한 다운샘플링(down-sampling)
일반적으로 보폭이 k면, k개마다 하나씩 샘플링해 커널 적용
-> 2차원 영상의 경우 특징 맵이 1/k^2으로 작아짐
텐서 적용
3차원 이상 구조에도 적용 가능
이 때, 입력 차원이 3이면 (ex)RGB) 커널도 그에 맞춰서 3차원으로 결정이 된다.
풀링층
- 풀링 연산 종류 (풀링 연산은 특징은 유지하되, 사이즈를 줄인다.)
- 최대 풀링 max pooling
- 특징 값 중 가장 큰 값 추출
- 평균 풀링
- 특징 값 평균을 내 추출
- 가중치 평균 풀링
- 최대 풀링 max pooling
- 풀링 연산 특성
- 풀링은 상세 내용 요약 혹은 평균 등 통계적 대표성 추출
- 매개변수가 없음
- 특징 맵 수 그대로 유지 (깊이는 유지(차원). 가로 세로는 변화)
- 연산 효율화 (연산 횟수, 연결 가중치 개수 줄임)
- 작은 변화에 둔감 -> 물체 인식이나 영상 검색에 효과적
CNN의 전체 구조
- 빌딩 블록(building block)
- CNN은 빌딩 블록을 이어 붙여 깊은 구조로 확장
- 전형적 빌딩블록 : CONV -> ReLU(활성함수) -> POOL
- 다중 커널을 사용해 다중 특징 맵 추출
- 컨볼루션 층 출력 크기와 매개변수 수
- 입력 : W1*H1*D1 (width, height, depth)
- K개 F*F 커널, 보폭 S, 덧대기 P
- 출력 크기 : W2*H2*D2
W2 = (W1-F+2P)/S+1
H2 = (H1-F+2P)/S+1
D2 = K - 매개변수 수 :
커널마다 (F*F*D1)개 가중치와 1개 바이어스를 가짐.
따라서, 전체 매개변수 수는 (F*F*D1)K + K - 일반적으로 F=2, S=2 혹은 F=3, S=1 사용
- 출력 크기 : W2*H2*D2
- 위 식을 실제 예제로 보면
입력 크기 : 32*32*3
10개의 5*5 커널 보폭 1, 덧대기 2- 출력 크기 : (32-5+2*2)/1+1=32 -> 32*32*10
층의 매개변수 개수 : 5*5*3+1 = 76 (+1은 편향 추가) -> 76*10 = 760
- 출력 크기 : (32-5+2*2)/1+1=32 -> 32*32*10
CNN 시각화 예제 https://poloclub.github.io/cnn-explainer/
'AI > KDT 인공지능' 카테고리의 다른 글
[07/19] 12주차 강의 개요 (0) | 2021.07.19 |
---|---|
[06/28] 심층학습 기초2 (0) | 2021.06.28 |
[06/23] 다층 퍼셉트론 (0) | 2021.06.23 |
[06/22] 라이브 세션 (0) | 2021.06.22 |
[06/21] 신경망의 기초 (0) | 2021.06.21 |