๐ป AutoEncoder๋?
์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์์ถํ๊ณ ๋ค์ ๋ณต์ํ๋ ๊ณผ์ ์ ํตํด ๋ฐ์ดํฐ์ ์ค์ํ ํน์ง์ ํ์ตํ๋ ๋ชจ๋ธ

Autoencoder์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
-
์ธ์ฝ๋(Encoder):
- ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์์ ์ฐจ์์ผ๋ก ์์ถํ๋ ์ญํ
- ์) ์๋ 1000๊ฐ์ ์ซ์๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ 100๊ฐ์ ์ซ์๋ก ์ค์
- ์ธ์ฝ๋๋ ์
๋ ฅ ๋ฐ์ดํฐ์์ ๊ฐ์ฅ ์ค์ํ ์ ๋ณด๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ์ ๊ฑฐํ๋ ค๊ณ ํจ
-
๋์ฝ๋(Decoder):
- ์ธ์ฝ๋๊ฐ ์์ถํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์๋ ํฌ๊ธฐ๋ก ๋ณต์ํ๋ ์ญํ
- ์ฆ, 100๊ฐ์ ์ซ์๋ฅผ ๋ค์ 1000๊ฐ์ ์ซ์๋ก ํ์ฅํ์ฌ ์๋ ์
๋ ฅ๊ณผ ์ต๋ํ ๋น์ทํ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ฆ
Autoencoder์ ๋ชฉํ
Autoencoder์ ๋ชฉ์ ์ ์์ถ๋ ์ ๋ณด๋ก๋ถํฐ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ต๋ํ ์ ํํ๊ฒ ๋ณต์ํ๋ ๊ฒ
โ ์ด ๊ณผ์ ์์ ๋ชจ๋ธ์ ๋ฐ์ดํฐ์ ์ค์ํ ํจํด์ ํ์ตํ๊ฒ ๋จ.
๋ง์ฝ ๋ชจ๋ธ์ด ๋ฐ์ดํฐ์ ์ค์ํ ํน์ง์ ์ ํ์ตํ๋ฉด, ์์ถ๋ ๋ฐ์ดํฐ๋ง ๊ฐ์ง๊ณ ๋ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ ์ ์์ต๋๋ค.
์ Autoencoder๋ฅผ ์ฌ์ฉํ ๊น?
- ๋ฐ์ดํฐ ์์ถ: ์ค์ํ ์ ๋ณด๋ง ๋จ๊ธฐ๊ณ ๋ฐ์ดํฐ๋ฅผ ์์ถํด, ์ด๋ฏธ์ง๋ ์์ฑ ๋ฐ์ดํฐ์ฒ๋ผ ํฌ๊ธฐ๊ฐ ํฐ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ
- ์ก์ ์ ๊ฑฐ(Denoising): ์ก์์ด ์์ธ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ์ผ๋ก ๋ฃ์ผ๋ฉด, Autoencoder๋ ์ก์์ ์ ๊ฑฐํ ๊นจ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ
- ๋น์ง๋ ํ์ต: Autoencoder๋ ๋ผ๋ฒจ์ด ์๋ ๋ฐ์ดํฐ๋ก ํ์ตํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ํ์ตํ๋ ๋ฐ ์ ์ฉ
- ๋ฐ์ดํฐ ํน์ง ํ์ต: Autoencoder๋ ๋ฐ์ดํฐ๋ฅผ ์์ถํ๋ ๊ณผ์ ์์ ๋ฐ์ดํฐ์ ์ค์ํ ํน์ง์ ์๋์ผ๋ก ํ์ต
์คํ ์ฝ๋
Autoencoder : ViT (Vision Transformer) ๊ธฐ๋ฐ์ ์ธ์ฝ๋์, ๊ทธ ๋ค์ ๋ฅ๋ฌ๋ ๊ธฐ๋ฐ์ ๋์ฝ๋๋ฅผ ๊ฒฐํฉํ ๊ตฌ์กฐ
โ ์ด Autoencoder๋ ์ด๋ฏธ์ง์ ์ค์ํ ํน์ง์ ์ถ์ถํ๊ณ , ๊ทธ ํน์ง์ ๋ค์ ์๋ณธ ์ด๋ฏธ์ง๋ก ๋ณต์ํ๋ ์์
์ํ
๊ฐ ๋ถ๋ถ ์ค๋ช
-
ViT ์ธ์ฝ๋:
self.vit = ViTModel.from_pretrained('google/vit-base-patch16-224')
-
๋์ฝ๋(Decoder):
self.decoder = nn.Sequential(
nn.Linear(self.vit.config.hidden_size, 4096),
nn.ReLU(True),
nn.Linear(4096, 8192),
nn.ReLU(True),
nn.Linear(8192, 3 * 224 * 224),
nn.Sigmoid()
)
- ๋์ฝ๋ : ์ธ์ฝ๋(ViT)๋ฅผ ํตํด ์ถ์ถ๋ ์์ถ๋ ํน์ง ๋ฒกํฐ๋ฅผ ๋ค์ ์ด๋ฏธ์ง๋ก ๋ณต์ํ๋ ์ญํ
- ์ธ ๊ฐ์ Fully Connected (FC) ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ ๋ ์ด์ด๋ ๋น์ ํ ํ์ฑํ ํจ์ ReLU๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ์ฒซ ๋ฒ์งธ FC ๋ ์ด์ด๋ 768๊ฐ์ ํน์ง ๋ฒกํฐ(์ธ์ฝ๋์ ์ถ๋ ฅ)๋ฅผ 4096 ์ฐจ์์ผ๋ก ํ์ฅ
- ๋ ๋ฒ์งธ FC ๋ ์ด์ด๋ ์ด 4096 ์ฐจ์์ 8192 ์ฐจ์์ผ๋ก ํ์ฅ
- ๋ง์ง๋ง FC ๋ ์ด์ด๋ ์ด๋ฏธ์ง ํฌ๊ธฐ์ ๋ง๊ฒ 3 224 224 (RGB ์ฑ๋์ 224x224 ํฌ๊ธฐ ์ด๋ฏธ์ง)๋ก ์ถ๋ ฅ
- ๋ง์ง๋ง์ผ๋ก Sigmoid ํ์ฑํ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๋ ฅ ๊ฐ์ 0๊ณผ 1 ์ฌ์ด๋ก ์ ํ.
์ด ๊ฐ์ ์ด๋ฏธ์ง์ ๊ฐ ํฝ์
์ RGB ๊ฐ์ ๋ํ๋ด๋ฉฐ, [0, 1] ๋ฒ์๋ก ์ ๊ทํ๋ ๊ฐ์ ์๋ฏธํจ..
-
๊ฐ์ค์น ์ด๊ธฐํ:
def _initialize_weights(self):
for m in self.decoder:
if isinstance(m, nn.Linear):
nn.init.kaiming_uniform_(m.weight)
nn.init.constant_(m.bias, 0)
- ๋์ฝ๋์ ๊ฐ Fully Connected ๋ ์ด์ด(FC ๋ ์ด์ด)๋ Kaiming ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ค์น ์ด๊ธฐํ
์์ค ํจ์
criterion = nn.MSELoss()
- MSE (Mean Squared Error) ์์ค ํจ์๋ฅผ ์ฌ์ฉํด ์ถ๋ ฅ๋ ๋ณต์ ์ด๋ฏธ์ง์ ์๋ณธ ์ด๋ฏธ์ง ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํจ
์ด ๊ฐ์ด ์์์๋ก ๋ณต์๋ ์ด๋ฏธ์ง๊ฐ ์๋ณธ ์ด๋ฏธ์ง์ ๋น์ทํด์ง
ํ์ต ๊ณผ์
- Optimizer: Adam ์ตํฐ๋ง์ด์ ๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ์ ๊ฐ์ค์น ํ์ต
ํ์ต๋ฅ ์ lr=0.00005๋ก ๋น๊ต์ ์์ ๊ฐ ์ฌ์ฉ
- Learning Rate Scheduler:
StepLR์ ์ฌ์ฉํ์ฌ 10 ์ํญ๋ง๋ค ํ์ต๋ฅ ์ ์ ๋ฐ์ผ๋ก ์ค์ฌ ํ์ต์ด ์งํ๋จ์ ๋ฐ๋ผ ๋ ์ธ๋ฐํ๊ฒ ํ์ต๋๋๋ก ํจ
ํ์ต ๋ชฉํ
Autoencoder์ ๋ชฉํ๋ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์์ถํ ํ ๋ค์ ๋ณต์ํ๋ ๊ฒ์ด๋ฉฐ, ์ด๋ฅผ ํตํด ๋ชจ๋ธ์ด ๋ฐ์ดํฐ์ ์ค์ํ ํน์ง์ ํ์ตํ ์ ์์.
โ ๊ฒฐ๊ตญ, ์์ถ ๊ณผ์ ์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๊ณ ์ค์ํ ํน์ง๋ง์ ๋จ๊น
์์ฝ:
Vision Transformer (ViT)๋ฅผ ์ฌ์ฉํด ์ด๋ฏธ์ง์ ํน์ง์ ์ถ์ถ(์ธ์ฝ๋ฉ)ํ๊ณ , Fully Connected (FC) ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋ ๋์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ๋ณต์ํ๋ ๋ฐฉ์