Проголосуйте за следующую запись или укажите, что вы хотите видеть дальше:
При обучении или программировании глубокой нейронной сети важнее всего организовать данные в виде матрицы.
А использовать 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, мы можем использовать любую нотацию, которую хотим, потому что мы выполняем вычисления и явно определяем веса и смещение.
Понравилось? Тогда 👏🏻👏🏻👏🏻 и поделись им!