Це допоможе, якщо ви надали контекст для твердження, що спуск градієнта неефективний. Неефективний щодо чого?
Я здогадуюсь, що тут відсутній контекст - це порівняння зі стохастичним чи партійним градієнтом у грунтовому навчанні. Ось як відповісти на питання в цьому контексті. Ви оптимізуєте параметри моделі, навіть гіперпараметри. Отже, у вас є функція витрат , де - ваші дані, і - вектор параметрів, а - функція втрати. Щоб мінімізувати цю вартість, ви використовуєте градієнтний спуск над параметрами :
x i Θ L ( ) θ j ∂∑нi = 1L ( xi| Θ)хiΘL ( ) θj
∂∂θj∑i = 1нL ( Θ | xi)
Отже, ви бачите, що вам потрібно отримати суму над усіма даними . Це прикро, адже це означає, що ви постійно переглядаєте дані для кожного кроку свого градієнтного спуску. Ось так виходить пакетний і стохастичний градієнтний спуск: що робити, якщо ми взяли вибірку з набору даних і обчислили градієнт на вибірці, а не на повний набір?
Тут - кількість спостережень у вибірці . Отже, якщо ваш зразок становить 1/100-ту загальну кількість, ви пришвидшите свої розрахунки в 100 разів! Очевидно, що це вносить шум, який подовжує навчання, але шум зменшується зі швидкістю∂хi = 1 , … , nnss√
∂∂θj∑k = 1нсL ( Θ | xк)
нсс nн--√в той час як сума розрахунку збільшується на , тому ця хитрість може спрацювати.
н
Крім того, замість того, щоб чекати, поки не буде обчислена повна сума , ви можете розділити це на партії і зробити крок для кожної партії . Таким чином, ви зробили б M кроків до моменту обчислення суми за весь набір даних. Це були б шумніші кроки, але з часом шум відміняється. ∑ M s = 1 ∑ n s i s = 1∑нi = 1∑Мs = 1∑нсiс= 1