Теоретически мы можем использовать полиномиальные функции для аппроксимации любой функции (ряд Тейлора), что позволяет получить кривую, подходящую для любого вопроса.
Однако в реальных условиях количество признаков обычно очень велико, а использование высоких степеней полиномов приведёт к стремительному увеличению количества признаков, что делает регрессионную модель слишком сложной. Это непрактично. В отличие от этого, нейронные сети не требуют использования высоких степеней полиномов и могут эффективно работать даже при большом количестве признаков.
А какое может быть максимальное количество признаков? Вот пример из области компьютерного зрения:
На изображении выше показана область размером 50x50 пикселей с монохромной картинкой (каждый пиксель имеет одну яркость). Если выбрать каждый пиксель в качестве признака, то общее количество признаков будет равно n=2500 (при использовании цветового пространства RGB, где каждый пиксель имеет три значения, n=7500). Если объединять пары этих признаков, то общее количество новых признаков составит C(2500, 2) ≈ 3 миллиона.
Ниже представлены некоторые применения, основанные на исследованиях (тем, кто интересуется, рекомендуется просмотреть видео):
Система BrainPort: помогает слепым людям воспринимать объекты через камеру и вкусовые рецепторы на языке.
Пояс с тактильными датчиками: когда он направлен на север, будильник начинает звучать, позволяя человеку ориентироваться по направлению (преобразование звукового сигнала в сигнал направления).
Как нейронные сети имитируют работу нейронов человека, давайте сначала взглянем на внешний вид нейрона мозга: Представьте себе работников на производственной линии в типографии (включая роботов), каждый из которых выполняет конкретную задачу, такую как переплетка, покрытие пленкой, нанесение защитных меток и т.д. Работники видят книги и завершают свои задачи, после чего возвращаются обратно на конвейер, который затем передаёт книгу следующему этапу производства. Этот процесс повторяется снова и снова до тех пор, пока вся книга не будет полностью изготовлена.Аналогично, можно сравнить ядра клетки (nucleus) с рабочими, аксон с конвейерной лентой, а дендрит — со зрением рабочего. Каждая клетка принимает информацию через дендриты, обрабатывает её, а затем отправляет обработанную информацию через аксоны в виде электрического сигнала, пока она не будет полностью понята. Конечно же, наш мозг намного сложнее, и количество нейронов в одном человеке превышает общее число всех рабочих на всех производственных линиях земли!
В искусственных нейронных сетях дендриты соответствуют входам (inputs), ядра клетки — активационному элементу (activation unit), а аксоны — выходам (outputs).
Обычно мы делим нейронные сети на три части (не путайте с трёхслойной сетью!), то есть входной слой (input layer), скрытый слой (hidden layer) и выходной слой (output layer).
Круг на этом изображении представляет собой активационный элемент нейронной сети, где входной слой соответствует входным элементам, скрытый слой — промежуточным элементам, а выходной слой — выходным элементам. Промежуточные активационные элементы используют активационную функцию (activation function) для обработки данных.
Вот некоторые существующие концепции, представленные другими названиями в нейронных сетях:
( a_i^{(j)} ): ( i )-й активационный элемент ( j )-го слоя
( \Theta^{(j)} ): матрица весов, которая отображает ( j )-й слой в ( j+1 )-й слой.
( \Theta_{v,u}^{(j)} ): вес, который отображает ( u )-й элемент ( j )-го слоя в ( v )-й элемент ( j+1 )-го слоя.>$s_j$: Количество активационных единиц $j$-го слоя (не считая смещения).
Обратите внимание:
Согласно модели, представленной выше:
$Size(\Theta^{(1)}) = s_{j+1} \times (s_j + 1) = s_2 \times (s_1 + 1) = 3 \times 4$
$Size(\Theta^{(2)}) = s_3 \times (s_2 + 1) = 1 \times 4$
Применяем активационную функцию ко всем активным нейронам первого слоя (Layer 1), чтобы получить значения активных нейронов второго слоя (Layer 2):
$$ \begin{align*} a_1^{(2)} &= g(\Theta_{10}^{(1)} x_0 + \Theta_{11}^{(1)} x_1 + \Theta_{12}^{(1)} x_2 + \Theta_{13}^{(1)} x_3) \\ a_2^{(2)} &= g(\Theta_{20}^{(1)} x_0 + \Theta_{21}^{(1)} x_1 + \Theta_{22}^{(1)} x_2 + \Theta_{23}^{(1)} x_3) \\ a_3^{(2)} &= g(\Theta_{30}^{(1)} x_0 + \Theta_{31}^{(1)} x_1 + \Theta_{32}^{(1)} x_2 + \Theta_{33}^{(1)} x_3) \end{align*} $$
Применяем активационную функцию ко всем активным нейронам второго слоя, чтобы получить выход:
$h_\Theta(x) = a_1^{(3)} = g(\Theta_{10}^{(2)} a_0^{(2)} + \Theta_{11}^{(2)} a_1^{(2)} + \Theta_{12}^{(2)} a_2^{(2)} + \Theta_{13}^{(2)} a_3^{(2)})$Вышеописанный процесс называется предварительным распространением (forward propagation), то есть вычисления начинаются с входного слоя и последовательно передаются через каждый следующий слой.Помните логистическую регрессию?
${h_\theta}(x) = g({\theta_0} + {\theta_1}{x_1} + {\theta_2}{x_2} + {\theta_3}{x_3})$
Не кажется ли вам, что это абсолютно то же самое, за исключением того, что используются другие символы? На самом деле, нейронная сеть является видом регрессионной модели, где вместо простых признаков используются промежуточные нейроны $a_1^{(j)}, a_2^{(j)}, \dots, a_n^{(j)}$. Начиная с входных данных $x$, каждый нейрон следующего слоя содержит информацию обо всех нейронах предыдущего слоя (их значения), и через оптимизацию алгоритма эти нейроны могут получать больше информации о входных данных $x$, что эквивалентно добавлению полиномиальных членов в гипотезу. Эти нейроны скрытого слоя являются улучшенными версиями начальных признаков, позволяющими делать более точные прогнозы.
Векторизация реализации Определим (a^{(1)} = x = \left[ \begin{array}{c} x_0 \ x_1 \ x_2 \ x_3 \end{array} \right]), (\Theta^{(1)} = \left[ \begin{array}{cccc} \Theta^{(1)}{10} & \Theta^{(1)}{11} & \Theta^{(1)}{12} & \Theta^{(1)}{13} \ \Theta^{(1)}{20} & \Theta^{(1)}{21} & \Theta^{(1)}{22} & \Theta^{(1)}{23} \ \Theta^{(1)}{30} & \Theta^{(1)}{31} & \Theta^{(1)}{32} & \Theta^{(1)}{33} \end{array} \right]),
[ \begin{aligned} a_1^{(2)} &= g(z_1^{(2)}) \ a_2^{(2)} &= g(z_2^{(2)}) \ a_3^{(2)} &= g(z_3^{(2)}) \end{aligned} ], (z^{(2)} = \left[ \begin{array}{c} z_1^{(2)} \ z_2^{(2)} \ z_3^{(2)} \end{array} \right]).
Тогда (a^{(2)} = g(\Theta^{(1)}a^{(1)}) = g(z^{(2)})).
Предсказание будет (h_\Theta(x) = a^{(3)} = g(\Theta^{(2)}a^{(2)}) = g(z^{(3)})).
Имеется (z_i^{(j)} = \Theta^{(j-1)}{i,0}a^{(j-1)}{0} + \Theta^{(j-1)}{i,1}a^{(j-1)}{1} + \ldots + \Theta^{(j-1)}{i,n}a^{(j-1)}{n}).(z^{(j)} = \Theta^{(j-1)}a^{(j-1)}), (a^{(j)} = g(z^{(j)})), с помощью этих формул можно вычислить значения каждого слоя нейронной сети.
Расширение до всех примеров:
[z^{(2)} = \Theta^{(1)}X^T], в этом случае (z^{(2)}) является матрицей размером (s_2 \times m).
(m): количество образцов в тренировочном наборе данных
(s_2): число активационных единиц во втором слое нейронной сети
Конечно, нейронные сети могут иметь несколько слоёв, а также число активационных единиц может меняться от слоя к слою:
Мы привыкли называть входной слой нулевым слоем нейронной сети; таким образом, данная нейронная сеть считается трехслойной.
Для лучшего понимания нейронных сетей рассмотрим пример однослойной нейронной сети для логических операций.
В данном примере (x_1, x_2) являются двоичными числами.
Логическое "И" (AND) операция (оба значения должны быть истинными):
Нейронная сеть для логического "И":
(\Theta^{(1)} = \begin{bmatrix}-30 & 20 & 20\end{bmatrix}), (h_\Theta(x) = g(-30 + 20x_1 + 20x_2)).
Обратившись к графику сигмоидальной функции, мы можем получить таблицу справа, то есть (h_\theta(x) \approx x_1 \ AND \ x_2). Таким образом, мы получаем нейронную сеть, способную выполнять операцию "И".
## 8.6 Примеры и интуитивное понимание 2 (Примеры и интуиция 2)
Далее мы построим более сложную нейронную сеть поэтапно.
Как показано на приведённой выше картинке, мы построили три отдельных однослойных нейронных сетей, объединив их, получаем новую нейронную сеть, способную выполнять логическую операцию XOR:
Это объединение представляет собой $\text{XNOR}=( \text{x}_1, \text{AND}, \text{x}_2 ), \text{OR} \left( \left( \text{NOT}, \text{x}_1 \right) \text{AND} \left( \text{NOT}, \text{x}_2 \right) \right)$
$\Theta^{(1)} =\begin{bmatrix}-30 & 20 & 20 \\ 10 & -20 & -20\end{bmatrix}$, $\Theta^{(2)} =\begin{bmatrix}-10 & 20 & 20\end{bmatrix}$,
$$ \begin{align*} &a^{(2)} = g(\Theta^{(1)} \cdot x) \\ &a^{(3)} = g(\Theta^{(2)} \cdot a^{(2)}) \\ &h_\Theta(x) = a^{(3)} \end{align*} $$
Таким образом, можно видеть, что характеристики могут быть последовательно усилены и извлечены больше информации до получения конечного результата. Благодаря постоянному объединению этих простых нейронных сетей, мы можем постепенно создавать всё более сложные и мощные нейронные сети, такие как те, которые используются для распознавания рукописных символов.
Ранее рассматривались нейронные сети для прогнозирования одиночных значений. Для реализации многоклассовой классификации достаточно изменить выходной слой, чтобы он содержал несколько выходных единиц.
Приведём пример задачи с четырьмя классами:
Если есть четыре возможных класса, то в выходном слое должно быть четыре выходных единицы. Таким образом, $h_\Theta$ будет четырёхмерным вектором.Алгоритм многоклассовой классификации в нейронной сети можно рассматривать как расширение идеи one-vs-all. Предположим, что существует четыре возможных класса:
Если прогноз ( h_\Theta(x) = \begin{bmatrix} 0 \ 0 \ 1 \ 0 \end{bmatrix} ), это означает, что ( h_\Theta(x)_3 ), то есть объект относится к третьему классу, соответствующему мотоциклу (motorcycle).
Подведём итог
Для решения задачи многоклассовой классификации, которая требует разделения на ( K ) классов, следует использовать ( K ) выходных единиц в выходном слое. Для каждого отдельного образца прогнозирующий вектор ( h_\Theta(x) ) будет иметь размерность ( K ). На основе этого прогнозирующего вектора можно определить, к какому классу ( y^{(i)} ) относится данный образец. Обратите внимание, что прогноз и результат в нейронной сети являются ( K )-мерными векторами, а не просто скалярными значениями.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )