Mi az Autoencoder?
On november 11, 2021 by adminEgy szelíd bevezető az Autoencoderről és annak különböző alkalmazásairól. Ezek az oktatóanyagok is a tf.keras-t használják,TensorFlow magas szintű Python API-ját a mélytanulási modellek építéséhez és képzéséhez.
常常見到 Autoencoder 的變形以及應用,打算花幾篇的時間好好的研究一下,順便練習 Tensorflow.keras 的 API 使用。
- Mi az Autoencoder
- Az Autoencoder típusai
- Az Autoencoder alkalmazása
- Implementáció
- Megvalósítás
- Nagyszerű példák
- Következtetés
Nehézség: ★ ★ ☆ ☆ ☆ ☆
後記: 由於 Tensorflow 2.0 alpha 已於 3/8號釋出,但此篇是在1月底完成的,故大家可以直接使用安裝使用看看,但需要更新至相對應的 CUDA10。
Mi az Autoencoder?
首先,什麼是 Autoencoder 呢? 不囉唆,先看圖吧! 不囉唆,先看圖吧!

Az Autoencoder eredeti koncepciója nagyon egyszerű: egy neurális hálózaton keresztül bedobunk egy bemeneti adatot, és pontosan ugyanazokat az adatokat kapjuk, mint a bemeneti adatok.A kódoló először befogadja a bemeneti adatokat, tömöríti azokat egy kisebb dimenziójú Z vektorba, majd a Z-t beviszi a dekódolóba, hogy a Z-t visszaállítsa az eredeti méretre.Ez könnyen hangzik, de nézzük meg közelebbről, hogy tényleg ilyen egyszerű-e.

Kódoló:
A kódoló felelős az eredeti bemeneti adatok tömörítéséért egy alacsony dimenziós vektorba C. Ez a C, amit általában kódnak, látens vektornak vagy feature vektornak nevezünk, de én látens térnek szoktam nevezni, mert a C egy rejtett feature-t képvisel.Az Encoder képes az eredeti adatokat egy értelmes alacsony dimenziós vektorba tömöríteni, ami azt jelenti, hogy az Autoencoder dimenziócsökkentéssel rendelkezik, és a rejtett réteg nemlineáris transzformációs aktiválási funkcióval rendelkezik, így ez az Encoder olyan, mint a PCA egy hatékony változata, mivel az Encoder képes nemlineárisdimenziócsökkentés!
Decoder:
Amit a Decoder csinál, az a látens tér visszaállítása a bemeneti adatokhoz, amennyire csak lehetséges, ami a jellemzővektorok átalakítása az alacsonyabb dimenziós térből a magasabb dimenziós térbe.
Hogyan mérjük, mennyire jól működik az Autoencoder ! Egyszerűen a két eredeti bemeneti adat és a rekonstruált adatok hasonlóságának összehasonlításával.Tehát a veszteségfüggvényünk a következőképpen írható fel: ….
Veszteségfüggvény:

Mivel minimalizálni akarjuk a különbséget aAz AutoEncoder a normál neurális hálózathoz hasonlóan a súlyok frissítéséhez backpropagationt alkalmazva képződik.frissítse a súlyokat.
Összefoglalva, az Autoencoder a …. oldalon található.
1. nagyon elterjedt modellarchitektúra, gyakran használják nem felügyelt tanuláshoz is
2. nemlineáris
3. dimenziócsökkentő módszerként használható nemlineáris
3. adatreprezentáció, reprezentatív jellemző transzformáció tanulására használható
Ezen a ponton már érthetőnek kell lennie, hogy milyen az Autoencoder, az architektúra nagyon egyszerű, nézzük meg a transzformációit!
Az Autoencoder típusai
Az AutoEncoder alapelveinek ismertetése után itt az ideje, hogy megnézzük az Autoencoder kiterjesztett és haladó használatát, hogy láthassuk az Autoencoder széleskörű használatát!
2-1. Unet:
Az Unet a képszegmentálás egyik eszközeként használható, és az Unet architektúra az Autoencoder egy változatának tekinthető.

