Как учатся нейронки
vk f t

Как учатся нейронки

Самое про­стое объ­яс­не­ние на кар­тин­ках.

Тэк-с. В про­шлый раз мы раз­би­ра­ли, что такое ней­ро­се­ти и как они исполь­зу­ют­ся. В этой ста­тье уви­дим, как они обу­ча­ют­ся, это уди­ви­тель­ный про­цесс. Что надо знать из про­шлой ста­тьи:

Теперь поша­го­во, как это про­ис­хо­дит.

Возь­мём такую ситу­а­цию. У нас есть дан­ные о людях, кото­рые живут в опре­де­лён­ном рай­оне: мы зна­ем их зар­пла­ту. Наша зада­ча — пред­ска­зать веро­ят­ность того, что эти люди зака­жут так­си. У нас есть дан­ные о 10 тыся­чах чело­век. И в отдель­ном фай­ле у нас лежат насто­я­щие веро­ят­но­сти: как эти 10 тысяч чело­век на самом деле зака­зы­ва­ли так­си.

Постро­им самую при­ми­тив­ную ней­ро­сеть, кото­рая может суще­ство­вать (на прак­ти­ке таких нет вооб­ще, но в нашем слу­чае для нагляд­но­сти мож­но это изоб­ра­зить). На вхо­де у нас зар­пла­та. На выхо­де у нас веро­ят­ность того, что чело­век зака­жет так­си:

Вход и выход свя­за­ны лини­ей. На самом деле это не линия, а фор­му­ла. По этой фор­му­ле ней­рон­ка долж­на обра­бо­тать вход­ную зар­пла­ту и выдать пред­ска­за­ние. Сей­час мы напи­са­ли фор­му­лу от фона­ря, про­сто ткну­ли паль­цем в небо:

Наша зада­ча — уточ­нить эту фор­му­лу так, что­бы она дава­ла какое-то более-менее пра­виль­ное пред­ска­за­ние:

Пока мы не зна­ем, насколь­ко пра­виль­ная наша фор­му­ла. Мы гово­рим ней­ро­се­ти: «Посчи­тай хоть что-то», и ней­рон­ка счи­та­ет по той слу­чай­ной фор­му­ле, с кото­рой мы нача­ли. По этой слу­чай­ной фор­му­ле веро­ят­ность ока­зы­ва­ет­ся 10%:

Ней­рон­ка пред­ска­за­ла нам, что чело­век с зар­пла­той 50 тысяч зака­жет так­си с веро­ят­но­стью 10%. А мы зна­ем из дру­го­го фай­ли­ка, что на самом деле он зака­жет так­си с веро­ят­но­стью 20%:

Нам нуж­но сде­лать так, что­бы в сле­ду­ю­щий раз ней­рон­ка пред­ска­за­ла более точ­но. Для это­го есть меха­низм обрат­но­го рас­про­стра­не­ния: мы бьём по ней­рон­ке пал­кой и гово­рим «Исправ­ляй­ся». Фор­му­ла кор­рек­ти­ру­ет­ся. Это похо­же на то, как когда вы реша­ли урав­не­ния на алгеб­ре, загля­ну­ли в отве­ты и уви­де­ли, что у вас непра­виль­но. Теперь надо подо­гнать реше­ние под ответ. Здесь всё то же самое:

Теперь мож­но попро­сить ней­рон­ку сно­ва сде­лать пред­ска­за­ние, уже по скор­рек­ти­ро­ван­ной фор­му­ле. Ней­рон­ка дела­ет пред­ска­за­ние, оно сов­па­да­ет с пра­виль­ны­ми дан­ны­ми, ней­рон­ка берёт с пол­ки пиро­жок:

Полу­ча­ет­ся, что мы обу­чи­ли про­стей­шую ней­рон­ку на одной точ­ке дан­ных. У нас одна фор­му­ла, одна пере­мен­ная с дан­ны­ми, одна пере­мен­ная с пред­ска­за­ни­ем. Это супер­про­сто, в жиз­ни так про­сто не быва­ет. Но пока что мож­но пора­до­вать­ся пер­вым шагам:

