Эндрю Нг Машинное обучение: нейронная сеть | Алгоритм обратного распространения ошибки
Мы учились на прошлой неделеНейронные сети |Задачи мультиклассификации. Мы используемлогистическая регрессияиНейронные сетидля решения задач множественной классификации и узнал, что нейронные сети более эффективны, когда количество признаков очень велико. В классе на этой неделе будет обучениеНейронные сетиИспользовалфункция стоимостии использоватьобратное распространениеалгоритм вычисления градиента. Автор даст.обратное распространениеВажные идеи и выводы в алгоритме, но не все вычислительные шаги.
нажмитеВидео курсаВы сможете изучать курсы Нг без перерыва, код Python для курсовой работы выложен на Github, нажмитекод курсаВы можете перейти на Github для просмотра (если у вас нет доступа к Github, вы можете нажатьCodingПроверьте ), ошибки и улучшения в коде приветствуются.
Вот заметки с четвертой недели курса машинного обучения Нг.
функция стоимости
Предположим, что наша задача мультиклассификации имеетклассификации нейронная сеть имеет в общей сложностислоев, число нейронов в каждом слое равно, то нейронная сетьфункция стоимостиза:
J(Θ)=−1мм∑i=1K∑k=1(y(i)klog(hΘ(x(i))k+(1−y(i)k)log(1−(hΘ(x(i ) )))k))+λ2mL−1∑l=1sl∑i=1sl+1∑j=1(Θ(l)ji)2Второй из которыхРегуляризациятермин, представляет собой сумму квадратов всех значений в сети. Первый член такой же, как в логистической регрессиифункция стоимостиАналогично, но здесь нужно суммировать ошибки всех выходных нейронов.
Расчет градиента
чтобы иметь возможность использоватьградиентный спускАлгоритм обучения сети, нам нужно вычислить градиент функции стоимости. Очень интуитивный метод заключается в использовании численного расчета для определенного, добавить и вычесть небольшое количество к немудля расчета градиента:
∂J(θ)∂θj≈J(θ1,⋯,θj+ϵ,⋯,θn)−J(θ1,⋯,θj−ϵ,⋯,θn)2ϵНо небольшой анализ сложности алгоритма показывает, что этот метод очень медленный. Для каждого набора данных нам нужно рассчитать градиент всех значений,Общее количество вычислений = количество обучающих данных х количество весов сети х количество расчетов прямого распространения. Такая сложность неприемлема в обычных условиях, поэтому мы используем этот метод только для проверкиобратное распространениеВерен ли градиент, рассчитанный алгоритмом.
Правило цепи
Чтобы понять последующееобратное распространениеДля вывода формулы мы должны сначала понять вывод многомерной составной функции.Правило цепи. для многомерных функций,в,,Так:
∂z∂x=∂z∂u∂u∂x+∂z∂v∂v∂x∂z∂y=∂z∂u∂u∂y+∂z∂v∂v∂yПравило цепиСкажите нам, что существует несколько уровней многомерных составных функций, и производные следующего уровня могут быть получены из предыдущего уровня.
На картинке выше автор намеренно добавил лишний слой, здесьдаФункция,даФункция,даФункция. для расчетногои, приведенное выше уравнение остается в силе, потому что мы можем положитьвидеть какФункция. Это эквивалентно тому, что мы поместили:
Упростите результат, рассчитанный предыдущим слоем, чтобы он был связан только с предыдущим слоем.иВместо того, чтобы начинать с нуля:
∂z∂x=∂z∂u∂u∂x+∂z∂v∂v∂xВ общем, для функций, если его можно рассматривать какфункция, изафункция, то:
∂y∂t=n∑i=1∂y∂zi∂zi∂tНейронная сеть представляет собой многоуровневую функцию со многими уровнями, мы можем неопределенноПравило цепиЯ чувствую значение обратного распространения.
Вывод формулы
чтобы выполнитьобратное распространениемагия, нам сначала нужно ввести промежуточную переменную,определяется как:
δlj=∂J∂zljвпо количеству слоев,означает первыйколичество нейронов в слое,Для промежуточных переменных, упомянутых в прошлом уроке (чтобы формула выглядела понятнее,обратное распространениеНадстрочные индексы формул не используют круглые скобки).называется первымслойошибка нейрона.обратное распространениеОн заключается в том, чтобы сначала вычислить ошибку каждого нейрона в каждом слое, а затем получить градиент через ошибку.
Сначала посмотрите на ошибку выходного слоя:
δLj=∂J∂zLjиспользуй этоПравило цепиполучить:
δLj=K∑k=1∂J∂aLk∂aLk∂zLjи только когда, правая часть не,так:
δLj=∂J∂aLj∂aLj∂zLj=∂J∂aLjg′(zLj)=aLj−yLjОшибки для других слоев:
δlj=∂J∂zljиспользоватьПравило цепи:
δlj=sl+1∑k=1∂J∂zl+1k∂zl+1k∂zlj=sl+1∑k=1δl+1k∂zl+1k∂zljИ среди них:
zl+1k=sl∑p=1Θlkpg(zlp)+blkНайдите частную производную:
∂zl+1k∂zlj=Θlkjg′(zlj)так:
δlj=sl+1∑k=1Θlkjδl+1kg′(zlj)=sl+1∑k=1Θlkjδl+1kalj(1−alj)Наконец, используйте тот жеПравило цепивычислять:
∂JΘlij=sl+1∑k=1∂J∂zl+1k∂zl+1k∂Θlij=sl∑k=1δl+1k∂zl+1k∂Θlijтак как:
zl+1k=sl∑p=1Θlkpg(zlp)+blkтолько тогда, когда,При оставлении предмета:
∂JΘlij=g(zlj)δl+1i=aljδl+1iобратное распространение
С уравнениями (1) (2) (3) можно сделатьобратное распространениеалгоритм (следует отметить, что только что выведенные формулы относятся к набору обучающих данных).
- для всехинициализация
- занабор обучающих данных,отполучать:
- сделать
- Прямое распространение, рассчитать вектор активации каждого слоя
- Используя уравнение (1), рассчитайте ошибку выходного слоя
- Используя уравнение (2), рассчитайте другие ошибки слоя
- Используя уравнение (3), складываем,
- Рассчитайте матрицу градиента: Dlij={1mΔlij+λmΘlijif j≠01mΔ(l)ijif j=0
- обновить веса
Инициализация веса
Наконец, упоминается инициализация весов. Для нейронных сетей вы не можете инициализировать с тем же значением 0, что и раньше, что приводит клогическая единицавсе так же. Поэтому мы используем рандомизированный метод инициализации, такой, что.
Итак~, закончил на этой неделеНейронные сетиИ его алгоритм обучения, вы думаете, что это удивительно?
hertzcat
2018-04-14