Учебное пособие по искусственному интеллекту Notes-09: Неглубокие нейронные сети

искусственный интеллект

Часть содержания статьи взята изcaptainbed.vip/1-3-3/

неглубокая нейронная сеть

Вычислительный процесс мелкой нейронной сети почти такой же, как у одиночной нейронной сети, но он сложнее.

Векторизация мелких нейронных сетей

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

В качестве примера возьмем неглубокую нейронную сеть на следующем рисунке:

image-20210720164339140

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

image-20210720173536156

Мы знаем, что каждое значение весаwi[j]Tw_i^{[j]T}вектор-строка, которому соответствуетx1~x3х_1~х_3Три значения , на данный момент у нас есть четыре таких вектора-строки, которые образуют4*34*3матрица.в виде вектораСледующее:

image-20210720173908759

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

Мы опускаем нижний индекс и следуемматричная формаЭто также может быть сокращено как:

image-20210720174330891

Второй слой такой же:

image-20210720174506046

Однако, учитывая, что нам часто нужно обучать нейронные сетиНесколько обучающих выборок, записанный следующим образом (числа в скобках в верхнем индексе обозначают i-ю обучающую выборку):

image-20210720174720736

довекторизацияУпоминается, что мы обычно не рекомендуем использовать циклы for, и мы должны максимально использовать векторизацию вместо циклов for. мыОбъедините собственные векторы x каждой выборки в матрицу,Следующее:

image-20210720174856765

Таким образом, приведенный выше цикл for можно записать следующим образом.Форма матричного умножения(Если вы не понимаете, пожалуйста, просмотрите егоумножение матриц):

image-20210720175236476

где Z и A — матрицы,Каждый вектор-столбец в матрице соответствует обучающей выборке(Напримерz[1](2)z^{[1](2)}— z первого слоя второго образца):

image-20210720175341321

Функции потерь для мелких нейронных сетей

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

image-20210720175814195

⭐ Обратное распространение неглубоких нейронных сетей

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

Идея вычисления частных производных в мелких нейронных сетях такая же, как и в одиночных нейронных сетях, Сначала мы вычисляем частные производные последнего слоя, а затем продвигаемся вперед в обратном направлении, вычисляем частные производные предыдущего слоя и затем найти частные производные предыдущего слоя и так далее.

image-20210724155059431

Найдите частные производные второго слоя

Формула частной производной второго слоя выглядит следующим образом, она такая же, как и в сети с одним нейроном (один образец), и может бытьa[1]a^{[1]}рассматривается какxx:

image-20210724154732139

⭐️ Найдите частную производную первого слоя

Частные производные первого слоя отличаются от производных второго слоя, потому что второй слой непосредственно примыкает к функции потерь, а первый слой непосредственно примыкает к функции потерь.нет прямого контакта. ?Вы можете видеть, что функция потерь выше использует последний слойa[2]a^{[2]}Для поиска средний слой используется только для перехода.

мы проходим черезправило вывода цепиЧтобы найти частные производные первого слоя:

{Lz[1]=La[1]a[1]z[1]La[1]=Lz[2]z[2]a[1]\begin{cases}\frac{\partial L}{\partial z^{[1]}} =\frac{\partial L}{\partial a^{[1]}} \frac{\partial a^{[1]}}{\partial z^{[1]}} &\\ \frac{\partial L}{\partial a^{[1]}} =\frac{\partial L}{\partial z^{[2]}} \frac{\partial z^{[2]}}{\partial a^{[1]}} &\end{cases}

иz[2]a[1]\frac{\partial z^{[2]}}{\partial a^{[1]}}Мы уже получили его ранее, и окончательный результат вывода таков:

La[1]=W[2]TLz[2]\frac{\partial L}{\partial a^{[1]}} =W^{[2]T}\frac{\partial L}{\partial z^{[2]}}

Lz[1]=W[2]T*Lz[2]g[1]z[1]\frac{\partial L}{\partial z^{[1]}} =W^{[2]T}*\frac{\partial L}{\partial z^{[2]}} \frac{\partial g^{[1]}}{\partial z^{[1]}}(g[1]g^{[1]}Представляет собой сигмовидную функцию активации, на самом деле можно использовать и другие функции активации)

предполагаемыйdz[1]dz^{[1]}Задний,dw[1]dw^{[1]}а такжеdb[1]db^{[1]}ты можешь пройтиdz[1]dz^{[1]}Формула такая же, как и для одиночной нейронной сети:

dw[1]=dz[1]XTdw^{[1]}=dz^{[1]}X^T

db[1]=dz[1]db^{[1]}=dz^{[1]}

Когда несколько обучающих выборок

При наличии нескольких обучающих выборок нам необходимо преобразовать вектор в матрицу (строчные буквы в прописные) посредством векторизации, чтобы повысить эффективность работы. А также разделите на общее количество выборок m, чтобы получить среднее значение.

image-20210725160247035

последнийnp.sum()Параметры отличаются, потому что в первом слое больше нет одного нейрона.dz[1]dz^{[1]}Размерность(n[1],m)(n^{[1]},m)(n[1]n^{[1]}— количество нейронов в первом слое, m — количество обучающих выборок), нам необходимо накопить результирующие параметры обучающих выборок, соответствующих каждому нейрону:

image-20210725164753680

asix=1Эффект, чтобы позволитьsumПросто соберите все элементы в каждой строке. иkeepdimsсостоит в том, чтобы предотвратитьsumВыходной результат становится(n[1],)(n^{[1]},)В таком виде нужная нам форма(n[1],1)(n^{[1]},1).