А что если у нас на вхо­де не одна еди­ни­ца дан­ных, а три? Напри­мер, мы зна­ем о сво­их поль­зо­ва­те­лях не толь­ко зар­пла­ту, но и рас­сто­я­ние до бли­жай­шей стан­ции мет­ро и чис­ло кошек в доме. Рас­сто­я­ние до мет­ро обо­зна­чим как D (напри­мер, это будут мину­ты ходь­бы, но с точ­ки зре­ния ней­рон­ки это неваж­но). Чис­ло кошек обо­зна­чим как C. Соеди­ним эти дан­ные с пред­ска­за­ни­ем и вбро­сим фор­му­лы от фона­ря. Сде­ла­ем пред­ска­за­ние:



Допу­стим, для кон­крет­но­го чело­ве­ка с зар­пла­той 75 тысяч руб­лей, кото­рый живёт в 40 мину­тах от мет­ро и у кото­ро­го есть дома две кош­ки, веро­ят­ность зака­зать так­си — 50%. Наша модель с фор­му­ла­ми от фона­ря пред­ска­за­ла 75%. Стук­нем её пал­кой, пусть под­го­нит ответ:


И теперь будем гонять этот про­цесс туда-сюда на всех наших дан­ных: пред­ска­зы­ва­ем, све­ря­ем с пра­виль­ным отве­том, под­го­ня­ем фор­му­лы.

После 10 тысяч кру­гов обу­че­ния мы уви­дим, что ней­ро­ноч­ка пред­ска­зы­ва­ет зака­зы по нашим кли­ен­там с точ­но­стью 96%. Мы счи­та­ем это доста­точ­но хоро­шим резуль­та­том для этой ней­рон­ки. Как она при­хо­дит к это­му резуль­та­ту и какие ей при­шлось делать кор­рек­ти­ров­ки в сво­их фор­му­лах, мы не зна­ем и нам неин­те­рес­но. Нам глав­ное, что ней­рон­ка пред­ска­зы­ва­ет более-менее точ­но.

Сей­час наша ней­рон­ка слиш­ком про­стая, в жиз­ни таких про­стых не быва­ет, и в реаль­но­сти она не смог­ла бы достичь нуж­ной нам сте­пе­ни точ­но­сти. Выход­но­му узлу тяже­ло балан­си­ро­вать всё само­му, по нему слиш­ком мно­го бьют пал­кой.

Что­бы ней­ро­ноч­ка была точ­нее, ей добав­ля­ют скры­тый слой — это как бы про­ме­жу­точ­ный набор точек для вычис­ле­ния более слож­ных штук:

На этом эта­пе нам уже неваж­но, что содер­жит­ся в этом неви­ди­мом слое и в свя­зях меж­ду эти­ми ней­ро­на­ми. Мы зна­ем, что если у нас есть 10 тысяч точек дан­ных и доста­точ­но ней­рон­ных свя­зей, мы можем обу­чить ней­рон­ку чему угод­но.

Поэто­му мы вбра­сы­ва­ем на ней­рон­ные свя­зи какие-то слу­чай­ные фор­му­лы (это назы­ва­ет­ся ини­ци­а­ли­за­ци­ей), застав­ля­ем ней­рон­ку делать пред­ска­за­ния и бьём по ней пал­кой, когда пред­ска­за­ния невер­ны:



С каж­дым про­го­ном какие-то ней­рон­ные свя­зи ста­но­вят­ся силь­нее, дру­гие — сла­бее, фор­му­лы с каж­дым про­го­ном ста­но­вят­ся всё точ­нее. В ито­ге ней­рон­ка учит­ся делать пред­ска­за­ния с нуж­ной нам сте­пе­нью точ­но­сти.

Вот и всё. Ней­ро­се­ти — это тупой пере­бор, под­гон реше­ния под ответ и жёст­кая дис­ци­пли­на.

Ещё по теме