Deep Learning UB 2021 — summer school : Day#7

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

--

Day#7 Лекц #4 маань Гүнзгий сургалтын загвар лекц сэдвээр байлаа. Хариуцан хүн нь Facebook AI Research-н Сайнбаяр.

Хичээлийн хувьд ерөнхийдөө Гүнзгий сургалт яагаад ГҮНЗГИЙ гээд байгаа талаар орсон.

1. Загвар гэж юу вэ?

Бүх зүйл Өгөгдлөөс эхлээд, X оролт нь загвараар дамжаад y’ таамаглалыг гаргадаг. Алдааны функц нь y’ таамаглал болон y жинхэнэ хариу хоёрын зөрүүг тооцож оптимизац хийдэг. Энэ оптимизац нь загварын параметерийг өөрчилдөг.

Аа харин загвар нь дотроо ямар архитектур + параметер гэсэн 2 зүйлээс бүтдэг. Архитектурыг бид сонгодог бол параметер нь сургалтын үед өөрчлөгддөг (бид биш өгөгдөл шийднэ).

Мэдээж загварыг өгөгдлөөс хамаарч сонгоно.

Жишээ : зураг + fully-connected загвар болох уу?
— 100х100 хэмжээстэй 3 өнгөтэй зургийг танихын тулд
— 1000 далд давхаргатай Neural Network үүсгэе гэвэл
—30 сая холбоос хэрэг болох нь (ХЭТЭРХИЙ олон)

Ийм нүсэр бүтэцтэй байх нь өөрөө маш их тооцоолол шаардах учир өөр илүү сайн арга олох хэрэгтэй болж л дээ. Тэгтэл 1959 онд 2 баачка мууран дээр туршилт хийж байгаад тархины дүрсийг таних хэсэг (Visual cortex) нь олон давхаргатай бүтэц байдаг гэдгийг ойлгосон байна. Энэ нь Гүнзгий сургалтын гол санаа болсон.

Дээрх олон давхаргатай байх гэсэн санааны дагуу Yann Lecun 1989 онд анхны Convolutional Neural Network (CNNs) хийсэн. Цаашлаад 1998 онд LeNet буюу тоо таньдаг, АНУ-д check танихад ашигладаг системийг хийсэн байна. Гэвч түүнээс хойш 2012 он хүртэл CNN нь “чимээгүй” явсан.

Тэр зурагны хамгийн зүүн талын Ази царайтай нөхөр нь Сайнбаяр гэсэн шүү

2. Convolutional Neural Network (CNN)

CNN нь Feedforward загвар буюу зөвхөн урагшаа чиглэлтэй байдаг. Нэг талаас нөгөө тийшээ буюу давхаргаар дамжсаар байгаад гардаг. 1 давхарга нь харин дотроо Convolution Filter, шугаман бус хувиргалт болон Pooling гэсэн үндсэн 3 зүйлээс бүтдэг. Convolution Filter нь сурах процесс явагддаг хэсэг.

Хэсэгтээ чимээгүй байсан CNN нь Торонто хотын 1 багш 2 сурагчийн ачаар гүнзгий сургалтад тэсрэлт хийсэн байна. Энэ 3 нийлээд баг болж алдартай ImageNet тэмцээнд 1 сая зургийг 1000 ангилалд ялгадаг тэмцээнд орж түрүүлжээ. Тэгэхдээ тухайн үеийн хамгийн сайн ~25%-н алдаатай таньдаг системээс бараг 10%-аар илүү үр дүнг үзүүлсэн. Цаашлаад 8 хуудас paper бичээд, 3уулаа компани байгуулж, тэрийгээ дуудлага худалдаагаар 44 сая доллараар зарсан гэнэ шүү… (Google, Microsoft, Baidu, DeepMind)

Хэдийгээр CNN нь 1990-д оноос хойш байсан ч яагаад 2012 хүн хүртэл “тэсрээгүй” вэ?

Хариулт нь CNN + GPU, ImageNet. 2012 он гэхэд 1т их хэмжээний өгөгдөл бий болсон байсан (цугларсан). Нөгөө талаас GPU програмчлал хөгжиж хэдэн зуун тооцоолох үйлдлийг (матриц үржвэр) маш хурдан хийх боломжтой болсон. Энэ 3-н нэгдэл нь нийлж ТЭСРЭЛТ болсон байна (big bang? disruption?). Цаашлаад 2015 он гэхэд CNN нь хүнээс илүү сайн таньдаг болсон байна. (5%-аас бага алддаг)

Зурган өгөгдөл

Зураг доторх зүйлийг таних нь тийм ч амар байгаагүй (2012 он хүртэл). Зураг дээр ажиллахын тулд өгөгдлөө эхлээд ойлгох хэрэгтэй. Зураг нь үндсэн 2 шинж чанартай байдаг байна.
— 1т ойролцоох цэгтэй хамааралтай. 1 юмны хэсэг байх үед. Жишээ нь гүүрний тоосгон хэсгүүд нь.
— 2дох нь зурган дээрх байршил хамаарал багатай. Дээр доор хаана ч байж болох зүйл гэсэн үг. Жишээ нь : өөр өөр газарт байгаа цонх

