이번 캐글 TPS의 일등 리더보드 솔루션은 Denoising Autoencoder을 사용했다.
Autoencoder
Autoencoder란 feature selection, feature extraction에 사용되는 Feedforward 뉴럴넷이다. 인풋 데이터를 인코더를 이용해서 압축해 코드를 만들고, 코드를 디코더를 통해 아웃풋으로 만든다. 이 과정에서 인풋의 중요한 특성들을 뽑아내게 된다.
Autoencoder를 만드는데 3가지가 필요한데,
1. 어떻게 encoding?
2. 어떻게 decoding?
3. 아웃풋과 타겟을 비교할 loss function
Autoencoder은 fully connected NN이고, 4개의 하이퍼파라미터를 갖는다. 학습 방법은 기존 NN과 동일하게 backpropagation을 이용한다.
1. code dimentionality
2. layer의 개수
3. layer 당 node의 개수
4. loss function: 범위가 0, 1이면 binary crossentropy를 쓰고, 이외에는 mae를 사용한다.
1~3번까지의 하이퍼파라미터의 개수를 올려주면, 더 강력한 Autoencoder를 만들 수 있는데, 이 때 너무 오버피팅되지 않게 주의해야한다. 여기서 오버피팅은, 인풋과 아웃풋 데이터가 동일한 경우를 말한다. 인풋 데이터를 완전히 복사하게되면 이 구조를 이용하는 의미가 없어지게된다. (=뉴럴넷이 identity function을 학습함)
이 현상을 방지하기 위해서 Denoising Autoencoder을 사용할 수 있다.
Denoising Autoencoder (DAE)
DAE는 먼저 인풋 데이터에 랜덤한 노이즈를 추가한 후에 Autoencoder에 넘겨준다. Autoencoder은 노이즈가 추가된 인풋 데이터만을 이용해서 노이즈를 제거하고, 유용한 특성들을 뽑아낸다.
DAE는 두개의 타입이 있는데,
1. Bottleneck: input ➡️ Dense(5000) ➡️ Dense(5000) ➡️ Dense(2500) ➡️ Dense(5000) ➡️ Dense(5000) ➡️ output
2. Deepstack: input ➡️ Dense(1500) ➡️ Dense(1500) ➡️ Dense(1500) ➡️ output
DAE 학습에는 타겟이 필요하지 않고, train, test 데이터를 합쳐서 넣어준다. 이 때 X는 노이즈가 추가된 데이터, y는 원본 데이터가 된다.
예시)
def get_DAE():
inputs = Input((X.shape[1],))
x = Dense(1500, activation='relu')(inputs)
x = Dense(1500, activation='relu', name="feature")(x)
x = Dense(1500, activation='relu')(x)
outputs = Dense(X.shape[1], activation='relu')(x)
model = Model(inputs=inputs, outputs=outputs)
# range [0,1] => loss='binary_crossentropy'
model.compile(optimizer='adam', loss='mse')
return model
https://www.kaggle.com/code/springmanndaniel/1st-place-turn-your-data-into-daeta/report
https://towardsdatascience.com/applied-deep-learning-part-3-autoencoders-1c083af4d798
'Computer Science > [21-22] ML & DL' 카테고리의 다른 글
[LSTM] LSTM + Fully Connected Layer 두가지 방법 (0) | 2022.04.23 |
---|---|
[CNN] Conv1D의 causal padding이란 (0) | 2022.04.22 |
[cv] 시계열 데이터 Cross Validation - GroupKFold (0) | 2022.04.16 |
[FE] 시계열 데이터 lag feature 추가하기 (0) | 2022.04.15 |
[LSTM] LSTM unit, cell, layer에 대한 이해 (0) | 2022.04.13 |
댓글