Дата публикации May 20, 2019
Проверять, выписыватьсяЧасть 2из этой серии, поскольку мы пытаемся реализовать линейную регрессию с использованием NumPy в 3 этапа.
Если вымладший специалист по даннымкто-то понимает, как работают нейронные сети, илиэнтузиаст машинного обучениякто знает немного о глубоком обучении, это статья, которую вы не можете пропустить. Вот как вы можете построить нейронную сеть с нуля, используя NumPy в9 шагов- от предварительной обработки данных до обратного распространения - обязательная практика.
Базовое понимание машинного обучения, искусственной нейронной сети, синтаксиса Python и логики программирования является предпочтительным (но не обязательным, поскольку вы можете учиться на ходу).
Коды доступны наGithub, Первоначально опубликовано наedenau.github.io,
Первый шаг. Импортировать NumPy. Шутки в сторону.
Глубокое обучение требует данных. Хотя в Интернете доступно множество чистых наборов данных, для простоты мы сгенерируем наш собственный.а такжебу нас есть выводыа + б,а-б, а также| А-б |, Получено 10000 базовых точек.
Наш набор данных разделен на обучающий (70%) и тестовый (30%) набор. Только обучающий набор используется для настройки нейронных сетей. Тестовый набор используется только для оценки производительности, когда обучение завершено.
Данные в обучающем наборе стандартизированы, так что распределение для каждого стандартизированного признака равно среднему значению и дисперсии единиц. Скалеры, сгенерированные из вышеупомянутой процедуры, могут затем быть применены к тестовому набору.
Поэтому скалер не содержит никакой информации из нашего тестового набора. Мы не хотим, чтобы наша нейронная сеть получала какую-либо информацию о наборе тестов перед настройкой сети.
Сейчас мы завершили процедуры предварительной обработки данных в4 шага,
Мы объективируем «слой», используя класс в Python. Каждый слой (кроме входного слоя) имеет весовую матрицуW, вектор смещенияби функция активации. Каждый слой добавляется в списокneural_net, Этот список будет представлять вашу полностью подключенную нейронную сеть.
Наконец, мы проверяем число гиперпараметров с помощью следующей формулы и путем подсчета. Количество доступных датумов должно превышать количество гиперпараметров, в противном случае оно определенно переопределится.
Мы определяем функцию для прямого распространения с учетом определенного набора весов и смещений. Связь между слоями определяется в матричной форме как:
Функции активации определяются одна за другой. ReLU реализован какa → max (a, 0)тогда как сигмовидная функция должна возвращатьа → 1 / (1 + е ^ (- а))и его реализация оставлена в качестве упражнения для читателя.
Это самая сложная часть, где многие из нас просто не понимают. После того как мы определили метрику потерьеДля оценки производительности мы хотели бы знать, как изменяется показатель потерь при изменении каждого веса или смещения.
Мы хотим знать, насколько чувствителен каждый вес и смещение по отношению к метрике потерь.
Это представлено частными производными∂e / ∂W(обозначается в коде dW) и∂e / ∂b(обозначается в коде БД) соответственно и может быть рассчитано аналитически.
Эти уравнения обратного распространения предполагают только одноYсравнивается Процесс обновления градиента будет очень шумным, поскольку производительность каждой итерации зависит только от одной исходной точки. Несколько датумов могут быть использованы для уменьшения шума, где∂W (y_1, y_2,…)будет означать∂W (y_1), ∂W (y_2),…и аналогично для∂b, Это не показано выше в этих уравнениях, но реализовано в приведенном ниже коде.
Теперь у нас есть все строительные блоки для обучения нейронной сети.
Как только мы узнаем чувствительность весов и предубеждений, мы пытаемсяминимизировать(отсюда и знак минус) метрика потерь итеративно по градиентному спуску с использованием следующего правила обновления:
W = W - learning_rate * ∂W
b = b - learning_rate * ∂b
Модель хорошо обобщается, если потери при тестировании не намного превышают потери при обучении. Мы также делаем несколько тестов, чтобы увидеть, как работает модель
Вот как вы можете построить нейронную сеть с нуля, используя NumPy в9 шагов,Некоторые из вас, возможно, уже построили нейронные сети, используя некоторые высокоуровневые фреймворки, такие как TensorFlow, PyTorch или Keras. Однако построение нейронной сети с использованием только низкоуровневых библиотек позволяет нам по-настоящему понять математику, стоящую за этой загадкой.
Моя реализация никоим образом не является наиболее эффективным способом построения и обучения нейронной сети. Существует так много возможностей для улучшения, но это история для другого дня. Коды доступны наGithub, Удачного кодирования!
Спасибо за чтение! Если вы заинтересованы в машинном обучении или Python, ознакомьтесь со следующими статьями:
Первоначально опубликовано наedenau.github.io,
© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map