23.08.2017

Перевод «Создай свою нейросеть» — 1

Всем привет!

Буквально вчера нашел книгу Тарика Рашида «Создай свою нейросеть». Книга является бестселлером (топ 1 продаж) в разделе «Искусственный интеллект». Книга свежая, вышла в прошлом году.

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

Перевел уже два первых раздела 1 главы. Вы можете скачать PDF версию этих разделов.

Читайте — наслаждайтесь!

Оглавление

1 Глава. Как они работают.

1.1 Легко для меня, тяжело для тебя

Все компьютеры являются калькуляторами в душе. Они умеют очень быстро считать.

Не стоит их в этом упрекать. Они отлично выполняют свою работу: считают цену с учетом скидки, начисляют долговые проценты, рисуют графики по имеющимся данным и так далее.

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

Однако, способность компьютера складывать тысячи и миллионы чисел в секунду вовсе не является искусственным интеллектом. Человеку сложно так быстро складывать числа, но согласитесь, что эта работа не требует серьезных интеллектуальных затрат. Надо придерживаться заранее известного алгоритма по складыванию чисел и ничего более. Именно этим и занимаются все компьютеры — придерживаются четкого алгоритма.

С компьютерами все ясно. Теперь давайте поговорим о том, в чем мы хороши по сравнению с ними.

Посмотрите на картинки ниже и определите, что на них изображено:

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

Мы мгновенно и без особого труда воспринимаем огромное количество информации, которое содержат изображения и очень точно определяем объекты на них. А вот для любого компьютера такая задача встанет поперек горла.

Проблема Компьютер Человек
Быстро оперировать множеством больших чисел Легко Сложно
Найти лица на фотографии с толпой людей Сложно Легко

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

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

Конечно компьютеры и дальше будут состоять из микросхем. Задача искусственного интеллекта — найти новые алгоритмы работы компьютера, которые позволят решать интеллектуальные задачи. Эти алгоритмы не всегда идеальны, но они решают поставленные задачи и создают впечатление, что компьютер ведет себя как человек.

Ключевые моменты

  • Есть задачи легкие для обычных компьютеров, но вызывающие трудности и людей. Например, умножение миллиона чисел друг на друга.
  • С другой стороны, существуют не менее важные задачи, которые невероятно сложны для компьютера и не вызывают проблем у людей. Например, распознавание лиц на фотографиях.

1.2 Простая предсказательная машина

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

Представьте себе машину, которая получает вопрос, «обдумывает» его и затем выдает ответ. В примере выше вы получали картинку на вход, анализировали ее с помощью мозгов и делали вывод об объекте, который на ней изображен. Выглядит это как-то так:

Компьютеры на самом деле ничего не «обдумывают». Они просто применяют заранее известные арифметические операции. Поэтому давайте будем называть вещи своими именами:

Компьютер принимает какие-то данные на вход, производит необходимые вычисления и выдает готовый результат. Рассмотрим следующий пример. Если на вход компьютеру поступает выражение ​\( 3 \times 4 \)​, то оно преобразуется в более простую последовательность сложений. Как итог, получаем результат — 12.

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

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

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

Линейная зависимость между километрами и милями дает нам подсказку, в какой форме надо преобразовывать одну величину в другую. Мы можем представить эту зависимость так:

\[ \text{мили} = \text{километры} \times C \]

В выражении выше ​\( C \)​ выступает в роли некоторого постоянного числа — константы. Пока мы не знаем, чему равно ​\( C \)​.

Единственное, что нам известно — несколько заранее верно отмеренных расстояний в километрах и милях.

Номер замера Километры Мили
1 0 0
2 100 62.137

И как же узнать значение ​\( C \)​? А давайте просто придумаем случайное число и скажем, что ему-то и равна наша константа. Пусть ​\( C = 0.5 \)​. Что же произойдет?

Принимая, что ​\( C = 0.5 \)​ мы из 100 километров получаем 50 миль. Это отличный результат принимая во внимания тот факт, что ​\( C = 0.5 \)​ мы выбрали совершенно случайно! Но мы знаем, что наш ответ не совсем верен, потому что согласно таблице верных замеров мы должны были получить 62.137 мили.

