Deep Learning UB 2021 — summer school : Day#8

2B | +1% better 2day | ai.012

--

Day#8 Семинар #4 маань Гүнзгий сургалтын загвар (CNN & RNN) сэдвээр байлаа. Голлож хариуцсан нь АндСистемс-н Билгээ. (MLUB founder)

Эхний хэсэгт CNN дараа нь RNN кодчилно.

1. CNN

Convolutional Neural Network-н анхны амжилттай хувилбар нь Yann LeCunLeNet байгаа. 1998 онд гаргаж ирсэн АНУ-н чек дээрх тоог таних систем.

Бид нарын өмнө үзсэнээр (fully-connected layer) ньюрон хоорондох холбоос 1 л удаа ашиглагддаг байсан. Харин зурган дээр 1 pixel shift (хажуу тийш шилжихэд) хийх үед ингэх юм бол гаралтын утга ШАЛ өөр болчихно. Гэхдээ тэгэж болохгүй учир CNN дээр weight sharing гэсэн онцлог байдаг.

1 обьектийг хөдөлгөхөд таньсан хэвээр байх ёстой. Тэгэхийн тулд Pooling ашигладаг. (Ex : Max pooling)

CNN нь бүтцийн хувьд Convolution → Non-linearity → Pooling : loop again гэх маягаар явдаг. Энэ давхаргууд нь эхлээд ирмэг, дараа нь хэлбэр тэгээд дүрсийг таньдаг.

За мөн Convolution Layer-н ажиллагааны хувьд convolution хийгдэх, гаралт ямар хэмжээстэй байх, хэрэгтэй бол padding ашиглах талаар бас ярьсан.
— Convolution : 4x4 * 3x3 convolution = гаралт 2x2
— Output size : (N−F)/S+1
— Padding : 4x4 + 1 = 5x5 * 3x3 convolution = гаралт 4x4 ижил хэмжээс
— Stride : Хажуу тийш хэдээр шилжих (shift)

Дээрх үйлдлүүдийг бодитоор хийж байгаа жишээ гэвэл 1 зургийг бүрсийлгэх, тод болгох, зүүн тийш шилжүүлэх гэх мэт…

Өмнө нь хүмүүс гараар бодоод ийм filter байж болох юм гэж хийдэг байсан бол сүүлд машин өөрөө сурч шинэ filter-үүд үүссэн. 1 жишээ нь зургийн хувьд уламжлал (gradient) бодож гаргасан Sobel filter гэж бий.
— Хэвтээ болон босоо чиглэлийн ирмэгийг олох (Sobel)

Chain rule & Computational Graph-г сайн ойлгохын тулд дараах бодлогыг бодоод үзээрэй гэсэн. Хоосон (улаан доторх) хэсгийг бөглөх тоонуудыг бодож олно.

Алимx2 + Жүржx3 + татвар

Дээрх зургийн дагуу бодолтоо хийгээд үзвэл шинээр гарч ирэх хариу маань хоосон хэсгийн утгуудыг бодож олно.

Энийг хийж үзсэнээр дараа нь PyTorch, Tensorflow дээр загвар хийгээд үзэхэд илүү сайн ойлгодог болно оо.

PyTorch дээр CNN үүсгэх

Хэрэгтэй сангуудаа оруулж ирээд, эхнийи параметрүүдээ өгөөд, өгөгдлөө бэлдээд, загвараа үүсгээд сургалтаа хийх байгаа.

За тэгээд бэлэн кодыг ажиллуулвал

Дараагийн хэсэгт яг CNN загварын үүсгэхдээ өөрөө кодыг нөхөх хэрэгтэй байгаа.

Загварын хувьд sequential байдлаар бөгөөд 2 Convolution давхаргатай, ReLU, MaxPool, Dropout ашигласан байгаа.

CNN model code → explain

Үүний дараа сургалтын кодоо бичээд сургана.

Сурсан загвар маань цөөн epoch явсан тул одоогоор 40% accuracy-тэй байна. Эцэстээ загвар маань юу сураад байгаа вэ гэхээр Convolution Filter болгон нь 1 1 зүйлийг сураад байгаа. (Filter #1→Босоо ирмэг, Filter #2→Хөндлөн ирмэг)

Ингээд л сайн сургаад байвал бараг болчихно доо :D. Дараагийн даалгавар нь CIFAR-10 dataset дээр ажиллах загвар үүсгэх байсан.

Гол зорилго нь accuracy 80% давуулах. Миний хувьд 2+10+20+20 epoch ажиллуулж 79% болгосон шүү.

Нэмэлтээр 1 tip өгөхөд 5х5 filter ашигласнаас 3x3 filter-г 2 удаа хийх нь илүү бага зардлаар, адил үр дүнд хүрэх боломж олгодог.

2 давхарга гүн боловч цөөн параметртэй

Бас нэг сонирхолтой зүйл нь normalization юм. Хоорондоо хамааралтай ч тооны хувьд хэт зөрүүтэй байхад 0-1 хооронд болгож “хэвийн” болгодог. Яг үүнтэй төстэйгээр олон давхаргатай үед гаралтыг “хэвийн” болгоод дараагийн давхаргын оролтод ашигладаг. (Batch Normalization) 1 сул тал нь илүү 1 тооцоолол хийдэг.

За тэгээд RNN хэсгээ нөгөөдөр үзнэ ээ. Маргааш тэмцээн дуусах болохоор өнөөдөртөө CNN туршаад accuracy-ээ ихэсгэх хэрэгтэй байна.

--

--

Билигүн.Б (Програмч аав)
2B +1% better 2day

I am who I am... || өөрийнхөөрөө байхаас ичихгүй