728x90
반응형
Fully Connected Layer : 어떤 벡터를 가지고 연산을 하는 것
activation은 이 layer의 출력이다.
기존의 FC Layer가 입력 이미지를 길게 쭉 폈다면 이제는 기존의 이미지 구조를 그대로 유지하게 된다. 그리고 작은 필터가 우리가 가진 가중치가 되는 것이다. 필터를 가지고 이미지 슬라이딩을 하면서 공간적으로 내적을 수행하게 된다,
깊이(3)는 전체 깊이를 전부 취하지만, 32x32중 5x5만을 취한다.
필터의 각 W와 이에 해당하는 이미지의 픽셀을 곱해준다.
(각 원소끼리 Convolution을 하는 거나, 그것을 쭉 펴서 내적을 하는거나 똑같은 일을 하는 것이다.)
필터의 모든 요소를 가지고 내적을 수행하게 되면 하나의 값을 얻게된다.
conv연산을 수행하는 값들을 다시 Output activation map의 해당하는 위치에 저장하게 된다,
(dimension은 다르게 나타난다.)
여러 개의 필터를 이용하면 여러가지의 activation maps 를 얻을 수 있게 된다.
각 layer의 출력은 다음 layer의 입력이 된다. ( Conv, ReLU 반복하다가, 가끔 pooling -> FC)
pooling은 activation maps의 사이즈를 줄이는 역할을 한다.
level이 높아질수록 더 많은 특징을 담아낸다. Layer의 계층에 따라 단순/복잡한 특징이 존재한다.
이전에는 한 칸씩 움직임. 움직이는 칸의 정도를 stride라고 한다.
stride가 input 이미지에 맞지 않으면 불균형한 결과를 부를 수도 있다.
((input_size - Filter_size) / stride) + 1
Zero-padding : 가장자리의 필터 연산을 수행하도록 함. (+ 입력의 사이즈를 유지하기 위해서 )
Zero-padding을 하면 새 출력이 7이 된다. 출력의 차원이 입력의 차원과 같아진다.
출력은 ( 7 x 7 x “필터의 개수” ) 가 된다.
Zero-padding 하지 않았을 떼 Layer가 쌓이게 되면 사이즈는 급속도로 줄어들게 될 것이다. 이는 우리가 원하는 결과가 아니다. (activation map이 작아짐)
위처럼 계산된다.
Layer의 parameters의 갯수는 위와 같이 구한다.
5x5 필터 사이즈와 3( input의 depth ) 그리고 1 ( bias term ) 의 합을 계산되고, 이러한 필터가 10개가 있으니 760개가 답이 되는 것이다.
Conv layer의 출력이 작을수록 ( stride 값 커지면 ) FC Layer에서 필요한 파라미터의 수가 작아질 것 이다. 이는 이후에 Overfitting과도 연관이 있다.
“Receptive field” 란 한 뉴련이 한 번에 수용할 수 있는 영역을 의미한다. ( = filter의 사이즈 )
Pooling layer는 Representation들을 더 작고 관리하게 쉽게 해준다. ( downsampling 하는 것 )
직관이 생긴다.
작아지면 파라미터의 수가 줄게 된다. 그리고 “공간적"인 불변성을 얻을 수도 있다. (Depth는 건들지 않음)
Max Pooling이 일반적.
얼마만큼의 영역을 한 번에 묶을지를 정하는 것이다. 겹치지 않는 새로운 영역내에서 ( 내적 대신에 )가장 큰 값을 골라내서 downsampling 한다. ( 값이 크다는 것은 특징을 그만큼 잘 나타내고 있다는 것이기때문 / 값들은 이 뉴런이 얼마나 활성화되었는지를 나타냄 )
=> 어떤 신호에 대해 “얼마나” 그 필터가 활성화 되었는지를 알려준다고 알 수 있다.
Padding X ( 그저 downsampe하고 싶은 것이기에 )
FC Layer 는 마지막에 존재한다.
마지막 Conv Layer의 출력은 3차원 volume으로 이루어진다. 이 값들을 전부 펴서 1차원 벡터로 만든다. 그리고 이를 가지고 FC Layer의 입력으로 사용한다. 그렇게 되면 Conv Net의 모든 출력을 서로 연결하게 되는 것이다. 이 마지막 Layer부터는 공간적 구조를 신경쓰지 않아도 된다.
전부다 하나로 통합시키고, 최종적인 추론을 하는 것이다.
그렇게 되면 Score가 출력으로 나오게 되는 것이다.
728x90
반응형