Давайте углубимся во все основные моменты создания Keras Dense Layer!

Погружение в Керас

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

Сегодня мы погрузимся в самый основной слой, слой Dense (я не сомневаюсь, что вы все хоть немного знакомы!). Этот пост также доступен в виде видео, с которым вы можете ознакомиться здесь!

Плотный слой

Итак, если вы не знаете, где находится документация к слою Dense на сайте Keras, вы можете проверить ее здесь, как часть раздела Основные слои. Здесь мы найдем его как первый слой. Действительно, это так важно.

Сразу же мы можем взглянуть на параметры слоя по умолчанию, все из которых мы исследуем сегодня. Вот она, если вы не хотите переходить по ссылке:

keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

Но прежде чем мы перейдем к параметрам, давайте просто кратко рассмотрим базовое описание этого слоя, которое дает нам Керас, и немного его распакуем.

Just your regular densely-connected NN layer.

Это кажется достаточно простым! Кроме того, он говорит нам, что плотный слой является реализацией уравнения output = activation(dot(input, kernel) + bias). Это означает, что мы берем скалярное произведение между нашим входным тензором и любой матрицей ядра весов, представленной в нашем плотном слое. Затем мы добавляем вектор смещения (если мы хотим иметь смещение) и поэлементно активируем выходные значения (какая-то функция, линейная или, чаще, нелинейная!).

Еще одно интересное замечание: если вы дадите плотному слою вход с рангом больше 2, он будет сглажен перед использованием скалярного произведения. Это полезно знать, но я не знал, что до того, как прочитал документацию.

После того, как мы позаботились обо всем этом введении, давайте приступим к изучению параметров.

Единицы

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

Активация

Этот параметр устанавливает поэлементную функцию активации, которая будет использоваться в плотном слое. По умолчанию мы видим, что он установлен на None. Это означает, что по умолчанию это линейная активация. Это может сработать для вашего варианта использования! Однако линейность ограничена, и поэтому Keras действительно дает нам набор встроенных функций активации. Здесь мы можем выбрать функцию активации для нашего слоя.

Использовать смещение

Этот параметр очень простой! Вопрос в том, хотим ли мы использовать вектор смещения в наших вычислениях для нашего слоя. Могут быть случаи, когда мы этого не делаем. По умолчанию это активировано, и Керас предполагает, что мы захотим использовать вектор смещения и узнать его значения.

Инициализаторы

Параметры инициализатора сообщают Keras, как инициализировать значения нашего слоя. Для слоя Dense нам нужно инициализировать нашу матрицу весов и вектор смещения (если мы его используем). Как и в случае с активациями, есть множество различных инициализаторов, которые нужно изучить!

В частности, по умолчанию Keras использует инициализатор Zero для смещения и инициализатор Glorot Uniform для матрицы весов ядра. Как вы можете предположить, инициализатор нуля просто установит в нашем векторе смещения все нули.

Униформа Glorot является интересной в этом случае. Он извлекает значения из равномерного распределения, однако его пределы зависят от размера плотного слоя! Фактически для расчета границ слоя используется следующее уравнение:

limit = sqrt(6 / (fan_in + fan_out))
# Where the uniform distribution will fall uniformly between [-limit, limit]

Fan in - это просто единицы во входном тензоре, а fan out - это единицы в выходном тензоре. Почему именно этот диапазон? Ну, об этом написано в этой газете. Мы не будем вдаваться в эту статью в этом посте, но я рекомендую вам прочитать ее, если вам интересно!

Регуляризаторы

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

Вы можете проверить это более подробно здесь, если хотите заполучить некоторые регуляризаторы (есть L1, L2 и L1_L2, готовые к использованию прямо из коробки, а также информация о том, как написать свой собственный регуляризатор как хорошо). Дело в том, что мы можем применить регуляризатор к трем компонентам нашего слоя. Мы можем применить его к матрице весов, вектору смещения или ко всему (если мы решим применить его после активации). Эти методы будут иметь различные эффекты, такие как сохранение разреженности предметов или поддержание веса близким к нулю. Это еще один гиперпараметр, который нужно изучить, и, возможно, тот, который поможет вашей модели получить последний процент обобщения, прежде чем вы развернете ее для публичного использования!

Ограничения

Наконец, последний параметр, который мы обсудим, - это два параметра ограничения. Проще говоря, они могут ограничивать значения, которые могут принимать наша матрица весов или вектор смещения. По умолчанию они не активированы, но вы можете просмотреть некоторые параметры, доступные на странице ограничений, одна из которых довольно проста для понимания, ограничение NonNeg, которое заставляет значения веса / смещения быть больше или равно 0.

Это может быть полезно, если вы пытаетесь выполнить какое-либо ограничение веса. Например, W-GAN использует ограничение веса. Возможно, если бы вы сами переписали эту модель на Керасе, вы бы захотели использовать ограничение для реализации этой идеи!

Заключение

Итак, у вас есть плотный слой! Надеюсь, вы нашли этот пост полезным и узнали о слое Dense кое-что, чего раньше не знали. Не стесняйтесь сообщить мне, если вы хотите увидеть больше этих статей (или видео), и я хотел бы поговорить с вами об этом здесь или в Твиттере.

Если вы хотите узнать больше из того, что я написал, почему бы не почитать некоторые из моих других сообщений, например:

Изначально размещалось на hunterheidenreich.com.