Ինչպե՞ս է աշխատում Autoencoders-ը:


Ավտո կոդավորիչները նեյրոնային ցանցերի շատ արդյունավետ կատեգորիա են, որն օգտագործվում է չվերահսկվող ուսուցման և տվյալների ծավալը նվազեցնելու համար: Նրանք ունեն մուտքային տվյալների կոմպակտ ներկայացումներ սովորելու կարողություն՝ դրանք կոդավորելով ավելի ցածր չափերի լատենտ տարածության մեջ և հետագայում վերծանելով դրանք՝ սկզբնական մուտքագրումը վերականգնելու համար: Այս հոդվածը խորանում է Python-ում ավտոմատ կոդավորիչների աշխատանքի մեջ՝ մասնավորապես օգտագործելով Keras գրադարանը՝ դրանց ֆունկցիոնալության համապարփակ պատկերացում ապահովելու համար:

Ի՞նչ են ինքնակոդավորիչները:

Ավտոկոդավորիչները նեյրոնային ցանցերի մասնագիտացված ձև են, որոնք նախատեսված են մուտքային տվյալները վերակառուցելու համար: Դրանք բաղկացած են երկու հիմնական մասից՝ ապակոդավորող ցանցից, որը պատասխանատու է սեղմված ներկայացումից սկզբնական մուտքը վերստեղծելու համար, և կոդավորող ցանց, որը սեղմում է մուտքը ավելի ցածր չափերի պատկերման մեջ։ Ավտոկոդավորիչները գերազանցում են տվյալների կարևոր առանձնահատկություններն ու օրինաչափությունները ճանաչելու հարցում, և նրանք վերապատրաստված են վերակառուցման գործընթացում սխալները նվազագույնի հասցնելու համար: Դրանց կիրառությունները ներառում են ծավալների կրճատում, անոմալիաների հայտնաբերում և մոդելների ստեղծում:

Տվյալների սեղմումը, անոմալիաների հայտնաբերումը, պատկերների սինթեզը և ձայնազերծումը ընդամենը մի քանի ծրագրեր են, որտեղ ավտոկոդավորիչները կարևոր են: Դրանք հատկապես օգտակար են, երբ մուտքային տվյալները չունեն հստակ պիտակներ կամ երբ մենք ցանկանում ենք տվյալներից հանել բովանդակալից հատկանիշներ՝ առանց պիտակավորված օրինակների վրա հենվելու:

Ինչպե՞ս են աշխատում ավտոմատ կոդավորիչները:

Ավտոկոդավորիչները գործում են մուտքային տվյալների կոմպակտ և արդյունավետ ներկայացման միջոցով: Հիմնական բնութագրերը գրավելու համար ինքնակոդավորիչները օգտագործում են կոդավորող ցանց, որը սեղմում է մուտքագրումը ավելի ցածր չափերի թաքնված տարածության մեջ: Հետագայում, ապակոդավորող ցանցը վերակառուցում է այս սեղմված ներկայացման սկզբնական մուտքը: Ուսուցման գործընթացի ընթացքում ինքնակոդավորիչը փորձում է նվազագույնի հասցնել մուտքի և վերակառուցված ելքի միջև եղած անհավասարությունը: Սա հնարավորություն է տալիս ինքնակոդավորողին սովորել տվյալների կոդավորումն ու վերծանումը: Ստիպելով ցանցին հավատարմորեն վերակառուցել մուտքագրումը, ավտոկոդավորիչները ձեռք են բերում իմաստալից ներկայացումներ ստանալու և արժեքավոր հատկություններ հանելու կարողություն: Հետևաբար, դրանք արժեքավոր են դառնում այնպիսի առաջադրանքներում, ինչպիսիք են ծավալների կրճատումը, անոմալիաների հայտնաբերումը և մոդելների ստեղծումը:

Ստորև բերված են այն քայլերը, որոնք մենք կհետևենք՝ հասկանալու համար, թե ինչպես են ավտոմատ կոդավորիչները աշխատում ծրագրի օրինակի հետ

  • MNIST տվյալների բազայի բեռնում և այնուհետև նախնական մշակում:

  • Սահմանեք ինքնակոդավորիչի մոդելը կոդավորիչի և ապակոդավորիչի շերտերով:

  • Ստեղծեք առանձին կոդավորիչների և ապակոդավորիչների մոդելներ՝ դրանց գործառույթները մեկուսացնելու համար:

  • Կազմել և վարժեցնել ավտոկոդավորիչը վերապատրաստման տվյալների վրա:

  • Օգտագործեք կոդավորիչը՝ մուտքային փորձարկման տվյալները կոդավորելու համար, իսկ ապակոդավորիչը՝ կոդավորված տվյալները վերծանելու սկզբնական մուտքային տարածություն այն բանից հետո, երբ մենք ավարտել ենք մոդելի վերապատրաստումը:

  • Պատկերացրեք բնօրինակի կողմը և պատկերը, որը վերակառուցվում է Matplotlib-ի միջոցով:

