Новости

Просмотр записей в категории habrahabr

Интересности и полезности python. Часть 3

https://habr.com/post/422951/
  • Программирование
  • Python

Интерактивная карта для веб-приложения за пару часов

https://habr.com/post/422759/
  • Разработка веб-сайтов
  • Геоинформационные сервисы
  • Визуализация данных
  • ReactJS
  • JavaScript


В прошлой статье я кратко рассказала о возможностях kepler.gl — нового Open Source инструмента для визуализации и анализа больших наборов гео-данных.

Лучше, быстрее, мощнее: styled-components v4

https://habr.com/company/ruvds/blog/422783/
  • Разработка веб-сайтов
  • JavaScript
  • Блог компании RUVDS.com

Простое введение в АЛУ для нейронных сетей: пояснение, физический смысл и реализация

https://habr.com/post/422777/
  • Машинное обучение
  • Искусственный интеллект
  • Python


Недавно исследователи из Google DeepMind, в том числе известный учёный в сфере искусственного интеллекта, автор книги "Разбираемся в глубоком обучении", Эндрю Траск, опубликовали впечатляющую статью, описывающую модель нейронной сети для экстраполяции значений простых и сложных численных функций с большой степенью точности.

В этой статье я объясню архитектуру НАЛУ (нейронных арифметико-логических устройств, NALU), их компоненты и существенные отличия от традиционных нейронных сетей. Главная цель этого поста — просто и интуитивно понятно объяснить NALU (и реализацию, и идею) для учёных, программистов и студентов, мало знакомых с нейронными сетями и глубоким обучением.

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

Когда нейронные сети ошибаются?


Классическая нейронная сеть
Изображение взято из этой статьи

В теории, нейронные сети должны хорошо аппроксимировать функции. Они почти всегда способны выявлять значимые соответствия между входными данными (факторами или фичами) и выходными (ярлыками или таргетами). Именно поэтому они используются во многих сферах, от распознавания объектов и их классификации до перевода речи в текст и реализации игровых алгоритмов, способных обыграть чемпионов мира. Уже создано много различных моделей: конволюционные и рекуррентные нейронные сети, автокодировщики, и т.д. Успехи в создании новых моделей нейронных сетей и глубоком обучении — сама по себе большая тема для изучения.

Однако, по словам авторов статьи, нейронные сети не всегда справляются с задачами, кажущимися очевидными людям, и даже пчёлам! Например, это устный счёт или операции с числами, а также умение выявлять зависимость из соотношений. В статье было показано, что стандартные модели нейронных сетей не справляются даже с тождественным отображением (функцией, переводящей аргумент в себя, $f(x) = x$) — самым очевидным числовым соотношением. На рисунке ниже изображена MSE различных моделей нейронных сетей при обучении на значениях данной функции.

Cредняя квадратическая ошибка для стандартных нейронных сетей
На рисунке изображена средняя квадратическая ошибка для стандартных нейронных сетей, использующих одинаковую архитектуру и различные (нелинейные) функции активации во внутренних слоях

Почему нейронные сети ошибаются?


Как видно из рисунка, основная причина промахов заключается в нелинейности функций активации на внутренних слоях нейронной сети. Такой подход отлично работает для определения нелинейных связей между входными данными и ответами, но ужасно ошибается при выходе за пределы данных, на которых сеть училась. Таким образом, нейронные сети отлично справляются с запоминанием числовой зависимости из тренировочных данных, но не умеют её экстраполировать.

Это похоже на зубрёжку ответа или темы перед экзаменом, но без понимания сути изучаемого предмета. Легко сдать тест, если вопросы похожи на домашние задания, но если проверяется именно понимание предмета, а не способность запоминать, нас ждёт неудача.

Гарри Поттер
Этого не было в программе курса!

Степень ошибки напрямую связана с уровнем нелинейности выбранной функции активации. Из предыдущей диаграммы отчётливо видно, что нелинейные функции с жёсткими ограничениями, как, например, сигмоида (Sigmoid) или гиперболический тангенс (Tanh), справляются с задачей обобщения зависимости гораздо хуже функций с мягкими ограничениями, например, усечённого линейного преобразования (ELU, PReLU).

Решение: Нейронный Аккумулятор (NAC)


Нейронный аккумулятор (NAC) лежит в основе модели NALU. Это простая, но эффективная часть нейронной сети, справляющаяся со сложением и вычитанием — необходимыми умениями для эффективного вычисления линейных связей.

NAC — это специальный линейный слой нейронной сети, на веса которого наложено простое условие: они могут принимать всего 3 значения: 1, 0 или -1. Такие ограничения не позволяют аккумулятору изменять диапазон значений входных данных, и он остаётся постоянным на всех слоях сети, независимо от их количества и связей. Таким образом, выход является линейной комбинацией значений входного вектора, что легко может представлять собой операции сложения и вычитания.

Мысли вслух: для лучшего понимания данного утверждения давайте рассмотрим пример построения слоёв нейронной сети, выполняющих линейные арифметические операции над входными данными.

Линейная экстраполяция в нейронной сети
На рисунке поясняется, как слои нейронной сети без добавления константы и с возможными значениями весов -1, 0, или 1, могут выполнять линейную экстраполяцию

Как показано сверху на изображении слоёв, нейронная сеть может научиться экстраполировать значения таких простейших арифметических функций, как сложение и вычитание ($y = x_1 + x_2$ и $y = x_1 - x_2$) с помощью ограничений весов возможными значениями 1, 0 и -1.

Примечание: слой NAC в данном случае не содержит свободного члена (константы) и не применяет нелинейных преобразований к данным.

Так как стандартные нейронные сети не справляются с решением задачи при подобных ограничениях, авторы статьи предлагают очень полезную формулу для вычисления таких параметров через классические (неограниченные) параметры $\hat{W}$ и $\hat{M}$. Данные веса, подобно всем параметрам нейронных сетей, могут быть инициализированы случайным образом и могут быть подобраны в процессе обучения сети. Формула для вычисления вектора $W$ через $\hat{W}$ и $\hat{M}$ выглядит так:

$W = tanh(\hat{W})\odot \sigma(\hat{M})$

Подборка @pythonetc, август 2018

https://habr.com/company/mailru/blog/422789/
  • Программирование
  • Python
  • Блог компании Mail.Ru Group

Последние записи

Архив

2018
2017
2016
2015
2014

Категории

Авторы

Ленты

RSS / Atom