Кіріспе
Сандық есептеулер туындыларды бірге жүргізеді. Математика және компьютерлік алгебрада автоматты дифференциация (автодифференциация, автодифференциация немесе AD), сондай-ақ алгоритмдік дифференциация, есептеулік дифференциация – компьютерлік бағдарлама арқылы берілген функцияның ішінара туындысын есептеуге арналған әдістер жиынтығы. Автоматты дифференциация компьютердегі кез келген есептеудің, оның күрделілігіне қарамастан, элементарлық арифметикалық операциялардың (қосу, алу, көбейту, бөлу және т.б.) және элементарлық функциялардың (exp, log, sin, cos және т.б.) тізбегінен тұратындығын пайдаланады. Осы операцияларға тізбек ережесін қайталап қолдану арқылы кез келген реттік туындыларды автоматты түрде, есептеу дәлдігімен және бастапқы бағдарламаға қарағанда ең көп дегенде шағын тұрақты коэффициентпен артық арифметикалық операцияларды қолдана отырып есептеуге болады.
In mathematics and computer algebra, automatic differentiation (auto differentiation, autodiff, or AD), also called algorithmic differentiation, computational differentiation, is a set of techniques to evaluate the partial derivative of a function specified by a computer program. Automatic differentiation exploits the fact that every computer calculation, no matter how complicated, executes a sequence of elementary arithmetic operations (addition, subtraction, multiplication, division, etc.) and elementary functions (exp, log, sin, cos, etc.). By applying the chain rule repeatedly to these operations, partial derivatives of arbitrary order can be computed automatically, accurately to working precision, and using at most a small constant factor of more arithmetic operations than the original program.
Басқа дифференциациялау әдістерінен айырмашылығы
Автоматты дифференциация символдық дифференциациядан және сандық дифференциациядан өзгеше. Символды дифференциация компьютерлік бағдарламаны жалғыз математикалық өрнекке түрлендіруде қиындықтарға тап болады және нәтижесінде тиімсіз код пайда болуы мүмкін. Сандық дифференциация (шектелген айырмашылықтар әдісі) дискреттеу процесінде және алыну кезінде дөңгелектеу қателіктерін тудыруы мүмкін. Бұл екі классикалық әдіс те күрделілігі мен қателіктері артатын жоғары ретті туындыларды есептеуде қиындықтарға ие. Соңында, бұл екі классикалық әдіс те функцияның көптеген кіріс шамаларына қатысты ішінара туындыларын есептеуде баяу, себебі бұл градиенттік оптимизация алгоритмдері үшін қажет. Автоматты дифференциация осы барлық мәселелерді шешеді.
Қолданбалар
Автоматты дифференциациялау машиналық оқыту саласында ерекше маңызды. Мысалы, ол нейрондық желіде қолмен есептелмеген туындынысыз кері таратуды іске асыруға мүмкіндік береді.
Алға және кері жинақталудан тыс
Алға және кері жинақтау - шынжыр ережесін басып өтудің екі (шектейтін) жолы ғана. f: 'R'^(n) → 'R'^(m) функциясының толық Якобианды есептеу мәселесі, ең аз арифметикалық операциялар санымен, оптималды Якобиандық жинақтау (OJA) мәселесі ретінде белгілі, және ол NP-толық. Бұл дәлелдеменің негізгі идеясы – график қабырғаларын белгілейтін жергілікті туындылар арасында алгебралық тәуелділіктер болуы мүмкін. Атап айтқанда, екі немесе одан көп қабырға белгілері тең деп танылуы мүмкін. Барлық қабырға белгілері бірегей және алгебралық тұрғыдан тәуелсіз деп есептелген жағдайда мәселенің күрделілігі әлі де шешілмеген.
Іске асыру
Төменде қос сан әдісіне негізделген мысал іске асырылуы көрсетілген.
Векторлық аргументтер мен функциялар
Көпөлшемді функциялар бағыттық туынды операторын қолдану арқылы бірөлшемді функциялармен салыстырылатын тиімділікпен және механизмдермен өңделе алады. Яғни, егер есептеу үшін жеткілікті болса, нүктесіндегі бағыттық туындысы бағытында жоғарыда көрсетілгендей арифметиканы қолдану арқылы есептелуі мүмкін. Егер -ның барлық элементтері қажет болса, онда функцияны бағалау қажет болады. Көптеген оптимизациялық қолданбаларда бағыттық туынды нақты жеткілікті екенін ескеріңіз.
Жоғары тәртіп пен көптеген айнымалылар
Жоғарыда келтірілген арифметиканы көп айнымалы функциялардың екінші және жоғары ретті туындыларын есептеу үшін обобщалауға болады. Дегенмен, арифметикалық ережелер тез күрделенеді: күрделілігі ең жоғары туынды дәрежесіне қатысты квадраттық болып табылады. Оның орнына, уақытында тоқтатылған Тейлор полиномының алгебрасын қолдануға болады. Соның нәтижесінде пайда болатын арифметика, обобщаланған екілік сандарда анықталады, бұл функцияларды дерек типі ретінде пайдалану арқылы тиімді есептеуге мүмкіндік береді. Функцияның Тейлор полиномы белгілі болғаннан кейін, туындыларды оңай алуға болады.
Іске асыру
Ары қарайғы автоматты дифференциалдау (ААД) бағдарламаның стандартты емес интерпретациясы арқылы іске асырылады, онда нақты сандар қос сандармен алмастырылады, константалар нөлдік эпсилондық коэффициенті бар қос сандарға көтеріледі, ал сандық примитивтер қос сандармен жұмыс істеу үшін көтеріледі. Бұл стандартты емес интерпретация көбінесе екі стратегияның бірі арқылы жүзеге асырылады: бастапқы кодты түрлендіру немесе операторларды жүктеу.
Көшірме кодты түрлендіру (SCT)
Функцияның бастапқы коды, түпнұсқалық нұсқаулармен кезегімен араластырылған туындыларды есептеуге арналған операторларды қамтитын автоматты түрде жасалған жаңа бастапқы кодпен алмастырылады. Бастапқы кодты түрлендіру кез келген бағдарламалау тілі үшін іске асырылуы мүмкін, сонымен қатар компиляторға компиляция кезінде оңтайландыру жасауды жеңілдетеді. Дегенмен, автоматты дифференциалдау (AD) құралын жасау қиын, ал құрастыру жүйесі күрделі болады.
Оператордың жүктемесі (OO)
Оператордың жүктемесі – оны қолдайтын тілде жазылған бастапқы кодтың мүмкіндігі. Нақты сандар мен қарапайым математикалық операцияларға арналған объектілер жоғарыда көрсетілген толықтырылған арифметиканы қолдау үшін жүктелуі тиіс. Бұл, функцияны дифференциалдау үшін бастапқы кодтағы операциялардың түрін немесе ретін өзгертуді қажет етпейді, бірақ көбінесе жүктемені қолдау үшін сандар мен векторлардың негізгі дерек типтерін өзгертуді, сондай-ақ арнайы белгілеу операцияларын қосуды талап етеді. Әрбір циклда операторды жүктеудің қосымша шығындары болғандықтан, бұл тәсіл көбінесе нашаррақ жылдамдық көрсеткіштерін көрсетеді.
Оператордың жүктемесі мен бастапқы кодты түрлендіру
Бағалау графигін алу үшін жүктемелі операторларды қолдануға болады, содан кейін бастапқы функцияның AD нұсқасы орындалу кезінде автоматты түрде жасалады. Классикалық OO AAD-дан өзгеше, мұндай AD функциясы бір итерациядан келесіге өзгермейді. Сондықтан, әрбір Xi үлгісі үшін OO немесе таспалық интерпретацияға байланысты қосымша уақыт кетірілмейді. AD функциясы орындалу кезінде жасалғандықтан, бағдарламаның ағымдағы күйін ескере отырып, оны оңтайландыруға және кейбір мәндерді алдын ала есептеуге болады. Бұған қоса, оны пайдаланушы деректерінің 4(8) еселі топтарын өңдеу үшін процессордың векторлық есептеу мүмкіндіктерін тұрақты түрде пайдалануға мүмкіндік береді (AVX2\AVX512 арқасында x4, x8 есе жылдамдық). Көп өрістілік қосылғанда, бұл тәсіл дәстүрлі AAD құралдарымен салыстырғанда 8 × #Ядро ретінде жеделдетуге алып келуі мүмкін. Анықтамалық нұсқау GitHub-та қолжетімді.