Local dependency (bridge) VS Spatially stationary (window)

Дээрх 2 чанарыг Neural Network рүү харьцуулж харвал
Чанар #1 : Fully-connected VS Locally-connected.
бүгдийг холбох хэрэггүй. Зөвхөн ойр 3г л холбоход болно. (3x3)
Чанар #2 : Fully-connected VS Convolution
байршлаас хамаарахгүй учир адилхан параметер хэрэглэх (3)

1 давхарга : A. Convolution Filter
За тэгээд дээрх чанарын дагуу жишээ болгож 2 хэмжээст зураг дээр тооцоолол хийж үзвэл бидний ойлгох гээх байгаа гол Convolution Filter маань болдог. Convolution Filter нь өгөгдлөөсөө өөрөө гарч ирэх бөгөөд, машин сураад байна гэсэн үг. Тэрхүү Convolution Filter-ээ зурагны бүх байршил дээр гүйлгэхэд Feature Maps гарч ирдэг. Зураг хувирсан буюу filter-дсэн байгааг Feature Map гэж нэрлэдэг.

2 dimensional image → CF → SUM(Input x Weights)
CF ашиглаж Feature Map гарч ирсэн нь (black & white image)

Ихэвчлэн 1 зураг нь 2 хэмжээст + 3 өнгөтэй байдаг (RGB). Энэ үед 3 filter-ээр матриц тус бүрийнхийг бодоод, нэмдэг.

1 давхарга : B. Non-linearity
Convolution гэдэг нь өөрөө шугаман хувиргалт бөгөөд Fully-connected-н тухайн тохиолдол юм. Тиймээс ReLU ашиглаж шугаман бус хувиргалт болгодог. Rectified Linear Unit нь Эерэг тоог хэвээр нь сөрөг тоог 0 болгодог.

1 давхарга : C. Pooling
Pooling нь олон Feature Maps болгон дээр хийгддэг. Гол зорилго нь байршлаас хамаарахгүй, тухайн дүрс хөдөлсөн ч дүрсийг зөв танихын тулд ашигладаг. Feature Maps-аа жижиг хэсэгт хувааж, тухайн хэсгийн бүх тоог өөр утгаар сольдог (Sum эсвэл Max). Ингэснээр зургийн хэмжээс илүү бага болдог.

Ингээд саяны ярьсан А, B, C нь нийлээд Convolution-ы 1 давхаргыг үүсгэдэг.

Хүсвэл Normalization хийж болдог (заавал биш)

За тэгээд сургалтын үед өөрөө сурдаг зүйл бий ч, хөгжүүлэгчийн зүгээс тохиргоо хийх хэд хэдэн hyperparameter гэж байдаг. Шугаман бус хувиргалт хийхдээ Sigmoid, ReLU, Tanh нарын алийг ашиглах уу, CF-н хэмжээ (size), шилжилт (stride), хэд байх, Pooling хэмжээ, Sum эсвэл Max алийг нь хэрэглэх үү зэргийг бид шийдэх хэрэгтэй.

Жишээ болгоод 2012 оны тэсрэлт хийсэн paper-г судлаад харвал 18.2% алдаатай, нийт 8 давхаргатай CNN байсан байна.

8 layers of CNN → learned CF

Эхний давхарга ирмэг, дараагийнх нь дүрс, дараагийнх нь биет гэх мэт сурсан байна. Тэгж явсаар зураг 2 хэмжээст биш сүүлийн 6, 7-р давхарга дээр вектор болсон харагдана. Сүүлийн давхарга нь 1000 ангилалдаа тааруулж магадлалыг тооцоолж байгаа. Хэрвээ хүсвэл сүүлийн 2 давхаргыг устгаад 5-с эхлээд өөр зүйл таньдаг байхаар сургавал маш сайн үр дүн гаргаж байгаа жишээ ч бий.

Layer 5 дээр илүү сайн сурсан → Caltech 256 (цэнхэр)

Caltech 256 дээр 1 ангилалаас 10хан зураг байхад 65% орчим таньдаг 50 зураг байхад +70% болж сайжирч байгаа нь өмнөх загваруудаас огцом сайжирсан үзүүлэлт болж байгаа.

Deconvolution → зураг үүсгэх
Convolution үйлдлийн эсрэг нь бөгөөд 1 хэмжээсээс зураг үүсгэж болдог. Үүнийг ашиглаад хиймэл зураг үүсгэх, өгөгдөл байхгүй үед сургалтын өгөгдлийг хиймлээр үүсгэхэд ч бас ашигладаг.

General Adversarial Network (GAN) : Хиймэл зураг үүсгээд, тэр нь жинхэнэ эсвэл хуурамч гэдгийг шалгадаг.

Хиймэл зураг үүсгэх амархан болсон үед юунд итгэх вэ?

Бичгэн өгөгдөл

Зурагны хувьд хэмжээс + өнгө гээд түүнийгээ Convolution (хуйлаас?) ашиглаад сургалтаа хийдэг бол бичгэн өгөгдөл шал өөр болоод явчихдаг.

