Variationella autokodare (VAE) har dykt upp som ett kraftfullt verktyg inom maskininlärning, särskilt för uppgifter som generativ modellering, anomalidetektering och datakomprimering. Skjutfönsterstekniken är å andra sidan en välkänd metod vid signalbehandling och tidserieanalys. I den här bloggen undersöker vi hur man använder skjutfönstret för variationella autoencoders och belyser även våra erbjudanden som en glidfönsterleverantör.
Förstå variationskroppar
Innan du går in i appliceringen av glidfönsterstekniken är det avgörande att förstå vad VAE är. En VAE är en typ av autoencoder som lägger till en probabilistisk twist till den traditionella autoencoderarkitekturen. I en standard autoencoder är målet att kartlägga en ingång till en lägre dimensionell representation (kodningen) och sedan rekonstruera ingången från denna kodning. VAES antar emellertid att kodningen samplas från en sannolikhetsfördelning, vanligtvis en Gaussisk fördelning.
Kodaren i en VAE matar ut medelvärdet och variansen för den gaussiska fördelningen från vilken kodningen samplas. Denna sannolikhetsstrategi gör det möjligt för VAE att generera nya datapunkter som liknar träningsdata. Avkodaren tar sedan den provtagna kodningen och försöker rekonstruera den ursprungliga ingången. Utbildningen av en VAE innebär att minimera en förlustfunktion som kombinerar rekonstruktionsförlusten (hur väl ingången rekonstrueras) och KL -divergensförlusten (som mäter hur nära den lärda distributionen är till en tidigare distribution, vanligtvis en standard Gaussisk).
Glidfönsterstekniken
Skjutfönsterstekniken är en enkel men ändå effektiv metod för att bearbeta sekventiella data. Med tanke på en sekvens av datapunkter definieras ett fönster med en fast storlek. Detta fönster glider över sekvensen, en datapunkt i taget (eller flera punkter i taget beroende på framsteget), och vid varje position behandlas data i fönstret.
I samband med VAE kan skjutfönstret användas på flera sätt. En gemensam applikation är i tidsanalys. Om vi till exempel har en tid - serie sensoravläsningar kan vi använda ett skjutfönster för att extrahera efterföljder av en fast längd. Dessa efterföljder kan sedan användas som ingångar till VAE.
Använda skjutfönstret för VAES
Dataförberedelse
Det första steget i att använda skjutfönstret för VAES är dataförberedelse. Anta att vi har ett tidsdatasats (x = [x_1, x_2, \ cdots, x_n]). Vi definierar en fönsterstorlek (W) och ett steg. Från början av sekvensen extraherar vi fönster med storlek (W) med ett steg av (er).
Låt (i) vara startindex för ett fönster. Fönstret (i) - th (w_i = [x_i, x_ {i + 1}, \ cdots, x_ {i + w - 1}]) bildas. Uppsättningen av alla sådana Windows utgör vårt nya datasätt för att träna VAE. Detta nya datasätt har en form som är lämplig för inmatningen av VAE. Till exempel, om den ursprungliga tidsserien har en enda dimension, har varje fönster en form av ((W, 1)).
Importera numpy som np def sliding_window (data, windows_size, steg): num_windows = (len (data) - windows_size) // steg + 1 windows = [] för i inom räckvidd (num_windows): start = i * Stride end = Start + Window_Size Windows.Append (Data [Start: End]) returnera np.Array (Windows) NP.Array ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) Window_Size = 3 Stride = 1 Windows = Sliding_Window (Time_Series, Window_Size, Stride) Print (Windows)
Tränar VAE
När vi har förberett data med hjälp av skjutfönsterstekniken kan vi träna VAE. Träningsprocessen liknar standard VAE -träning, men med det nya datasättet för Windows.
VAE: s kodare kommer att lära sig att kartlägga varje fönster till en lägre dimensionell probabilistisk representation. Avkodaren kommer sedan att försöka rekonstruera det ursprungliga fönstret från denna representation. Under träningen kan vi övervaka rekonstruktionsförlusten och KL -divergensförlusten för att säkerställa att modellen lär sig effektivt.
Importera tensorflöde som TF från tensorflow.keras Importera lager # Definiera VAE -modellklassprovtagningen (Layers.Layer): def call (self, input): z_mean, z_log_var = ingångar batch = tf.shape (z_mean) [0] dim = tf.shape (z_Mean) [1] [1] isk tf.keras.backend.random_normal (form = (batch, dim)) returnera z_mean + tf.exp (0.5 * z_log_var) * epsilon latent_dim = 2 Encoder_inputs = tf.keras.input (form = (window_size, 1)) x = layers.flaten () () () aktivering = 'relu') (x) z_mean = layers.dense (latent_dim, name = 'z_mean') (x) z_log_var = layers.dense (latent_dim, name = 'z_log_var') (x) z = provtagning () ([z_mean, z_log_var]) Encoder = 'Encoder =' Encoder = 'Encoder =' Encoder = 'Encoder =' Encoder = 'Encoder =' Encoder = 'Encoder =' Encoder = 'Encoder =' Encoder = 'Encoder = Encoder =' Encoder = 'Encoder =' Encoder = Encoder = Encoder = 'Encoder =' Encoder = 'Encoder = Encoder> tf.keras.model (Encoder_Inputs, [z_mean, z_log_var, z], name = 'encoder') decoder_inputs = tf.keras.input (form = (latent_dim,) x = lager.dense (16, aktivering = 'relu') (decoder_in) x = layersdense (fönstret, fönstret) activation='linear')(x) decoder_outputs = layers.Reshape((window_size, 1))(x) decoder = tf.keras.Model(decoder_inputs, decoder_outputs, name='decoder') outputs = decoder(encoder(encoder_inputs)[2]) vae = tf.keras.Model(encoder_inputs, outputs, name='vae') # Define the loss function reconstruction_loss = tf.keras.losses.mean_squared_error(encoder_inputs, outputs) reconstruction_loss = tf.reduce_sum(reconstruction_loss, axis=[1, 2]) kl_loss = - 0.5 * (1 + z_log_var - tf.square (z_mean) - tf.exp (z_log_var)) kl_loss = tf.reduce_sum (kl_loss, axis = 1) vae_loss = tf.reduce_mean (rekonstruktion_loss + kl_loss) vae.add_loss) vae.compile (optimizer = 'adam') # Träna vae vae.fit (windows, epochs = 10, batch_size = 2)
Ansökningar
Anomalisk detektion
En av de viktigaste tillämpningarna med att använda skjutfönstret för VAES är avvikelse av avvikelse i tidsdelningsdata. Efter att ha tränat VAE på normala data (med hjälp av skjutfönsterstekniken) kan vi använda den tränade modellen för att upptäcka avvikelser.
Med tanke på en ny tidsserie använder vi igen skjutfönstret för att extrahera fönster. Vi passerar sedan dessa fönster genom den tränade VAE och beräknar rekonstruktionsfelet för varje fönster. Om rekonstruktionsfelet i ett fönster är över en viss tröskel kan vi överväga det fönstret (och potentiellt motsvarande del av tidsserien) som en anomali.
Generativ modellering
Skjutfönstermetoden kan också användas för generativ modellering av sekventiella data. När VAE har tränats i ett datasätt med Windows kan vi prova från det latenta utrymmet och använda avkodaren för att generera nya fönster. Dessa genererade fönster kan sedan kombineras för att bilda en ny tidsserie.
Våra skjutfönsterutbud
Som en skjutfönsterleverantör erbjuder vi ett brett utbud av glidfönster av hög kvalitet. VårGlidfönsterär kända för sin smidiga drift och hållbarhet. De är utformade för att ge utmärkt ventilation och naturligt ljus samtidigt som de bibehåller energieffektiviteten.
VårHorisontella glidande stormfönsterär specifikt konstruerade för att motstå hårda väderförhållanden. De erbjuder ett extra lager av skydd för ditt hem eller kontor, vilket minskar energikostnaderna och bullerföroreningar.
För de med specifika krav tillhandahåller vi ocksåAnpassat skjutfönsterlösningar. Vårt team av experter kan arbeta med dig för att designa och tillverka skjutfönster som passar dina exakta behov, oavsett om det är en unik storlek, form eller stil.
Om du är intresserad av våra glidfönsterprodukter eller har några frågor om att använda skjutfönsterstekniken i maskininlärningsapplikationer, uppmuntrar vi dig att kontakta oss för ytterligare diskussioner och upphandling. Vi ser fram emot att arbeta med dig för att tillgodose dina behov.
Referenser
Kingma, DP, & Welling, M. (2013). Auto -kodning av variation av Bayes. Arxiv Preprint Arxiv: 1312.6114.
Bishop, CM (2006). Mönsterigenkänning och maskininlärning. Springer.






