stub Gradient Descent гэж юу вэ? - Нэгдсэн.AI
бидэнтэй хамт холбоно
AI мастер анги:

AI 101

Gradient Descent гэж юу вэ?

mm
шинэчлэгдсэн on

Градиент уналт гэж юу вэ?

Хэрэв та мэдрэлийн сүлжээг хэрхэн сургадаг талаар уншсан бол "градиент десанс" гэсэн нэр томъёог өмнө нь бараг л тааралдсан байх. Градиент буух нь мэдрэлийн сүлжээний гүйцэтгэлийг оновчтой болгох, сүлжээний алдагдал/алдааны түвшинг бууруулах үндсэн арга юм. Гэсэн хэдий ч градиент уналт нь машин сурахад шинээр орсон хүмүүст ойлгоход бага зэрэг хэцүү байж болох бөгөөд энэ нийтлэл нь градиент уруул хэрхэн ажилладаг талаар сайн зөн совингоо өгөхийг хичээх болно.

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

Градиент гэж юу вэ?

Мэдрэлийн сүлжээний алдааны хэмжээг харуулсан график байна гэж бодъё. Графикийн доод тал нь хамгийн бага алдаатай цэгүүдийг илэрхийлдэг бол графикийн дээд талд алдаа хамгийн их байна. Бид графикийн дээд талаас доошоо шилжихийг хүсч байна. Градиент бол алдаа ба мэдрэлийн сүлжээний жингийн хоорондын хамаарлыг тооцоолох арга юм. Энэ хоёр зүйлийн хоорондын хамаарал налуу хэлбэрээр графикаар зурж болно, буруу жин нь илүү их алдаа гаргадаг. Налуу/налуугийн эгц байдал нь загвар хэр хурдан сурч байгааг илэрхийлнэ.

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

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

Гэсэн хэдий ч бид хөндийн хамгийн доод цэг рүү ойртох тусам бидний алхмууд багасах шаардлагатай болно, эс тэгвээс бид жинхэнэ хамгийн доод цэгийг давж магадгүй юм. Үүний нэгэн адил, сүлжээний жинг тохируулах үед тохируулга нь түүнийг хамгийн бага алдагдлын цэгээс холдуулж болзошгүй тул цаг хугацааны явцад тохируулга багасах ёстой. Уулнаас хамгийн бага алдагдалтай цэг рүү уруудах үед градиент нь бидний явах ёстой зам, бидний алхам хэр том байх ёстойг харуулсан вектор/заавар юм.

Одоо бид градиентууд нь аль чиглэлд шилжихийг (ямар коэффициентийг шинэчлэх ёстой) зааж өгдөг заавар гэдгийг бид мэдэж байгаа бөгөөд бидний хийх ёстой алхмууд хэр их байх ёстой (коэффициентийг хэр их шинэчлэх ёстой), бид градиентийг хэрхэн тооцдог болохыг судалж болно.

Градиент ба градиент уналтыг тооцоолох

Градиент уналт нь их хэмжээний алдагдалтай газраас эхэлж, олон давталтаар хамгийн бага алдагдалд чиглэсэн алхмуудыг хийж, жингийн оновчтой тохиргоог олох зорилготой. Зураг: Роман Сузи Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Градиент уналтыг хийхийн тулд эхлээд градиентийг тооцоолох хэрэгтэй. Дарааллаар нь градиентийг тооцоолох, бид алдагдал/зардлын функцийг мэдэх хэрэгтэй. Деривативыг тодорхойлохын тулд бид зардлын функцийг ашиглана. Тооцооллын хувьд дериватив нь тухайн цэг дэх функцийн налууг л илэрхийлдэг тул бид үндсэндээ уулын налууг тооцоолж байна. алдагдлын функц. Бид алдагдлын функцээр дамжуулан коэффициентүүдийг ажиллуулж алдагдлыг тодорхойлдог. Хэрэв бид алдагдлын функцийг "f" гэж төлөөлвөл алдагдлыг тооцоолох тэгшитгэл нь дараах байдалтай байна (бид зөвхөн сонгосон зардлын функцээр дамжуулан коэффициентүүдийг ажиллуулж байна):

Алдагдал = f(коэффициент)

Дараа нь бид деривативыг тооцоолж, эсвэл налууг тодорхойлно. Алдагдлын деривативыг олж авснаар коэффициентээ тохируулахын тулд тохирох тэмдгийг өгснөөр налуугийн аль чиглэл нь дээш эсвэл доош байгааг хэлж өгнө. Бид тохирох чиглэлийг "гурвалжин" гэж илэрхийлнэ.

дельта = дериватив_функц(алдагдал)

Бид одоо аль чиглэл нь хамгийн бага алдагдлын цэг рүү уруудаж байгааг тодорхойлсон. Энэ нь бид мэдрэлийн сүлжээний параметрүүдийн коэффициентүүдийг шинэчилж, алдагдлыг бууруулна гэсэн үг юм. Бид өмнөх коэффициентуудаас чиглэл (гурвалжин) болон өөрчлөлтийн хэмжээг (бидний алхамын хэмжээ) хянадаг аргументаар тодорхойлсон утгын зохих өөрчлөлтийг хасч тооцсон коэффициентуудыг шинэчлэх болно. Шинэчлэлийн хэмжээг хянадаг аргументыг "сурах түвшин” гэсэн ба бид үүнийг “альфа” гэж төлөөлөх болно.

коэффициент = коэффициент – (альфа * дельта)

Дараа нь бид энэ үйл явцыг сүлжээг хамгийн бага алдагдлын цэг дээр нэгтгэх хүртэл давтана.

Сурах түвшин (альфа) -д тохирох утгыг сонгох нь маш чухал юм. Сонгосон сургалтын хувь хэмжээ хэт бага эсвэл хэт том байх ёсгүй. Бид хамгийн бага алдагдлын цэг рүү ойртох тусам бидний алхмууд багасах ёстой, эс тэгвээс бид хамгийн бага алдагдлын жинхэнэ цэгийг давж, нөгөө тал руугаа орох болно гэдгийг санаарай. Хамгийн бага алдагдлын цэг нь бага бөгөөд хэрэв бидний өөрчлөлтийн хурд хэт их байвал алдаа дахин нэмэгдэж магадгүй юм. Хэрэв алхамын хэмжээ хэтэрхий том байвал сүлжээний гүйцэтгэл хамгийн бага алдагдалтай цэг дээр эргэж, нэг талдаа, дараа нь нөгөө талдаа давах болно. Хэрэв ийм зүйл тохиолдвол сүлжээ хэзээ ч жингийн жинхэнэ оновчтой тохиргоонд нийлэхгүй.

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

Градиент уналтын төрлүүд

Одоо бид градиент уналт ерөнхийдөө хэрхэн ажилладагийг ойлгосон тул өөр өөр зүйлийг авч үзье градиент уналтын төрлүүд.

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

Стохастик градиентийн уналт: Стохастик градиент уналтад градиент уналт болон параметрийн шинэчлэлтийн давталт бүрт зөвхөн ганц сургалтын жишээг боловсруулдаг. Энэ нь сургалтын жишээ болгонд тохиолддог. Параметрүүдийг шинэчлэхээс өмнө зөвхөн нэг сургалтын жишээг боловсруулдаг тул шинэчлэлтийг хурдан хийдэг тул Багцын градиентийн бууралтаас илүү хурдан нийлэх хандлагатай байдаг. Гэсэн хэдий ч, сургалтын багц дахь бүх зүйл дээр процессыг хийх ёстой тул өгөгдлийн багц том бол дуусгахад нэлээд хугацаа шаардагдах бөгөөд хэрэв хүсвэл бусад градиент удмын төрлүүдийн аль нэгийг ашиглах боломжтой.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent нь сургалтын бүх мэдээллийн багцыг дэд хэсгүүдэд хуваах замаар ажилладаг. Энэ нь сүлжээгээр дамждаг жижиг жижиг хэсгүүдийг үүсгэдэг бөгөөд алдааг тооцоолоход мини багцыг ашигласан тохиолдолд коэффициентүүд шинэчлэгддэг. Мини-багц градиент уналт нь Стохастик градиент уналт ба Багц градиент уналт хоёрын дундыг давдаг. Загвар нь Багц Градиент Descent-тэй харьцуулахад илүү олон удаа шинэчлэгддэг бөгөөд энэ нь загварын оновчтой параметрүүд дээр бага зэрэг хурдан бөгөөд илүү бат бөх нийлдэг гэсэн үг юм. Энэ нь мөн Стохастик градиент Descent-ээс илүү тооцооллын хувьд илүү үр ашигтай

Мэргэшсэн блоггер, программист Машины сургалт болон Гүн сурах сэдвүүд. Даниел бусад хүмүүст хиймэл оюун ухааны хүчийг нийгмийн сайн сайхны төлөө ашиглахад тусална гэж найдаж байна.