Ստորև բերված ծրագիրը կցուցադրի 10 տող ունեցող պատկեր, որտեղ յուրաքանչյուր տող պարունակում է բնօրինակ պատկեր, որին հաջորդում է իր վերակառուցված նմանակը: Մենք կարող ենք նաև փորձարկել տարբեր հիպերպարամետրեր և դիտել, թե ինչպես են դրանք ազդում վերակառուցված պատկերների որակի վրա:

Օրինակ

import numpy as npp
import matplotlib.pyplot as pltt
from keras.datasets import mnist
from keras.layers import Input, Dense
from keras.models import Model

# Load the MNIST dataset
(x_train_m, _), (x_test_m, _) = mnist.load_data()

# Normalize the pixel values between 0 and 1
x_train_m = x_train_m.astype('float32') / 255.
x_test_m = x_test_m.astype('float32') / 255.

# Reshape the input images
x_train = x_train_m.reshape((len(x_train_m), npp.prod(x_train_m.shape[1:])))
x_test = x_test_m.reshape((len(x_test_m), npp.prod(x_test_m.shape[1:])))

# Define the size of the latent space
latent_dim = 32

# Define the input layer
input_img = Input(shape=(784,))

# Define the encoder layers
encoded1 = Dense(128, activation='relu')(input_img)
encoded2 = Dense(latent_dim, activation='relu')(encoded1)

# Define the decoder layers
decoded1 = Dense(128, activation='relu')(encoded2)
decoded2 = Dense(784, activation='sigmoid')(decoded1)

# Create the autoencoder model
autoencoder = Model(input_img, decoded2)

# Create separate encoder and decoder models
encoder = Model(input_img, encoded2)

# Define the decoder input
latent_input_m = Input(shape=(latent_dim,))
decoder_layer_m = autoencoder.layers[-2](latent_input_m)
decoder_layer_m = autoencoder.layers[-1](decoder_layer_m)
decoder = Model(latent_input_m, decoder_layer_m)

# Compile the autoencoder
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

# Train the autoencoder
autoencoder.fit(x_train, x_train,
   epochs=50,
   batch_size=256,
   shuffle=True,
   validation_data=(x_test, x_test))

# Encode and decode the input test data
encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)

# Display the original and reconstructed images
n = 10
pltt.figure(figsize=(20, 4))
for i in range(n):
   # Original image
   ax = pltt.subplot(2, n, i+1)
   pltt.imshow(x_test[i].reshape(28, 28))
   pltt.gray()
   ax.get_xaxis().set_visible(False)
   ax.get_yaxis().set_visible(False)

   # Reconstructed image
   ax = pltt.subplot(2, n, i+n+1)
   pltt.imshow(decoded_imgs[i].reshape(28, 28))
   pltt.gray()
   ax.get_xaxis().set_visible(False)
   ax.get_yaxis().set_visible(False)
pltt.show()

Արդյունք

Եզրակացություն

Եզրափակելով, ինքնակոդավորիչները հզոր շրջանակ են ապահովում մուտքային տվյալների սեղմված ներկայացումները սովորելու համար: Օգտագործելով կոդավորիչ-ապակոդավորիչ ճարտարապետություն՝ նրանք կարող են արդյունավետորեն գրավել տվյալների մեջ կարևոր առանձնահատկությունները և օրինաչափությունները: Ավտոկոդավորիչները լայնորեն օգտագործվում են այնպիսի առաջադրանքների համար, ինչպիսիք են անոմալիաների հայտնաբերումը, ծավալների կրճատումը և գեներատիվ մոդելավորումը: Ուսուցման գործընթացի միջոցով նրանք օպտիմիզացնում են վերակառուցման սխալը՝ հնարավորություն տալով նրանց սովորել բովանդակալից ներկայացումներ և արժեքավոր պատկերացումներ կորզել բարդ տվյալների հավաքածուներից: Տվյալները կոդավորելու և վերծանելու իրենց ունակությամբ՝ ավտոկոդավորիչներն առաջարկում են բազմակողմանի և արդյունավետ գործիք մեքենայական ուսուցման տարբեր ծրագրերի համար: