vse-knigi.com » Книги » Разная литература » Зарубежная образовательная литература » Как учится машина. Революция в области нейронных сетей и глубокого обучения - Ян Лекун

Как учится машина. Революция в области нейронных сетей и глубокого обучения - Ян Лекун

Читать книгу Как учится машина. Революция в области нейронных сетей и глубокого обучения - Ян Лекун, Жанр: Зарубежная образовательная литература / Науки: разное. Читайте книги онлайн, полностью, бесплатно, без регистрации на ТОП-сайте Vse-Knigi.com
Как учится машина. Революция в области нейронных сетей и глубокого обучения - Ян Лекун

Выставляйте рейтинг книги

Название: Как учится машина. Революция в области нейронных сетей и глубокого обучения
Автор: Ян Лекун
Дата добавления: 14 апрель 2025
Количество просмотров: 46
Возрастные ограничения: Обратите внимание! Книга может включать контент, предназначенный только для лиц старше 18 лет.
Читать книгу
1 ... 41 42 43 44 45 ... 82 ВПЕРЕД
Перейти на страницу:

Сверточные сети

Пора уже их представить! Сверточные сети – это особый тип нейронных сетей. Они сочетают в себе: 1) особую архитектуру соединения, а именно иерархию простых и сложных нейронов, смоделированных по образцу клеток зрительной коры, как было представлено Хьюбелом и Визелем; 2) сквозное обучение системы посредством обратного распространения градиента, которое мы описали в предыдущей главе.

Как и в случае с другими сетями, процедура обучения минимизирует целевую функцию. Меняется архитектура сети, то есть ее внутренняя структура. Свертка[61] – компонент этой архитектуры. Это математическая операция, широко используемая для обработки сигналов, но имеющая сходство с вычислениями, выполняемыми простыми клетками зрительной коры.

Рис. 6.4 Свертка

Взвешенная сумма пикселей окна в изображении (25 пикселей, 5 × 5) рассчитывается с использованием набора из 25 весов (показаны в центре), называемого ядром свертки. Операция повторяется во всех возможных окнах входа, а результаты записываются в выходное изображение в соответствующих местах.

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

Возьмем начальное изображение, которое составляет таблицу входа, и рассмотрим небольшое окно размером 5 × 5 пикселей, которое мы называем «воспринимающим полем». Нейрон № 1 вычисляет взвешенную сумму. Результатом является число, которое содержится в таблице выхода.

Теперь перемещаем это окно 5 × 5 на один пиксель вправо, и теперь второй нейрон № 1 повторно взвешивает пиксели этого нового окна, используя те же веса, что и у предыдущего нейрона. Записываем этот новый результат в таблицу выхода рядом с предыдущим. Повторим эти действия для всех окон размером 5 × 5 пикселей по всему входному изображению, так что соседние окна частично перекрывают друг друга. В результате получается выходное изображение.

Нейроны под № 1 обнаруживают определенный паттерн во всех местах изображения, потому что у них одинаковый вес. Почему у них должен быть одинаковый вес? Потому что отличительный паттерн категории может появиться в любом месте изображения. Это гарантирует, что паттерн будет обнаружен везде, где он появляется на изображении. Именно весовой паттерн позволяет нейрону обнаруживать его, поскольку, например, кошачий глаз или ухо появляются в разных местах изображения в зависимости от положения кошки и поворота ее головы на изображении.

Рис. 6.5. Слой свертки и пулинга ConvNet

Сверточный слой принимает одну или несколько карт признаков в качестве входов (здесь их 2) и создает несколько карт признаков в качестве выходов (здесь 8). Каждая карта признаков представляет собой сумму сверток, примененных к входным картам признаков с разным весом, что позволяет обнаруживать соединения паттернов на входе. Каждая карта признаков использует разные наборы весов.

Чтобы обнаружить другой паттерн, еще один набор нейронов (под № 2), выполняет ту же операцию с весом, отличным от нейронов номер 1.

Взвешенные суммы ряда нейронов уникальны тем, что они вычисляются с одинаковыми весами. Все нейроны № 1 имеют одинаковый вес. Все нейроны под № 2 имеют одинаковые веса, отличающиеся от весов нейронов № 1 и т. д.

Если изображение имеет размер 1000 × 1000 пикселей, это дает 1 млн пикселей входа, 1 млн окон 5 × 5 пикселей и 1 млн нейронов № 1, каждый из которых обнаруживает один и тот же паттерн в разных местах. Аналогично для нейронов № 2, 3 и т. д.

Таблицы входа и выхода имеют практически одинаковой размер. Объяснение. Если веса таковы, что они обнаруживают вертикальные линии (см. рис. 6.1), то 1 млн нейронов будет обнаруживать вертикальные линии в миллионе окон 5 × 5 на изображении, что, в свою очередь, дает вид изображения, который называется картой признаков.

Карта признаков указывает на наличие или отсутствие вертикальной линии в миллионе мест. Результаты вычислений, произведенных миллионами нейронов, образуют таблицу выхода и входа для следующего слоя. Чтобы иметь возможность обнаруживать несколько определенных типов паттернов, понадобится несколько карт признаков, каждая с разной комбинацией весов.

Шестьдесят карт признаков соответствуют 60 простым клеткам Хьюбела и Визеля. Каждое окно «видят» 60 нейронов, проецирующих свои выходы на 60 картах признаков. На каждое окно приходится 60 нейронов. Если имеется 1 млн окон и 60 нейронов на каждое окно, то в сумме получается 60 млн нейронов.

В нашем примере свертка определяется списком из 25 весов (5 × 5). Такой список называется ядром свертки.

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

# Свертка таблицы x с ядром w.

# Результат в таблице y.

# Данные три таблицы двумерные.

def conv (x, w, y):

for i in range(len(y)): # цикл строк

for j in range(len(y[0])): # цикл столбцов

s = 0

for k in range(len(w)):

for l in range(len(w[0])):

s = s + w[k, l]*x[i+k, j+l]

y[i, j] = y[i, j] + s

return y

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

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

def convlayer(X, W, Y):

for u in range(len(Y)): # цикл карт признаков Y

for v in range(len(X)):

conv(X[v], W[u, v], Y[u])

Мы предоставляем эту программу из дидактических соображений. На практике эти функции предопределены в программном обеспечении глубокого обучения, таком как PyTorch и TensorFlow[62].

В сверточной сети за слоем сверток следует слой передаточных функций. В современных версиях такая передаточная функция – «ReLU[63]» (англ. Rectified Linear Unit). Карта признаков, созданная путем свертки, имеет положительные и отрицательные значения, потому что веса могут быть и отрицательными. Когда результирующий сигнал проходит через слой ReLU, ReLU меняет отрицательные значения на ноль, а положительные значения оставляет без изменений. Таблицы выхода слоя ReLU также называются картами признаков. Эта нелинейная операция и позволяет системе обнаруживать паттерны на изображении.

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

1 ... 41 42 43 44 45 ... 82 ВПЕРЕД
Перейти на страницу:
Комментарии (0)