Мы промахнулись на 12.137 миль. Это наша погрешность — разница между полученным ответом и заранее известным правильным результатом, который в данном случае мы имеем в таблице.

\[ \begin{gather*} \text{погрешность} = \text{правильное значение} — \text{полученный ответ} \\ = 62.137 — 50 \\ = 12.137 \end{gather*} \]

Что же дальше? Теперь мы знаем, что допустили ошибку. Более того, нам известна величина этой ошибки. Не стоит впадать в отчаяние! Вместо этого лучше пересмотреть значение константы ​\( C \)​.

Вновь смотрим на погрешность. Полученное расстояние короче на 12.137. Так как формула по переводу километров в мили линейная (​\( \text{мили} = \text{километры} \times C \)​), то увеличение значения ​\( C \)​ увеличит и выходной результат в милях.

Давайте теперь примем, что ​\( C = 0.6 \)​ и посмотрим, что произойдет.

Так как ​\( C=0.6 \)​, то для 100 километров имеем ​\( 100 \times 0.6 = 60 \)​ миль. Это гораздо лучше предыдущей попытки (в тот раз было 50 миль)! Теперь наша погрешность очень мала — всего 2.137 мили. Вполне себе точный результат.

Теперь обратите внимание на то, как мы использовали полученную погрешность для корректировки значения константы ​\( C \)​. Нам нужно было увеличить выходное число миль и мы немного увеличили значение ​\( C \)​. Заметьте, что мы не используем алгебру для получения точного значения ​\( C \)​, а ведь мы могли бы. Почему? Потому что на свете полно задач, которые не имеют простой математической связи между полученным входом и выдаваемым результатом.

Именно для задач, которые практически не решаются простым подсчетом нам и нужны такие изощренные штуки, как нейронные сети.

Поехали дальше. Сейчас мы на выходе имеем 60 миль. Но это все равно меньше, чем правильный результат из таблицы. Пусть ​\( C = 0.7 \)​.

Боже мой! Мы хватанули слишком много и превысили правильный результат. Наша предыдущая погрешность равнялась 2.137, а теперь она равна -7.863. Минус означает, что наш результат оказался больше правильного ответа, так как погрешность вычисляется как правильный ответ — (минус) полученный ответ.

Получается, что при ​\( C=0.6 \)​ мы имеем гораздо более точный выход. На этом можно было бы и закончить. Но давайте все же увеличим ​\( C \)​, но не сильно! Пусть ​\( C=0.61 \)​.

Так-то лучше! Наша машина выдает 61 милю, что всего на 1.137 милю меньше, чем правильный ответ (62.137).

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

Величина нашей корректировки ​\( C \)​ зависит от погрешности. Чем больше наша погрешность, тем более сильно мы меняем значение ​\( C \)​. Но когда погрешность становиться маленькой, необходимо менять ​\( C \)​ по чуть-чуть. Логично, не так ли?

Верьте или нет, но только что вы поняли самую суть работы нейронных сетей. Мы тренируем «машины» постепенно выдавать все более и более точный результат.

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


Не правда ли объяснения очень простые и понятные? Лично я не встречал более лаконичного способа объяснить, что такое нейросети.

Если вам что-то непонятно, задавайте вопросы на форуме.

Мне важно ваше мнение — оставляйте комментарии 🙂

Аватара автора Петр Радько

Петр Радько

Сфера интересов — нейросети как стык передовых исследований по математике, биологии, информатике и физике. Мне нравится делиться тем, что я узнал. Считаю, что любую концепцию можно изложить просто и наглядно. Нейронные сети на глазах меняют наш мир. И надо знать их и уметь ими пользоваться!

Комментарии

viral
viral

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

scompany
scompany

А зачем переводить, ведь есть эта книга на русском?
https://www.ozon.ru/context/detail/id/141796497/

Переводите через нейросеть =D
Хороший сайт)

Raim
Raim

Привет! А можно отсылку к оригиналу ? (название и автора на языке оригинала)

Raim
Raim

Cпасибо!

wpDiscuz
Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: