UFLDL: разреженный автоэнкодер

глубокое обучение Python алгоритм
UFLDL: разреженный автоэнкодер

UFLDL: разреженный автоэнкодер

Эндрю НгCS294AЭто хороший вводный курс по глубокому обучению, и я планирую сосредоточиться на содержании этого курса в следующем исследовании.UFLDL Tutorial— это вики-страница курса CS294A, содержащая примечания к курсу и задания. если ты правконтролируемое обучение,логистическая регрессия,градиентный спускЕсли вы не знакомы с основными понятиями, вы можете сначала изучить ихпредыдущий курс.

Код Python для курсовой размещен на Github, нажмитекод курсаВы можете перейти на Github для просмотра (если у вас нет доступа к Github, вы можете нажатьCodingПроверьте ), ошибки и улучшения в коде приветствуются.

Разреженный автоэнкодер

Все мы знаем, что глубокое обучение сейчас полностью расцветает в области компьютерного зрения и достигло многих хороших результатов, которые раньше были невообразимы. До этого всем приходилось тратить много сил на ручное проектирование фич. Что изучать дальшеРазреженный автоэнкодерЭто первый шаг к автоматическому обучению функций. (Картинка ниже — нейронная сеть в работе, картинка слева — входное изображение, а картинка справа — выходное изображение после обучения)

Разреженный автоэнкодерБазовая модель представляет собой трехслойную нейронную сеть, которая делает целевое значение, выводимое сетью, близким к самому входному изображению во время обучения, чтобы изучить особенности изображения. Не имеет смысла изучать функцию тождества напрямую, поэтому мы должны сделать некоторые ограничения на скрытый слой, такие как уменьшение количества нейронов, сеть будет вынуждена сжимать данные и пытаться реконструировать входное изображение. Когда мы добавили штраф, чтобы нейроны оставались неактивными большую часть времени, сеть смогла изучить очень интересные краевые особенности. Нейроны в скрытом слое активируются только тогда, когда они наблюдают краевой элемент под определенным углом на входном изображении ( Это похоже на то, как нейроны в зрительной коре V1 человека активируются в неврологии).

функция стоимости

Согласно общей схеме машинного обучения, сначала даноРазреженный автоэнкодерФункция стоимости:

Дж с п а р с е ( Вт , б ) знак равно 1 м ∑ я знак равно 1 м ( 1 2 | | час Вт , б ( Икс ( я ) ) − у ( я ) | | 2 ) + λ 2 ∑ л знак равно 1 л − 1 ∑ я знак равно 1 с л ∑ Дж знак равно 1 с л + 1 ( Θ Дж я ( л ) ) 2 + бета ∑ Дж знак равно 1 с 2 К л ( р | | р ^ Дж )" role="презентация">Jsparse(W,b)=1мм∑i=1(12||hW,b(x(i))−y(i)||2)+λ2L−1∑l=1sl ∑i=1sl+1∑j=1(Θ(l)ji)2+βs2∑j=1KL(ρ||^ρj)Jsparse(W,b)=1m∑i=1m(12||hW,b (x(i))−y(i)||2)+λ2∑l=1L−1∑i=1sl∑j=1sl+1(Θji(l))2+β∑j=1s2KL(ρ|| р^j)

По сравнению со знакомыми первыми двумя элементами функция стоимости добавляет штраф для скрытого слоя, где с 2 "роль="презентация">s_2Указывает количество нейронов в скрытом слое. р ^ Дж "роль="презентация">\hat\rho_jПредставляет нейроны скрытого слоя j" роль="презентация">jДля средней активации по всем данным обучения р ^ Дж знак равно ∑ я знак равно 1 м [ а Дж ( 2 ) ( Икс ( я ) ) ] "роль="презентация">\hat\rho_j=\sum\limits_{i=1}^{m}\big[a_j^{(2)}(x^{(i)})\big]( Обратите внимание здесь а Дж ( 2 ) ( Икс )" роль="презентация">a_j^{(2)}(x)Представляет функцию, значением которой являются данные х" роль="презентация">xсоответствующий а Дж ( 2 ) "роль="презентация">a_j^{(2)}), ρ" роль="презентация">\rhoза р ^ Дж "роль="презентация">\hat\rho_jЦелевое значение , цель состоит в том, чтобы нейроны не активировались большую часть времени, как упоминалось ранее.

По словам Нг, новый штрафной срок имеет множество функций на выбор, и здесь он используется для измерения ρ" роль="презентация">\rhoи р ^ Дж "роль="презентация">\hat\rho_jМера различия К л   г я в е р г е н с е" роль="презентация">KL \ divergenceТакже известен какотносительная энтропия,определяется как:

К л ( п | | Вопрос ) знак равно ∑ я п ( я ) л о г ( Вопрос ( я ) п ( я ) ) " role="презентация">KL(P||Q)=∑iP(i)log(Q(i)P(i))KL(P||Q)=∑iP(i)log(Q(i) Число Пи))

Он измеряет расстояние между двумя распределениями вероятностей (я не слишком много знаю, и у меня есть возможность провести дополнительные исследования).
С помощью функции стоимости посмотрим, что изменилось в исходном алгоритме обратного распространения~

градиентный спуск

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

Поскольку добавленный член функции стоимости напрямую зависит от скрытого слоя, ошибка скрытого слоя:

дельта Дж ( 2 ) знак равно ∂ Дж с п а р с е ∂ г Дж ( 2 ) знак равно ∂ Дж ∂ г Дж ( 2 ) + ∂ К л ∂ г Дж ( 2 ) " role="презентация">δ(2)j=∂Jsparse∂z(2)j=∂J∂z(2)j+∂KL∂z(2)jδj(2)=∂Jsparse∂zj(2)= ∂J∂zj(2)+∂KL∂zj(2)

Последний термин может быть преобразован в:

∂ К л ∂ г Дж ( 2 ) знак равно ∑ к знак равно 1 с 2 ∂ К л ∂ а к ( 2 ) ∂ а к ( 2 ) ∂ г Дж ( 2 ) знак равно бета ( − р р ^ Дж + 1 − р 1 − р ^ Дж ) г ' ( г Дж ( 2 ) )" role="презентация">∂KL∂z(2)j=s2∑k=1∂KL∂a(2)k∂a(2)k∂z(2)j=β(−ρ^ρj+ 1 −ρ1−^ρj)g′(z(2)j)∂KL∂zj(2)=∑k=1s2∂KL∂ak(2)∂ak(2)∂zj(2)=β(−ρρ ^ j+1−ρ1−ρ^j)g′(zj(2))

следовательноАлгоритм обратного распространениясередина дельта Дж ( 2 ) "роль="презентация">\delta^{(2)}_jРасчет становится:

дельта Дж ( 2 ) знак равно ( ∑ к знак равно 1 с 3 Θ к Дж ( 2 ) дельта к ( 3 ) + ( − р р ^ Дж + 1 − р 1 − р ^ Дж ) ) а Дж ( 2 ) ( 1 − а Дж ( 2 ) )" role="презентация">δ(2)j=(s3∑k=1Θ(2)kjδ(3)k+(−ρ^ρj+1−ρ1−^ρj))a(2)j(1− a(2)j)δj(2)=(∑k=1s3Θkj(2)δk(3)+(−ρρ^j+1−ρ1−ρ^j))aj(2)(1−aj(2) )

Остальные расчеты аналогичны исходному алгоритму.
После получения функции стоимости и расчета градиента осталось вызвать оптимизированный алгоритм градиентного спуска~

визуализация

В качестве последнего примечания к заданию курса нам предлагается случайным образом взять 10 000 локальных карт 8x8 из 10 изображений ландшафта и позволить разреженному автоэнкодеру изучить их особенности. Количество нейронов в скрытом слое нейронной сети равно 25, а размерность входа и выхода — 64. На рисунке ниже показаны веса входного слоя, соответствующие каждому нейрону скрытого слоя, которые можно грубо рассматривать как активируемые, когда нейрон обнаруживает эту функцию. (Совет: Алгоритм обучения и функция проверки градиента в домашнем задании были написаны в предыдущем курсе, поэтому их можно использовать напрямую.)

Итак~, это все, что касается разреженного автоэнкодера, спасибо за ваше терпение.


hertzcat

2018-10-20