2-2. Rekurzív automatikus kódolók:
Ez egy olyan hálózat, amely az új bemeneti szöveget más bemenetekből származó látens térrel kombinálja, a hálózat célja az érzetosztályozás.Ez az Autoencoder egy változatának is tekinthető, amely a ritkás szöveget gépelés közben kivonja, és megtalálja a fontos látens teret.

2-Seq2Seq:
A Sequence to Sequence egy generatív modell, amely már egy ideje nagyon népszerű. Nagyszerű megoldás arra a dilemmára, hogy az RNN típusok nem képesek kezelni a határozatlan párosításokat, és jól teljesített olyan témákban, mint a chatbot és a szöveggenerálás.Ez egyfajta Autoencoder architektúrának is tekinthető.

Az automatikus kódoló alkalmazásai
Miután megnéztük az Autoencoder sokféle változatát, lássuk, hol lehet még használni az Autoencodert!
3-1. A modell előképzett súlya
Autoencoder a súly előképzésére is használható, ami azt jelenti, hogy a modell jobb kiindulási értéket talál.Például, amikor szeretnénk befejezni a célmodellt, például a célt. rejtett réteg:, így az elején az autoencoder fogalmát használjuk a 784 dimenzió bevitelére, és a látens tér közepén 1000 dimenzió van, hogy először az előképzést végezzük, így ezek az 1000 dimenziók jól megtartják a bemenetet.Ezután eltávolítjuk az eredeti kimenetet, és hozzáadjuk a második réteget, és így tovább.Így az egész modell jobb kiindulási értéket kap.
Huh! Van egy furcsa rész… ha 1000 neuront használunk a 784 bemeneti dimenzió reprezentálására, az nem azt jelenti, hogy a hálózatot újra kell másolni? Mi értelme az edzésnek? Igen, ezért egy ilyen előzetes tréningben általában hozzáadjuk az L1 normaszabályozót, hogy a rejtett réteget ne másoljuk újra.

Li Hongyi úr szerintRégebben gyakrabban használtak ilyen módszert az előképzéshez, de mostanra a képzési készségek növekedése miatt már nincs szükség erre a módszerre.De ha nagyon kevés címkézett adatod van, de egy csomó címkézetlen adatod van, akkor ezt a módszert használhatod a súly-előképzéshez, mert az Autoencoder maga egy felügyelet nélküli tanulási módszer, először a címkézetlen adatokat használjuk a súly-előképzéshez, majd a címkézetlen adatokat használjuk a súly-előképzéshez.Először a címkézetlen adatokat használjuk a súlyok előtanulmányozására, majd a címkézett adatokkal finomhangoljuk a súlyokat, hogy jó modellt kapjunk.További részletekért nézze meg Li úr videóját, nagyon jól elmagyarázza!
3-2. Képszegmentálás
Az imént látott Unet-modellt nézzük meg újra, mert alapvetően ez a leggyakoribb hibafelismerési probléma a tajvani gyártóiparban.
Először meg kell címkéznünk a bemeneti adatokat, amelyek a kimenetünk lesznek. Azt kell tennünk, hogy felépítünk egy hálózatot, bemenetként az eredeti képet (balra, fogröntgenfelvételek), és létrehozzuk a kimenetet (jobbra, fogszerkezeti osztályozás).Ebben az esetben a kódoló & dekódoló egy konvolúciós réteg lesz erős grafikus megítéléssel, értelmes jellemzők kinyerésével és dekonvolúcióval vissza a dekódolóba, hogy megkapja a szegmentálás eredményét.

3-3. Video to Text
Egy ilyen képfelirat-problémához a szekvencia-szekvencia modellt használjuk, ahol a bemeneti adat egy csomó fénykép, a kimenet pedig egy, a fényképeket leíró szöveg.A szekvenciáról szekvenciára modell LSTM + Conv hálót használ kódoló & dekódolóként, amely képes leírni a szekvenciális cselekvések sorozatát & a CNN kernel segítségével a képben szükséges látens tér kinyerésére.de ez a feladat nagyon nehéz, ezért hagyom, hogy kipróbáld, ha érdekel!

