Я очень взволнован, потому что наконец понял введение новичка в TensorFlow. Когда TF впервые вышел несколько месяцев назад, я был взволнован, но потерялся в определениях. За последние несколько недель мои чтения, наконец, привели меня к тому, что я могу понять, что происходит. Ура!

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

По сути, нейронную сеть можно рассматривать как функцию или преобразование данных. Если вы подаете какие-то данные на вход (скажем, несколько пикселей изображения), NN делает что-то, а затем выводит какие-то данные. На приведенной ниже диаграмме вход определяется символами a, b, c и d, а выход — u, x, y, z. В принципе может быть много входов и много выходов, и номера каждого из них не обязательно должны быть одинаковыми. Что интересно в нейронной сети, так это то, что ее структура определяется тем, что иногда называют «гиперпараметрами». В приведенном ниже случае у нас уже есть два гиперпараметра: количество входов — 4, количество выходов — 4. Есть также гиперпараметры, которые описывают «скрытые слои». Для целей этого описания я собираюсь просто назвать эти гиперпараметры H и не вдаваться в подробности того, как выглядит H. Это означает, что эта диаграмма полностью описывается {4, 4, H}.

Теперь, без «работы», которую должна выполнять эта нейронная сеть, это довольно бессмысленно. Когда мы думаем о задачах, которые он может выполнять, мы можем думать о классификации (например, «описывает ли ввод собаку?», «является ли ввод песней?», «является ли ввод «хорошей песней?»»). Действительно любой предикат может определить классификацию, но классификация не обязательно должна быть вопросом «да» или «нет». Например. мы могли бы сказать, что если u близко к 1, а x, y и z близки к 0, то это означает, что на картинке изображено млекопитающее, x = 1 и y, u, z близки к 0, что означает, что изображение есть ящерица, y = 1… означает, что на картинке есть рыба и т. д. Мы можем определить, что «означает» наш вывод. Мы также можем описать, что «означает» наш ввод. Это довольно круто, если подумать, потому что это означает, что система на самом деле является семантическим преобразованием. В той мере, в какой мы знаем, что «означает» ввод и что «означает» вывод, мы можем сказать, выполняет ли НС «хорошую» или «плохую» работу.

TensorFlow позволяет вам описать это так точно, как вы хотите, с помощью «функции стоимости». Функция стоимости в основном сообщает системе, насколько хорошо/плохо она выполняет свою работу.

На данный момент TF позволил нам описать гиперпараметры нашей NN (по сути, базовое описание системы), а также функцию стоимости, которая описывает, насколько хорошо NN выполняет конкретную работу, в которой мы заинтересованы. . Следующий шаг — это место, где происходит волшебство! Если мы точно определили эти две части информации, у TF есть множество алгоритмов, которые позволяют нам развить наши гиперпараметры, чтобы заставить NN работать лучше. Один из методов для этого называется градиентный спуск — по сути, TF может смотреть на наш текущий набор гиперпараметров и значение функции стоимости для определенного фрагмента или набора данных и вносить небольшие корректировки в гиперпараметры, чтобы сделать NN работать немного лучше на этом наборе данных. Таким образом, НС постепенно учится лучше выполнять свою работу.

Причина, по которой я определил все это очень абстрактно (например, я не упомянул, как выглядит «H» в описании гиперпараметров выше), заключается в том, что магия тензорного потока заключается в его гибкости в описании H! Я думаю, что многие типы машинного обучения погрязли в узкой концепции нейронных сетей как связанных с мозгом и т. д. Я думаю, что это полезное руководство, потому что, несомненно, есть сходство между тем, как информация проходит через нейронную сеть. и как он «должен» проходить через мозг [1]. Тем не менее, я думаю, что метафора «нейрона» на самом деле довольно слабая и что ассоциация узлов нейронных сетей с «нейронами» сдерживает нас и делает все это более загадочным, чем оно есть на самом деле.

ИМО, лучший способ думать о загадочной букве «H» в наборе гиперпараметров — это описание потока и представления информации. Вопросы, которые могут быть важны:

Сколько «слоев» в H? — это в некоторой степени соответствует между «слоями абстракции», необходимыми для выполнения семантического преобразования, которое пытается выполнить НС. Например, предположим, что входными данными для NN являются пиксели, а выходными данными являются «содержит ли это лицо?» Мы можем представить, что между этими представлениями может быть 3–4 уровня абстракции. Например. пиксели -> примитивные формы -> сложные формы -> черты лица -> конфигурации черт лица -> лица [2]. Это означает, что H может концептуально «требовать» 4 слоя. То есть система с менее чем 4 уровнями никогда не будет работать так же хорошо, как система с 4 уровнями, и что дополнительные уровни не добавят слишком много пользы.

Насколько «велик» каждый «слой» H? — это соответствует широте каждого слоя абстракции, необходимого для выполнения семантического преобразования. В случае «простых фигур» в онтологии может быть только 3–4 объекта, тогда как в случае «сложных фигур» их может быть целых 20 или 30. Я очень интересуется ответами на вопросы, связанные с искусством соотнесения «размера онтологии» с «топологией слоя NN» с точки зрения потока информации.

Как связаны слои? — это соответствует набору «весов», связанных со связями между слоями. Обычно мы соединяем все части одного слоя со следующим, но мы можем начать с набора весов, отражающего некоторые наши представления о топологии данных. Например. в сверточной нейронной сети мы могли бы начать с того, что пиксели имеют больший вес по отношению к пикселям, представляющим объекты «рядом» с ними, поскольку мы знаем, что в пространственных представлениях важно «расстояние». Меня интересует вопрос о том, можно ли как-то параллельно закодировать такого рода предикаты в системе, а не раскладывать все по весам.

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

Сноски

[1] Когда я говорю, что информация «должна» проходить через мозг определенным образом, я описываю интуитивную интуицию: если информация поступает в мозг по разным каналам (например, если вы видите виолончель и слышите ее звук, ) и если эта информация принимает «комбинированную форму» (например, если вы говорите «Мне нравится звук ЭТОЙ виолончели»), то она должна быть объединена в какой-то точке системы. Это означает, что мы можем сделать минимальное утверждение о топологии информационных каналов в мозге, а именно, что в какой-то момент между этими двумя входными каналами должно быть соединение.

[2] «Простые фигуры» означают отрезки линий, точки, волнистые линии и т. д. «Сложные фигуры» означают треугольники, выпуклые формы, круги и т. д. (компоновки простых фигур), «черты лица» — носы, глаза и т. д. ( смысловое расположение сложных форм), «конфигурации лица» — пространственные относительные конфигурации этих черт, «лица» — «лицевые конфигурации лица».