(зворотне розповсюдження, або як працює магія)
Ласло Фазекас
10 листопада 2019 · 8 хв прочитано
У своїй попередній статті я писав, що нейронна мережа - це чорний ящик, який має вхід, вихід і має безліч регуляторів. За допомогою цих ручок можна встановити, що повинна робити мережа. Я також писав, що магія справи полягає в тому, що ручки не повинні встановлюватися нами. Досить показати зразки алгоритму оптимізації, який на основі цього точно налаштовує мережу для нас. У цій роботі ми трохи зануримося в порожнину кролика і розглянемо, як працює заклинання, тобто як працює алгоритм оптимізації, який налаштовує мережу. Той, хто не читав першої частини, може це надолужити тут:
Грунтовка TensorFlow
(нейронні мережі, тензори та розпізнавання зображень на практиці)
medium.com
З першої частини ми дізналися, що під час навчання ми обчислюємо вихід мережі на кожному кроці, а потім, порівнюючи це з бажаним результатом, обчислюємо похибку мережі. Мета - мінімізувати цю помилку. Як можна натрапити на таке завдання? Ну, ми можемо побудувати цю помилку як функцію. Параметри функції - це ваги (поточні позиції потенціометрів), а поточні вхідні та вихідні значення - це константи функції на даному кроці. Якби ми спробували представити це, ми отримали б горбисту гіперповерхню. Єдина проблема з цим полягає в тому, що для представлення функції помилок нейронної мережі в попередній статті було потрібно 122 571 мірний простір. Це досить важко уявити. Навіть не намагайтеся, бо це зашкодить лише голові. У першому раунді почнемо з двох ваг, тому що він все ще може бути представлений у 3 вимірах.
Чим вище точка на пагорбі, тим більша похибка і чим нижче, тим менше. Кожна точка в просторі належить до заданого положення ручок. Коли ми оптимізуємо ваги, це все одно, що стояти в певній точці на пагорбі, звідки ми хочемо опуститися нижче в напрямку незначної помилки. Особливою складністю є те, що ми не бачимо весь простір, ми маємо лише інформацію про наше найближче оточення. Тож нам слід тим часом зійти з гори із закритими очима, і ми можемо лише намацати.
Що тоді можна зробити? За відсутності кращого, він сканує, де схили гори, і на основі нього починає вниз. Ну, звідки ми можемо дізнатись, де знаходиться нахил у даній точці за допомогою багатопараметричної функції помилки?
Якщо когось цікавлять подробиці того, як ми можемо отримати величезну функцію, як нейронна мережа, і мати правильні математичні основи, перегляньте презентацію Андрея Карпаті з цього питання.
Для обчислення похідних у Tensorflow існує клас GradientTape. Це як відеореєстратор. При запуску він записує всі операції тензорного потоку, і після зупинки ми можемо відтворити операції в зворотному порядку, щоб отримати похідні. Давайте також розглянемо приклад його використання.
На початку коду ми визначаємо дуже і дуже просту лінійну модель, яка складається з множення вхідних даних на вагу W та додавання числа b. Той, хто все ще боїться уроків математики, може стрибнути, що це саме рівняння прямої лінії. Ми також можемо сприймати це як дуже просту нейронну мережу, що складається з 1 нейрона, який має один вхід і не має вихідної функції. Ми навчимо цю модель, для якої ми генеруємо купу (1000 штук) зразків. У моделі як початкові значення W, так і b дорівнюють 16, тоді як значення, яких потрібно досягти (TRUE_W та TRUE_b), становлять 3 та 0,5 відповідно. У наступних кількох рядках ми також проводимо лінію, визначену нашою моделлю, а також навчальним набором.
Нарешті, ми повторно відображаємо набір точок у вибірці та лінію, визначену моделлю, які, мабуть, тепер збігаються.
- Калорії, білки, жири, вміст вуглеводів в зимовій салямі
- Зелений горошок, смажений Сільвією Гастро Ангел
- Купуйте SIGMA PC9 29113 Спортивний годинник, порівняння цін на спортивний комп’ютер, магазини ПК 9 29113
- Спаржа на пару, смажена, смажена! Свіжий
- Посів та догляд за зеленим горошком навесні - Анкерт - сад Анни