ჩვენ ასევე გთავაზობთ რამდენიმე ნოუთბუქს. ქვემოთ მოცემულია მოდელის ტექნიკური განმარტება. ტრანსფორმერმა, რომელიც თავდაპირველად ვასვანის და სხვ. მიერ 2017 წელს იქნა წარმოდგენილი, რევოლუცია მოახდინა ხელოვნური ინტელექტის (AI) საზოგადოებაში, თავდაპირველად გააუმჯობესა უახლესი მიღწევები (SOTA) მანქანური თარგმანის სფეროში. 2018 წელს გამოვიდა BERT – ტრანსფორმერის მხოლოდ ენკოდერის მოდელი, რომელმაც ბუნებრივი ენის დამუშავების (NLP) ბენჩმარკები, მათ შორის GLUE ბენჩმარკი, უპრეცედენტო შედეგებით დაამარცხა. ამის შემდეგ მალევე, AI მკვლევარებმა დაიწყეს BERT-ის იდეის სხვა დომენებზე გამოყენება. რამდენიმე მაგალითის დასახელებაც საკმარისია იმის საჩვენებლად, რომ ყველა ამ დომენში, უახლესი შედეგები მნიშვნელოვნად გაუმჯობესდა, რაც განპირობებული იყო ამ მძლავრი არქიტექტურისა და ფართომასშტაბიანი წინასწარი ვარჯიშის კომბინაციით. თუმცა, ტრანსფორმერის არქიტექტურას აქვს მნიშვნელოვანი შეზღუდვა: მისი თვითყურადღების მექანიზმის გამო, ის ძალიან ცუდად მასშტაბირდება როგორც გამოთვლითი რესურსების, ასევე მეხსიერების თვალსაზრისით. თითოეულ ფენაში, ყველა შეტანილი მონაცემი გამოიყენება ქუერების (queries) და ქეების (keys) შესაქმნელად, რისთვისაც გამოითვლება წყვილ-წყვილი წერტილოვანი ნამრავლი. აქედან გამომდინარე, თვითყურადღების მექანიზმის გამოყენება მაღალი განზომილების მონაცემებზე წინასწარი დამუშავების გარეშე შეუძლებელია. მაგალითად, Wav2Vec2 ამ პრობლემას წყვეტს მახასიათებლების ენკოდერის გამოყენებით, რომელიც ნედლ ტალღურ ფორმას დროზე დაფუძნებული მახასიათებლების თანმიმდევრობად გარდაქმნის. Vision Transformer (ViT) სურათს ყოფს გადამფარავი ფრაგმენტების თანმიმდევრობად, რომლებიც „ტოკენების“ როლს ასრულებენ. Video Vision Transformer (ViViT) ვიდეოდან ამოიღებს გადამფარავ, სივრცე-დროით „მილებს“, რომლებიც ასევე „ტოკენებად“ გამოიყენება. იმისათვის, რომ ტრანსფორმერმა კონკრეტულ მოდალობაზე იმუშაოს, ის, როგორც წესი, დისკრეტიზდება ტოკენების თანმიმდევრობად. Perceiver ამ შეზღუდვის დაძლევას ისახავს მიზნად თვითყურადღების მექანიზმის გამოყენებით ლატენტური ცვლადების ნაკრებზე, შეტანილი მონაცემების ნაცვლად. შეტანილი მონაცემები (რომლებიც შეიძლება იყოს ტექსტი, გამოსახულება, აუდიო, ვიდეო) გამოიყენება მხოლოდ ლატენტებთან ჯვარედინი ყურადღების ოპერაციისთვის. ეს უპირატესობა მდგომარეობს იმაში, რომ გამოთვლითი ოპერაციების ძირითადი ნაწილი ხდება ლატენტურ სივრცეში, სადაც გამოთვლები იაფია (როგორც წესი, გამოიყენება 256 ან 512 ლატენტი). შედეგად მიღებულ არქიტექტურას არ გააჩნია კვადრატული დამოკიდებულება შეყვანის ზომაზე: ტრანსფორმერის ენკოდერი დამოკიდებულია მხოლოდ წრფივად შეყვანის ზომაზე, ხოლო ლატენტური ყურადღება მისგან დამოუკიდებელია. შემდგომ ნაშრომში, სახელწოდებით Perceiver IO, ავტორებმა გააფართოვეს ეს იდეა, რათა Perceiver-ს შეეძლოს თვითნებური გამოსავლების დამუშავებაც. იდეა მსგავსია: გამოსავლები გამოიყენება მხოლოდ ლატენტებთან ჯვარედინი ყურადღების ოპერაციისთვის. გთხოვთ გაითვალისწინოთ, რომ ამ ბლოგპოსტის განმავლობაში, ტერმინებს „Perceiver“ და „Perceiver IO“ ურთიერთშემცვლელად გამოვიყენებ Perceiver IO მოდელის აღსანიშნავად. შემდეგ ნაწილში, უფრო დეტალურად განვიხილავთ, თუ როგორ მუშაობს Perceiver IO HuggingFace Transformers-ში მისი იმპლემენტაციის მაგალითზე. HuggingFace Transformers არის პოპულარული ბიბლიოთეკა, რომელიც თავდაპირველად ტრანსფორმერზე დაფუძნებულ მოდელებს NLP-სთვის ნერგავდა, მაგრამ ახლა უკვე სხვა დომენებისთვისაც იწყებს მათ დანერგვას. ქვემოთ მოცემულ სექციებში, დეტალურად ავხსნით – ტენსორების ფორმების თვალსაზრისით – თუ როგორ ახორციელებს Perceiver ნებისმიერი სახის მოდალობების წინასწარ და შემდგომ დამუშავებას. HuggingFace Transformers-ში Perceiver-ის ყველა ვარიანტი დაფუძნებულია PerceiverModel კლასზე. PerceiverModel-ის ინიციალიზაციისთვის, მოდელს შეიძლება მივაწოდოთ 3 დამატებითი ინსტანცია: გაითვალისწინეთ, რომ თითოეული მათგანი არასავალდებულოა. წინასწარი პროცესორი საჭიროა მხოლოდ იმ შემთხვევაში, თუ შეტანილი მონაცემები (როგორიცაა ტექსტი, გამოსახულება, აუდიო, ვიდეო) უკვე არ არის ემბედირებული. დეკოდერი საჭიროა მხოლოდ იმ შემთხვევაში, თუ გვსურს Perceiver ენკოდერის გამომავალი მონაცემების (ანუ ლატენტების ბოლო ფარული მდგომარეობების) დეკოდირება უფრო სასარგებლო ფორმატში, მაგალითად, კლასიფიკაციის ლოგიტებად ან ოპტიკურ ნაკადად. შემდგომი პროცესორი საჭიროა მხოლოდ იმ შემთხვევაში, თუ გვსურს დეკოდერის გამომავალი მონაცემების კონკრეტულ მახასიათებლებად გადაქცევა (ეს საჭიროა მხოლოდ ავტო-ენკოდირებისას, რასაც შემდგომში განვიხილავთ). არქიტექტურის მიმოხილვა მოცემულია ქვემოთ. Perceiver არქიტექტურა. სხვა სიტყვებით რომ ვთქვათ, შეტანილი მონაცემები (რომლებიც შეიძლება იყოს ნებისმიერი მოდალობა, ან მათი კომბინაცია) ჯერ სურვილისამებრ წინასწარ მუშავდება წინასწარი პროცესორის გამოყენებით. შემდეგ, წინასწარ დამუშავებული შეტანილი მონაცემები ასრულებენ ჯვარედინი ყურადღების ოპერაციას Perceiver ენკოდერის ლატენტურ ცვლადებთან. ამ ოპერაციაში, ლატენტური ცვლადები წარმოქმნიან ქუერებს (Q), ხოლო წინასწარ დამუშავებული შეტანილი მონაცემები წარმოქმნიან ქეებს და ველიუებს (KV). ამ ოპერაციის შემდეგ, Perceiver ენკოდერი იყენებს თვითყურადღების ფენების (განმეორებად) ბლოკს ლატენტების ემბედინგების განახლებისთვის. ენკოდერი საბოლოოდ წარმოქმნის ტენსორს (batch_size, num_latents, d_latents) ფორმით, რომელიც შეიცავს ლატენტების ბოლო ფარულ მდგომარეობებს. შემდეგ არის სურვილისამებრ დეკოდერი, რომელიც შეიძლება გამოყენებულ იქნას ლატენტების საბოლოო ფარული მდგომარეობების დეკოდირებისთვის უფრო სასარგებლო რამედ, მაგალითად, კლასიფიკაციის ლოგიტებად. ეს ხდება ჯვარედინი ყურადღების ოპერაციის შესრულებით, რომელშიც სავარჯიშო ემბედინგები გამოიყენება ქუერების (Q) შესაქმნელად, ხოლო ლატენტები გამოიყენება ქეების და ველიუების (KV) შესაქმნელად. დაბოლოს, არის სურვილისამებრ შემდგომი პროცესორი, რომელიც შეიძლება გამოყენებულ იქნას დეკოდერის გამომავალი მონაცემების კონკრეტულ მახასიათებლებად შემდგომი დამუშავებისთვის. დავიწყოთ იმის ჩვენებით, თუ როგორ არის Perceiver იმპლემენტირებული ტექსტზე სამუშაოდ. დავუშვათ, რომ