Окей, спасибо!
Просто меня интересуют случаи когда точек несколько миллионов, и поисков примерно столько же и искать и строить дерево нужно довольно быстро. Желательно не тратя много памяти. Как я понимаю, KD-tree для таких случаев подходит довольно хорошо (за вычетом случая описанного выше)
А можете подробней рассказать про то, как народ борется с случаями когда нужно найти ближайшую точку к точке которая сильно удалена от множества точек для которых построено дерево? (Тот самый случай когда O(N) или около того)
>Таким образом, задача, решаемая алгоритмом Хо-Кашьяпа, представляет собой некоторый аналог SVM с квадратичной функцией потерь
Я бы добавил, что при наличии нескольких гиперплоскостей для линейно разделимого случая SVM выберет наиболее «среднюю» плоскость (за это отвечает терм lambda * ||w||^2). В случае алгоритма Хо-Кашьяпа этого (если я все правильно понял), не происходит. На мой взгляд это довольно важно.
Кстати интересный вопрос, если я делаю сеть с ReLU в скрытом слое и сигмоидой на выходе и оптимизирую все это дело с использованием квадратов в качестве функции ошибки, это разве будет L1 оптимизация?
А собственно почему нельзя рассматривать feed forward neural network как ф-ию? Входы есть, выходы тоже есть, отображение входов в выходы тоже присутствует.
Кстати интересный вопрос, как ведут себя DL подходы в ситуациях, когда у нас очень мало примеров (200-1000), и при этом очень большое пространство признаков (20к-60к), и нет возможности синтетически увеличить датасет или использовать transfer learning?
>Оказывается, что качество прогнозирования у ResNet плавно ухудшается при увеличении количества удаленных слоев
Если ResNet это что-то типа каскада, то такой результат довольно ожидаем. Каждый следующий уровень каскада просто улучшает результат предыдущего.
>Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3)
На самом деле современные сети (те что Deep Learning) могут состоять из десятков слоев. (а то и сотен, если речь идет о Residual сетях)
>нейроны оперируют числами в диапазоне [0,1] или [-1,1]
Мне кажется это справедливо больше для тех случаев, когда сеть использует сигмоиду (или подобную ей) ф-ию активации. Тот же ReLU на выходе дает [0, inf)
>Важно помнить, что во время инициализации нейронной сети, веса расставляются в случайном порядке.
Было бы очень круто рассказать почему это важно
>Тренировочный сет — это последовательность данных, которыми оперирует нейронная сеть
Ну скорее набор данных на которых сеть обучается (тренируется). Работать сеть может и на данных которых в обучающем сете нет. За это и любим.
>Чем больше эпоха, тем лучше натренирована сеть и соответственно, ее результат
На самом деле совсем не обязательно. Как минимум из-за того, что может наступить переобучение.
>Ошибка — это процентная величина
Совсем не обязательно
>Ошибка формируется каждую эпоху и должна идти на спад
На самом деле не всегда, и все сильно зависит от метода оптимизации. В общем случае, у вас может быть такая ситуация, когда на некотором шаге ошибка выше чем на предыдущем, потому что из-за большого шага вы пролетели локальный минимум и выскочили на «склон» другого минимума.
В случае же семейства SGD, которое используется сейчас практически в любом Machine Learning алгоритме, у вас ошибка будет постоянно скакать то вверх, то вниз.
Кроме описания разных функций ошибки было бы хорошо описать в каких случаях какая ф-ия лучше подходит
Ммм, статья вроде про то, как найти узкие места в коде, и выжать побольше производительности. Не всем это будет интересно, конечно, но в целом тема более чем актуальна.
И да, возможно статья «суховата», но лучше сухая статья чем очередная реклама гаджета или перевод очередного туториала по базовым структурам данных.
RnD — https://en.wikipedia.org/wiki/Research_and_development.
DL/CV — Deep Learning / Computer Vision, мне просто надоело писать длинные названия
Мне кажется вам стоит несколько лучше разобраться в той сфере о которой вы пытаетесь делать выводы.
Можно начать с этого https://habrahabr.ru/post/274725/
Просто меня интересуют случаи когда точек несколько миллионов, и поисков примерно столько же и искать и строить дерево нужно довольно быстро. Желательно не тратя много памяти. Как я понимаю, KD-tree для таких случаев подходит довольно хорошо (за вычетом случая описанного выше)
Я бы добавил, что при наличии нескольких гиперплоскостей для линейно разделимого случая SVM выберет наиболее «среднюю» плоскость (за это отвечает терм lambda * ||w||^2). В случае алгоритма Хо-Кашьяпа этого (если я все правильно понял), не происходит. На мой взгляд это довольно важно.
Только вот «обучающая выборка» это практически общепринятый термин
Просто опыта у меня совсем мало, со всем зоопарком приемов для fine-tuning сетей я не знаком.
Если ResNet это что-то типа каскада, то такой результат довольно ожидаем. Каждый следующий уровень каскада просто улучшает результат предыдущего.
А статья классная, побольше бы таких
>Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3)
На самом деле современные сети (те что Deep Learning) могут состоять из десятков слоев. (а то и сотен, если речь идет о Residual сетях)
>нейроны оперируют числами в диапазоне [0,1] или [-1,1]
Мне кажется это справедливо больше для тех случаев, когда сеть использует сигмоиду (или подобную ей) ф-ию активации. Тот же ReLU на выходе дает [0, inf)
>Важно помнить, что во время инициализации нейронной сети, веса расставляются в случайном порядке.
Было бы очень круто рассказать почему это важно
>Тренировочный сет — это последовательность данных, которыми оперирует нейронная сеть
Ну скорее набор данных на которых сеть обучается (тренируется). Работать сеть может и на данных которых в обучающем сете нет. За это и любим.
>Чем больше эпоха, тем лучше натренирована сеть и соответственно, ее результат
На самом деле совсем не обязательно. Как минимум из-за того, что может наступить переобучение.
>Ошибка — это процентная величина
Совсем не обязательно
>Ошибка формируется каждую эпоху и должна идти на спад
На самом деле не всегда, и все сильно зависит от метода оптимизации. В общем случае, у вас может быть такая ситуация, когда на некотором шаге ошибка выше чем на предыдущем, потому что из-за большого шага вы пролетели локальный минимум и выскочили на «склон» другого минимума.
В случае же семейства SGD, которое используется сейчас практически в любом Machine Learning алгоритме, у вас ошибка будет постоянно скакать то вверх, то вниз.
Кроме описания разных функций ошибки было бы хорошо описать в каких случаях какая ф-ия лучше подходит
Если честно, то мне казалось что это больше способ привнести нелинейность в сеть
И да, возможно статья «суховата», но лучше сухая статья чем очередная реклама гаджета или перевод очередного туториала по базовым структурам данных.
DL/CV — Deep Learning / Computer Vision, мне просто надоело писать длинные названия
Мне кажется вам стоит несколько лучше разобраться в той сфере о которой вы пытаетесь делать выводы.
Можно начать с этого https://habrahabr.ru/post/274725/
На этом у меня все.