본문 바로가기

AI/Framework

[Keras] Dense, Fully connected Layer

 

 

누구나 이해할 수 있는 딥러닝 - cs231n 5강 (Convolutional Neural Networks, CNN)

- cs231n 5강의 내용을 정리한 글입니다. - 최대한 쉽게, cs231n 강의를 스스로 다시 이해하며, 처음 딥러닝을 공부하는 사람들도 쉽게 이해할 수 있게 정리해보았습니다. - 저도 초보인지라 틀리는

cding.tistory.com

신경망

신경망은 위의 그림에서 input -> activation function -> output 연산이 되고 output이 새로운 input이 되는거라고 생각하면 됩니다.

신경망의 기본 함수 형태는 아래와 같습니다.

y = f(Wx+b)

f() : 활성화 함수
W : 가중치
x : input data
y : output data

기본신경망 만들기

tf.keras.layers.Dense

tensorflow에서 신경망을 이해할 때 사용하는 모듈은 tf.keras.layers.Dense입니다.

 

 

 

신경망 이해하기 - tf.keras.layers.Dense - 교양 한페이지

서론 안녕하세요! 맨스컬처입니다.인공지능에 대해서 공부하면 신경망에 대해서 많이 이야기 하는데요. 오늘은 신경망에 대해서 조금 더 자세하게 볼까합니다. 신경망은 위의 그림에서 input -> a

mansculture.com


왜 이미지 분류 레이어 중 Dense Layer(완전연결 계층)가 있는 것일까?

 

위 글에서 논한 완전연결 계층은, 초기 이미지 분류 시도에 있어 사용했던,

Input 이미지의 전체를 직렬화(Serialize) 후, 그 이미지 인풋을 그대로 Fully Connected Layer에서 학습해버리는 방식이었고, 그랬기 때문에 아래 4가지 문제점들이 생겼다.

 

1) Image가 고해상도가 될 경우 파라메터 수의 급증 
2) 공간적 특성, 즉 Spatial Feature가 직렬화로 인해 무시됨

3) Fully Connected Layer는 영상의 전체 관계(topology)를 고려하지 못하게 되어, 입력 데이터의 변형에 매우 취약

4) 변형에 취약한 Fully Connected Layer는 변형된 영상의 학습데이터를 굉장히 많이 요구하게 됨

 

하지만 현재 Tensorflow 2.X의 Dense Layer나, PyTorch의 torch.nn.Linear 함수는 해당 레이어가 오기 직전의 Input과 그 후의 Output만을 완전연결 계층으로 만든다.

 

즉, Conv2d로 Feature Map을 만들고, DepthwiseConv2d로 Spatial Feature를 뽑아내고, MaxPooling으로 차원을 감소시킨 후 마지막으로 Dense Layer를 사용하면 감소된 차원의 Feature Map들만 Input으로 하여 Output과 완전연결 계층을 생성하여, 더 효율적인 학습이 가능해진다.

 

그렇기에 Dense Layer는 보통 모델의 맨 마지막에 위치해있는 경우가 많다.


input과 Weight를 곱하여 10개의 output 값들을 만들어 내는 layer가 바로 Fully connected layer였습니다.

 

Convolution Layer은 Fully connected layer와 어떤 점이 다를까요?

일단, Convolution layer에서의 input값은 fully-connected layer와는 다르게 원형을 보존한 상태로 둡니다.

32*32*3 크기의 사진이라면, 그 사진의 크기 그대로 보존해 놓습니다.