Neyron tarmoqlarda faollashtirish funktsiyalarini tushunish

Yaqinda bir hamkasbim menga bir nechta savollarni berdi: "nima uchun bizda faollashtirish funktsiyalari juda ko'p?", "Nima uchun u boshqasidan yaxshiroq ishlaydi?", "Qayerdan foydalanishni biz qayerdan bilamiz?", " bu hardkor matematikasi? ”va hokazo. Shunday qilib, nega neyron tarmog'ini yaxshi biladiganlar uchun bu haqda maqola yozmayman, deb o'yladim va shuning uchun aktivizatsiya funktsiyalari va ularning "nega-qanday-matematik!"

Izoh: Ushbu maqola siz sun'iy "neyron" haqida asosiy bilimga ega ekanligingizni anglatadi. Yaxshilab tushunish uchun ushbu maqolani o'qishdan oldin neyron tarmoqlarining asoslari haqida o'qishni tavsiya qilaman.

Faollashtirish funktsiyalari

Xo'sh, sun'iy neyron nima qiladi? Oddiy qilib aytganda, u kiritiladigan "og'irlik summasini" hisoblab chiqadi, noaniqlik qo'shadi va keyin uni "ishdan bo'shatish" kerakmi yoki yo'qmi deb qaror qiladi (ha, faollashtirish funktsiyasi buni amalga oshiradi, lekin bir lahzagacha oqim bilan ketaylik).

Shunday qilib, neyronni ko'rib chiqing.

Endi Y ning qiymati inff dan infgacha bo'lgan har qanday narsa bo'lishi mumkin. Neyron haqiqatan ham qiymat chegaralarini bilmaydi. Shunday qilib, biz neyron ishlaydimi yoki yo'qmi, qanday qaror qilamiz (nega bu otishni o'rganish shakli? Biz buni biologiyadan miyaning ishlash usuli va miya ajoyib va ​​aqlli tizimning ishchi guvohligi ekanligidan bilib oldik).

Buning uchun biz "aktivatsiya funktsiyalari" ni qo'shishga qaror qildik. Bir neyron tomonidan ishlab chiqarilgan Y qiymatini tekshirish va tashqi aloqalar bu neyronni "ishdan chiqqan" deb hisoblash yoki yo'qligini aniqlash. Yoki aytaylik - "faollashtirilgan" yoki yo'q.

Qadam funktsiyasi

Xayolimizga kelgan birinchi narsa bu qanday qilib polga asoslangan faollashtirish funktsiyasi haqida? Agar Y ning qiymati ma'lum bir qiymatdan yuqori bo'lsa, uni faol deb e'lon qiling. Agar bu cheklovdan kam bo'lsa, unday emas deb ayting. Hmm zo'r. Bu ishlashi mumkin edi!

Faollashtirish funktsiyasi A = "faollashtirilgan", agar Y> chegarasi bo'lmasa

Shu bilan bir qatorda, A = 1, agar y> pol qiymatida, aks holda 0

Xo'sh, biz hozirgina “qadam” vazifasini bajarganmiz, quyidagi rasmga qarang.

Agar uning qiymati 1 (faollashtirilgan) bo'lsa, qiymati> 0 (pol qiymat) va aks holda 0 chiqadi (faol emas).

Ajoyib. Shunday qilib, bu neyron uchun faollashtirish funktsiyasini amalga oshiradi. Chalkashliklar yo'q. Biroq, bu bilan ba'zi kamchiliklar mavjud. Buni yaxshiroq tushunish uchun quyidagilarni o'ylab ko'ring.

Siz ikkilik tasniflagich yaratyapsiz deylik. "Ha" yoki "Yo'q" deb aytadigan narsa (faollashtiring yoki yoqmang). "Step" funktsiyasi buni siz uchun amalga oshirishi mumkin! 1 yoki 0 ni aytganda aynan shunday qiladi. Endi ko'p sonli neyronlar ulanishni xohlagan holatlar haqida o'ylab ko'ring. 1-sinf, 2-sinf, va hokazo. Agar 1 dan ortiq neyron "faollashtirilgan" bo'lsa nima bo'ladi? Barcha neyronlardan 1 chiqadi (qadam funktsiyasidan). Endi qanday qarorga kelasiz? Bu qaysi sinf? Hmm qiyin, murakkab.

