?

Log in

Discreet · and · not · discrete.


Do you want to crack jokes about it or do you want me to go?

Recent Entries · Archive · Friends · Profile

* * *
Случайный лес с произвольными плоскостями разбиения, получаемый непрерывной оптимизацией.

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

Очень интересно.
* * *
Код тут. Перцептрон сейчас не работает, а PenDigits (тренировка на задаче pendigits) как-то пытается сойтись.

Идея вот какая.

Я могу сформулировать Лагранжиан для материальной точки с массой 1, где координаты это веса нейронной сети: L(w)=E(w) - ((d/dt)w)2/2

E - это потенциальная энергия. Она определяется, как вычисление квадрата разности функции нейронной сети и ожидаемого ответа сети: E(w)=Σj(F(w, xj)-yj)2 Здесь j - это индекс пары векторов входа (x) и выхода (y). Сама функция F(w,x) тоже векторная.

Соответственно, можно вычислить частные производные и так далее, прямо как написано в Ландау и Лившице, первом томе.

Далее нам надо вычислить шаг "времени" - веса у нас будут функциями от времени (рядами), как и "потенциальная энергия" системы (которую мы стараемся уменьшить). Вычислив шаг, который приведёт к ошибке вычислений не более, чем на заданную константу, мы можем обновить веса. Обновлённые веса должны привести к уменьшению E.

В принципе, всё это работает как-то. Только очень медленно - видимо, вместо вычисления с константами получаются вычисления с векторами (входов и зависящих от них данных).

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

Во-вторых, надо уменьшить количество векторных вычислений. Они и память расходуют зазря, и времени на них тратится больше, чем надо.
* * *
...контрпродуктивно.

Полная ерунда получается.

Пробую разобраться с нейронными сетями путём написания их обучения необычным образом.

Перцептрон обрабатывается хорошо, а вот "рукописные цифры" уже плохо.

* * *
...понял, что умничанье может быть не только в литературе.

Очень неприятное место. Слишком много Лебедева.

* * *
* * *
* * *
Извините, что оставил комментарии включенными.

PS
Тут какой-то исход на dreamwidth. Ну его нафик. Я не похож на крысу.

Tags:

* * *
...понимает толк в построчном чтении из файла.

"the next available input character is delim, as tested by Traits::eq(c, delim), in which case the delimiter character is extracted from input, but is not appended to str."

Питон хуже C++!!!

* * *
repeats goalw rw = (ceiling $ log(goalw/rw)/log 1.025 + 1, rw, goalw)

goalw - это цель на одно повторение на текущую тренировку, rw - вес одного повторения на текущую тренировку. Волшебное число 1,025 - это во сколько раз надо увеличить вес, чтобы уменьшить количество повторений на один раз.

Волшебное число индивидуально - для имеющих хорошую выносливость это, примерно, 1,025 (1,025+-0.003 - 2,5=-0,3%). А для очень сильных это 4,5+-0,5% и я даже встречал человека с 10%, но он, похоже, привирал.

Для примера.

Бодибилдер и пауэрлифтер оба могут пожать 200 кг на 10 раз. Однако у бодибилдера максимум будет 240 кг (вот те самые 2,5%), а у пауэрлифтера 280 кг (то есть, чуть менее, чем двое больше - 4,5%).

Соответственно, программа тренировки выглядит примерно вот так: zipWith repeats (goals 230 200 10) ([140, 150, 160]++[165,170..]), где goals это просто список от 200 до 230, с шагом (230-200)/10.

В результате получается вот такой список: [(16,140.0,200.0),(14,150.0,203.0),(12,160.0,206.0),(11,165.0,209.0),(10,170.0,212.0),(10,175.0,215.0),(9,180.0,218.0),(9,185.0,221.0),(8,190.0,224.0),(8,195.0,227.0),(7,200.0,230.0)]

140 на 16 повторений, затем 150 на 14, потом 160 на 12 и так далее. В конце будет 200 кг на 7 повторений, что должно означать способность поднять 230 кг один раз.

Теперь я перейду к практическим занятиям. ;)
* * *
* * *
В Питоне readlines оставляет перевод строки в конце прочитанной строки!

Ни в одном другом языке такого поведения нет.

Красота.

* * *
* * *

Previous