Чи слід брати зразки тренувань випадковим чином для міні-пакетних навчальних нейронних мереж без заміни?


18

Ми визначаємо епоху як пройшла всю сукупність усіх доступних навчальних зразків, а розмір міні-партії - кількість зразків, за яку ми в середньому знаходимо оновлення ваг / зміщення, необхідних для спуску градієнта.

Моє запитання - чи слід ми не замінювати з набору навчальних прикладів, щоб генерувати кожну міні-серію в епоху. Я відчуваю, що нам слід уникати заміни, щоб переконатися, що ми насправді "намалюємо всі зразки", щоб відповідати вимогам кінця епохи, але у мене виникають проблеми з тим чи іншим способом остаточної відповіді.

Я спробував гугла і читав Ч. 1 з нейронних мереж Нільсена та глибокого навчання, але не знайшов чіткої відповіді. У цьому тексті Нільсен не вказує, що випадкову вибірку робити без заміни, але, мабуть, це означає, що вона є.

Більш чітку формалізацію навчання в епохи можна знайти за бажанням - /stats//a/141265/131630

Редагувати: це питання мені здалося схожим, але було незрозуміло, як застосувати той факт, що лінійність очікувань байдужа до незалежності до цієї ситуації - Якщо вибірка повинна відбуватися з заміною або без неї


Якщо немає конкретних причин для даних, міні-пакет для тренувань з нейронної сітки завжди складається без заміни. Ідея полягає в тому, що ви хочете опинитися десь між пакетним режимом, який обчислює градієнт із усім набором даних і SGD, який використовує лише один випадковий випадок.
horaceT

SGD не обмежується використанням однієї випадкової вибірки. Цей процес називається онлайн-навчання. "Крайня версія градієнтного спуску полягає у використанні міні-партії розміром всього 1 ... Ця процедура відома як онлайн, он-лайн або поступове навчання". А також "Ідея під назвою стохастичний градієнтний спуск може бути використана для прискорення навчання. Ідея полягає в оцінці градієнта ∇C шляхом обчислення [це] для невеликого зразка випадково вибраних навчальних вправ. .може швидко отримати хорошу оцінку справжнього градієнта ". Обидві цитати з Nielsen Ch. 1.
бобо

Відповіді:


13

Хороший теоретичний аналіз схем заміни із та без них у контексті ітеративних алгоритмів, заснованих на випадкових малюнках (на скільки навчаються дискримінаційні глибокі нейронні мережі (ДНН)), можна знайти тут

Коротше кажучи, виявляється, що вибірка без заміни призводить до більш швидкої конвергенції, ніж вибірка з заміною.

Я дам тут короткий аналіз на основі прикладу іграшки, який вони надають: Скажімо, ми хочемо оптимізувати наступну цільову функцію:

xopt=argminx12i=1N(xyi)2

де ціль . У цьому прикладі ми намагаємось вирішити для оптимального x , враховуючи N міток y i, очевидно.yiN(μ,σ2)xNyi

Гаразд, так якби ми вирішили для оптимального у вищенаведеному безпосередньо, то ми взяли б тут похідну функції втрати, встановимо її 0 і вирішимо для x . Отже, для нашого прикладу вище, втрата єxx

L=12i=1N(xyi)2

і її першою похідною буде:

δLδx=i=1N(xyi)

Встановлення до 0 і розв'язуючи дляx, виходить:δLδxx

xopt=1Ni=1Nyi

Іншими словами, оптимальне рішення - це не що інше, як середнє значення вибірки для всіх зразків y .Ny

Тепер, якщо ми не могли б виконати вищезазначені обчислення відразу, нам доведеться це робити рекурсивно за допомогою рівняння оновлення градієнта спуску нижче:

xi=xi1λi(f(xi1))

а просто вставляючи наші умови сюди, це дає:

xi=xi1λi(xi1yi)

Якщо ми запустимо вище для всіх , тоді ми ефективно виконуємо це оновлення без заміни. Тоді виникає питання, чи можемо ми отримати таким чином оптимальне значення x ? (Пам'ятайте, що оптимальне значення x - це не що інше, як середнє значення вибірки y ). Відповідь - так, якщо дозволити λ i = 1 / i . Щоб побачити, це ми розширюємо:i1,2,...Nxxyλi=1/i

xi=xi1λi(xi1yi) xi=xi11i(xi1yi) xi=ixi1(xi1yi)i xi=(i1)xi1+yii ixi=(i1)xi1+yi 

Однак останнє рівняння - це не що інше, як формула для середнього показника! Таким чином, коли ми перебираємо множину з , i = 2 і т. Д., Аж до i = N , ми б виконували свої оновлення без заміни, і наша формула оновлення дає нам оптимальне рішення x , яке є зразок середнього!i=1i=2i=Nx

NxN=(N1)xN1+yN==>xN=1Ni=1Nyi=μ

xNμ

E{(xNμ)2}

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

Сподіваюся, це ще більше пояснює це!


У цьому прикладі використовується досить багато припущень, тобто використання квадратичної помилки та опуклості ландшафту втрат. Чи відповідає результат, коли ці припущення не виконуються?
bayerj

@bayerj Цей конкретний іграшковий приклад, так. Однак ця стаття продовжує розширювати її на деякі інші теоретичні випадки. Я вважаю, що інші джерела [я думаю, що Буту] демонструють емпіричну підтримку для того, щоб вибірки без заміни були вищими.
Тарін Зіяее

@TarinZiyaee Дякую за цю відповідь - чи можете ви уточнити λ_k = 1 / k? Про який k ми говоримо тут, k із наведеного рівняння? Я не пішов за вами тут, що ускладнило подальше підсумок та висновок. Спасибі.
бобо

1
@bobo Я спробую уточнити пост сьогодні ввечері.
Tarin Ziyaee

1
@bobo я оновив свою відповідь купу. Будь ласка, погляньте і повідомте мені, якщо це допомагає.
Тарін Зіяее

5

Згідно з кодом у сховищі Nielsen, міні-партії оформляються без заміни:

    def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
    n = len(training_data)
    for j in range(epochs):
            random.shuffle(training_data)
            mini_batches = [
                training_data[k:k+mini_batch_size]
                for k in range(0, n, mini_batch_size)
            ]
            for mini_batch in mini_batches:
                self.update_mini_batch(mini_batch, eta)

Ми можемо бачити, що в епоху не відбувається заміни навчальних зразків. Цікаво, що ми також можемо побачити, що Nielsen вирішує не турбуватися про коригування eta(ступінь навчання) для останнього розміру mini_batch, який може не мати стільки навчальних зразків, як попередні міні-партії. Імовірно, це вдосконалена модифікація, яку він залишає для наступних розділів. **

** EDIT: Власне, таке масштабування відбувається у def update_mini_batchфункції. Наприклад, з гирями:

self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)]     

Це необхідно, тому що останній mini_batch може бути меншим, ніж попередні mini_batches, якщо кількість навчальних зразків на mini_batch не ділиться рівномірно на загальну кількість наявних навчальних зразків.

mylist = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
n = len(mylist)
mini_batch_size = 2
mini_batches = [
    mylist[k:k+mini_batch_size]
    for k in range(0, n, mini_batch_size)
    ]
for mini_batch in mini_batches:
    print(mini_batch)

Вихід:

['1', '2']
['3', '4']
['5', '6']
['7', '8']
['9', '10']

Зміна mini_batch_sizeдо 3, який не ділиться рівномірно на наших 10 навчальних вибірок. Для виходу ми отримуємо:

['1', '2', '3']
['4', '5', '6']
['7', '8', '9']
['10']

Оцінюючи діапазон над індексами списку (щось із форми, [x:y]де xі yє деякі індекси до списку), якщо наше праворучне значення перевищує довжину списку, python просто повертає елементи зі списку вгору, поки значення не вийде з діапазону індексів .

Таким чином, остання міні-партія може бути меншою, ніж попередні міні-партії, але якщо вона зважена на те саме, etaто ці навчальні зразки сприятимуть більшому навчанню, ніж зразки в інших, більших міні-партіях. Оскільки це лише остання міні-партія, мабуть, надто турбуватися не варто, але її можна легко вирішити, зменшивши etaдовжину міні-партії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.