Машин сургалтын програм хангамжийн бүтээгдэхүүний код нь ихэвчлэн төвөгтэй бөгөөд нэлээд будлиантай байдаг. Үүний алдааг илрүүлэх, арилгах нь нөөц их шаарддаг ажил юм. Бүр хамгийн энгийн нь
Энэ нийтлэл нь таны мэдрэлийн сүлжээг дибаг хийх алгоритмын тухай юм.
Skillbox зөвлөж байна: Практик курс
Эхнээс нь Python хөгжүүлэгч .Бид танд сануулж байна: "Хабр" -ын бүх уншигчдад - "Habr" сурталчилгааны кодыг ашиглан Skillbox-ын аль ч курст бүртгүүлэхдээ 10 рублийн хөнгөлөлт.
Алгоритм нь таван үе шатаас бүрдэнэ.
- хялбар эхлэх;
- алдагдлыг баталгаажуулах;
- завсрын үр дүн, холболтыг шалгах;
- параметрийн оношлогоо;
- ажлын хяналт.
Хэрэв танд бусад зүйлээс илүү сонирхолтой зүйл байвал та эдгээр хэсгүүдийг шууд алгасаж болно.
Хялбар эхлэл
Нарийн төвөгтэй архитектур, зохицуулалт, сургалтын хурд төлөвлөгч бүхий мэдрэлийн сүлжээг дибаг хийх нь ердийнхөөс илүү хэцүү байдаг. Энэ нь өөрөө дибаг хийхтэй шууд бус холбоотой тул бид энд жаахан төвөгтэй байна, гэхдээ энэ нь чухал зөвлөмж хэвээр байна.
Энгийн эхлэл бол хялбаршуулсан загварыг бий болгож, нэг багц (цэг) өгөгдөл дээр сургах явдал юм.
Эхлээд бид хялбаршуулсан загварыг бий болгодог
Хурдан эхлүүлэхийн тулд бид нэг далд давхарга бүхий жижиг сүлжээ үүсгэж, бүх зүйл зөв ажиллаж байгаа эсэхийг шалгана. Дараа нь бид загварыг аажмаар төвөгтэй болгож, түүний бүтцийн шинэ тал бүрийг (нэмэлт давхарга, параметр гэх мэт) шалгаж, цааш үргэлжлүүлнэ.
Бид загварыг нэг багц өгөгдөл (цэг) дээр сургадаг
Төсөлдөө эрүүл саруул байдлыг хурдан шалгахын тулд та систем зөв ажиллаж байгаа эсэхийг шалгахын тулд нэг эсвэл хоёр мэдээллийн цэгийг сургалтанд ашиглаж болно. Мэдрэлийн сүлжээ нь сургалт, туршилтанд 100% нарийвчлалтай байх ёстой. Хэрэв тийм биш бол загвар нь хэтэрхий жижиг эсвэл танд алдаа байна.
Бүх зүйл сайн байсан ч цааш явахаасаа өмнө нэг буюу хэд хэдэн эрин үеийн загварыг бэлтгэ.
Алдагдлын үнэлгээ
Загварын гүйцэтгэлийг сайжруулах гол арга бол алдагдлыг тооцоолох явдал юм. Алдагдал нь асуудалд тохирсон, алдагдлын функцийг зөв хэмжүүрээр үнэлж байгаа эсэхийг шалгах хэрэгтэй. Хэрэв та нэгээс олон алдагдлын төрлийг ашигладаг бол тэдгээр нь бүгд ижил дараалалтай, зөв масштабтай эсэхийг шалгаарай.
Анхны алдагдалд анхаарлаа хандуулах нь чухал юм. Загвар санамсаргүй таамаглалаар эхэлсэн бол бодит үр дүн хүлээгдэж буй үр дүнд хэр ойрхон байгааг шалгана уу. IN
Хоёртын жишээний хувьд ижил төстэй тооцоог анги тус бүрээр хийдэг. Жишээлбэл, энд өгөгдөл байна: 20% 0, 80% 1. Хүлээгдэж буй анхны алдагдал нь –0,2 ln (0,5) –0,8 ln (0,5) = 0,693147 хүртэл байх болно. Хэрэв үр дүн 1-ээс их бол энэ нь мэдрэлийн сүлжээний жинг зохих ёсоор тэнцвэржүүлээгүй эсвэл өгөгдөл хэвийн болоогүй байгааг илтгэнэ.
Завсрын үр дүн болон холболтыг шалгаж байна
Мэдрэлийн сүлжээг дибаг хийхийн тулд сүлжээн дэх үйл явцын динамик, тэдгээрийн холбогдсон завсрын давхаргын үүргийг ойлгох шаардлагатай. Танд тохиолдож болох нийтлэг алдаанууд энд байна:
- gradle шинэчлэлтийн буруу илэрхийлэл;
- жингийн шинэчлэлтийг ашиглахгүй;
- тэсрэх градиент.
Хэрэв градиентийн утгууд тэг байвал энэ нь оновчлогч дахь суралцах хурд хэт удаан байна эсвэл градиентыг шинэчлэх буруу илэрхийлэлтэй тулгарсан гэсэн үг юм.
Нэмж дурдахад давхарга бүрийн идэвхжүүлэх функц, жин, шинэчлэлтийн утгыг хянах шаардлагатай. Жишээлбэл, параметрийн шинэчлэлтийн хэмжээ (жин ба хазайлт)
“Үхэж буй ReLU” буюу
Та градиент шалгах аргыг ашиглан тоон аргыг ашиглан градиентийг ойртуулж эдгээр алдааг тодорхойлж болно. Хэрэв энэ нь тооцоолсон градиенттай ойролцоо байвал буцах тархалтыг зөв хэрэгжүүлсэн. Градиент чек үүсгэхийн тулд CS231-ээс эдгээр агуу эх сурвалжуудыг шалгана уу
- Урьдчилсан аргууд нь бэлтгэгдсэн загварын ерөнхий бүтцийг харуулсан энгийн аргууд юм. Эдгээрт мэдрэлийн сүлжээний бие даасан давхаргын хэлбэр эсвэл шүүлтүүрийн гаралт, давхарга бүрийн параметрүүд орно.
- Идэвхжүүлэхэд суурилсан. Тэдгээрийн дотор бид бие даасан мэдрэлийн эсүүд эсвэл бүлгийн мэдрэлийн эсүүдийн үйл ажиллагааг ойлгохын тулд тэдгээрийн идэвхжүүлэлтийг тайлдаг.
- Градиент дээр үндэслэсэн. Эдгээр аргууд нь загварын сургалтын урагш болон хойшхи дамжуулалтаас үүссэн градиентийг удирдах хандлагатай байдаг (түүний дотор онцлох газрын зураг, анги идэвхжүүлэх газрын зураг).
Бие даасан давхаргын идэвхжүүлэлт, холболтыг дүрслэн харуулах хэд хэдэн хэрэгтэй хэрэгсэл байдаг, жишээлбэл.
Параметрийн оношлогоо
Мэдрэлийн сүлжээнүүд нь хоорондоо харилцан үйлчилдэг олон параметртэй байдаг нь оновчлолыг төвөгтэй болгодог. Үнэн хэрэгтээ энэ хэсэг нь мэргэжилтнүүдийн идэвхтэй судалгааны сэдэв тул доорхи зөвлөмжийг зөвхөн зөвлөгөө, эхлэлийн цэг болгон авч үзэх хэрэгтэй.
Багцын хэмжээ (багцын хэмжээ) - Хэрэв та багцын хэмжээ нь алдааны градиентийг зөв тооцоолоход хангалттай том, гэхдээ сүлжээгээ хэвийн болгохын тулд стохастик градиент (SGD)-д хангалттай бага байхыг хүсвэл. Бага хэмжээний багцын хэмжээ нь сургалтын явцад дуу чимээний улмаас хурдан нэгдэх, улмаар оновчтой болгоход хүндрэл учруулах болно. Үүнийг илүү дэлгэрэнгүй тайлбарласан болно
Сурах түвшин - хэт бага байх нь нийлэлтийг удаашруулах эсвэл орон нутгийн минимумд гацах эрсдэлд хүргэдэг. Үүний зэрэгцээ, сургалтын өндөр хувь нь оновчлолын зөрүүг бий болгоно, учир нь та алдагдлын функцийн гүн боловч нарийн хэсэг рүү үсрэх эрсдэлтэй. Мэдрэлийн сүлжээг сургахдаа хурдыг багасгахын тулд хурдны хуваарийг ашиглаж үзээрэй. CS231n-тэй шинэчлэгдсэн
Градиент хайчилбар - хамгийн их утга буюу ахиу нормоор буцаан тархах үед параметрийн градиентийг тайрах. Гурав дахь хэсэгт тохиолдож болох тэсрэх градиентийн алдааг олж засварлахад тустай.
Багцыг хэвийн болгох - давхарга бүрийн оролтын өгөгдлийг хэвийн болгоход ашигладаг бөгөөд энэ нь дотоод ковариацын шилжилтийн асуудлыг шийдвэрлэх боломжийг олгодог. Хэрэв та Dropout болон Batch Norma-г хамт хэрэглэж байгаа бол,
Стохастик градиент уналт (SGD) - импульс, дасан зохицох сургалтын түвшин, Нестеровын аргыг ашигладаг SGD-ийн хэд хэдэн сорт байдаг. Гэсэн хэдий ч тэдгээрийн аль нь ч сургалтын үр ашиг, ерөнхий ойлголтын хувьд тодорхой давуу талтай байдаггүй (
Зохицуулалт - Загварын нарийн төвөгтэй байдал эсвэл хэт параметрийн утгуудад торгууль нэмдэг тул ерөнхийлөж болох загвар бүтээхэд чухал ач холбогдолтой. Энэ нь загварын зөрүүг мэдэгдэхүйц нэмэгдүүлэхгүйгээр багасгах арга юм. Илүү
Бүх зүйлийг өөрөө үнэлэхийн тулд та зохицуулалтыг идэвхгүй болгож, өгөгдлийн алдагдлын градиентийг өөрөө шалгах хэрэгтэй.
Сургуулиа орхиж байна нь түгжрэлээс сэргийлэхийн тулд сүлжээгээ оновчтой болгох өөр нэг арга юм. Сургалтын явцад сургуулиа орхих нь зөвхөн мэдрэлийн эсийн үйл ажиллагааг тодорхой магадлалтай p (гиперпараметр) байлгах эсвэл эсрэг тохиолдолд тэг болгох замаар л хийгддэг. Үүний үр дүнд сүлжээ нь сургалтын багц бүрт өөр өөр дэд багц параметрүүдийг ашиглах ёстой бөгөөд энэ нь давамгайлах зарим параметрийн өөрчлөлтийг бууруулдаг.
Анхаарах зүйл: Хэрэв та завсарлага болон багцын хэвийн горимыг хоёуланг нь ашиглаж байгаа бол эдгээр үйлдлүүдийн дарааллыг анхаарч үзэх эсвэл бүр хамтад нь ашиглах хэрэгтэй. Энэ бүхнийг идэвхтэй хэлэлцэж, нэмж оруулсаар байна. Энэ сэдвээр хоёр чухал хэлэлцүүлгийг энд оруулав
Ажлын хяналт
Энэ нь ажлын урсгал, туршилтыг баримтжуулах тухай юм. Хэрэв та ямар нэг зүйлийг баримтжуулаагүй бол жишээлбэл, сургалтын хурд эсвэл ангиллын жинг ашиглаж байгааг мартаж болно. Хяналтын ачаар та өмнөх туршилтуудыг хялбархан харж, хуулбарлах боломжтой. Энэ нь давхардсан туршилтын тоог багасгах боломжийг танд олгоно.
Гэсэн хэдий ч их хэмжээний ажил хийх тохиолдолд гарын авлагын баримт бичиг нь хэцүү ажил болж магадгүй юм. Эндээс Comet.ml гэх мэт хэрэгслүүд өгөгдлийн багц, кодын өөрчлөлт, туршилтын түүх, үйлдвэрлэлийн загвар, тэр дундаа загварын талаарх гол мэдээлэл (гиперпараметр, загварын гүйцэтгэлийн хэмжүүр, хүрээлэн буй орчны мэдээлэл) зэргийг автоматаар бүртгэдэг.
Мэдрэлийн сүлжээ нь жижиг өөрчлөлтөд маш мэдрэмтгий байж болох бөгөөд энэ нь загварын гүйцэтгэл буурахад хүргэдэг. Ажлаа хянаж, баримтжуулах нь орчин, загварчлалаа стандартчилах эхний алхам юм.
Энэ нийтлэл нь мэдрэлийн сүлжээгээ дибаг хийж эхлэх эхлэл болно гэж найдаж байна.
Skillbox зөвлөж байна:
- Хоёр жилийн практик сургалт
"Би PRO вэб хөгжүүлэгч" .- Онлайн курс
"0-ээс C# хөгжүүлэгч" .- Практик жилийн курс
"0-ээс PRO хүртэл PHP хөгжүүлэгч" .
Эх сурвалж: www.habr.com