[AI] AutoEncoder๋ž€??

degullยท2024๋…„ 9์›” 4์ผ
0

๐Ÿ’ป AutoEncoder๋ž€?
์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•˜๊ณ  ๋‹ค์‹œ ๋ณต์›ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ค‘์š”ํ•œ ํŠน์ง•์„ ํ•™์Šตํ•˜๋Š” ๋ชจ๋ธ


Autoencoder์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

  1. ์ธ์ฝ”๋”(Encoder):

    • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ์ฐจ์›์œผ๋กœ ์••์ถ•ํ•˜๋Š” ์—ญํ• 
    • ์˜ˆ) ์›๋ž˜ 1000๊ฐœ์˜ ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ 100๊ฐœ์˜ ์ˆซ์ž๋กœ ์ค„์ž„
    • ์ธ์ฝ”๋”๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ •๋ณด๋งŒ ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ œ๊ฑฐํ•˜๋ ค๊ณ  ํ•จ
  2. ๋””์ฝ”๋”(Decoder):

    • ์ธ์ฝ”๋”๊ฐ€ ์••์ถ•ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์›๋ž˜ ํฌ๊ธฐ๋กœ ๋ณต์›ํ•˜๋Š” ์—ญํ• 
    • ์ฆ‰, 100๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋‹ค์‹œ 1000๊ฐœ์˜ ์ˆซ์ž๋กœ ํ™•์žฅํ•˜์—ฌ ์›๋ž˜ ์ž…๋ ฅ๊ณผ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ฆ

Autoencoder์˜ ๋ชฉํ‘œ

Autoencoder์˜ ๋ชฉ์ ์€ ์••์ถ•๋œ ์ •๋ณด๋กœ๋ถ€ํ„ฐ ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ๋Œ€ํ•œ ์ •ํ™•ํ•˜๊ฒŒ ๋ณต์›ํ•˜๋Š” ๊ฒƒ
โ†’ ์ด ๊ณผ์ •์—์„œ ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ์˜ ์ค‘์š”ํ•œ ํŒจํ„ด์„ ํ•™์Šตํ•˜๊ฒŒ ๋จ.
๋งŒ์•ฝ ๋ชจ๋ธ์ด ๋ฐ์ดํ„ฐ์˜ ์ค‘์š”ํ•œ ํŠน์ง•์„ ์ž˜ ํ•™์Šตํ•˜๋ฉด, ์••์ถ•๋œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ง€๊ณ ๋„ ์›๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™œ Autoencoder๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  1. ๋ฐ์ดํ„ฐ ์••์ถ•: ์ค‘์š”ํ•œ ์ •๋ณด๋งŒ ๋‚จ๊ธฐ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•ด, ์ด๋ฏธ์ง€๋‚˜ ์Œ์„ฑ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ
  2. ์žก์Œ ์ œ๊ฑฐ(Denoising): ์žก์Œ์ด ์„ž์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋„ฃ์œผ๋ฉด, Autoencoder๋Š” ์žก์Œ์„ ์ œ๊ฑฐํ•œ ๊นจ๋—ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ
  3. ๋น„์ง€๋„ ํ•™์Šต: Autoencoder๋Š” ๋ผ๋ฒจ์ด ์—†๋Š” ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ํ•™์Šตํ•˜๋Š” ๋ฐ ์œ ์šฉ
  4. ๋ฐ์ดํ„ฐ ํŠน์ง• ํ•™์Šต: Autoencoder๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ค‘์š”ํ•œ ํŠน์ง•์„ ์ž๋™์œผ๋กœ ํ•™์Šต


์‹คํ—˜ ์ฝ”๋“œ

Autoencoder : ViT (Vision Transformer) ๊ธฐ๋ฐ˜์˜ ์ธ์ฝ”๋”์™€, ๊ทธ ๋’ค์— ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ๋ฐ˜์˜ ๋””์ฝ”๋”๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ตฌ์กฐ
โ†’ ์ด Autoencoder๋Š” ์ด๋ฏธ์ง€์˜ ์ค‘์š”ํ•œ ํŠน์ง•์„ ์ถ”์ถœํ•˜๊ณ , ๊ทธ ํŠน์ง•์„ ๋‹ค์‹œ ์›๋ณธ ์ด๋ฏธ์ง€๋กœ ๋ณต์›ํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰

๊ฐ ๋ถ€๋ถ„ ์„ค๋ช…

  1. ViT ์ธ์ฝ”๋”:

    self.vit = ViTModel.from_pretrained('google/vit-base-patch16-224')
    • Google์—์„œ ์‚ฌ์ „ ํ•™์Šต๋œ Vision Transformer (ViT) ๋ชจ๋ธ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉ
    • Vision Transformer (ViT) : ์ด๋ฏธ์ง€์˜ ํŒจ์น˜๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ์ด๋ฏธ์ง€์˜ ์ค‘์š”ํ•œ ํŠน์ง•๋“ค ์ถ”์ถœ
    • ViT๋Š” ์ž…๋ ฅ ์ด๋ฏธ์ง€(์—ฌ๊ธฐ์„œ๋Š” 224x224 ํฌ๊ธฐ)๋ฅผ ์ผ์ •ํ•œ ํฌ๊ธฐ์˜ ํŒจ์น˜๋กœ ๋‚˜๋ˆˆ ํ›„, ๊ฐ ํŒจ์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ํŠน์ง• ๋ฒกํ„ฐ ์ƒ์„ฑ
    • ViT์˜ ์ถœ๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒจ์น˜ ์ž„๋ฒ ๋”ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€๋งŒ, ์ด ์ฝ”๋“œ์—์„œ๋Š” ๊ทธ ์ค‘์—์„œ ์ฒซ ๋ฒˆ์งธ ํŒจ์น˜ ์ž„๋ฒ ๋”ฉ(CLS ํ† ํฐ)์„ ์ด์šฉํ•ด ํŠน์ง• ์ถ”์ถœ
      encoded = vit_outputs.last_hidden_state[:, 0]  # ์ฒซ ๋ฒˆ์งธ ํ† ํฐ๋งŒ ์‚ฌ์šฉ
  2. ๋””์ฝ”๋”(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] ๋ฒ”์œ„๋กœ ์ •๊ทœํ™”๋œ ๊ฐ’์„ ์˜๋ฏธํ•จ..
  3. ๊ฐ€์ค‘์น˜ ์ดˆ๊ธฐํ™”:

    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) ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋œ ๋””์ฝ”๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋ณต์›ํ•˜๋Š” ๋ฐฉ์‹

profile
๊ทธ๋ž˜๋„ ํ•ด์•ผ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€