Когато за първи път започнах да уча за алгоритми за машинно обучение, се оказа доста трудна задача да придобия интуиция за това какво правят алгоритмите. Не само защото беше трудно да се разбере цялата математическа теория и обозначения, но беше и просто скучно. Когато се обърнах към онлайн уроци за отговори, отново можех да видя само уравнения или обяснения на високо ниво, без да преминавам през детайлите в повечето случаи.

Тогава един от колегите ми в областта на науката за данни ме запозна с концепцията за разработване на алгоритъм в лист в Excel. И това направи чудеса за мен. Всеки нов алгоритъм, опитвам се да го науча в excel в малък мащаб и повярвайте ми, той прави чудеса, за да подобри вашето разбиране и ви помага напълно да оцените красотата на алгоритъма.

Нека обясня горното с пример.

Повечето от алгоритмите за наука за данни са проблеми с оптимизацията и един от най-използваните алгоритми за извършване на същото е алгоритъмът за градиентно спускане.

Сега, за начало, самото име Gradient Descent Algorithm може да звучи смущаващо, добре, да се надяваме, че след като прегледате тази публикация, това може да се промени.

Да вземем примера за прогнозиране на цената на нова цена от данни за жилища.

Предвид исторически данни за жилища, задачата е да се създаде модел, който прогнозира цената на нова къща, като се има предвид размерът на къщата.

Задачата — за нова къща, предвид размера й (X), каква ще бъде цената й (Y)?

Нека започнем с начертаване на историческите данни за жилищата:

Сега ще използваме прост линеен модел, където напасваме линия върху историческите данни, за да прогнозираме цената на нова къща (Ypred) предвид нейния размер (X)

В горната диаграма червената линия показва прогнозираната цена на къщата (Ypred) при даден размер на къщата (X). Yпред = a+bX

Синята линия показва действителните цени на жилищата от исторически данни (Yactual)

Разликата между Yactual и Ypred (посочена с жълтите пунктирани линии) е грешката при прогнозиране (E)

И така, трябва да намерим линия с оптимални стойности на a, b (наречени тегла), която най-добре отговаря на историческите данни чрез намаляване на грешката при прогнозиране.

И така, нашата цел е да намерим оптимални a, b, които минимизират грешката между действителните и прогнозираните стойности на цената на къщата:

Сума от квадратни грешки (SSE) = ½ ∑(действителна цена на къщата — прогнозирана цена на къща)²

= ½ ∑(Y — Yпред)²

(Моля, имайте предвид, че има и други мерки за грешка. SSE е само една от тях.)

Това е мястото, където Gradient Descent се появява в картината. Градиентно спускане е алгоритъм за оптимизация, който намира оптималните тегла (a,b), което намалява грешката при прогнозиране.

Нека сега преминем стъпка по стъпка, за да разберем алгоритъма за градиентно спускане:

Стъпка 1: Инициализирайте теглата (a и b) с произволни стойности и изчислете грешката (SSE)

Стъпка 2: Изчислете градиента, т.е. промяната в SSE, когато теглата (a и b) се променят с много малка стойност от първоначалната им произволно инициализирана стойност. Това ни помага да преместим стойностите на a & b в посоката, в която SSE е минимизирана.

Стъпка 3: Коригирайте теглата с градиентите, за да се придвижите към оптималните стойности, при които SSE е сведен до минимум

Стъпка 4: Използвайте новите тегла за прогнозиране и за изчисляване на новата SSE

Стъпка 5: Повторете стъпки 2 и 3, докато допълнителните корекции на теглата не намалят значително грешката

Сега ще преминем през всяка една от стъпките подробно (аз направих горните стъпки в excel, които поставих по-долу). Но преди това трябва да стандартизираме данните, тъй като това прави процеса на оптимизация по-бърз.

Стъпка 1:За да напаснете линия Ypred = a + b X, започнете с произволни стойности на a и b и изчислете грешката при прогнозиране (SSE)

Стъпка 2:Изчислете градиента на грешката спрямо теглата

∂SSE/∂a =-(Y-YP)

∂SSE/∂b =-(Y-YP)X

Тук SSE=½ (Y-YP)² = ½(Y-(a+bX))²

Малко смятане тук, но това е всичко!!

∂SSE/∂a и ∂SSE/∂b са градиентите и дават посоката на движение на a,b спрямо SSE.

Стъпка 3:Коригирайте теглата с градиентите, за да достигнете оптималните стойности, при които SSE е сведен до минимум

Трябва да актуализираме произволните стойности на a, b, така че да се движим в посока на оптималното a, b.

Правила за актуализиране:

1) a -∂SSE/∂a

2) b -∂SSE/∂b

И така, актуализирайте правилата:

  1. Ново a = a -r * ∂SSE/∂a =0,45–0,01*3,300 = 0,42
  2. Ново b = b -r * ∂SSE/∂b =0,75–0,01*1,545 = 0,73

тук r е скоростта на учене = 0,01, което е скоростта на адаптиране към теглата.

Стъпка 4: Използвайте нови a и b за прогнозиране и за изчисляване на нова обща SSE

Можете да видите с новата прогноза, общият SSE е намалял (0,677 до 0,553). Това означава, че точността на прогнозата се е подобрила.

Стъпка 5:Повтаряйте стъпки 3 и 4, докато допълнителните корекции на a, b не намалят значително грешката. По това време сме стигнали до оптималното a,b с най-висока точност на прогнозиране.

Това е алгоритъмът за градиентно спускане. Този алгоритъм за оптимизация и неговите варианти формират ядрото на много алгоритми за машинно обучение като невронни мрежи и дори дълбоко обучение.

Хареса ли прочетеното? За да научите други алгоритми по подобен опростен начин, регистрирайте се за 8-седмичния курс по наука за данни на www.deeplearningtrack.com. Регистрирайте се за безплатна демо сесия на 22 април 2017 г., като посетите www.deeplearningtrack.com

Джахнавие ентусиаст по машинно обучение и дълбоко обучение, ръководил е множество екипи за машинно обучение в American Express през последните 13 години. Тя е съосновател на Deeplearningtrack, платформа за обучение по наука за данни, ръководена от онлайн инструктори — www.deeplearningtrack.com