Мэдрэлийн сүлжээтэй ажиллах: дибаг хийх хяналтын хуудас

Мэдрэлийн сүлжээтэй ажиллах: дибаг хийх хяналтын хуудас

Машин сургалтын програм хангамжийн бүтээгдэхүүний код нь ихэвчлэн төвөгтэй бөгөөд нэлээд будлиантай байдаг. Үүний алдааг илрүүлэх, арилгах нь нөөц их шаарддаг ажил юм. Бүр хамгийн энгийн нь дамжуулах мэдрэлийн сүлжээ сүлжээний архитектур, жинг эхлүүлэх, сүлжээг оновчтой болгоход нухацтай хандах шаардлагатай. Жижиг алдаа нь таагүй асуудалд хүргэж болзошгүй юм.

Энэ нийтлэл нь таны мэдрэлийн сүлжээг дибаг хийх алгоритмын тухай юм.

Skillbox зөвлөж байна: Практик курс Эхнээс нь Python хөгжүүлэгч.

Бид танд сануулж байна: "Хабр" -ын бүх уншигчдад - "Habr" сурталчилгааны кодыг ашиглан Skillbox-ын аль ч курст бүртгүүлэхдээ 10 рублийн хөнгөлөлт.

Алгоритм нь таван үе шатаас бүрдэнэ.

  • хялбар эхлэх;
  • алдагдлыг баталгаажуулах;
  • завсрын үр дүн, холболтыг шалгах;
  • параметрийн оношлогоо;
  • ажлын хяналт.

Хэрэв танд бусад зүйлээс илүү сонирхолтой зүйл байвал та эдгээр хэсгүүдийг шууд алгасаж болно.

Хялбар эхлэл

Нарийн төвөгтэй архитектур, зохицуулалт, сургалтын хурд төлөвлөгч бүхий мэдрэлийн сүлжээг дибаг хийх нь ердийнхөөс илүү хэцүү байдаг. Энэ нь өөрөө дибаг хийхтэй шууд бус холбоотой тул бид энд жаахан төвөгтэй байна, гэхдээ энэ нь чухал зөвлөмж хэвээр байна.

Энгийн эхлэл бол хялбаршуулсан загварыг бий болгож, нэг багц (цэг) өгөгдөл дээр сургах явдал юм.

Эхлээд бид хялбаршуулсан загварыг бий болгодог

Хурдан эхлүүлэхийн тулд бид нэг далд давхарга бүхий жижиг сүлжээ үүсгэж, бүх зүйл зөв ажиллаж байгаа эсэхийг шалгана. Дараа нь бид загварыг аажмаар төвөгтэй болгож, түүний бүтцийн шинэ тал бүрийг (нэмэлт давхарга, параметр гэх мэт) шалгаж, цааш үргэлжлүүлнэ.

Бид загварыг нэг багц өгөгдөл (цэг) дээр сургадаг

Төсөлдөө эрүүл саруул байдлыг хурдан шалгахын тулд та систем зөв ажиллаж байгаа эсэхийг шалгахын тулд нэг эсвэл хоёр мэдээллийн цэгийг сургалтанд ашиглаж болно. Мэдрэлийн сүлжээ нь сургалт, туршилтанд 100% нарийвчлалтай байх ёстой. Хэрэв тийм биш бол загвар нь хэтэрхий жижиг эсвэл танд алдаа байна.

Бүх зүйл сайн байсан ч цааш явахаасаа өмнө нэг буюу хэд хэдэн эрин үеийн загварыг бэлтгэ.

Алдагдлын үнэлгээ

Загварын гүйцэтгэлийг сайжруулах гол арга бол алдагдлыг тооцоолох явдал юм. Алдагдал нь асуудалд тохирсон, алдагдлын функцийг зөв хэмжүүрээр үнэлж байгаа эсэхийг шалгах хэрэгтэй. Хэрэв та нэгээс олон алдагдлын төрлийг ашигладаг бол тэдгээр нь бүгд ижил дараалалтай, зөв ​​масштабтай эсэхийг шалгаарай.

Анхны алдагдалд анхаарлаа хандуулах нь чухал юм. Загвар санамсаргүй таамаглалаар эхэлсэн бол бодит үр дүн хүлээгдэж буй үр дүнд хэр ойрхон байгааг шалгана уу. IN Андрей Карпатигийн бүтээл дараахь зүйлийг санал болгож байна.: “Цөөн тооны параметрээр эхлэхдээ хүссэн үр дүндээ хүрч байгаа эсэхийг шалгаарай. Өгөгдлийн алдагдлыг нэн даруй шалгах нь дээр (зохицуулалтын түвшинг тэг болгон тохируулсан). Жишээлбэл, Softmax ангилагчтай CIFAR-10-ын хувьд бид эхний алдагдлыг 2.302 гэж тооцож байгаа тул хүлээгдэж буй сарнисан магадлал нь анги тус бүрт 0,1 (10 анги байдаг тул) бөгөөд Softmax алдагдал нь зөв ангиллын сөрөг лог магадлал юм. − ln (0.1) = 2.302.”