Siz tarmoq faqat 1 neyronni faollashtirishini xohlaysiz, boshqalari 0 ga teng bo'lishi kerak (faqat shunda siz uni to'g'ri tasniflangan / sinfni aniqlagan deb ayta olasiz). Qani! Bu yo'lni mashq qilish va birlashtirish qiyinroq. Agar aktivlashtirish ikkilik bo'lmasa va "50% faollashtirildi" yoki "20% faollashtirildi" va hokazo bo'lsa, yaxshiroq bo'lar edi. Va agar bittadan ortiq neyron faollashsa, qaysi neyronning "eng yuqori faollashishi" va hokazolarni topishingiz mumkin (eng yaxshisi, yumshoqmaxm, ammo buni hozir qoldiring).

Bunday holda, agar 1 dan ortiq neyron "100% faol" deb aytsa, muammo haligacha davom etadi. Men bilaman! Ammo ... natijada chiqish uchun oraliq faollashtirish qiymatlari bor, o'rganish yumshoqroq (osonroq) va 1 dan ortiq neyronning 100% faollashish imkoniyatlari mashq paytida qadam funktsiyasi bilan solishtirganda kamroq bo'ladi (shuningdek, nima bo'lishingizga bog'liq). o'qitish va ma'lumotlar).

Ok, shuning uchun biz biror narsaga "faol" yoki (ikkilik) emas, balki oraliq (analog) aktivatsiya qiymatlarini berishini istaymiz.

Bizning xayolimizga keladigan birinchi narsa chiziqli funktsiya bo'lishi mumkin.

Chiziqli funktsiya

A = cx

To'g'ri chiziq funktsiyasi, bu erda aktivatsiya kirishga mutanosib bo'ladi (bu neyronning tortilgan yig'indisi).

Shu tarzda, u bir qator faollashuvlarni beradi, shuning uchun ikkilik faollashtirish emas. Biz, albatta, bir nechta neyronlarni bir-biriga ulashimiz mumkin va agar 1 tadan ko'p olov bo'lsa, biz maksimalni (yoki softmax) olamiz va shunga asoslanib qaror qilamiz. Bu ham yaxshi. Xo'sh, bu bilan muammo nima?

Agar siz mashg'ulot uchun gradientning kelib chiqishi bilan tanish bo'lsangiz, bu funktsiya uchun lotin doimiy ekanligini bilib olasiz.

A = cx, x ga nisbatan lotin v bo'ladi. Demak, gradient X. bilan hech qanday aloqasi yo'q. Bu doimiy gradient va tushish doimiy gradientda bo'ladi. Agar bashorat qilishda xatolik bo'lsa, orqa tarafdagi tarqalish tomonidan kiritilgan o'zgarishlar doimiydir va kirish deltasida (x) o'zgarishiga bog'liq emas !!!

