ML

Deep Learning

술임 2023. 1. 3. 22:40

딥러닝 등장

특징 학습의 부각

Hand-crafted feature

- 기계 학습의 적용 범위가 분류나 회귀라는 작업에 제한됨

- 특징 추출은 기계 학습과 별개로 구현한 후에 결합하여 사용

 

End-to-end learning

- 깊은 신경망에서는 특징 추출 자체도 기계 학습으로 설계함

- 센서로 획득한 패턴이 신경망의 입력이고, 여러 단계의 은닉층이 자동으로 계층적인 특징을 추출함

- 앞 단계의 은닉층은 주로 low-level feature(엣지, 코너)를 추출하고 뒤로 갈수록 추상적인 high-level feature를 추출

 

깊은 다층 퍼셉트론(DMLP)

은닉층을 L-1개 가지고, 마지막에 출력층이 있어 총 L개의 층을 가짐

 

오류 역전파 알고리즘

- MLP와 마찬가지로 오류 역전파 알고리즘을 이용해서 그래디언트를 계산함

- l=1~L-1까지는 주로 활성함수로 ReLU를 사용함

- l=L에서는 주로 softmax, tanh, 시그모이드 등을 사용함

 

컨볼루션 신경망(CNN; 합성곱 신경망)

DMLP와 CNN

DMLP

- 완전연결 구조fully-connected라서 가중치가 많아서 복잡도가 높음

-> 학습이 더디고 과잉적합에 빠질 가능성이 큼

- 입력이 일렬로 늘어선 벡터 구조

-> 입력 샘플이 항상 같은 크기를 가져야하고, 특징 벡터의 차원이 항상 같아야함(행렬의 곱 연산을 위해서)

CNN

- 부분연결 구조partially-connected라서 복잡도는 낮추면서 모든 층의 좋은 특징을 추출해옴

- 영상과 같은 행렬 구조 또는 3차원 이상의 텐서 구조까지 처리 가능

- 가변 크기의 입력까지 처리 가능 

-> 특징 맵의 크기가 달라질 뿐

-> FC 층 바로 직전에 원하는 크기로 조정하면 됨

-> 풀링을 사용하면 쉽게 원하는 크기로 조정이 가능해서 마스크 크기와 보폭을 적절히 바꾸면서 필요한 수만큼 샘플링

- 영상처럼 격자 구조를 가진 데이터에 적합함

 

전체 구조

컨볼루션 결과에 활성함수 적용한 후 풀링 연산 적용

- k'개를 사용하도록 커널을 확장함

- 특징 맵의 요소마다 활성함수를 적용함(CNN은 주로 ReLU)

e.g. LeNet-5

 

 

컨볼루션층

컨볼루션 연산

- kernel, filter, window를 통해서 feature map을 추출해냄

 

가중치 공유와 다중 특징 맵 추출

- 모든 노드는 같은 커널을 사용하므로 weight sharing

- 같은 가중치를 여러 곳에 묶어둔 것으로 볼 수 있어서 tied weight라고도 함

- 커널에 따라 추출하는 특징이 달라짐 e.g. 엣지 커널

- 수십 ~ 수백 개의 커널을 사용해서 다양한 특징 맵을 추출함

- 커널 값은 학습을 통해서 알아내야함

- 사람이 경험을 바탕으로 커널을 설계하던 hand-crafted feature 방식을 벗어나 기계 학습으로 훈련집합에 최적인 커널을 자동으로 찾아줌

- 커널은 어떤 feature map을 추출할지 규정하므로 학습 과정을 feature learning, representation learning이라고 부를 수 있음

- 오류 역전파 알고리즘을 이용하여 커널을 학습함

 

컨볼루션 연산에 따른 CNN 특성

1. 컨볼루션은 translation equivariant

-> 신호가 이동하면 이동 정보가 특징 맵에 그대로 반영됨

-> 이동한 것에 컨볼루션을 적용한 결과와 컨볼루션을 먼저 적용하고 이동한 결과가 같음

 

2. 병렬 분산 구조

- 깊은 구조를 가지므로 영향력 범위가 층을 거듭할수록 커져 뒤로 가면 맵 전체에 영향을 줌

 

큰 보폭에 의한 다운샘플링

보폭을 k로 설정하여 노드 k마다 하나씩 샘플링하여 커널을 적용함

-> 결과는 출력 데이터가 입력 데이터보다 1/k로 축소됨

-> 2차원 영상은 m*n이 (m/k)*(n/k)로 축소됨

 

텐서에 적용

입력 데이터가 k*m*n의 크기라고 하면 커널은 k*h*h의 크기를 가짐

-> 입력 데이터와 커널의 채널 수는 둘 다 k로서 같아야 함

 

풀링층

풀링 연산

- 잡음 등 지나치게 상세한 정보를 summary statistics을 추출해서 성능 향상에 기여

-> feature map이 작아져서 속도, 메모리 향상

- 학습할 매개변수가 없음

- 특징 맵의 수가 그대로 유지 됨

- 커널의 크기를 키울수록 작은 이동에 둔감해짐