Гарчиг[Нуух][Үзүүлэх]
"График мэдрэлийн сүлжээ" (GNN) гэгддэг гүнзгий суралцах аргууд нь графикийн домайн дээр ажилладаг. Сүүлийн үед эдгээр сүлжээнүүд нь компьютерийн хараа, зөвлөмжийн систем, комбинатын оновчлол зэрэг олон салбарт ашиглагдаж байна.
Нэмж дурдахад эдгээр сүлжээг хэд хэдэн судалгааны чиглэлээр нийгмийн сүлжээ, уураг-уургийн харилцан үйлчлэлийн сүлжээ, мэдлэгийн график гэх мэт цогц системийг төлөөлөхөд ашиглаж болно.
Евклидийн бус орон зай нь зураг гэх мэт бусад төрлийн өгөгдлөөс ялгаатай нь график өгөгдөл ажилладаг газар юм. Зангилааг ангилах, холбоосыг урьдчилан таамаглах, кластерийн өгөгдлийг тодорхойлохын тулд график шинжилгээг ашигладаг.
Энэ нийтлэлд бид Графикийг судлах болно мэдрэлийн сүлжээний дэлгэрэнгүй, түүний төрлүүд, түүнчлэн PyTorch ашиглан практик жишээг өгөх.
Тэгэхээр График гэж юу вэ?
График нь зангилаа ба оройноос бүрдэх өгөгдлийн бүтцийн нэг төрөл юм. Төрөл бүрийн зангилааны хоорондох холболтыг оройн цэгүүдээр тодорхойлно. Зангилаануудад чиглэлийг зааж өгсөн бол графикийг чиглүүлсэн гэж хэлнэ; өөрөөр хэлбэл, энэ нь чиглүүлэлтгүй байна.
Графикийг сайн ашиглах нь төрөл бүрийн хүмүүсийн хоорондын харилцааг загварчлах явдал юм олон нийтийн сүлжээ. Холбоос, солилцоо гэх мэт нарийн төвөгтэй нөхцөл байдлыг шийдвэрлэхэд графикууд маш их тустай байдаг.
Тэдгээрийг зөвлөмжийн систем, семантик шинжилгээ, нийгмийн сүлжээний шинжилгээ, хэв маягийг таних зэрэгт ашигладаг
. График дээр суурилсан шийдлүүдийг бий болгох нь нарийн төвөгтэй, харилцан уялдаатай өгөгдлийн талаар гүнзгий ойлголттой болох цоо шинэ салбар юм.
График мэдрэлийн сүлжээ
График мэдрэлийн сүлжээ нь график өгөгдлийн формат дээр ажиллах боломжтой тусгай мэдрэлийн сүлжээний төрөл юм. График оруулах ба конволюцийн мэдрэлийн сүлжээ (CNN) нь тэдгээрт чухал нөлөө үзүүлдэг.
График мэдрэлийн сүлжээг зангилаа, ирмэг, графикийг урьдчилан таамаглах зэрэг ажлуудад ашигладаг.
- Зургийг ангилахад CNN ашигладаг. Үүний нэгэн адил ангиудыг таамаглахын тулд графикийн бүтцийг харуулсан пикселийн сүлжээнд GNN ашигладаг.
- Давтагдах мэдрэлийн сүлжээг ашиглан текстийг ангилах. GNN-ийг мөн хэллэг дэх үг бүр зангилаа болох график архитектурт ашигладаг.
Зангилаа, ирмэг эсвэл бүрэн графикийг урьдчилан таамаглахын тулд мэдрэлийн сүлжээг GNN үүсгэхэд ашигладаг. Жишээлбэл, зангилааны түвшний таамаглал нь спам илрүүлэх гэх мэт асуудлыг шийдэж чадна.
Холбоосыг урьдчилан таамаглах нь зөвлөмжийн системд тохиолддог ердийн тохиолдол бөгөөд захын урьдчилан таамаглах асуудлын жишээ байж болно.
График мэдрэлийн сүлжээний төрлүүд
Мэдрэлийн сүлжээний олон төрлүүд байдаг бөгөөд тэдгээрийн дийлэнх нь эргэлтийн мэдрэлийн сүлжээнүүд байдаг. Бид энэ хэсэгт хамгийн алдартай GNN-ийн талаар мэдэх болно.
Графикийн эргэлтийн сүлжээ (GCNs)
Тэдгээрийг сонгодог CNN-тэй харьцуулах боломжтой. Энэ нь ойролцоох зангилааг харах замаар шинж чанарыг олж авдаг. Идэвхжүүлэх функцийг GNN нь зангилааны векторуудыг нэгтгэж, нягт давхарга руу гаралтыг илгээсний дараа шугаман бус байдлыг нэмэхэд ашигладаг.
Энэ нь үндсэндээ Графикийн эргэлт, шугаман давхарга, суралцагчийн бус идэвхжүүлэх функцээс бүрддэг. GCN нь хоёр үндсэн төрөлтэй: Спектрийн эргэлтийн сүлжээ ба орон зайн эргэлтийн сүлжээ.
Графикийн автомат кодлогч сүлжээнүүд
Энэ нь графикийг хэрхэн төлөөлөхийг сурахын тулд кодлогч, оролтын графикийг дахин бүтээх оролдлого хийхэд декодер ашигладаг. Кодер болон декодерыг холбосон гацах давхарга байдаг.
Автомат кодлогч нь ангийн тэнцвэрийг зохицуулах маш сайн ажил хийдэг тул холбоосыг таамаглахад ихэвчлэн ашигладаг.
Давтагдах график мэдрэлийн сүлжээ (RGNN)
Нэг зангилаа олон тооны харилцаатай байдаг олон хамаарлын сүлжээнд тэр оновчтой тархалтын загварыг сурч, графикуудыг удирдаж чаддаг. Гөлгөр байдлыг нэмэгдүүлэх, хэт параметржилтийг багасгахын тулд тогтмолжуулагчийг график мэдрэлийн сүлжээний энэ хэлбэрээр ашигладаг.
Илүү сайн үр дүнд хүрэхийн тулд RGNN нь бага боловсруулалтын хүч шаарддаг. Эдгээрийг текст үүсгэх, яриа таних, машин орчуулга, зургийн тайлбар, видео шошго, текстийг нэгтгэн дүгнэхэд ашигладаг.
Хаалттай мэдрэлийн график сүлжээ (GGNNs)
Урт хугацааны хамааралтай ажлуудын тухайд тэд RGNN-ээс давж гардаг. Урт хугацааны хамаарал дээр зангилаа, ирмэг, түр зуурын хаалгыг оруулснаар Gated график мэдрэлийн сүлжээ нь давтагдах график мэдрэлийн сүлжээг сайжруулдаг.
Хаалга нь Gated Recurrent Units (GRUs)-тай адилхан ажилладаг тул янз бүрийн үе шатанд өгөгдлийг эргүүлэн татах, мартахад ашигладаг.
Pytorch ашиглан график мэдрэлийн сүлжээг хэрэгжүүлэх
Бидний анхаарах асуудал бол зангилааны ангиллын нийтлэг асуудал юм. Бидэнд маш том нийгмийн сүлжээ бий musae-github, GitHub хөгжүүлэгчдэд зориулсан нээлттэй API-аас эмхэтгэсэн.
Ирмэгүүд нь доод тал нь 10 хадгалах газарт тоглосон хөгжүүлэгчдийг (платформын хэрэглэгчид) төлөөлдөг зангилааны хоорондох харилцан дагагчдын харилцааг харуулдаг (харилцан гэдэг үг нь чиглээгүй харилцааг илэрхийлдэг гэдгийг анхаарна уу).
Зангилааны байршил, одоор тэмдэглэсэн хадгалах газар, ажил олгогч, имэйл хаяг дээр үндэслэн зангилааны шинж чанарыг олж авдаг. GitHub хэрэглэгч вэб хөгжүүлэгч мөн эсэхийг таамаглах машин сургалтын хөгжүүлэгч бидний даалгавар.
Хэрэглэгч бүрийн ажлын нэр нь энэхүү зорилтот функцийн үндэс болсон.
PyTorch суулгаж байна
Эхлэхийн тулд бид эхлээд суулгах хэрэгтэй ПиТорч. Та үүнийг өөрийн машинд тохируулан тохируулж болно энд. Энд минийх:
Модуль импортлох
Одоо бид шаардлагатай модулиудыг импортолж байна
Өгөгдлийг импортлох, судлах
Дараах алхам бол өгөгдлийг уншиж, шошгоны файлаас эхний таван мөр, сүүлийн таван мөрийг зурах явдал юм.
Дөрвөн баганын зөвхөн хоёр нь буюу зангилааны id (өөрөөр хэлбэл хэрэглэгч) ба ml_target, хэрэв хэрэглэгч машин сургалтын нийгэмлэгийн гишүүн бол 1, өөр тохиолдолд 0 нь энэ нөхцөлд бидэнд хамааралтай.
Зөвхөн хоёр анги байдаг тул бидний даалгавар бол хоёртын ангиллын асуудал гэдэгт бид итгэлтэй байж болно.
Ангиудын тэнцвэргүй байдлын үр дүнд ангилагч нь дутуу төлөөлүүлсэн ангиудыг үнэлэхийн оронд аль анги нь олонх болохыг таамаглаж чадах бөгөөд энэ нь ангийн тэнцвэрийг авч үзэх бас нэг чухал хүчин зүйл болгож байна.
Гистограммыг (давтамжийн тархалт) зурах нь бусад ангиудыг бодвол машин сургалтын ангиуд (шошго=1) цөөхөн байдаг тул зарим тэнцвэргүй байдлыг илрүүлдэг.
Онцлогийн кодчилол
Зангилааны шинж чанарууд нь зангилаа бүртэй холбоотой шинж чанаруудын талаар бидэнд мэдээлдэг. Өгөгдлийг кодлох аргаа хэрэгжүүлснээр бид тэдгээр шинж чанаруудыг шууд кодлох боломжтой.
Сүлжээний жижиг хэсгийг (60 зангилаа гэх мэт) харуулахын тулд бид энэ аргыг ашиглахыг хүсч байна. Кодыг энд жагсаав.
График дизайн хийх, харуулах
Бид геометрийн бамбарыг ашиглах болно. бидний графикийг бүтээх өгөгдөл.
Өөр өөр (заавал биш) шинж чанартай нэг графикийг загварчлахын тулд энгийн Python объект болох өгөгдлийг ашигладаг. Энэ анги болон дараах шинж чанаруудыг ашигласнаар бид бамбарын тензорууд болох өөрийн график объектыг үүсгэх болно.
Кодлогдсон зангилааны онцлогт хуваарилагдах x утгын хэлбэр нь [зангилааны тоо, функцийн тоо] байна.
y хэлбэр нь [зангилааны тоо] бөгөөд энэ нь зангилааны шошгонд хэрэглэгдэх болно.
захын индекс: Чиглэлгүй графикийг дүрслэхийн тулд бид ижил хоёр зангилааг холбосон боловч эсрэг чиглэлд чиглэсэн хоёр ялгаатай чиглэсэн ирмэгийг байлгахын тулд анхны захын индексийг өргөжүүлэх хэрэгтэй.
Жишээ нь 100 ба 200 зангилааны хооронд нэг нь 200-аас 100, нөгөө нь 100-аас 200 хүртэл чиглэсэн хос ирмэг шаардлагатай. Хэрэв ирмэгийн индексүүд өгөгдсөн бол чиглүүлэлтгүй графикийг ингэж дүрсэлж болно. [2,2*эх ирмэгийн тоо] нь тензор хэлбэр болно.
График харуулахын тулд бид зурах графикийн аргыг бий болгодог. Эхний алхам бол нэг төрлийн сүлжээгээ NetworkX график болгон хувиргах бөгөөд дараа нь NetworkX.draw ашиглан зурж болно.
Манай GNN загварыг хийж сурга
Бид өгөгдлийн багцыг бүхэлд нь кодлох замаар эхлээд light=False гэсэн кодчиллын өгөгдлийг ажиллуулж, дараа нь construct graph-ийг light=False гэж дуудаж графикийг бүхэлд нь бүтээнэ. Таныг хязгаарлагдмал нөөцтэй орон нутгийн машин ашиглаж байна гэж таамаглаж байгаа тул бид энэ том графикийг зурахыг оролдохгүй.
Маскууд нь 0 ба 1-ийн цифрүүдийг ашиглан тодорхой маск тус бүрд ямар зангилаа хамаарахыг тодорхойлдог хоёртын векторууд бөгөөд сургалтын үе шатанд ямар зангилаануудыг оруулах ёстойг сургалтын үе шатанд мэдэгдэж, дүгнэлтийн үе шатанд аль зангилаа нь туршилтын өгөгдөл болохыг хэлэх боломжтой. Бамбар геометрийн хувиргалт.
AddTrainValTestMask ангийн сургалтын маск, val маск, тестийн маск шинж чанаруудыг ашиглан зангилааны түвшний хуваагдлыг нэмж болох бөгөөд энэ нь графикийг авч, маскуудаа хэрхэн бүтээхийг бидэнд зааж өгөх боломжийг олгодог.
Бид ердөө 10%-ийг сургалтанд ашиглаж, 60%-ийг туршилтын багц болгон ашигладаг бол 30%-ийг баталгаажуулалтын багц болгон ашигладаг.
Одоо бид хоёр GCNConv давхаргыг давхарлах бөгөөд эхнийх нь гаралтын функцын тоо нь манай график дахь оролтын функцуудын тоотой тэнцүү байна.
Манай ангиудын тоотой тэнцэх гаралтын зангилаа агуулсан хоёр дахь давхаргад бид relu идэвхжүүлэх функцийг хэрэглэж, далд шинж чанаруудыг өгдөг.
Ирмэгийн индекс ба ирмэгийн жин нь GCNConv-ийн урагшлах функцэд хүлээн зөвшөөрч болох олон x сонголтуудын хоёр нь боловч манай нөхцөлд зөвхөн эхний хоёр хувьсагч хэрэгтэй.
Манай загвар график дахь зангилаа бүрийн ангиллыг урьдчилан таамаглах боломжтой хэдий ч бид үе шатаас хамааран багц бүрийн нарийвчлал, алдагдлыг тусад нь тодорхойлох шаардлагатай хэвээр байна.
Жишээлбэл, сургалтын явцад бид зөвхөн сургалтын иж бүрдлийг ашиглан сургалтын нарийвчлал, алдагдлыг тодорхойлохыг хүсдэг тул эндээс манай маск хэрэгтэй болно.
Тохиромжтой алдагдал, нарийвчлалыг тооцоолохын тулд бид далдлагдсан алдагдал, далдлагдсан нарийвчлалын функцийг тодорхойлох болно.
Загвар өмсөгчийг сургах
Одоо бид бамбарыг ашиглах сургалтын зорилгыг тодорхойлсон. Адам бол мастер оновчтойлогч юм.
Баталгаажуулалтын үнэн зөвийг хянаж байхын зэрэгцээ бид тодорхой хугацааны туршид сургалт явуулах болно.
Бид мөн янз бүрийн цаг үеийн сургалтын алдагдал, нарийвчлалын графикийг гаргадаг.
График мэдрэлийн сүлжээний сул тал
GNN ашиглах нь хэд хэдэн сул талуудтай. GNNa-г хэзээ ашиглах, машин сургалтын загварынхаа гүйцэтгэлийг хэрхэн сайжруулах талаар бид тэдгээрийг илүү сайн ойлгосны дараа тодорхой болгох болно.
- GNN нь ихэвчлэн гурван давхаргатай, гүехэн сүлжээнүүд боловч ихэнх мэдрэлийн сүлжээ нь гүйцэтгэлийг сайжруулахын тулд гүнзгийрдэг. Энэ хязгаарлалтын улмаас бид том өгөгдлийн багц дээр хамгийн сүүлийн үеийн гүйцэтгэлийг хийх боломжгүй байна.
- Бүтцийн динамик нь динамик байдаг тул график дээр загварыг сургах нь илүү хэцүү байдаг.
- Эдгээр сүлжээнүүдийн тооцооллын зардал өндөр байдаг тул загварыг үйлдвэрлэхэд томруулах нь бэрхшээлтэй тулгардаг. Хэрэв таны график бүтэц асар том бөгөөд төвөгтэй байвал GNN-ийг үйлдвэрлэхэд зориулж масштаблах нь хэцүү байх болно.
Дүгнэлт
Сүүлийн хэдэн жилийн хугацаанд GNN нь график домэйн дэх машин сургалтын асуудлуудад хүчирхэг, үр дүнтэй хэрэгсэл болгон хөгжүүлсэн. График мэдрэлийн сүлжээнүүдийн үндсэн тоймыг энэ нийтлэлд өгсөн болно.
Үүний дараа та загварыг сургах, туршихад ашиглах өгөгдлийн багцыг үүсгэж эхлэх боломжтой. Энэ нь хэрхэн ажилладаг, ямар чадвартайг ойлгохын тулд та илүү хол явж, өөр төрлийн өгөгдлийн багц ашиглан сургаж болно.
Кодлоход баяртай байна!
хариу үлдээх