Проголосуйте за следующую запись или укажите, что вы хотите видеть дальше:



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

А использовать Keras так же просто, как организовать данные в виде матрицы и скормить их. Нет необходимости определять веса и смещения.

Но это с нуля! Мы просто идем на один шаг глубже

Это руководство для тех, кто хочет использовать numpy или низкоуровневый TensorFlow для кодирования глубоких моделей. Как и я 🤙🏻

Этот пост описывает:

  • Сколько способов мы можем организовать наши входные данные.
  • Различные способы умножения входных данных и весов.
  • Как определить веса и смещения на основе расположения входных данных.
  • Как правильно подобрать размеры.
  • Обобщение вышеуказанной проблемы размеров для расчета размеров веса и смещения на основе слоя.

Размеры матрицы:

Есть 2 типа, которые мы можем расположить в матрице:

1). Расположите объекты в виде столбцов

2). Упорядочить объекты в ряды

Функции в виде столбцов:

В этом типе объекты расположены в виде столбцов, а образцы - в виде строк.

Например, матрица с n-характеристиками и 1-образцом выглядит так:

Это поддерживается Керасом и другими онлайн-руководствами.

Функции в виде строк:

В этом типе объекты расположены в виде строк, а образцы - в виде столбцов.

Например, матрица с n-характеристиками и 1-образцом выглядит так:

Это поддерживается курсами Эндрю Нг.

Операции с матрицей:

Порядок операций зависит от того, как мы располагаем данные.

  • Если данные сгруппированы как объекты в виде столбцов: X*W + B
  • Если данные расположены в виде элементов в виде строк: W*X + B

Где, W = матрица весов, X = входная матрица, B = матрица смещения

Почему формула меняется при изменении порядка входных данных?

Нам нужно умножить ввод на соответствующий вес и просуммировать их.

Упрощенная версия

И обычно умножение матриц выполняется следующим образом:

Примечание. Для простоты просто не обращайте внимания на светло-желтые точки на приведенной выше диаграмме.

Представьте, желтый = входные данные, темно-желтый = образец-1 и красный = веса. (Здесь мы рассмотрим особенности расположены в виде столбцов)

Изображение выше представляет наше уравнение:

Итак, если мы расположили данные в виде функций в виде столбца, мы должны использовать X*W+B

То же самое относится и к элементам, расположенным в виде строк (просто поменяйте местами обозначения выше, например желтый = веса, темно-желтый = веса, соответствующие Образцу-1 и красный = Образец-1).

Итак, теперь мы знаем, как расположение ввода влияет на формулу, которую нам нужно использовать.

Размеры матриц:

В отличие от Keras, в TensorFlow и Numpy нам нужно определить каждый Weight и Bias.

Самая неприятная часть для любого новичка - это правильная размерность матриц веса и смещения.

Теперь на основе размеров входных и выходных мы выводим размеры для матрицы смещения и веса.

Элементы, расположенные в ряды:

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

Итак, здесь мы уже знаем размеры матрицы входного слоя и выходного слоя.

i.e.,

  • Уровень 0 имеет 4 входа и 6 выходов.
  • Уровень 1 имеет 6 входов и 6 выходов.
  • Уровень 2 имеет 6 входов и 2 выхода.
  • Уровень 3 имеет 2 входа и 2 выхода.

Теперь нам просто нужно определить размеры весов и смещения.

Мы рассматриваем функции, расположенные в виде столбцов ns для измерений ввода и вывода.

Одновременно компьютер может использовать только 1 образец на поток / ядро.

Итак, если у нас 1024 ядра (GPU), то он использует 1 образец x 1024

Это наше основное уравнение: мы не знаем размеров W и B.

Мы знаем, что столбцы 1-й матрицы должны быть равны строкам 2-й матрицы для выполнения умножения матриц.

Итак, мы обновляем строки W столбцами X.

Затем мы обновляем Bias. Мы знаем, что добавление матрицы не меняет размер результирующей матрицы. Итак, размерность B должна быть равна полученной матрице Y.

Теперь нам осталось найти столбцы W.

Мы знаем, что умножение двух матриц изменяет размеры выходной матрицы.

Итак, когда мы умножаем X и W, результирующие размеры должны быть равны B для выполнения сложения матрицы.

У нас есть размеры для уровня 1.

Для Layer - 2 и Layer - 3:

Наконец, мы получили выходной файл Y с размером 1x2.

Обобщая приведенный выше метод:

Мы можем обобщить приведенные выше уравнения для вычисления размеров на основе слоев.

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

Проще говоря, мы не рассматриваем Layer - 0. Мы рассматриваем только скрытые слои и выходной слой.

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

Функции, расположенные в виде столбцов:

Основное уравнение:

Для гирь:

В случае предвзятости:

Где n = 1, 2, 3,…., Номер выходного слоя

Элементы, расположенные в ряды:

Основное уравнение:

Для гирь:

В случае предвзятости:

Где n = 1, 2, 3,…., Номер выходного слоя.

Мы можем видеть, что размеры W и B «Элементы, расположенные в виде строк» ​​- это просто транспонирование W и B «Элементы, расположенные в виде столбцов».

Итак, какой из них использовать? Элементы, расположенные в виде столбцов или строк?

Использование функций, расположенных в виде столбцов, имеет смысл.

Потому что по умолчанию W - это вектор весов, а в математике вектор считается столбцом, а не строкой.

Чтобы правильно умножить оба значения и использовать правильный вес в правильном элементе, вы должны использовать X * W + B:

С X * W вы умножаете каждую функцию на соответствующий вес, а добавляя B, вы добавляете член смещения для каждого прогноза.

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

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

Понравилось? Тогда 👏🏻👏🏻👏🏻 и поделись им!