Хоёртын жишээний хувьд ижил төстэй тооцоог анги тус бүрээр хийдэг. Жишээлбэл, энд өгөгдөл байна: 20% 0, 80% 1. Хүлээгдэж буй анхны алдагдал нь –0,2 ln (0,5) –0,8 ln (0,5) = 0,693147 хүртэл байх болно. Хэрэв үр дүн 1-ээс их бол энэ нь мэдрэлийн сүлжээний жинг зохих ёсоор тэнцвэржүүлээгүй эсвэл өгөгдөл хэвийн болоогүй байгааг илтгэнэ.

Завсрын үр дүн болон холболтыг шалгаж байна

Мэдрэлийн сүлжээг дибаг хийхийн тулд сүлжээн дэх үйл явцын динамик, тэдгээрийн холбогдсон завсрын давхаргын үүргийг ойлгох шаардлагатай. Танд тохиолдож болох нийтлэг алдаанууд энд байна:

  • gradle шинэчлэлтийн буруу илэрхийлэл;
  • жингийн шинэчлэлтийг ашиглахгүй;
  • тэсрэх градиент.

Хэрэв градиентийн утгууд тэг байвал энэ нь оновчлогч дахь суралцах хурд хэт удаан байна эсвэл градиентыг шинэчлэх буруу илэрхийлэлтэй тулгарсан гэсэн үг юм.

Нэмж дурдахад давхарга бүрийн идэвхжүүлэх функц, жин, шинэчлэлтийн утгыг хянах шаардлагатай. Жишээлбэл, параметрийн шинэчлэлтийн хэмжээ (жин ба хазайлт) 1-e3 байх ёстой.

“Үхэж буй ReLU” буюу "Градиент алга болох асуудал", ReLU мэдрэлийн эсүүд жингийнх нь хувьд их хэмжээний сөрөг утгыг сурсны дараа тэг гарна. Эдгээр мэдрэлийн эсүүд өгөгдлийн аль ч цэг дээр дахин хэзээ ч ажилладаггүй.

Та градиент шалгах аргыг ашиглан тоон аргыг ашиглан градиентийг ойртуулж эдгээр алдааг тодорхойлж болно. Хэрэв энэ нь тооцоолсон градиенттай ойролцоо байвал буцах тархалтыг зөв хэрэгжүүлсэн. Градиент чек үүсгэхийн тулд CS231-ээс эдгээр агуу эх сурвалжуудыг шалгана уу энд и эндмөн хамт хичээл Эндрю Нга энэ сэдвээр.

Файзан Шейх мэдрэлийн сүлжээг дүрслэх гурван үндсэн аргыг заана.

  • Урьдчилсан аргууд нь бэлтгэгдсэн загварын ерөнхий бүтцийг харуулсан энгийн аргууд юм. Эдгээрт мэдрэлийн сүлжээний бие даасан давхаргын хэлбэр эсвэл шүүлтүүрийн гаралт, давхарга бүрийн параметрүүд орно.
  • Идэвхжүүлэхэд суурилсан. Тэдгээрийн дотор бид бие даасан мэдрэлийн эсүүд эсвэл бүлгийн мэдрэлийн эсүүдийн үйл ажиллагааг ойлгохын тулд тэдгээрийн идэвхжүүлэлтийг тайлдаг.
  • Градиент дээр үндэслэсэн. Эдгээр аргууд нь загварын сургалтын урагш болон хойшхи дамжуулалтаас үүссэн градиентийг удирдах хандлагатай байдаг (түүний дотор онцлох газрын зураг, анги идэвхжүүлэх газрын зураг).

Бие даасан давхаргын идэвхжүүлэлт, холболтыг дүрслэн харуулах хэд хэдэн хэрэгтэй хэрэгсэл байдаг, жишээлбэл. ConX и Тензор самбар.

Мэдрэлийн сүлжээтэй ажиллах: дибаг хийх хяналтын хуудас

Параметрийн оношлогоо

Мэдрэлийн сүлжээнүүд нь хоорондоо харилцан үйлчилдэг олон параметртэй байдаг нь оновчлолыг төвөгтэй болгодог. Үнэн хэрэгтээ энэ хэсэг нь мэргэжилтнүүдийн идэвхтэй судалгааны сэдэв тул доорхи зөвлөмжийг зөвхөн зөвлөгөө, эхлэлийн цэг болгон авч үзэх хэрэгтэй.

Багцын хэмжээ (багцын хэмжээ) - Хэрэв та багцын хэмжээ нь алдааны градиентийг зөв тооцоолоход хангалттай том, гэхдээ сүлжээгээ хэвийн болгохын тулд стохастик градиент (SGD)-д хангалттай бага байхыг хүсвэл. Бага хэмжээний багцын хэмжээ нь сургалтын явцад дуу чимээний улмаас хурдан нэгдэх, улмаар оновчтой болгоход хүндрэл учруулах болно. Үүнийг илүү дэлгэрэнгүй тайлбарласан болно энд.

