# 갑자기 개념이 헷갈리는 순간을 위해 정리해놓음
- 합성곱 신경망에서는 뉴런[노드]을 filter 혹은 kernel 이라고 부름
- 패딩 : 입력 배열 주위를 가상 원소로 채우는 작업
- 실제 입력값이 아니라서 패딩은 0으로 채움
- 계산에 영향을 미치지 않으면서 입력과 출력 데이터의 크기를 동일하게 만들 수 있음 [ = same padding]
- same padding의 출력 크기 : [입력 높이 / 스트라이드 , 입력 너비 / 스트라이드 , 필터 개수]
- 모서리에 중요한 정보가 있다면 패딩 없으면 feature map에 잘 전달되지 않음 [가중치와 한번밖에 안 곱해지기 때문]
- 스트라이드 : 이동 개수
- 스트라이드가 커질 수록 커널 수가 줄어들고, featuer mapd의 크기는 더 작아진다.
- 파라미터 개수 계산법
- 1. Convolutional Layer의 경우
- 필터의 크기 & 필터의 채널 수 & 필터의 개수에 의존
- convolution 적용할 필터의 한 변의 크기 F_length
- convolution 입력 채널 수 : C
- 출력 채널 개수 [= 다음 층의 채널 수] : N
- bias : 1
- parameter = $(F_{length} * F_{length} * C + 1) * N$
- 2. Fully Connected Layer의 경우
- 2-1. 직전 층이 Convolutional Layer일 경우
- 필터의 크기 & 필터의 채널 수 & 필터의 개수에 의존
- 필터 관한 파라미터에 Fully-connected Layer의 노드 수 곱하면 됨
- 입력 이미지의 한 변의 크기 : $I_{length}$
- 입력 이미지의 수 : $I_n$
- 입력 이미지의 채널 수 : $I_c$
- 현재 층의 노드 수 : $N_{node}$
- bias : 1
- parameter = $(I_{length} * I_{length} * I_c * I_n + 1) * N_{node}$
- 2-2. 직전 층이 Fully-connected Layer일 경우
- 현재 층의 노드 수 : $FC_i$
- 직전 층의 노드 수 : $FC_{(i-1)}$
- bias : 1
- parameter = $(FC_{(i-1)} + 1) * FC_i$ [모든 노드들이 연결되어 있는 상황을 계산]
- 2-1. 직전 층이 Convolutional Layer일 경우
- 1. Convolutional Layer의 경우
- 손실 함수가 NaN을 반환하기 시작하면 가중치가 overflow 발생시킬만큼 커졌다는 뜻 [ = gradient exploding]
- 입력 데이터를 스케일 조정하는 이유[0~255 사이의 픽셀 값 대신 -1~1 사이의 값으로 조정]가 gradient exploding을 막기 위해서인데, 훈련될수록 가중치값이 랜덤한 초기값과 멀어지기 때문에 무너짐 = 공변량 변화 [covariate shift]
- 해결 방법
- 배치 정규화 [batch normalization] : 배치에 대해 각 입력 채널별로 평균과 표준 편차를 계산한 다음 평균을 빼고 표준 편차로 나누어 정규화
- 예측할 때는? 샘플이 하나라서 계산할 배치가 없음. 훈련과정에서 이동평균[moving average]을 저장해놓고 이를 사용
- 배치 정규화 [batch normalization] : 배치에 대해 각 입력 채널별로 평균과 표준 편차를 계산한 다음 평균을 빼고 표준 편차로 나누어 정규화
- 드롭아웃 [drop out] : overfitting 문제를 해결하기 위해 regularization 사용 [= 과대적합되면 벌칙 부여]
- 배치 정규화도 overfitting을 감소시킨다고 알려져 최근에는 드롭아웃 전혀 사용 x
- 참조
- [OREILLY] 만들면서 배우는 생성 AI
- https://velog.io/@mykirk98/Parameter-%EA%B0%9C%EC%88%98-%EC%B6%9C%EB%A0%A5-%EC%9D%B4%EB%AF%B8%EC%A7%80-%ED%81%AC%EA%B8%B0-%EA%B3%84%EC%82%B0
Parameter 개수 & 출력 이미지 크기 계산
📝이 포스트는 Parameter 개수와 출력 이미지 크기를 계산하는 법에 대해 알아보겠습니다.
velog.io
[인공지능][개념] 합성곱 신경망(CNN) - 패딩(Padding)과 스트라이드(Strides), 풀링(Pooling) 완전정복하
합성곱 신경망 (CNN - Convolutional Neural Network) 합성곱 신경망(CNN)은 이미지 데이터를 분류할 때 효과적인 딥러닝이다. 예를 들어, 숫자 이미지를 학습시켜 무슨 숫자인지를 맞춘다거나, 여러 옷 이
itstory1592.tistory.com
'ML-DL > Base' 카테고리의 다른 글
Massage passing (0) | 2024.11.08 |
---|---|
KL Divergence [Kullback-Leibler Divergence] (0) | 2024.10.28 |
파라미터와 하이퍼파라미터 차이 (0) | 2024.10.08 |
representation, likelyhood, 활성화 함수, 손실함수, optimizer, 배치 사이즈 (0) | 2024.08.15 |