Комментарии 38
По этому линейную функцию активации ну просто никак нельзя использовать. Можно использовать либо ступенчатую функцию, либо сигмоид, либо что-то аналогичное.
Ну а систему уравнений вы решили да, правильно. Только к нейронным сетям это не имеет отношения.
Я понял в чем ошибка. Иногда использую как синонимы, песептрон и сеть прямого распространения. Вообще да, правильнее это было бы назвать взвешенным сумматором. Сейчас исправлю. Есть идеи по обучению сети с сигмоидальной активационной функцией. Но там не все так однозначно. В ближайшее время думаю выложить.
А разве решение СЛАУ не будет итеративным? Вообще, о каких итерациях идёт речь? Если взять размер mini-batch равным размеру всей обучающей выборки, это будет считаться безитерационным обучением?
Имеется ввиду, что методы оптимизации итеративно приближают ошибку к минимуму, т.е. на каждой итерации алгоритм все ближе подходит к минимуму и в общем случае не достигает его. При решении СЛАУ методом Крамера мы сразу получаем значения весов которые приводят в минимум, т.е. при первой прогонки алгоритма.
На слайде показано обучение 2-х слойной НС, зависимость ошибки от итерации.
Хорошо, а чем ваш подход лучше? Метод Крамера это самый неэффективный метод. Для эффективного решения вам придётся или находить факторизацию матрицы, или использовать всё те же итерационные методы, для которых, ко всему прочему, матрицу придётся ещё и обуславливать.
"Хорошо, а чем ваш подход лучше?" — не знаю, возможно, что ничем. Как протестирую напишу. Просто была идея, я ее описал и все. Для небольшого кол-ва входов ожидается бОльшая скорость обучения и возможно, обучение будет точнее.
"Метод Крамера это самый неэффективный метод." — я знаю, я в статье написал, что метод Гаусса лучше.
Хотя там ожидаются матрицы 5х5, 10х10, думаю, и Крамером нормально будет. После тестирования отпишусь.
Вы изобретаете заново метод наименьших квадратов в задаче линейной регрессии. Почему, кстати, у Вас матрица A квадратная?
Квадратная т.к. оба индекса j,k "пробегают" значения от 1 до m. Где m — кол-во входов. k — количество уравнений в системе.
Хорошо. А почему число уравненийй от 1 до m, а не до n?
Хорошо. А что с остальными n-m уравнениями? Просто отбросим и не будем учитывать содержащуюся в них информацию?
А именно, с однослойной сети прямого распространения с линейной активационной функцией, взвешенного сумматора.
AKA линейная регрессия. Вот же людям задурили головы этими нейросетями, что они им везде мерещятся. Вы бы хоть ознакомились с предметом для начала.
Ну и да, вы вроде собрались строить в памяти матрицу всех входных данных (N^2, на секундочку) да еще и решать её потом, а это O(n^3) для метода Гаусса.
И последнее: регрессию уже давно умеют решать очень эффективно, вплоть до терабайтов данных и миллионов весов.
1) Таких решений для множественной регрессии я не видел(если есть скиньте ссылку на статью).
2) Тут N — это не мощность обучающей выборки, а количество входов, если их около 10, то метод может работать быстрее градиентных.
3) Да это с трудом можно назвать нейронной сетью, просто в дальнейшим планирую писать про обучение с разными ф-ями активации. И отдельно рассмотреть сверточные слои. Просто нужно было от чего-то отталкиваться. А это самый простой пример, не более того.
Пока немного позанудствую по формулам:
1) В выражении для ошибки вы написали сумму от i до m, а не от 1 до m.
2) В том же выражении: если вы используете индекс i для точек выборки и пишете его при переменной x сверху, то можно и при переменной y писать его сверху.
3) В выражении для производной вы берёте производную не по \omega_j, а по \omega_k.
Спасибо! Жду следующую статью.
Спасибо за замечания, сейчас исправлю.
1) Опечатка.
2) Тут i означает i-й вектор x. A "y" число, но лучше действительно так, тут просто цель была показать что y_i не вектор, а число.
3) В тетради, где выводил, было \omega_j, а когда начал переписывать, подумал, что индекс j занят и написал k.
https://habrahabr.ru/post/333382 — следующая статья.
Погуглите «нормальное уравнение» — это одна формула в явном виде для решения вашей задачи (линейная регрессия с наименьшими квадратами).
Да, но там везде функция ОДНОЙ переменной, здесь же многих. Как я писал выше, если есть такое решение, то скиньте мне статью/учебник, в общем, то где она описана.
Неважно, сколько там переменных, формула не меняется. Вот статья с объяснением.
Вот взята задача, эквивалентная линейной регрессии с квадратичной функцией потерь. Известно, что с точки зрения оптимизации она выпуклая, поэтому мы и можем применить решение СЛАУ и «обучить» такую модель в один проход.
Проблема-то в том, что принципиально подавляющее большинство современных моделей невыпуклые для оптимизации. За пределами технических подробностей, как мне кажется, не освещена главная деталь: где в описываемом методе ресурс для безытеративной оптимизации (многомерных, но это не слишком важно) невыпуклых задач? Машинное обучение тут ни при чем — это вопрос из методов оптимизации. Намек: итеративные методы существуют не от хорошей жизни…
Впрочем, если на этот вопрос у автора есть ответ, — пожалуй, я буду с нетерпением следить за его публикациями. Нобелевки по математике нет, но есть куча других не менее достойных премий.
https://habrahabr.ru/post/333382 — новая статья.
Я не собирался решать СЛАУ, просто показал на простом примере откуда взялся вектор B и матрица A, что будет использовано в дальнейшем. Про использование вектора B я написал тут: https://habrahabr.ru/post/333382
1 Учесть нелинейную функцию активации в данном случае очень просто, например если используете гиперболический тангенс — нужно просто взять арктангенс от выходных данных.
2 Если y= W*X то W = y*pinv(X). pinv(X) — это псевдообратная матрица она не обязательно квадратная и всегда имеет единственное решение для любого X. Если X'*X невырожденная — то pinv(X) = (X'*X)^-1*X'
3 Решение эквивалентно поиску минимума методом наименьших квадратов, но это хорошая идея для многослойных сетей, а для однослойной нет. Если вы просто сложите все данные по классам (для mnist все единички, двоечки и т.п) и используете эти данные в качестве весов то получите после нормировки лучший результат.
4 И самое интересное — расширить этот метод на многослойные сети можно. Только дляучета нелинейности без итераций не обойтись. Просто в методе градиентного спуска там где идет умножение на выходные значения слоя исользуйте pinv. Только придется одну итерацию использовать для оптимизации весов одного слоя иначе значения весов расходятся. Это хороший метод ня небольших сетей, так как очень быстро учится, но для больших вычислительная сложность становится такой что градиентный спуск лучше.
Спасибо за дополнение! Тут проблема в другом нужно доказать, что производная равна нулю в минимуме.(это я про нелинейные ф-и)
Если ф-я ограничена сверху и снизу, то 0 производной будет как в минимуме, так и в максимуме.
Метод безытеративного обучения однослойной сети прямого распространения с линейной активационной функцией