
Convolution (합성곱) : 두 함수를 곱하여 합함
이미지나 비디오 데이터 처리에 적합
Feature Running
Convolution + ReLU -> Pooling 이 반복적으로 일어나면서, 간소화해감
Classification
이미지의 flatten 데이터를 입력하는 분류 모델로 NN 구조 가짐

FNN에서의 이미지 데이터 처리
파라미터 수가 많음
공간정보 활용 잘 못함
Reshaping으로 픽셀을 모두 1차원 배열로 만들어 입력 ->1D array)로 표현, spatial 정보 손실
CNN
특징 추출 :데이터가 가지고 있는 spatial 정보를 추출하는데 유리
파라미터의 수 감소 : 가중치 공유(같은 필터를 전체 이미지에 적용)
-> 모델의 과적합(overfitting) 방지, 계산 효율성 UP
filter 크기 : FxFxD
D=입력이미지의 depth (= 채널 수)
filter의 각 셀은 고유의 가중치를 지님
filter가 적용되는 이미지 부분의 색 정보와 filter의 각 가중치 간에 내적 연산 수행-> 하나의 스칼라값 도출
각 필터하나당 계산값 마지막에 바이어스도 더해진다
스칼라 값에 활성화함수 (렐루)
한칸 이동할때 이동하는 거리를 stride 스트라이드라고한다.


활성화 함수를 적용하여 출력(변환)된 값들의 모음
= feature map or response map
Activation map의 크기 : (N-F)/stride + 1
이미지의 픽셀 값과 필터에 존재하는 가중치들 간에 내적 연산 + bias -> 활성화 함수 적용
이미지의 가생이 부분의 데이터를 살리기위해 0을로 둘러줌
패딩을 통해 가에 부분의 정보 손실이 발생하지 않음
필터를 적용하여 합성곱 연산을 한 이후에는 (보통) pooling 과정을 거침
액티배이션 맵의 대표하는 값을 추출 -> 다운사이징 효과
별도의 filter 사용. 가중치가 없는 filter. 정해진 범위의 값들을 줄인다.
max pooling : filter가 적용되는 값들 중에서 가장 큰 값을 추출
큰 숫자 => 더 밝은 색을 의미
Max pooling은 더 밝은 색을 추출
백그라운드는 어둡고, 우리가 관심있는 물체가 밝은 경우 사용하면 유용 (MNIST 등)
average pooling : 값들의 평균 값을 계산하여 사용
이미지를 부드럽게 하는 (smoothing out) 효과
sharp features는 잘 도출되지 않음
Global pooling
각 channel의 feature map에서 하나의 value를 추출
Global pooling 연산의 경우, depth는 그대로 유지
임베딩 벡터를 얻고자 하는 경우 유용

마지막 출력노드에서 나온 값들을 소프트맥스함수에 넣어서 예측값 생성
정답과 비교하기 위해 크로스엔트로피 로스함수에 들어감
이때 정답은 원핫인코딩으로 0또는 1로 구분된다.
기울기를 최소화하는 방향으로 역전파해가며 가중치가 업데이트 된다.

멘토님에게 물어봐서 어려움을 해결하였다.
필터의 크기에 따라서 버려지는 정보량은 어떻게하는지
패딩을 추가하고 패딩의 크기 옵션을 줄 수 있다.
글로벌 풀링으로 필터가 추출한 특징들의 대표값을 가져오는게 무슨 의미가 있는지, 어떻게 활용할지
global pooling을 하면 이점은 특정영역의 대표값을 가져온다. 그렇게하면 feature map의 크기는 당연히 줄어질테고
줄어진 feature map을 이용하면 계산 비용이 당연히 줄겠죠? 이것은 과적합 방지하는데 도움을 준다. 보통 가장 마지막 단계에서 활용된다.
최종 feature vector를 생성해서 마지막 fc layer로 전달
필터들이 동일한 가중치를 공유하는 이점
convolution layer에서 가중치공유라면 필터가 동일한 가중치를 공유하기 때문에 학습해야 할 파라미터의 수가 줄어들고, 파라미터 수가 줄어들면 과적합 방지
필터가 동일한 가중치를 공유한다는 뜻
하나의 필터는 셀마다 독립적인 가중치를 가지고있고, 같은 층에 적용되는 필터 또한 마찬가지이며, 각 필터끼리는 독립적이다.
필터 하나마다 바이어스 하나가 존재하고, 이것이 같이 활성화 함수에 들어간다.