Нейронные сети
Попытка разобраться с вещами напрямую или косвенно связанными с нейронными сетями, чтобы самому стало несколько легче в понимании.
TL; DL
-
Выбор функции ошибки:
- Кратко;
- Интуитивный подход;
- Устройство нейронных сетей;
- Поиск минимума функции ошибки (TODO: ссылка на градиентный спуск);
- Градиентный спуск в нейросетях (Backpropagation):
- градиентный спуск;
- вычислительные графы.
Постановка задачи
Главной отличительной особенностью "Обучение с учиталем"(Superwised learning) является наличие обучающей выборки, состоящий из пар $x_i, y_i$, где $x_i$ - признаковое представление объекта, $y_i$ - целевая переменная. В этой области машинного обучения встают задачи классификации, регрессии и тд.
Рассмотрим задачу регресии. TODO: рассписать
Выбор функции ошибки
Интуитивный подход
Задача регрессии, если упростить, сводится к тому, чтобы модель, описывающая "скрытую в данных" функциональную зависимость, не ошибалась. (Не учитываем погрешность при измерениях и переобучение) Модель не ошибается, когда спрогнозированные значения совпадают с реальными (или стремятся к ним).
Как можно проверить, насколько модель ошибается? Нужно придумать подходящую функцию ошибки. Например, мы можем измерять разницу между реальным ($y_i$) и прогнозным ($\hat{y_i}$) значением для объекта из обучающей (или валидационной) выборки:
$$y_i - \hat{y_i}$$
Но измерение ошибки модели в одной контрольной точке $i$ малоинформативно, возьмем сумму ошибок по всей обучаюшей выборке ($N$ - число наблюдений в выборке): $$\sum_i^N{y_i - \hat{y_i}}$$
Вот тут мы и встречаем причину, почему просто разность в качестве функции ошибки не подходит:
Ошибки модели на разных примерах из обучающей выборки могут иметь разные знаки, компенсируя друг друга при сложении.
Пример, пусть существуют две модели A и B, которые имеют следующие ошибки $e_i = y_i - \hat{y_i}$:
модель | $e_1$ | $e_2$ | $e_3$ | $e_4$ | $\sum_i^N{e_i}$ |
---|---|---|---|---|---|
A | +3 000 | -1 000 | -1 000 | -1 000 | 0 |
B | +1 | +2 | +1 | +3 | 7 |
Получается, что:
Для модели A суммарная ошибка будет равна 0, в то время как суммарная ошибка модели B будет равна 7.
Исходя из этой логики модель A лучше, чем B.
Hо это противоречит здравому смыслу, т.к. в каждой точке модель B лучше, т.е. меньше ошибается, чем модель A. ¯\_(ツ)_/¯
Ключевая проблема в том, что ошибки с разными знаками компенсируют друг друга. Чтобы исправить этот недостаток, можно сделать такое преобразование над ошибками, которое уберет влияние знака.
Ниже представленны примеры таких преобразований и формулы суммарной ошибки модели в результате этих преобразований:- $|x|$ (модуль числа):$$\sum_i^N{\lvert e_i \rvert} = \sum_i^N{\lvert y_i - \hat{y_i} \rvert}$$
- $x^2$ (квадрат числа): $$\sum_i^N{e_i^2} = \sum_i^N{(y_i - \hat{y_i})^2}$$
Рассмотрим уже известный пример с добавлением новых функций ошибки:
модель | $e_1$ | $e_2$ | $e_3$ | $e_4$ | $\sum_i^N{e_i}$ | $\sum_i^N{\lvert e_i \rvert}$ | $\sum_i^N{e_i^2}$ |
---|---|---|---|---|---|---|---|
A | +3 000 | -1 000 | -1 000 | -1 000 | 0 | 6 000 | 12 000 000 |
B | +1 | +2 | +1 | +3 | 7 | 7 | 15 |
Как можно видеть из таблицы, новые функции ошибки отражают следующий факт, что:
Модель A, которая на каждом наблюдении ошибалась сильнее, также сильнее ошибается в общем по всей выборке.
Поэтому модель A хуже, чем модель B.
Полезное свойство модуля и возведения в квадрат числа - функции ошибки теперь ограничены снизу нулем, те нуль мы получаем в случае, если модель не ошибается и всегда верно предсказывает значение целевой функции.
Напоследок, предлагаю перейти от суммарных ошибок, к усредненным по наблюдениям, т.е.:- Средняя абсолютная ошибка или MAE (Mean absolute error):$$\frac{1}{N} \sum_i^N{\lvert y_i - \hat{y_i} \rvert}$$
- Среднеквадратичная ошибка или MSE (Mean squared error): $$\frac{1}{N} \sum_i^N{(y_i - \hat{y_i})^2}$$
Пример для наглядности:
модель | $e_1$ | $e_2$ | $e_3$ | $e_4$ | $\frac{1}{N}\sum_i^N{e_i}$ | MAE | MSE |
---|---|---|---|---|---|---|---|
A | +3 000 | -1 000 | -1 000 | -1 000 | 0 | 1 500 | 4 000 000 |
B | +1 | +2 | +1 | +3 | 1.75 | 1.75 | 1.75 |
Теперь функция ошибки отображает, как в среднем ошибается модель.
Также размер значения усредненной функции ошибки не зависит напрямую от количества объектов в выборке. Это удобно для сравнения полученных ошибок на обучающей, валидационной и тестовой выборках. Ведь усреднение нивелирует рост значения функции ошибки из-за увеличения числа объектов, по которым ошибка расчитывается.
Поиск минимума функции ошибки
Для начала, выберем функцию ошибки для нашей модели - пусть это будет MSE: $$L(\theta) = \frac{1}{N} \sum_i^N{(y_i - \hat{y_i})^2}$$
TODO: почему MSE??? - оптимизация через град спуск
Повторимся, в упрощенном и интуитивном понимании, для решения задачи регрессии:
Ищем такую модель, которая ошибается как можно меньше, т.е. ее ошибка стремится к минимуму.
Если выразить математически, минимизация функции ошибки выглядит так:$$L(\theta) = \frac{1}{N} \sum_i^N{(y_i - \hat{y_i})^2} \rightarrow \min_{\theta}$$