Bu unchalik yaxshi emas! (har doim emas, lekin men bilan birga bo'ling). Yana bir muammo bor. Bog'langan qatlamlar haqida o'ylang. Har bir qatlam chiziqli funktsiya bilan faollashadi. Bu aktivatsiya o'z navbatida keyingi kirish darajasiga o'tadi va ikkinchi qavat ushbu kiritishda hisoblangan summani hisoblab chiqadi va bu o'z navbatida boshqa chiziqli faollashtirish funktsiyasiga asoslanadi.

Biz qancha qatlamlarga ega bo'lishimizdan qat'i nazar, agar ularning barchasi tabiatda chiziqli bo'lsa, oxirgi qatlamning yakuniy faollashtirish funktsiyasi faqat birinchi qavat kirishining chiziqli funktsiyasidan boshqa narsa emas! Bir oz to'xtab, bu haqda o'ylang.

Demak, bu ikki qatlam (yoki N qatlam) bitta qatlam bilan almashtirilishi mumkin. Qani endi! Biz shunchaki qatlamlarni yig'ish qobiliyatini yo'qotdik. Qanday qilib qotib qolmasligimizdan qat'i nazar, butun tarmoq hali ham chiziqli faollashuvga ega bo'lgan bitta qatlamga tengdir (chiziqli shaklda funktsional birikma yana bir chiziqli funktsiya).

Qani, davom etamizmi?

Sigmasimon funktsiya

Yaxshi, bu silliq va "qadam funktsiyasi" kabi ko'rinadi. Buning qanday foydalari bor? Bir zum o'ylab ko'ring. Birinchidan, birinchi navbatda, tabiatda nochiziqli. Ushbu funktsiyaning kombinatsiyalari ham chiziqli emas! Ajoyib. Endi biz qatlamlarni yig'ishimiz mumkin. Ikkilik bo'lmagan aktivatsiyalar haqida nima deyish mumkin? Ha, bu ham! Bu qadam funktsiyasidan farqli o'laroq, analog faollashuvni beradi. U ham silliq gradyanga ega.

Agar sezsangiz, X qiymatlari -2 dan 2 gacha, Y qiymatlari juda tik. Ya'ni, o'sha hududda X qiymatlarining har qanday kichik o'zgarishi Y qiymatlarining sezilarli darajada o'zgarishiga olib keladi. Oh, bu funktsiya Y qiymatlarini egri chiziqning oxirigacha olib borishga moyilligini anglatadi.

Klassifikatorning xususiyatlarini hisobga olgan holda bu yaxshi emasmi? Ha! Bu haqiqatan ham. U faollashuvni egri tomonning ikkala tomoniga olib kelishga moyildir (masalan x = 2 dan yuqori va masalan x = -2 dan pastroq). Bashorat qilish bo'yicha aniq farqlarni amalga oshirish.

Ushbu faollashtirish funktsiyasining yana bir ustun tomoni shundaki, chiziqli funktsiyadan farqli o'laroq, aktivlashtirish funktsiyasining chiqishi har doim (-inf, inf) chiziqli funktsiyaga nisbatan (0,1) oraliqda bo'ladi. Shunday qilib, bizning faolligimiz chegaralangan. Yaxshi, u keyin faollashtirishlarni puchga chiqarmaydi.

Bu ajoyib. Sigmasimon funktsiyalar bugungi kunda eng ko'p ishlatiladigan aktivizatsiya funktsiyalaridan biridir. Unda qanday muammolar mavjud?

Agar sigmasimon funktsiyaning har ikki uchida Y ko'rsatkichi X o'zgarishiga kam javob bersa, bu nimani anglatadi? Bu mintaqadagi gradyan kichik bo'ladi. Bu "yo'qoluvchi gradyanlar" muammosini keltirib chiqaradi. Hm. Shunday qilib, faollashishlar egri chiziqning "gorizontal" qismiga yaqinlashganda nima bo'ladi?

Gradient unchalik katta emas yoki yo'qolgan (ahamiyati juda kichik bo'lgani sababli sezilarli o'zgarishlarni amalga oshira olmaydi). Tarmoq qo'shimcha o'rganishni rad etadi yoki juda sekin (foydalanish holatiga qarab va gradient / hisoblash o'zgaruvchan qiymat chegaralariga tushguncha). Ushbu muammo atrofida ishlash usullari mavjud va sigmasimon hali ham tasniflash muammolarida juda mashhur.

Tanh funktsiyasi

Amaldagi yana bir faollashtirish tan tan vazifasidir.

Hm. Bu sigmasimon shaklga juda o'xshaydi. Aslida, bu kengaygan sigmasimon funktsiya!

Ok, endi biz yuqorida muhokama qilgan sigmasimon xususiyatlarga ega. Bu tabiatda chiziqli emas, shuning uchun biz qatlamlarni to'plashimiz juda yaxshi! U (-1, 1) diapazonga bog'langan, shuning uchun faollashuv xavfi yo'q. Shuni ta'kidlash kerakki, gradient sigmasimonga qaraganda tanga nisbatan kuchliroqdir (hosilalar tikdir). Sigmasimon yoki tanax o'rtasida qaror qilish sizning gradiyent kuchiga bo'lgan ehtiyojingizga bog'liq bo'ladi. Sigmasimon singari, tanhda ham yo'qoladigan gradyan muammosi mavjud.

Tanh, shuningdek, juda mashhur va keng tarqalgan faollashtirish funktsiyasidir.

ReLu

Keyinchalik ReLu funktsiyasi keladi,

A (x) = maksimal (0, x)

ReLu funktsiyasi yuqorida ko'rsatilgandek. Agar x musbat bo'lsa, aks holda 0 bo'lsa, u x ni chiqaradi.

Bir qarashda, bu musbat o'qda chiziqli bo'lgani kabi, chiziqli funktsiyaning bir xil muammolariga o'xshaydi. Birinchidan, ReLu tabiatda nochiziqli. Va ReLu kombinatsiyalari ham chiziqli emas! (aslida u yaxshi taxminiy. Har qanday funktsiyani ReLu kombinatsiyasi bilan yaqinlashtirish mumkin). Ajoyib, shuning uchun biz qatlamlarni to'plashimiz mumkin. Bu bog'liq emas. ReLu oralig'i [0, inf). Bu aktivatsiyani portlatib yuborishi mumkin degan ma'noni anglatadi.