Сурах түвшин - хэт бага байх нь нийлэлтийг удаашруулах эсвэл орон нутгийн минимумд гацах эрсдэлд хүргэдэг. Үүний зэрэгцээ, сургалтын өндөр хувь нь оновчлолын зөрүүг бий болгоно, учир нь та алдагдлын функцийн гүн боловч нарийн хэсэг рүү үсрэх эрсдэлтэй. Мэдрэлийн сүлжээг сургахдаа хурдыг багасгахын тулд хурдны хуваарийг ашиглаж үзээрэй. CS231n-тэй шинэчлэгдсэн энэ асуудалд зориулагдсан том хэсэг байдаг.

Градиент хайчилбар  - хамгийн их утга буюу ахиу нормоор буцаан тархах үед параметрийн градиентийг тайрах. Гурав дахь хэсэгт тохиолдож болох тэсрэх градиентийн алдааг олж засварлахад тустай.

Багцыг хэвийн болгох - давхарга бүрийн оролтын өгөгдлийг хэвийн болгоход ашигладаг бөгөөд энэ нь дотоод ковариацын шилжилтийн асуудлыг шийдвэрлэх боломжийг олгодог. Хэрэв та Dropout болон Batch Norma-г хамт хэрэглэж байгаа бол, энэ нийтлэлийг үзээрэй.

Стохастик градиент уналт (SGD) - импульс, дасан зохицох сургалтын түвшин, Нестеровын аргыг ашигладаг SGD-ийн хэд хэдэн сорт байдаг. Гэсэн хэдий ч тэдгээрийн аль нь ч сургалтын үр ашиг, ерөнхий ойлголтын хувьд тодорхой давуу талтай байдаггүй (дэлгэрэнгүй мэдээллийг эндээс үзнэ үү).

Зохицуулалт - Загварын нарийн төвөгтэй байдал эсвэл хэт параметрийн утгуудад торгууль нэмдэг тул ерөнхийлөж болох загвар бүтээхэд чухал ач холбогдолтой. Энэ нь загварын зөрүүг мэдэгдэхүйц нэмэгдүүлэхгүйгээр багасгах арга юм. Илүү дэлгэрэнгүй мэдээлэл - энд.

Бүх зүйлийг өөрөө үнэлэхийн тулд та зохицуулалтыг идэвхгүй болгож, өгөгдлийн алдагдлын градиентийг өөрөө шалгах хэрэгтэй.

Сургуулиа орхиж байна нь түгжрэлээс сэргийлэхийн тулд сүлжээгээ оновчтой болгох өөр нэг арга юм. Сургалтын явцад сургуулиа орхих нь зөвхөн мэдрэлийн эсийн үйл ажиллагааг тодорхой магадлалтай p (гиперпараметр) байлгах эсвэл эсрэг тохиолдолд тэг болгох замаар л хийгддэг. Үүний үр дүнд сүлжээ нь сургалтын багц бүрт өөр өөр дэд багц параметрүүдийг ашиглах ёстой бөгөөд энэ нь давамгайлах зарим параметрийн өөрчлөлтийг бууруулдаг.

Анхаарах зүйл: Хэрэв та завсарлага болон багцын хэвийн горимыг хоёуланг нь ашиглаж байгаа бол эдгээр үйлдлүүдийн дарааллыг анхаарч үзэх эсвэл бүр хамтад нь ашиглах хэрэгтэй. Энэ бүхнийг идэвхтэй хэлэлцэж, нэмж оруулсаар байна. Энэ сэдвээр хоёр чухал хэлэлцүүлгийг энд оруулав Stackoverflow дээр и Архив.

Ажлын хяналт

Энэ нь ажлын урсгал, туршилтыг баримтжуулах тухай юм. Хэрэв та ямар нэг зүйлийг баримтжуулаагүй бол жишээлбэл, сургалтын хурд эсвэл ангиллын жинг ашиглаж байгааг мартаж болно. Хяналтын ачаар та өмнөх туршилтуудыг хялбархан харж, хуулбарлах боломжтой. Энэ нь давхардсан туршилтын тоог багасгах боломжийг танд олгоно.

Гэсэн хэдий ч их хэмжээний ажил хийх тохиолдолд гарын авлагын баримт бичиг нь хэцүү ажил болж магадгүй юм. Эндээс Comet.ml гэх мэт хэрэгслүүд өгөгдлийн багц, кодын өөрчлөлт, туршилтын түүх, үйлдвэрлэлийн загвар, тэр дундаа загварын талаарх гол мэдээлэл (гиперпараметр, загварын гүйцэтгэлийн хэмжүүр, хүрээлэн буй орчны мэдээлэл) зэргийг автоматаар бүртгэдэг.

Мэдрэлийн сүлжээ нь жижиг өөрчлөлтөд маш мэдрэмтгий байж болох бөгөөд энэ нь загварын гүйцэтгэл буурахад хүргэдэг. Ажлаа хянаж, баримтжуулах нь орчин, загварчлалаа стандартчилах эхний алхам юм.

Мэдрэлийн сүлжээтэй ажиллах: дибаг хийх хяналтын хуудас

Энэ нийтлэл нь мэдрэлийн сүлжээгээ дибаг хийж эхлэх эхлэл болно гэж найдаж байна.

Skillbox зөвлөж байна:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх