Нейросетки - случайные направления.

Jul 03, 2018 00:59

Возьмём нейросеть с какими-то весами и выберем случайное направление изменения весов.

w=w0+at

Вход функции активации будет иметь вид x=x0+bt, а выход, в общем случае, для дважды дифференцируемых функций активации (ReLU, выйди вон), будет иметь вид y=y0+ct+dt^2.

Для некоторого набора данных можно вычислить функцию потерь, которая также будет полиномом второй степени. Если коэффициент при t положительный, то это означает лишь необходимость изменения нашего направления a на противоположное. Таким образом мы всегда можем получить направление в сторону убывания, а из коэффициентов полинома можно получить приближение размера шага, который приблизит нас к минимуму. Если мы проведём аналогичные вычисления для нескольких случайных направлений, то можно выбрать наиболее улучшающее. Также можно использовать метод сопряжённых направлений (не градиентов, направлений). И даже методы второго порядка не выглядят неподъёмными.

Чем меня привлекает эта идея - нет градиента вообще. Задал направление, прошёлся по корпусу, получил полином, вычислил шаг и выполнил обновление. В рекуррентных автокодерах, например, расстояние между входами и выходами (по которым, обычно, считается градиент) велико, и для кодирующей части его легко потерять.

Вот это я сейчас и пытаюсь состряпать.

PS
ReLU тоже можно прикрутить. Как мне кажется.

нейронные сети, идеи

Previous post Next post
Up