7. Незаметный бэкпроп#
Маша собрала нейросеть:
а) Первый слой нашей нейросетки — линейный. По какой формуле делается forward pass? Сделайте его для матрицы
б) Найдите для первого слоя производную выхода по входу. При обратном движении по нейросетке, в первый слой пришёл накопленный градиент
Каким будет новое накопленное значение градиента, которое выплюнет из себя линейный слой? По какой формуле делается backward pass?
в) Второй слой нейросетки — функция активации, \(ReLU.\) По какой формуле делается forward pass? Сделайте его для матрицы
г) Найдите для второго слоя производную выхода по входу. При обратном движении по нейросетке во второй слой пришёл накопленный градиент
Каким будет новое накопленное значение градиента, которое выплюнет из себя \(ReLU\)? По какой формуле делается backward pass?
д) Третий слой нейросетки — линейный. По какой формуле делается forward pass? Сделайте его для матрицы
е) Найдите для третьего слоя производную выхода по входу. При обратном движении по нейросетке, в третий слой пришёл накопленный градиент \(d = (-1, 0)^T\). Каким будет новое накопленное значение градиента, которое выплюнет из себя линейный слой?
ё) Мы решаем задачу Регрессии. В качестве функции ошибки мы используем
Пусть для рассматриваемых наблюдений реальные значения \(y_1 = 2, y_2 = 1\). Найдите значение \(MSE\).
ж) Чему равна производная \(MSE\) по прогнозу? Каким будет накопленное значение градиента, которое \(MSE\) выплюнет из себя в предыдущий слой нейросетки?
з) Пусть скорость обучения \(\gamma = 1\). Сделайте для весов нейросети шаг градиентного спуска.
и) Посидела Маша, посидела, и поняла, что неправильно она всё делает. В реальности перед ней не задача регрессии, а задача классификации. Маша применила к выходу из нейросетки сигмоиду. Как будет для неё выглядеть forward pass?
к) В качестве функции потерь Маша использует \(logloss.\) Как для этой функции потерь выглядит forward pass? Сделайте его.
л) Найдите для \(logloss\) производную прогнозов по входу в сигмоиду. Как будет выглядеть backward pass, если \(y_1 = 0, y_2 = 1?\) Как поменяется оставшаяся часть алгоритма обратного распространения ошибки?
Решение
Весь путь по нейросети от начала к концу, то есть forward pass будет выглядеть следующим образом:
Все необходимые для обратного прохода производные выглядят как
Когда мы считаем производную \(MSE,\) мы ищем её по каждому прогнозу. В случае производной для \(ReLU\) запись \([H_{ij} > 0]\) означает, что на месте \(ij\) стоит \(1\), если элемент больше нуля и ноль иначе. Делаем шаг обратного распространения ощибки
Делаем шаг градиентного спуска
Меняем MSE на logloss и добавляем сигмоиду. Производная для сигмоиды выглядит как
Так как в бинарной классификации \(y_i\) принимает значения \(\{0,1\},\) производная равна либо первому либо второму слагаемому. Получаем вычисления
Дальше алгоритм делается ровно также, только в качестве стартового \(d\) используется \(logloss'_{\hat y},\) а не \(MSE'_{\hat y}.\)