3-4. Képkeresés
Képkeresés A dolog lényege, hogy beviszünk egy képet, és megpróbáljuk megtalálni a legközelebbi egyezést, de ha pixelenként hasonlítjuk össze, akkor nagyon egyszerű aHa az Autoencoder segítségével először tömöríti a képet a látens térbe, majd a hasonlóságot a kép látens terében számítja ki, az eredmény sokkal jobb lesz.Az eredmény sokkal jobb, mivel a látens tér minden dimenziója egy bizonyos jellemzőt képviselhet.Ha a távolságot a látens téren számoljuk ki, akkor ésszerű a hasonló képek megtalálása.Ez különösen nagyszerű módja lenne a felügyelet nélküli tanulásnak, adatok címkézése nélkül!

Itt vannak.Georey E. Hinton, a híres Deep Learning-isten dolgozatában a bal felső sarokban látható a keresett gráf, míg a többi mind olyan gráf, amelyről az autoencoder azt gondolja, hogy nagyon hasonló.7133>

Content-BasedImage Retrieval
3-5. Anomaly Detection
Nem találok jó képet, ezért ezt kellett használnom LOL
Az anomáliák megtalálása szintén egy szuper gyakori gyártási probléma, így ezt a problémát is meg lehet próbálni az Autoencoderrel.Kipróbálhatjuk az Autoencoderrel!Először is beszéljünk az anomáliák tényleges előfordulásáról. Az anomáliák általában nagyon ritkán fordulnak elő, például a gépből érkező rendellenes jelek, hirtelen hőmérséklet-emelkedések …… stb.Ez havonta egyszer történik (ha többször, akkor a gépet nyugdíjba kell küldeni). Ha az adatokat 10 másodpercenként gyűjtik, akkor havonta 260 000 adatot gyűjtenek, de csak egy időszakban van anomália, ami valójában nagyon kiegyensúlyozatlan adatmennyiség.
Tehát a legjobb megoldás ebben a helyzetben, ha az eredeti adatokra támaszkodunk, amelyek végül is a legnagyobb adatmennyiséget jelentik!Ha fogjuk a jó adatokat, és betanítunk egy jó autoencodert, akkor ha anomáliák jönnek be, akkor természetesen a rekonstruált grafika megszakad.Így született meg az ötlet, hogy autoencoderrel keressünk anomáliákat!

Implementáció
Itt a Mnist-et használjuk játékpéldaként, és egy Autoencoder-t implementálunk a Tensorflow.keras magas szintű API segítségével! Mivel a tf.keras új csomagja hamarosan megjelent, gyakoroljuk a Model alosztályozási módszer használatát a fájlban.
4-1. Modell létrehozása – Vallina_AE:
Először is, importáld a tensorflowt!7133>

