강사님께서 연결주의 관점에서 설명해주시면서 함수로 묶어 하나의 레이어 처럼 인식하게 하면서 인간이 이해하기에 직관적인 느낌이 있었습니다. 그런데 이런 레이어들이 꽤 종류가 많아서 한번 정리를 해보고자 했습니다!
Convolutional Layer
- 이미지 구조를 파괴하지 않으면서 데이터의 크기 축소
- 위치 정보를 보존
- Feature Map 생성
Stride
- 꼭지점 쪽 정보를 반영이 덜되는 문제 발생
- Feature Map을 훑는 간격 설정
model.add( Conv2D(filters=32, # feature map 의 수 이후 폭, 혹은 filter의 개수 [(이전 폭 - filtermap 폭) / 스트라이드 크기 + 1] -> 다음 레이어의 깊이 -> 필터의 커널의 개수
kernel_size=(3, 3), # filter size 3x3
stride=(1,1), # filter의 훑는 간격
padding='same', # or 'valid' | 이미지에 상하좌우로 페딩을 주어서 아웃풋의 가로세로폭 유지 (Zero Padding)
input_shape=(28, 28, 1) # (행, 열, 채널 수), 인풋레이어 대신 사용 가능
activation='relu') ) # 활성화 함수 ('linear' | 'softmax' | 'sigmoid' | 'relu' | 'swish')
Max Pooling (Down Sampling)
- 연산량을 줄이기 위해 depth는 그대로 두고
- pool_size 에 따라 나오는 레이어의 가로 세로폭 축소
# 2x2 사이즈의 영역을 1x1로 바꾸되 가장 큰 수를 가져와서 연산량을 줄인다.
model.add( MaxPool2D(pool_size=(2, 2)) )
BatchNormalization
- 배치 단위로 학습할 때 hidden layer의 과정에서 발생하는 문제점 (Internal Covariant Shift)
- 데이터의 분포가 달라진다라고 주장
- 이를 개선하는 방법으로 batch normalization 사용하여 데이터의 분포를 정규분포를 따르도록 만들어준다.
- feature scale이 다르면 gradient descent를 했을 때 피처별로 gradient 편차가 지거나 작아져서 exploding gradient , vanishing gradient 문제가 일어난다.
- hidden layer -> activation -> BatchNormalization 순으로 했을 때 성능이 좋다고 경험적으로 결론이 남
https://gaussian37.github.io/dl-concept-batchnorm/
model.add(BatchNormalization())
Dropout
- Accuracy가 1에 가까워지면서 val_accuracy가 더이상 올라가지 않는 과적합이 발생했을 때에 적용을 고려하기
- 학습 과정에 생긴 연결고리(간선)들을 일부 랜덤하게 설정한 비율에 맞게 제거한다. (과적합 해결 혹은 모델의 robust 유지)
model.add(Dropout(0.25))
Flatten
- 데이터를 1차원으로 쭉 풀어준다.
model.add( Flatten() )
참고
'Experience > - KT AIVLE School' 카테고리의 다른 글
KT AIVLE School 7주차 정리 - 상황별 Data Augmentation (0) | 2023.03.15 |
---|---|
KT AIVLE School 7주차 정리 - CNN 모델 만들고 사용하기 (0) | 2023.03.15 |
KT AIVLE School 7주차 정리 - Keras callbacks (0) | 2023.03.15 |
KT AIVLE School 6주차 정리 - FI, PFI, SHAP (0) | 2023.03.10 |
KT AIVLE School 6주차 정리 - 미니프로젝트 후기 (0) | 2023.03.08 |
KT AIVLE School 6주차 정리 - 전처리 고급 (0) | 2023.03.07 |
댓글