•
Fully-connected는 모든 input이 모든 output에 영향을 준다.
•
Fully-connected를 다르게 시각화 하면 위와 같다. 모든 픽셀이 하나의 output에 영향을 줌.
•
이미지에서 패턴을 찾기 위해 —예컨대 눈— filter를 생각할 수 있다.
◦
filter를 이미지 전체에 대해 돌면서 filter와 score를 계산해서 영역을 찾는 것.
•
그러한 이미지 내에서 패턴을 찾는 것을 Convolution이라고 한다.
•
filter를 어떻게 만들 것인가?
◦
머신러닝에서는 아키텍쳐만 설계하고, 파라미터는 데이터로부터 학습해야 함.
◦
fully-connected로는 spatial locality를 찾아낼 수 없음 —모든 픽셀이 영향을 주기 때문.
•
convolution의 몇 가지 가정
◦
지역적으로 가까운 픽셀만 본다.
◦
패턴은 위치와 무관하게 사용 가능하다. —눈이 어디에 있든 눈의 패턴은 동일하다. → 사실 각도가 바뀌면 다름.
•
만일 x-lay 처럼 위치가 정해진 이미지라면 굳이 모든 영역에 대해 패턴을 적용하게 계산량 낭비가 될 수 있음.
◦
도메인 지식이 중요
•
Convolution의 연산 과정. 이미지 전체에 걸쳐 filter를 한칸씩 움직이면서 연산한다.
•
RGB 3채널을 쓴다면 filter를 3개를 쓴다.
◦
바이어스가 1추가 된다는 것에 주의
•
컨볼루션 연산 과정
◦
3개 filter의 값이 모두 합쳐지므로 activation map은 1이 된다.
•
만일 filter 자체를 여러 개 쓴다면 —사람, 개, 고양이, 코끼리 4개 filter— 최종 output이 filter 수만큼 나온다.
•
그렇게 만들어진 activation map 자체에도 convolution 연산을 할 수 있다.
◦
마지막에 10개가 나오는거는 filter를 10개를 썼기 때문
◦
앞선 layer의 결과에 대해 size를 맞는 filter를 설계해야 한다.
•
convolution을 중첩해서 학습 시키면, 앞쪽에 있는 layer는 low-level feature를 학습하고, 뒤로 갈수록 점점 high-level feature를 학습하게 된다.
◦
가장 낮은 단계에서는 선, 방향, 색 변이 등을 배우고, 위로 올라갈 수록 그 low-level을 조합한 형태를 배움
•
Convolution에 대한 의문
◦
layer가 깊어질수록 이미지 크기가 점점 줄어드는데, 이러면 layer가 깊어지면 이미지 자체가 없어진다.
◦
요즘은 4k 처럼 높은 해상도의 이미지를 쓰는데, 이걸 다 계산하고 있으면 계산량은 큰데, 실제 계산 결과에는 큰 차이가 없을 가능성이 높음
•
기본 컨볼루션 연산
•
Stride를 주면 그만큼 건너 뛰면서 연산을 하기 때문에 계산량을 줄일 수 있음
•
Stride 계산 공식에 따라 값이 정수로 떨어지지 않으면 사용 불가.
•
이미지를 0으로 둘러싼 padding을 추가해 주면 Stride가 안 맞는 문제도 해결할 수 있고, conv layer를 지나면서 이미지가 점점 줄어드는 문제도 해결할 수 있음.
•
Stride와 Padding을 모두 적용한 공식.
◦
패딩의 크기를 잡으면 input과 output의 크기를 갖게 할 수 있다.
•
위와 같은 설정일 때 convolution의 파라미터 계산.
◦
같은 설정일 때 fully-connected를 사용하면 학습해야 할 parameter가 훨씬 늘어남.
◦
고로 지역적 패턴을 학습할 때는 conv가 더 효율적이다.
•
Filter를 1x1 크기로 사용하는 예.
◦
이거는 주변 픽셀 정보와 관계 없이 본인 자리의 channel-wise로만 연산을 수행하는데, 이 결과 이미지의 dimension이 바뀜. 이 방법은 dimension을 조절하는데 사용한다. —보통은 줄이는데 쓴다.
•
ConvNet에 쓰이는 주요한 4개 하이퍼파라미터 —filter 개수, filter 크기, stride, padding
◦
filter 크기, stride, padding은 w, h 별로 따로 줄 수 있음. 하지만 보통 잘 안 씀.
•
Tensorflow의 conv 예제
•
Fully-connected와 Conv 비교
◦
모든 conv는 fully-connected의 특별한 경우이고
◦
동시에 모든 fully-connected는 conv의 특별한 경우임.
•
pooling layer는 downsampling 용으로 쓴다. 이때 denoising 효과도 있음. 계산량도 줄어듬.
•
stride와 filter 크기를 이용해서 큰 값을 취하거나(max pooling), 평균값(average pooling)을 취한다
•
풀링은 학습이 아니라 그냥 연산 과정임.
•
filter와 stride에 연산 예.
◦
filter와 stride가 다르면 결과 크기가 같더라도 값은 다를 수 있음.
◦
보통 이미지 반으로 줄이는 2x2, stride 2를 많이 쓴다.
•
풀링 계산 공식
•
풀링에서는 학습이 일어나지 않는다.