Бичвэр боловсруулах загвар нь эхлээд үгийг боловсруулахаас эхлэнэ. Мэдээж үгийг тоо болгож байж бид тооцоолол хийж чадна. Тэгэхийн тулд 1 үгийг 1 вектороор дүрслэнэ.

Бичиг ← Үг ← Тоо (вектор)

Гэхдээ үгийн сан их бол бид МАШ ТОМ вектор дээр тооцоолол хийх шаардлагатай болно. Тэгэх нь мэдээж хэцүү учир Word Embedding хийдэг.
Word embedding → One-hot vector + шугаман давхарга

Word Embedding сургахад хамгийн энгийн 1 арга нь Word2vec байдаг. Энэ нь том өгөгдлөөс хурдан сурдаг, мөн өөрөө Self-supervised learning ашигладаг.

Self-supervised learning : Зөвхөн Х оролт байхад хангалттай. y хэрэггүй.

2 үгний хоорондын хамаарал → Улс = Нийслэл

Жишээ нь : moon гэдэг үгтэй төстэй үгсийг олох, эсвэл Хятад → Бээжин, Монгол → Улаанбаатар гэх мэт ижил төстэй векторыг олж чаддаг.

Түүнээс гадна хэлний сургалт дээр Language Model, Tokenization, Normalizatoin зэрэг зүйлсийг тооцох хэрэгтэй. Тэр талаар би маш товчхон дурдана.

  • Language Modelling LM : гэдэг нь Үгийн цувааг сургахыг хэлж байгаа. Байгаа өгөгдлөөс бичвэрийн магадлалыг олдог.
    P(“муур хулганыг хөөв”) > P(“хөөв хулгана муурыг”)
  • LM Tokenization : буюу үгийг тэмдэгтрүү хөрвүүлдэг. Тэгэхийн тулд үгээ бүтнээр нь эсвэл үечилж эсвэл үсэг болгоноор гэх мэт сонголтуудтай тулна. Хамгийн гол нь нэгэнт сургаж эхэлсний дараа LM-ээ өөрчилж болохгүй.
  • LM Normalization : Түүнээс гадна ховор үг болон Том, жижиг бичсэн үгсийн ижил гэж үзэх үү г.м асуултууд бий. (normalization : U.S.A vs USA)
  • LM Бичвэрийн магадлал : 1 бүтэн бичвэрийг ОРШИН байх магадлалыг олсноос 1 үгийн араас “Х” гэсэн үг байх магадлал (Нөхцөлт магадлал) олох нь илүү хялбар.
  • LM алдааны функц : Өгөгдөл дэх бичвэрийн магадлалын ИХ болгох зорилготой. NLL ашигладаг.

Товчоор хэлбэл Language Model гэдэг нь тодорхой дараалалтай үгнүүдийн ДАРААЧИЙН үгийг олдог гэсэн үг.

За тэгээд дээр ярьсанг бидний үзсэн fully-connected загвараар хийх гэж оролдвол сүүлийн N-1 үгнээс хамаарч ямар үг байхыг тооцдог 1 загвар үүсдэг. N-gram нь feedforward бүтэцтэй, Word embedding ашиглаад, Fully-connected давхарга болон SoftMax-г хэрэглэдэг. N гэдэг нь тодорхой лимит тавьж өгдөг.

Гэхдээ ингэж хийхээс илүү 1 амархан арга бий. Тэр нь…

3. Recurrent загвар

Энгийн Feedforward гэдэг нь зөвхөн урагшаа яваад байгаа бол Recurrent нь эргэж буцдагаараа ялгаатай. Тэр ч утгаараа үгийн цувааг сурахад тохиромжтой байдаг.

Жишээлбэл : өмнөх үг нь дараагийн үгийг тооцох үед ашилагдана. 1 хэлбэрийн дагуу (recurent → re-occur : дахин давтагдах)

CNN бодвол хамаагүй энгийн тэгшитгэлтэй бөгөөд дэлгээд харвал маш олон давхарга учир бүгдийг 1 дор биш хувааж, сургадаг. (BPTT) За тэгээд өмнөх бичвэр үүсгэх дээр харцгаавал…

Гэтэл олон дахин уламжлал авах үед 1 бол gradient нь хэт өсөх (exploding), эсвэл алга болох (vanishing) тохиолдол үүсдэг. Энэ үед нь Gradient clipping, Gated RNNs [LSTM, GRU] гэх мэт аргуудыг ашиглах боломжтой. Хэрэгтэй үедээ судлаарай :D.

Бичвэр дээр RNN ашиглахад бас Bidirectional RNN (2 чиглэл рүү), Орчуулга хийхэд Seq2Seq — 2 өөр RNN [encode, decode] холбох зэрэг боломжууд байдаг.

Ингээд лекц дууслаа. Ойлгох зүйл ихтэй, тун сонирхолтой байсан шүү. Гэхдээ бас нэг дор арай их ч юм уу даа.

--

--

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

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