Men bu erda muhokama qilmoqchi bo'lgan yana bir nuqta - bu faollikning kamligi. Ko'p neyronlarga ega bo'lgan katta neyron tarmog'ini tasavvur qiling. Sigmasimon yoki tanadan foydalanish deyarli barcha neyronlarning analog usulda yonishiga olib keladi (esingizdami?). Bu shuni anglatadiki, deyarli barcha faollashtirishlar tarmoqning natijasini tavsiflash uchun qayta ishlanadi. Boshqacha aytganda, faollashtirish zich. Bu qimmatga tushadi. Biz tarmoqdagi bir nechta neyronlar faollashmasligini va shu bilan faollashuvlarni kam va samarali bo'lishini istardik.

ReLu bizga bu foyda keltiradi. Tasodifiy boshlang'ich og'irligi (yoki normalizatsiya qilingan) bo'lgan tarmoqni tasavvur qiling va tarmoqning deyarli 50% ReLu xarakteristikasi (x ning salbiy qiymatlari uchun chiqish 0) tufayli 0 faollashadi. Bu shuni anglatadiki, kamroq neyronlar ishdan chiqadi (siyrak faollashuv) va tarmoq engilroq. Vo, yaxshi! ReLu juda ajoyib ko'rinadi! Ha, lekin hech narsa kamchiliksiz .. Hatto ReLu ham emas.

ReLu-dagi gorizontal chiziq tufayli (manfiy X uchun), gradiyent 0 ga tushishi mumkin. ReLu-ning shu mintaqasida faollashtirish uchun gradient 0 bo'ladi, chunki tushish paytida og'irliklar sozlanmaydi. Bu shuni anglatadiki, ushbu holatga kelgan neyronlar xato / kiritishdagi o'zgarishlarga javob berishni to'xtatadilar (shunchaki gradient 0 bo'lgani uchun, hech narsa o'zgarmaydi). Bu o'lish ReLu muammosi deb nomlanadi. Ushbu muammo bir nechta neyronlarning o'limiga olib kelishi mumkin va tarmoqning muhim qismini passiv qilib qo'ymaydi. ReLu-da gorizontal chiziqni gorizontal bo'lmagan qismga aylantirish orqali ushbu muammoni yumshatish uchun turli xil o'zgarishlar mavjud. masalan, x <0 uchun y = 0.01x bu gorizontal chiziq emas, balki biroz egri chiziq bo'ladi. Bu oqayotgan ReLu. Boshqa tafovutlar ham mavjud. Asosiy g'oya - gradient nolga teng bo'lmasligi va mashg'ulot paytida tiklanish.

ReLu tanh va sigmasimonga qaraganda ancha arzon, chunki u oddiy matematik operatsiyalarni o'z ichiga oladi. Biz chuqur nerv tarmoqlarini loyihalashda diqqatga sazovor narsa.

Ok, endi qaysi birini ishlatamiz?

Endi qaysi faollashtirish funktsiyalaridan foydalanish kerak. Bu shunchaki biz ReLu-ni hamma qilgan ishimiz uchun ishlatamiz deganimi? Yoki sigmasimon yoki tanxmi? Xo'sh, yo'q va yo'q. Siz taxmin qilmoqchi bo'lgan funksiya ma'lum xususiyatlarga ega ekanligini bilsangiz, faollashtirish funktsiyasini tanlashingiz mumkin, bu esa funktsiyani tezroq o'qitish jarayoniga olib keladi. Masalan, sigmasimon tasniflagich uchun juda yaxshi ishlaydi (sigmasimon grafikaga qarang, ideal tasniflagichning xususiyatlarini ko'rsatmaydimi?), Chunki sigmasimon birikma sifatida tasniflovchi funktsiyani yaqinlashtirish, masalan, ReLu-dan osonroqdir. Bu tezroq o'quv jarayoni va yaqinlashishga olib keladi. Siz o'zingizning shaxsiy funktsiyalaringizdan ham foydalanishingiz mumkin !. Agar siz o'rganmoqchi bo'lgan funktsiyaning mohiyatini bilmasangiz, ehtimol ReLu-dan boshlashni va keyin orqaga ishlashni tavsiya etaman. ReLu aksariyat hollarda umumiy yaqinlashtiruvchi sifatida ishlaydi!

Ushbu maqolada men tez-tez ishlatiladigan bir nechta faollashtirish funktsiyalarini tasvirlashga harakat qildim. Boshqa aktivizatsiya funktsiyalari ham mavjud, ammo umumiy fikr bir xil bo'lib qoladi. Faollashtirish funktsiyalarini yaxshilash bo'yicha tadqiqotlar hali ham davom etmoqda. Faollashtirish funktsiyasi haqida tushunchangiz bor deb umid qilamiz, nima uchun ular ishlatiladi va qanday qilib biz uni ishlatishni qanday hal qilamiz.