Комментарии 19
На большой глубине (с черно-белыми изображениями) из сигмоидальных функций лучше всего работает гиперболический тангенс, в некоторых случаях даже линейная от -1 до 1. Еще лучше — специализированные лямбда-активации, энкодер можно задать обычными свертками и пулингами, а на декодер приходится писать специализированные шейдеры, для быстрой сходимости и компенсации артефактов.
И да, для больших изображений все-таки автокодировщики не годятся, ту же задачу можно решить намного эффективней и изящней при помощи GAN.
Тут тоже ведь момент, у меня не стоит задачи чтобы он отлично воспроизводил все, мне надо чтобы он даже слегка оверфитнулся на типовые изображения, чтобы потом достаточна ошибка была на нестандартных…
А статья так — раз уж начал копать, можно заодно и оформить текстом )
вообще, автокодировщики в обратную сторону "должны" повторять кодирующую архитектуру, а иначе на вложениях (эмбеддингах) не будет хорошего векторного пространства, которое все любят.
если первый и последний то норм.
хорошее векторное пространство, это если взять, например, такую архитектуру
dense(20)
dense(10) // конец кодировщика
dense(20),
и взять представления с промежуточного слоя, то эти вектора (эмбеддинги) имеют хорошие свойства с точки зрения "семантики" данных.
для ваших картинок можно найти среднюю траекторию, сложить или умножить на скаляр, или, если есть кластеры, можно деформировать одно изображение в другое (например как будет себя вести конкретный самолёт, как если бы он сжигал топливо), ну про аномалии сами понимаете.
А кто не согласен, тот может (контр)аргументировать .
Спасибо за описание ваших приключений) Интересно было почитать. Если поделитесь датасетом, думаю я не один благодарен буду.
А вообще энкодеры нужны обычно для того, что вы похоже заготовили на вторую часть статьи.
И еще, касательно приключений. Очень занятный (инженерный) у вас способ сетки отлаживать, надо заметить. В любом случае, лосс это "описание" задачи, которую решает сетка, ну хорошо, что через хоть такие истории, но вы это засветили.
Жду вторую часть.
Датасет выложил вот сюда: gofile.io/?c=jBNJM7
Там и сырые данные и сгенерированные из них картинки двух размеров.
Просто какие-то линии на черном фоне, причем на картинке 64х64 заполнено порядка 2% точек. Если посмотреть много картинок, то там, конечно, оказывается, что большая часть линий довольно похожа.
Я конечно не «настоящий сварщик», но может попробовать искать аномалии с помощью Нормального распределения (Гаусса)?
А как искать аномалии с помощью распределения? Т.е. вот есть датасет — там бывают очень короткие линии, бывают очень длинные — и это нормально, бывают прямые, а бывают изогнутые. А бывают линии, завернутые в кольцо — и это явная аномалия. Как-то можно с помощью распределения Гаусса такие выловить?
Если идти по пути математики — я бы предположил, что можно изначально каждую координату самолета рассматривать как график, поискать его производную, если она переходит 0 два раза — то есть вероятность аномалии.
Но, опять, из меня тоже тот еще сварщик, поэтому и учусь )
Затем вычислить по формуле медиану(мат ожидание) μ и среднеквадратическое отклонение σ.
Посчитать и затем результат сравнить с параметром эпсилон p(x) < ε, где эпсилон это параметр чувствительности уровня погрешности, то есть этим параметром вы сможете отсеять именно изогнутые в кольцо линии. Если результат вычислений меньше эпсилон — это аномалия, p(x) ≥ ε — не аномалия. Эпсилон выставляется вручную.
Я правда немного подумал еще — если у вас в датасете достаточно «нормальных» и «аномальных» данных, а сами аномалии имеют малое количество вариаций (типов), то эффективнее будет использовать обычное обучение с учителем, как вы и сделали.
Основы deep learning на примере дебага автоэнкодера, часть №1