A tf.keras használata ilyen egyszerű, csak írd be a tf.keras-t!(Nem tudom miről beszélek lol)
Adatok betöltése & modell előfeldolgozás
Először is vesszük a Mnist adatokat a tf.keras.dataset-ből és csinálunk egy kis előfeldolgozást
.Nomalizálás: az értékeket 0 és 1 közé tömöríti, a képzés könnyebben konvergál
Binarizálás: kiemeli a szembetűnőbb területeket, a képzés jobb eredményeket ad.
Modell létrehozása – Vallina_AE:
Ez a Tensorflow dokumentum által biztosított módszer a modellek létrehozásához.összetettebb.
Eddig azt tanultam, hogy a réteget a __init __ helyen kell létrehozni, és a hívásban kell definiálni a forward pass-t.
Tehát két szekvenciális modellt használunk az Encoder & dekóder létrehozásához. kettő szimmetrikus struktúra, a kódoló a bemeneti réteghez kapcsolódik, amely a bemeneti adatok hordozásáért felelős, majd a három sűrű réteghez. a dekóder ugyanez.
Ismét a hívás alatt a kódoló & dekódolót kell összefűznünk, először a látens teret kell definiálnunk a self.encoder
kimeneteként.tér, mint a self.encoder
kimenete, majd a dekóderen való áthaladás eredményeként a rekonstrukció.Ezután a tf.keras.Model()
segítségével összekapcsoljuk a __init__
-ben meghatározott két modellt.AE_model = tf.keras.Model(inputs = self.encoder.input, outputs = reconstruction)
a bemenet a kódoló bemenete, a kimenet pedig a dekóder kimenete, és ennyi!Ezután visszaadjuk az AE_modelt és kész is vagyunk!
Model Compile & training
Mielőtt a Keras betanítana egy modellt, azt le kell fordítani, mielőtt a képzésbe dobható lenne.A fordításban megadjuk a használni kívánt optimalizálót és a kiszámítandó veszteséget.
A képzéshez használjuk a VallinaAE.fit
adatbevitelt, de ne feledjük, hogy magunkat állítjuk vissza, tehát X és Y adatokat kell bedobni.
Nézzük meg a 100 epochás tréning eredményeit, úgy tűnik, hogy a rekonstrukciós eredmények nem olyan jók, mint gondoltuk.

4-2. Modell létrehozása.- Conv_AE:
Ahogy a neve is mutatja, a konvolúciós réteget rejtett rétegként használhatjuk a visszaalakítható jellemzők megtanulására.
A modell módosítása után megnézheti az eredményeket, hogy van-e javulás.

Úgy tűnik, hogy a rekonstrukció eredményei sokkal jobbak, körülbelül 10 epocha gyakorlással.
4-3. Modell létrehozása – denoise_AE:
Az autoencoder használható a zaj eltávolítására is, így itt a következőkben
Először is hozzáadhatunk zajt az eredeti képhez. A zaj hozzáadásának logikája az, hogy az eredeti pixeleken egyszerű eltolást végzünk, majd véletlen számokat adunk hozzá.A kép előfeldolgozási része egyszerűen úgy végezhető el, hogy a klip 0, ha 0-nál kisebb, és 1, ha 1-nél nagyobb. Mint az alábbiakban látható, a klip képfeldolgozása után a képet élesebbé és a nyilvánvaló területeket láthatóbbá tehetjük.Ez jobb eredményt ad, ha bedobjuk az Autoencodert.

és maga a modell és a Conv_AE között.Nincs különbség maga a modell és a Conv_AE között, kivéve, hogy az illesztés során a
denoise_AE.fit(train_images_noise, train_images, epochs=100, batch_size=128, shuffle=True)
-ra kell módosítani, hogy az eredeti noise_data visszaálljon az eredeti bemeneti adatokra

.
Mint látható, a Mnist-en egy egyszerű Autoencoderrel nagyon gyors denoising hatást érhetünk el.
Nagyszerű példák
Ez egy jó forrás azoknak, akik többet szeretnének megtudni róla
- Building Autoencoders in Keras autoencoder series is clearly written.
- Tensorflow 2.0 hivatalos dokumentáció tutorial, valami nagyon teljes, csak írni egy kicsit nehéz, tölteni elég sok időt látni (legalábbis én húzom XD)
3. Li Hongyi tanár mélytanulás is nagyon ajánlott, beszélni nagyon világos és könnyen érthető, nem-
Következtetés
Ezzel a cikkel gyorsan megismerhetjük az automatikus kódoló alapfogalmát, az automatikus kódoló néhány változatát és alkalmazását.forgatókönyvek.4310>
A következő cikkek a generatív modellekkel kezdenek, az autoencoder, a VAE és a GAN fogalmától kezdve a GAN-ig, és az út során további bővítésekkel és morfológiákkal.
Ha tetszett a cikk, kérem, bátorításként kattintson még néhányszor (nem csak egyszer) a tapsra!
A cikk teljes kódjának elolvasása:https://github.com/EvanstsaiTW/Generative_models/blob/master/AE_01_keras.ipynb
Vélemény, hozzászólás?