Pull to refresh

Comments 17

Называется это взрывом и затуханием градиента соответственно, и очень мешает тренировать сети глубиной более 10-11 слоев. Именно для обхода этой проблемы придумывают разные функции активации и Residual - блоки в современных нейронных сетях.

А вот с этим утверждением следует быть осторожнее. Вы, судя по ссылке, имеете ввиду блоки ReesNet архитектуры. Они были использованы не для обхода проблемы взрыва/затухания градиента. См. введение оригинальной статьи:

Driven by the significance of depth, a question arises: Is learning better networks as easy as stacking more layers? An obstacle to answering this question was the notorious problem of vanishing/exploding gradients [1, 9], which hamper convergence from the beginning. This problem, however, has been largely addressed by normalized initialization [23, 9, 37, 13] and intermediate normalization layers [16], which enable networks with tens of layers to start converging for stochastic gradient descent (SGD) with backpropagation [22].

Ключевой момент: has been largely addressed by normalized initialization. Resnet блоками же решают проблему деградации точности.

Не совсем так.

Residual Block реализует функцию y=x+f(x)

Очевидно, что производная от нее

y' = 1+f'(x)

При обучении это позволяет использовать практически любые f(x) (и соответственно - функции активации) с гарантией что производная по каждому Res-блоку будет болтаться вблизи 1, и за счет этого градиент по всей сети в среднем не будет затухать. Так можно обучить вплоть до 1000 слоев без затухания, что в общем и привело к повальному использованию этих Res-блоков во всех современных глубоких сетях

Это, безусловно, полезное свойство shortcut connections, и изначально они использовались для решения проблемы затухания градиента лет эдак за двадцать до появления ResNet архитектур. Но именно ResNet архитектуры адресуют проблему деградации точности. Поэтому, если Вы хотите сослаться на shortcut connections как способ побороть затухание градиентов - то это другая ссылка и не упоминание ResNet блока :)

согласен, похоже на то.

В подтверждении сказанного пред. оратором обзор ИНС 90-х годов, где прямые короткие соединения уже упоминаются. В биологических нейронных сетях подобные соединения обычное решение проблемы сохранения баланса между увеличивающимся уровнем выделяемых интегральных признаков, в иерархически связанных областях мозга ("слоях"), и поддержанием контекста ввода. Например, в той же зрительной системе часть связей от фоторецепторов фактически минуя ранние визуальные зоны попадают в зону V4 и выше (на вскидку ~10%, могу поискать источник), в которой выделяются такие высокоуровневые признаки, как форма объектов, производится их группирование, и собственно сами объекты (см. схему). В этом смысле, действительно, можно говорить именно о сохранении точности, соответствия вводу. Отсюда такое решение перекочевало в некоторые архитектуры ИНС. Собственно нарушения такого баланса (объектов и контекста, фона) в сверточных сетях является одной из основных проблем с ошибками распознавания объектов.


Аналога проблемы затухания градиентов в биологических сетях нет, из-за иного способа обучения основанного на принципах ассоциативности (хеббовском обучении). Однако существует проблема возрастающего количества связей нейронов в различных структурах мозга, и их недостаточной активации, связанной только с восходящими (афферентными) потоками сенсорной информации. Возникает необходимость в их дополнительной активации, за которую отвечает активирующая система мозга (см. комент с пояснениями). В традиционных ИНС, включая трансформерных ЯМ, которые являются основой нового поколения интеллектуальных ассистентов, необходимости аналога такой активации пока нет, но для агентов, особенно воплощенных возможно потребуется.

Для флага Японии, кстати говоря, достаточно одного нейрона с квадратичной функцией активации. Она, конечно же, не подходит для глубоких сетей в силу того, что производная может быть сколь угодно большой, но на практике ее можно применять для головы. В отличие от линейных функций, в т.ч. abs, квадратичная функция позволяет аппроксимировать разделяющее многообразие гиперповерхностями второго порядка, что может быть полезно, например, для локализации кластеров точек в эмбеддинг-пространстве ("натянуть" эллипсоид на гаусово многомерное распределение). Можно подумать и над вариантами функции для использования в промежуточных слоях. Как вариант, гибрид квадрата и модуля так, чтобы ограничить производную единицей.

Подбирать функцию активации под задачу по-моему задача скучная.

Есть такая работа Goodfellow: https://arxiv.org/pdf/1302.4389.pdf где говорится, что можно аппроксимировать при помощи Maxout достаточно произвольные функции, включая квадратичную. Вопрос в количестве нейронов - при использовании maxout оно увеличивается в разы, а это обычно приводит к огромному объему результирующей сети.

А в работе Apicella https://arxiv.org/abs/2005.00817 вообще показано, что все такие гибридные (обучаемые) функции активации на самом деле могут быть заменены на фиксированные без потери точности.

Вопрос снижения размерности пространства параметров, как и в вашем случае.

Да, надо как-нибудь сделать чтобы все сводилось к рядам ).

Низкая точность - добавьте слоев.

добавьте слоев = увеличьте количество неизвестных параметров = увеличьте обучающий датасет = арендуйте кластер для расчетов = напишите АПИ и заставьте пользователей покупать ваше машинное время вместо того, чтобы крутить модель на своем локальном компе.

Хорошая бизнес-модель, да.

P.S. Спасибо Kandinsky 2.1 за иллюстрацию.

За какую?.. В статье нет иллюстрации.

UFO just landed and posted this here

Сильно подозреваю, что можно было написать просто data = layers.Conv2D(120, 5, activation=tf.math.abs)(data) вместо использования отдельной строки кода для применения tf.math.abs

Sign up to leave a comment.

Articles