Відповіді:
Перша примітка: ви дійсно повинні також розділяти стандартне відхилення значення кожної функції (пікселя). Віднімання середнього центру вводить на 0 і ділення на стандартне відхилення робить будь-яке масштабоване значення функції число стандартних відхилень від середнього.
Щоб відповісти на ваше запитання: Поміркуйте, як нейронна мережа дізнається свої ваги. C (NN) s вивчають шляхом постійного додавання векторів помилок градієнта (помножених на швидкість навчання), обчислених від зворотного розповсюдження до різних вагових матриць по всій мережі, коли навчальні приклади передаються.
Тут слід зауважити "множений на коефіцієнт навчання".
Якби ми не масштабували наші вхідні навчальні вектори, діапазони наших розподілів значень функцій, ймовірно, були б різними для кожної функції, і, таким чином, швидкість навчання спричинила б поправки в кожному вимірі, які будуть (пропорційно кажучи) відрізнятися один від одного. Ми можемо надмірно компенсувати виправлення в одному ваговому вимірі, а недооцінювати в іншому.
Це не ідеально, оскільки ми можемо опинитися в коливальному (не в змозі зосередитись на кращих максимумах у вартісному (ваговому) просторі) або у повільному рухомому (подорожі занадто повільно, щоб досягти кращого максимуму).
Звичайно, можливий показник навчання за вагою, але це ще більше гіперпараметрів для впровадження у складну мережу, яку нам також доведеться оптимізувати. Як правило, рівень навчання - скалярний.
Таким чином, ми намагаємося нормалізувати зображення, перш ніж використовувати їх як вхід в алгоритм NN (або будь-який градієнт).
(image - image.mean()) / (image.std() + 1e-8)