Comments 10
Такие слои как: функция ошибки, функция активации, свертка, пулинг, сглаживание (flatten), нормализация, обратная свертка (экспанирование, expand, развертывание) и вообще любой другой слой, который принимает на вход один вектор признаков (или один тензор признаков) и возвращает тоже один вектор признаков (one to one).
Вы сами придумали такое определение?
Слой - это не функция, а функция - это не слой.
Слой и функция — это разные понятия, каждое из которых имеет своё значение.
Слой — это отношение к множеству, подчёркивающее его целостность и определённое назначение в системе более высокого порядка. Например, в проектировании корпоративной архитектуры слои группируют элементы, чтобы управлять сложностью организации.
Функция — это конкретная задача или действие, которое выполняется в рамках определённого слоя или области. Например, в корпоративных программных приложениях к функциям слоя представления относятся отображение информации и интерпретация вводимых пользователем команд, а к функциям источника данных — взаимодействие со сторонними системами.
Таким образом, различие между слоем и функцией заключается в том, что слой описывает структуру и организацию системы, а функция — её конкретные задачи и поведение.
В программировании понятия функции и слоя тождественны - это инструкция компилятору какие данные взять и по какому алгоритму преобразовать
Здесь имеется в виду слой нейросети, архитектурный слой нейросети с точки зрения программирования. Также может быть рекуррентный слой или слой-трансформер.
Каждое преобразование можно обернуть в класс, у которого есть метод forward. Каждое преобразование рассматривается как отдельный слой (или объект, в глубоком обучении обычно это называют слоем). Линейное преобразование или сигмоида - это не имеет значение.
Затем эти слои можно создать и добавить в список, и обрабатывать последовательно, вызывая у каждого объекта метод forward, чтобы не вызывать отдельно сигмоиду или другие функции, если они будут в архитектуре нейросети.
В глубоком обучении слой линейного преобразования, также известный как полносвязный слой (fully connected layer, dense layer, linear layer), является фундаментальным компонентом многих типов нейронных сетей, включая полносвязные нейронные сети, рекуррентные или сверточные.
Вы забыли указать основное свойство слоя линейного преобразования.
Линейный слой (linear layer, dense layer) — линейное преобразование над входящими данными.
Благодарю.
Это будет информация "со звездочкой", для тех, кто прочитает этот комментарий.
То есть это означает, что никаких сигмоидов там быть не может на выходе?
Сигмоида - это нелинейное преобразование, и вообще это отдельная операция. Линейное преобразование - это понятие из линейной алгебры.
Нелинейность нужна, чтобы строить сложные представления данных. Без нелинейности многослойность не имеет смысла, так как несколько линейных преобразований можно представить в виде одного - в итоге представление данных особо ничего не даст и их не получится разделять.
В слое RNN есть нелинейность (sigmoid или tanh), но это свойство самого слоя RNN, так как она обеспечивает нелинейность для своего состояния, которое RNN использует на следующем шаге обработки. Далее это состояние можно програть через линейный слой и через нелинейность - получится ответ нейросети.
Метод обратного распространения ошибки, безусловно, является значительным достижением в обучении нейронных сетей. Однако получаемые в результате решения вызывают вопросы: весовые коэффициенты и функционирование сети трудно интерпретируемы, множество эквивалентных решений можно получить простыми перестановками нейронов и их коэффициентов, что свидетельствует о сильной избыточности модели. Кроме того, обучение сводится к случайному подбору параметров под тестовое множество.
Альтернативный подход, который можно назвать "нейронными сетями прямого обучения", может помочь решить эти проблемы, делая структуру решений более прозрачной. Он позволяет выявлять неочевидные закономерности, например, тот факт, что в разобранном автором примере "логического ИЛИ" полученное решение на самом деле является сверточной нейросетью для последовательности [0, 0, 1, 1]. Также оказывается, что для реализации "логического ИЛИ" требуется на один нейрон больше, чем для "исключающего ИЛИ", а само решение можно получить всего за один прямой проход.
Интересно, что человечеству зачастую проще сжечь лишнюю тонну угля, бесконечно перегоняя данные по вычислительному центру, чем сесть и подумать над проблемой. Возможно, более осмысленный подход к проектированию нейросетей позволил бы уйти от этой чрезмерной ресурсозатратности.
Кроме того, данный метод позволяет лучше понять, какие функции активации действительно эффективны. В частности, становится очевидным, что наиболее выгодными функциями активации являются многочлены Чебышева первого рода, а не традиционные сигмоиды, что может привести к новым возможностям в архитектуре нейросетей.
А есть какая-нибудь информация о таких нейросетях, которые обучаются в прямом распространении (если я правильно понял)?
Я периодически думаю о том, как это может быть возможно или как может выглядеть эта идея на практике. У меня эта идея исходит из того, что в биологической нейросети нет обратного распространения, следовательно, она может обучаться только на основе входных данных.
А как это может выглядеть - не понятно, но только с точки зрения обычных взглядов на машинное обучение. МО решает задачу аппроксимации, то есть нужно построить отображение на основе набора данных. Но биологическая нейросеть формирует соответствие (не математическое) в режиме реального времени (и динамически) без набора данных, только на основе входных данных.
У меня есть догадки, которые исходят из моих знаний о нервной системе (которые далеко неполны). Возможно это описано в общей теории по нейрофизиологии или нейробиологии. Или не описано, но скорее всего эта идея присутствует там в неявном виде. Я же просто додумываю с точки зрения алгоритмов и структур данных.
Каким образом это все может происходить я как раз хочу попробовать описать и возможно это будет основа некой общей теории по созданию цифрового интеллекта - это очень сложная задача, пока у меня есть только какие-то базовые представления, возможно, когда я это опишу, у меня появится представление о том, что делать дальше.
Информацию по прямому распространению ошибки я не нашел. Похоже все увлечены обратным. Идея прямого обучения довольно проста. Если вкраце: нейрон состоит из двух частей - линейной и нелинейной. Неочевидный факт, на который никто не обращает внимения состоит в том, что нейроны "видят" на своем входе сигнал. Представьте, что данный сигнал состоит из набора гармонических составляющих. Тогда линейная часть отвечает за их линейную модификацию, т.е. за изменение амплитуд и фаз. А нелинейная часть отвечает за перемещение их энергии между частотами. Создать линейный фильтр с заданными характеристиками просто. С нелинейными фильтрами дела обстоят сложно. Могу лишь сказать, что традиционные функции активации очень плохо двигают энергию по спектру. Например, классическая сигмоида, большую часть энергии оставляет на месте, ReLu чуть побольше энергии перемещает в строну удвоенных частот. Идеальными двигателями энергии являются многочлены Чебышева. Зная спектр на входе и на выходе, можно подобрать подходящий многочлен. В общем, можно строить сеть непосредственно двигаясь от входа к выходу, добавляя нейроны по смыслу с нужными линейными и нелинейными фильтрами на каждом этапе. Результатом такого строительства получится "пассивный" вариант сети. Активный вариант сети можно посмотреть у меня на Kaggle по ключевому слову Rainbow.Net
Глубокое обучение: Слой линейного преобразования и полносвязная нейросеть. Теория и реализация на самодельном autograd