Vai dziļajās mācībās ir atšķirība starp autoenkoderiem un kodētāju-dekodētāju?


Atbilde 1:

Lūk, kā es uztvertu šos divus terminus (neoficiāli). Domājiet par kodētāju-dekodētāju kā ļoti vispārīgu ietvara / arhitektūras dizainu. Šajā noformējumā jums ir kāda funkcija, kas ievades vietu, neatkarīgi no tā, kāda tā ir, kartē citā / latentā telpā (“kodētājā”). Dekodētājs ir vienkārši papildu funkcija, kas izveido karti no (kodētāja) latentās telpas uz citu mērķa telpu (ko mēs vēlamies atšifrēt no latentās telpas). Ņemiet vērā, vienkārši kartējot atstarpes un sasaistot tās caur kopīgu latentu telpu, jūs varētu kaut ko darīt, piemēram, marķēt žetonu secību angļu valodā (ti, teikums angļu valodā) ar marķieru secību franču valodā (ti, šī angļu valodas teikuma tulkojums). uz franču valodu). Dažos neironu tulkošanas modeļos jūs anglisko secību kartējat ar fiksētu vektoru (teiksim pēdējā stāvokļa, kas atrasts pēc pieturzīmes atkārtošanās tīklā, kuru izmantojat, lai iteratīvi apstrādātu teikumu), no kura jūs atšifrēsit uz franču secību .

Automātiskais kodētājs (vai automātiskais asociātors, kā tas klasiski tika dēvēts par) ir kodētāja-dekodētāja arhitektūras īpašs gadījums - pirmkārt, mērķa telpa ir tāda pati kā ievades telpa (ti, angļu valodas ievadi angļu mērķiem), un, otrkārt, mērķim jābūt vienādam ar ievadīto. Tātad mēs kartētu kaut ko līdzīgu vektoriem vektoriem (ņemiet vērā, ka tā joprojām varētu būt secība, jo tie ir periodiski autokodētāji, bet jūs šajā gadījumā atrodaties nevis, lai prognozētu nākotni, bet vienkārši rekonstruētu pašreizējo, ņemot vērā stāvokli / atmiņu un klāt). Tagad autoencoderis patiešām ir paredzēts automātiskai asociēšanai, tāpēc mēs galvenokārt cenšamies izveidot modeli, lai “atsauktu” ievadi, kas ļauj autoencoderim veikt tādas darbības kā modeļa pabeigšana, tāpēc, ja mēs savam autoenkoderim piešķiram daļēji sabojātu ievadi, tas spētu “iegūt” pareizo modeli no atmiņas.

Arī parasti mēs veidojam autoenkodorus, jo mēs vairāk vēlamies iegūt attēlojumu, nevis apgūt jutīgo modeli (lai gan varētu apgalvot, ka diezgan jutīgus attēlojumus mēs iegūstam arī no prognozējošajiem modeļiem…).

Bet īsais stāsts ir vienkāršs: autoenkodors tiešām ir īpašs kodētāja-dekodētāja piemērs. Tas ir īpaši noderīgi, ja mēs vēlamies atdalīt kodētāju un dekodētāju, lai izveidotu kaut ko līdzīgu variācijas autoenkoderim, kas arī atbrīvo mūs no tā, ka dekodētājam ir jābūt simetriskam attiecībā pret kodētāju (ti, kodētājs varētu būt 2 slāņu konvolucionālais tīkls). savukārt dekodētājs varētu būt 3 slāņu dekonvolūcijas tīkls). Automātiskā koda kodētājā latentās telpas ideja kļūst skaidrāka, jo tagad mēs patiesi kartējam ieeju (piemēram, attēlu vai dokumenta vektoru) latentam mainīgajam, no kura mēs rekonstruēsim sākotnējo / ​​to pašu ievadi (piemēram, attēlu vai dokumentu vektors).

Es arī domāju, ka lielu neskaidrību rada terminoloģijas nepareiza lietošana. Mūsdienās ML ļaudīm ir tendence sajaukt un saskaņot vārdus (daži to dara, lai viss skanētu foršāk vai atrastu buzzwords, kas piesaistītu lasītājus / finansētājus / slavu / godību / utt.), Bet tas daļēji varētu būt saistīts ar mākslīgie neironu tīkli kā “dziļa mācīšanās” ;-) [jo galu galā visi vēlas, lai nauda turpina darboties]


Atbilde 2:

Patiešām.

Kodētāja-dekodētāja arhitektūrā ir kodētāja sadaļa, kas ņem ievadi un kartē to latentā telpā. Dekodētāja sadaļa aizņem šo latento vietu un kartē to uz izvadi. Parasti tas dod labākus rezultātus. Automātiskais kodētājs vienkārši ņem x kā ieeju un mēģina rekonstruēt x (tagad x_hat) kā izvadi.

Parasti lietošanas gadījumi ir atšķirīgi. Automātiskos kodētājus parasti izmantos nepārraudzītās mācību situācijās, jo, kā redzam, etiķetes nav vajadzīgas, ir tikai dati. Kodētāju-dekodētāju arhitektūras bieži tiek izmantotas vispārīgāk, kā jūs atsaucāties uz SegNet papīru un biežāk ar NMT.