2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9  След.
 
 Re: О перцептроне Розенблатта
Сообщение29.10.2025, 23:27 
Аватара пользователя
tac в сообщении #1707635 писал(а):
в том то и дело, что не будет
На чем основано это утверждение?
Моё - на статьях в хороших местах, стандартных учебниках и лично проведенных экспериментах.

-- 29.10.2025, 22:30 --

tac в сообщении #1707630 писал(а):
я попросил дипсик создать выборки в удобном мне виде исходя из вашего кода
А насколько Вы уверены, что дипсик вообще запустил код, а не нагаллюцинировал числа сам? Генерировать числа по заданному распределению самостоятельно LLM умеют очень плохо.
tac в сообщении #1707635 писал(а):
Дело в том, что эта обучающая выборка в принципе не может ничему научить
Вы про код из post1707295.html#p1707295 ? Там между обучающей и тестовой выборкой вполне нормальная связь.

 
 
 
 Re: О перцептроне Розенблатта
Сообщение29.10.2025, 23:44 
mihaild в сообщении #1707636 писал(а):
А насколько Вы уверены, что дипсик вообще запустил код, а не нагаллюцинировал числа сам?


нет, я попросил его сделать код на C# который создаст эти цифры. Лан, я еще посмотрю, может где то баг есть ...

-- Чт окт 30, 2025 00:58:31 --

mihaild в сообщении #1707636 писал(а):
На чем основано это утверждение?


на моих экспериментах проведенных с перцептроном и его модификациях.

-- Чт окт 30, 2025 01:03:56 --

tac в сообщении #1707638 писал(а):
Лан, я еще посмотрю, может где то баг есть ...

в принципе, я готов вам показать, что у меня получается ...

вначале, нужно правильно обучить перцептрон ... для этого нужно бинаризировать входы и выходы. Для лучшего эффекта лучше взять float radius = 2.0f;

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

код: [ скачать ] [ спрятать ]
Используется синтаксис C#

public class RandomTask
{

        public void Run()
        {
                int nSamples = 800;
                float radius = 2.0f;
                Random random = new Random(42);

                // Генерация точек в круге
                var points = new List<(float x, float y, float r)>();
                for (int i = 0; i < nSamples; i++)
                {
                        float r = (float)Math.Sqrt((float)random.NextDouble() * (radius * radius));
                        float theta = (float)random.NextDouble() * 2 * (float)Math.PI;
                        float x = r * (float)Math.Cos(theta);
                        float y = r * (float)Math.Sin(theta);
                        points.Add((x, y, r));
                }

                // Создание меток в формате bool
                bool[] labels = points.Select(p => p.r < 1.0f).ToArray();
                int noiseCount = (int)(nSamples * 0.2f);
                var noiseIndices = Enumerable.Range(0, nSamples)
                        .OrderBy(_ => random.Next())
                        .Take(noiseCount);

                // Добавление шума (инверсия меток)
                foreach (int idx in noiseIndices)
                {
                        labels[idx] = !labels[idx];
                }
               

                // Создание матрицы признаков
                //float[][] X = points.Select(p => new[] { p.x, p.y }).ToArray();

                // Создание матрицы признаков и преобразование в бинарный формат
                BinaryPoint[] X_binary = points.Select(p => PointToBinaryVector(p.x, p.y)).ToArray();

                // Стратифицированное разделение
                var stratifiedData = Enumerable.Range(0, nSamples)
                        .GroupBy(i => labels[i])
                        .SelectMany(g => g.OrderBy(_ => random.Next()))
                        .ToArray();

                int trainSize = nSamples / 2;
                var trainIndices = new List<int>();
                var testIndices = new List<int>();

                // Группируем по классам и обрабатываем каждую группу отдельно
                var groups = Enumerable.Range(0, nSamples)
                        .GroupBy(i => labels[i])
                        .ToList();

                // Распределение с сохранением пропорций
                foreach (var group in groups)
                {
                        var shuffledGroup = group.OrderBy(_ => random.Next()).ToList();
                        int groupCount = shuffledGroup.Count;
                        int trainCount = groupCount / 2;

                        // Для четного распределения добавляем по одному элементу в train из групп с нечетным количеством
                        if (groupCount % 2 == 1 && trainIndices.Count + trainCount < nSamples / 2)
                        {
                                trainCount++;
                        }

                        trainIndices.AddRange(shuffledGroup.Take(trainCount));
                        testIndices.AddRange(shuffledGroup.Skip(trainCount));
                }


                // Формирование окончательных выборок
                var X_train = trainIndices.Select(i => X_binary[i]).ToArray();
                var X_test = testIndices.Select(i => X_binary[i]).ToArray();
                var y_train = trainIndices.Select(i => labels[i]).ToArray();
                var y_test = testIndices.Select(i => labels[i]).ToArray();

                int N1 = nSamples / 2;
                int L = 32;
                int E = nSamples / 2;

                NeironNetTree net = new NeironNetTree(L, 1000, 2, N1, E);
                net.IsAnalyze = false;
                net.sinapsType = NeironNetTree.SinapsType.Full;


                BitBlock[] outputE = new BitBlock[E];

                float[][] x_testBin = new float[E][];
                for (int i = 0; i < E; i++)
                {
                        outputE[i] = new BitBlock(2);
                        if (y_test[i] == false)
                        {
                                outputE[i][0] = true;
                                outputE[i][1] = false;
                        }
                        else
                        {
                                outputE[i][0] = false;
                                outputE[i][1] = true;
                        }

                        X_test[i].X.To();
                        X_test[i].Y.To();

                        x_testBin[i] = new float[L];
                        for (int j = 0; j < L; j++)
                        {
                                if (j < 16)
                                {
                                        x_testBin[i][j] = X_test[i].X.DataF[j];
                                }
                                else
                                {
                                        x_testBin[i][j] = X_test[i].Y.DataF[j - 16];
                                }
                        }

                        net.JoinEStimul(i, x_testBin[i], outputE[i]);
                }

                BitBlock[] output = new BitBlock[N1];
                float[][] x_trainBin = new float[N1][];
                for (int i = 0; i < N1; i++)
                {
                        output[i] = new BitBlock(2);
                        if (y_train[i] == false)
                        {
                                output[i][0] = true;
                                output[i][1] = false;
                        }
                        else
                        {
                                output[i][0] = false;
                                output[i][1] = true;
                        }

                        X_train[i].X.To();
                        X_train[i].Y.To();

                        x_trainBin[i] = new float[L];
                        for (int j = 0; j < L; j++)
                        {
                                if (j < 16)
                                {
                                        x_trainBin[i][j] = X_train[i].X.DataF[j];
                                }
                                else
                                {
                                        x_trainBin[i][j] = X_train[i].Y.DataF[j - 16];
                                }
                        }


                        net.JoinStimul(i, x_trainBin[i], output[i]);
                }

                net.Learned();
                net.Examin(E);

        }

        // Структура для хранения бинарного представления точки
        public struct BinaryPoint
        {
                public BitBlock X;
                public BitBlock Y;
        }

        // Преобразование точки в бинарное представление
        static BinaryPoint PointToBinaryVector(float x, float y)
        {
                return new BinaryPoint
                {
                        X = FloatToBinary16(x, -2.0f, 2.0f),  // Диапазон для x
                        Y = FloatToBinary16(y, -2.0f, 2.0f)   // Диапазон для y
                };
        }

        // Преобразование float в 16-битное представление с использованием BitVector32
        static BitBlock FloatToBinary16(float value, float min, float max)
        {
                // Нормализация значения в диапазон [0, 65535]
                float normalized = (value - min) / (max - min);
                normalized = Math.Max(0, Math.Min(1, normalized)); // Ограничение в диапазоне [0,1]
                ushort intValue = (ushort)(normalized * 65535);

                BitBlock vector = new BitBlock(16);
                for (int i = 0; i < 16; i++)
                {
                        int bit = (intValue >> (15 - i)) & 1;

                        if (bit == 1)
                        {
                                vector[i] = true;
                        }
                        else if (bit != 0)
                        {
                                int a = 1;
                        }

                }

                return vector;
        }
}
 

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 00:05 
Аватара пользователя
tac в сообщении #1707638 писал(а):
на моих экспериментах проведенных с перцептроном и его модификациях
Можете чуть подробнее описать дизайн эксперимента? Как предпочтения пользователей оценивали?

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 00:17 
mihaild в сообщении #1707640 писал(а):
Можете чуть подробнее описать дизайн эксперимента? Как предпочтения пользователей оценивали?

нет, никаких пользователей не было, я не реализую продукты на нейросетях. Имеется введу другое, эксперимент на полных данных (когда можно провести полный перебор). Впрочем, эксперимент от RandomTest, инициированный пользователем this при правильной реализации перцептрона все покажет. Нужно лишь все оформить ))

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 00:23 
Аватара пользователя
tac в сообщении #1707643 писал(а):
нет, никаких пользователей не было, я не реализую продукты на нейросетях
Тогда мне не кажется это веским основанием утверждать, какая модель будет давать рекомендации, больше нравящиеся пользователям.
tac в сообщении #1707643 писал(а):
Имеется введу другое, эксперимент на полных данных (когда можно провести полный перебор).
Т.е. на практике - никогда. Потому что почти каждый запрос к модели в практических ситуациях встречается в истории ровно один раз.

Более того, если у Вас уже есть все возможные примеры, какие бывают, то задачу машинного обучения ставить смысла нет. Это задача сжатия данных. И вроде я даже в этой теме уже это писал.

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 00:31 
mihaild в сообщении #1707644 писал(а):
Более того, если у Вас уже есть все возможные примеры, какие бывают, то задачу машинного обучения ставить смысла нет.


Ставить смысла может и нет, а проверить вашу подгонку - это единственно, адекватный способ. Это как DeepBlue который проверит, эффективна ли сыграна партия между людьми, которые используют эвристики, а он полный перебор.

-- Чт окт 30, 2025 01:41:15 --

mihaild в сообщении #1707644 писал(а):
какая модель будет давать рекомендации, больше нравящиеся пользователям


я не говорил, что там нравится, что не нравится. Я говорил о том, какая модель будет давать правильные или не правильные рекомендации.

-- Чт окт 30, 2025 01:45:27 --

Тут правильная кривая обучения перцептрона

Как мы видим, он долгое время прыгает около 200 ошибок на тесте, но в последний момент обучается и принимает значение 159.

Если же оставить radius = 1.5f; он будет прыгать около 200 ошибок, что связано с плохой битовой представимостью задачи. И тогда нет смысла, выбирать тот или иной случайный выброс, даже если он чуть чуть лучше.

-- Чт окт 30, 2025 01:55:08 --

Но давайте, заметим еще то, что this в своем эксперименте увеличивает плавно число нейронов? И по сути показывает совсем другое, ни когда остановится при обучении, а сколько нейронов выбрать. Что для перцептрона вообще на этой задаче не имеет смысла (в отличии от задачи MNIST, в моей статье показано как ведет себя модификация перцептрона).

-- Чт окт 30, 2025 02:06:29 --

mihaild в сообщении #1707631 писал(а):
Итерация с минимальной ошибкой на валидейте - это именно та, после которой все последующие модели переобучены по сравнению с ней.


Теперь подведем промежуточные итоги.

Мой тезис такой (ниже), и он не противоречит формулировки "Итерация с минимальной ошибкой на валидейте - это именно та, после которой все последующие модели переобучены по сравнению с ней", но выраждает эту формулировку.

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


Поэтому как не странно, это даже не будет противоречить эксперименту this, т.к. он показывает сколько выбрать нейронов, а не когда остановиться. Я только не понимаю, почему он вывод о поиске числа нейронов (сложности модели) распространяет на итерации обучения.

И тут я хочу заметить, что даже 99,99% точности на обучении не гарантируют вам эффекта на тесте (а значит делать агульные заявления, что скорее всего будет переобученная модель если обучить до нуля ошибок - это фикция). Посмотрите еще раз на график, который я выше представил, и заметьте, на сколько мала на всем протяжении обучения ошибка - она колеблется от 10 до 2, и только на последней итерации падает до нуля, и скидывает 40 ошибок на тесте. Лучшего примера для демонстрации и не придумаешь.

Теперь у вас должен остаться только один вопрос :) какой правильный код, реализующий перцептрон 8-)

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 01:17 
Аватара пользователя
tac в сообщении #1707645 писал(а):
я не говорил, что там нравится, что не нравится
Говорили. Ну значит что-то в цепочке цитирований поломалось, ладно.
tac в сообщении #1707645 писал(а):
Я говорил о том, какая модель будет давать правильные или не правильные рекомендации
Правильные - это те, которые понравятся (за которые, в итоге, заплатят денег).
tac в сообщении #1707645 писал(а):
И по сути показывает совсем другое, ни когда остановится при обучении, а сколько нейронов выбрать
И то, и другое - расширение множества рассматриваемых вариантов моделей. Как у нас есть больше вариантов весов при большем количестве нейронов, так и за большее количество эпох можно дойти до большего множества весов.
tac в сообщении #1707645 писал(а):
Для перцептрона (правильно обученного) точка с минимальной ошибкой на валидейте будет равна точке с нулевой ошибкой при обучении, за исключением небольшого случайного отклонения.
Это неправда, и противоречит теореме, которую я цитировал выше. Любой алгоритм не лучше любого другого. В том числе, для некоторых данных ошибка на валидейте будет минимальна при максимальной ошибке на обучающей выборке.

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 01:25 
mihaild в сообщении #1707647 писал(а):
Это неправда, и противоречит теореме, которую я цитировал выше.


А то, что это не противоречит результату, который я показываю на графике вас не интересует? Значит её доказательство - это фейк. К сожалению, с теоремами это так - достаточно одного результата на практике, чтобы опровергнуть теорему.

-- Чт окт 30, 2025 02:27:38 --

mihaild в сообщении #1707647 писал(а):
И то, и другое - расширение множества рассматриваемых вариантов моделей. Как у нас есть больше вариантов весов при большем количестве нейронов, так и за большее количество эпох можно дойти до большего множества весов.


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

-- Чт окт 30, 2025 02:31:55 --

mihaild в сообщении #1707647 писал(а):
В том числе, для некоторых данных ошибка на валидейте будет минимальна при максимальной ошибке на обучающей выборке.


Тоже нет, за исключением одного единственного случая, когда между обучающей выборкой нет никакой связи с тестовой. Т.е. когда сделана подгонка, которая по сути случайна.

-- Чт окт 30, 2025 02:34:30 --

mihaild в сообщении #1707647 писал(а):
Правильные - это те, которые понравятся

нет, правильные это те которые соответствуют реальности, но которые по каким то причинам не могли быть измерены, до построения модели.

-- Чт окт 30, 2025 02:48:38 --

Цитата:
Для перцептрона (правильно обученного) точка с минимальной ошибкой на валидейте будет равна точке с нулевой ошибкой при обучении, за исключением небольшого случайного отклонения. При этом случайное отклонение будет уменьшаться (стабилизироваться) при увеличении числа нейронов до определенного момента.


И наконец, дополним следующим:

При минимальном случайном отклонении в ходе обучения, в реальности будет больше точных/правильных ответов, чем если полагаться на случайные выбросы (последнею точку переобучения в текущем понимании, если только она не совпадает с полным окончанием обучения).

над формулировками еще надо поработать, но суть думаю ясна, и вы могли бы мне помочь, в этом ... но кажется, пока вера в догмы вам это не даст, рад бы ошибится.

-- Чт окт 30, 2025 02:56:32 --

tac в сообщении #1707648 писал(а):
за большее количество эпох можно дойти до большего множества весов.


вообще то это не правда, они ограничены в моем случае 4 байтами float.

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

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 02:40 
Аватара пользователя
tac в сообщении #1707648 писал(а):
Другого слова, кроме "вера" я придумать не могу, когда вам показывают кривую - а вы верите, что её нет
Так, давайте Вы прочитаете, что я написал, принесете извинения за обвинения на пустом месте, и потом, если у Вас будут какие-то конкретные утверждения, можно продолжить обсуждения. Ну или можете сразу продолжить с менее "верящими в догмы" участниками, если таковые найдутся.

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 09:10 
mihaild в сообщении #1707654 писал(а):
Так, давайте Вы прочитаете, что я написал, принесете извинения за обвинения на пустом месте, и потом, если у Вас будут какие-то конкретные утверждения, можно продолжить обсуждения. Ну или можете сразу продолжить с менее "верящими в догмы" участниками, если таковые найдутся.


Это как вам угодно, только если вас обижает "верящие в догмы", то это как раз вам нужно вначале прежде чем писать, посмотреть график, который я привел. И писать про него, а не на пустом месте, игнорируя это, продолжать писать догмы. Меня, это тоже напрягает, когда я показываю как работает перцептрон, а вам всё божья роса ... "не вижу и не хочу видеть". Вот когда прокомментируете график в контексте переобучения, тогда и можем продолжить говорить, а пока я не вижу за что извиняться.

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 12:32 
Аватара пользователя
tac в сообщении #1707662 писал(а):
то это как раз вам нужно вначале прежде чем писать, посмотреть график, который я привел
Если бы Вы просто написали, что моё утверждение противоречит Вашим экспериментальным данным, то я бы объяснил, почему не противоречит. Ошибки, и обвинения в ошибках, в том числе сами ошибочные - это нормально. А вот, невнимательно прочитав, обвинить в догматизме - нет.

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 14:54 
tac в сообщении #1707606 писал(а):
Не знаю, что у вас там получилось с ELM (там какая та глупость получается, что он при большем числе нейронов не может сойтись), но с Розенблаттом давайте перепроверим. Судя по графикам вы что то делаете не то. Дайте обучающую и тестовую выборку отдельным файлом, например, в формате csv. Будет время проверю. И у вас там не видно число нейронов, я надеюсь их там больше 1000 ?

В любом случае, ваш выбор исходя "из переобучения" не правильный, что и следовало ожидать.
Речь не про сходимость иттеративного алгоритма. Это зависимость качества(акураси) модел_ЕЙ(уже "сошедшийся") от их сложности, "емкости"(в случае перцептрона Розенблатта количества A нейронов), два графика один при инференсе на обучающей выборке другой на вне обучения. То есть речь не про схождение отельной модели, тут каждая точка это отдельная модель. Количество итераций ограниченно 1000й, для перцептрона Розенблатта.

Данные - любая простая нелинейная зависимость с 10-20%м шумом на пару тысяч точек. Например кружок в квадрате, или больший круг в меньшем и тп.:

Изображение

На C#
код: [ скачать ] [ спрятать ]
Используется синтаксис C#
<div class="codetitle"><b>Код:</b></div><div class="codecontent"> public static (double[][], double[][]) GenerateSphereInSquareDatasetWithLabelNoise(
        int numPointsPerClass,
        double noisePercentage, // от 0 до 100
        int? seed = null)
    {
        if (noisePercentage < 0 || noisePercentage > 100)
            throw new ArgumentOutOfRangeException(nameof(noisePercentage), "Должен быть от 0 до 100.");

        Random rnd = seed.HasValue ? new Random(seed.Value) : new Random();

        // Шаг 1: Сгенерируем все точки с истинными метками
        List<(double[] point, int trueLabel)> allPoints = new List<(double[], int)>();

        // Генерируем ровно numPointsPerClass для каждого класса
        int class0Count = 0, class1Count = 0;
        while (class0Count < numPointsPerClass || class1Count < numPointsPerClass)
        {
            double x = 2*(rnd.NextDouble() * 2 - 1);
            double y = 2*(rnd.NextDouble() * 2 - 1);
            double r2 = x * x + y * y;

            if (r2 <= 1.0)
            {
                if (class0Count < numPointsPerClass)
                {
                    allPoints.Add((new double[] { x, y }, 0));
                    class0Count++;
                }
            }
            else
            {
                if (class1Count < numPointsPerClass)
                {
                    allPoints.Add((new double[] { x, y }, 1));
                    class1Count++;
                }
            }
        }

        // Шаг 2: Применяем шум к меткам
        int totalPoints = allPoints.Count;
        int numNoisy = (int)Math.Round(totalPoints * (noisePercentage / 100.0));

        // Выбираем случайные индексы для инверсии
        var indices = Enumerable.Range(0, totalPoints).OrderBy(_ => rnd.Next()).Take(numNoisy).ToHashSet();

        // Создаём список с зашумлёнными метками
        List<(double[] point, int noisyLabel)> noisyPoints = new List<(double[], int)>();
        for (int i = 0; i < totalPoints; i++)
        {
            var (point, trueLabel) = allPoints[i];
            int label = indices.Contains(i) ? 1 - trueLabel : trueLabel; // инвертируем: 0<->1
            noisyPoints.Add((point, label));
        }

        // Шаг 3: Разделяем на два массива по зашумлённым меткам
        var class0List = noisyPoints.Where(p => p.noisyLabel == 0).Select(p => p.point).ToList();
        var class1List = noisyPoints.Where(p => p.noisyLabel == 1).Select(p => p.point).ToList();

        return (class0List.ToArray(), class1List.ToArray());
    }</div>
 



tac в сообщении #1707606 писал(а):
нет, не будет, значит вы делаете что-то не так ... а Кнн - это не может иллюстрировать по определению, т.к. как вы сами сказали он не обучается. Вы уж или штаны оденьте или крестик снимите ...
Какому ещё определению?
tac в сообщении #1707606 писал(а):
не можем, т.к они глупы бесполезны
Вы ошибаетесь

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 15:09 
mihaild в сообщении #1707681 писал(а):
Если бы Вы просто написали, что моё утверждение противоречит Вашим экспериментальным данным, то я бы объяснил, почему не противоречит. Ошибки, и обвинения в ошибках, в том числе сами ошибочные - это нормально. А вот, невнимательно прочитав, обвинить в догматизме - нет.


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

-- Чт окт 30, 2025 16:20:07 --

this в сообщении #1707695 писал(а):
Речь не про сходимость иттеративного алгоритма. Это зависимость качества(акураси) модел_ЕЙ(уже "сошедшийся") от их сложности, "емкости"(в случае перцептрона Розенблатта количества A нейронов), два графика один при инференсе на обучающей выборке другой на вне обучения. То есть речь не про схождение отельной модели, тут каждая точка это отдельная модель. Количество итераций ограниченно 1000й, для перцептрона Розенблатта.


Это я понял, правда не сразу. Это можно видеть по моим сообщениям.

tac в сообщении #1707645 писал(а):
Но давайте, заметим еще то, что this в своем эксперименте увеличивает плавно число нейронов? И по сути показывает совсем другое, ни когда остановится при обучении, а сколько нейронов выбрать.


tac в сообщении #1707645 писал(а):
Поэтому как не странно, это даже не будет противоречить эксперименту this, т.к. он показывает сколько выбрать нейронов, а не когда остановиться. Я только не понимаю, почему он вывод о поиске числа нейронов (сложности модели) распространяет на итерации обучения.


на что мне отвечает mihaild

mihaild в сообщении #1707647 писал(а):
И то, и другое - расширение множества рассматриваемых вариантов моделей. Как у нас есть больше вариантов весов при большем количестве нейронов, так и за большее количество эпох можно дойти до большего множества весов.


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

Но начали и вы с того же

this в сообщении #1707295 писал(а):
Если алгоритм достигает 100 % точности на обучающей выборке, это почти наверняка означает, что он не просто выучил полезную закономерность, а подстроился под шум — то есть переобучился.

А поскольку шум в тестовой выборке другой (шум априори случаен!), модель, "запомнившая" обучающий шум, будет работать на тесте хуже, чем более простая и устойчивая модель, то есть не заучившая 100%но лёрн. Это классический пример компромисса смещение–дисперсия.


итак? раз мы тут такие принципиальные - эти слова вы тоже забираете, и говорите, что просто сместили контекст на обсуждение другого?

и снова ни слова о моих контпримерах :mrgreen:

ну, как еще мне это интерпретировать, как не догматизм :?: ну, ок - можно еще как веру в авторитет ... ну а как еще?

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 15:27 
Аватара пользователя
tac в сообщении #1707696 писал(а):
Хорошо объясните, а лучше сделайте ровно то, что я попросил, объясните мой график с ваших позиций
Утверждение
tac в сообщении #1707645 писал(а):
Для перцептрона (правильно обученного) точка с минимальной ошибкой на валидейте будет равна точке с нулевой ошибкой при обучении, за исключением небольшого случайного отклонения
не может быть верным для всех мыслимых данных. Оно может быть верным для каких-то конкретных датасетов, и Ваш график именно для конкретного датасета. Теперь инвертируйте в нём метки для теста - и получите обратный результат.
Если где-то есть не слишком длинное полное описание, что происходит в Вашей модели - я могу попробовать и какой-то более интересный датасет для демонстрации этого эффекта подобрать.

Если Вы хотите говорить о теоретических оценках - то надо наложить ограничения на данные, потому что про любые мыслимые данные ничего полезного сказать нельзя. Какие могут быть интересные ограничения на данные - пока никто не придумал, но, может быть, придумать можно.
Если Вы хотите говорить о практических результатах (а почти всё происходящее в ML относится к этой категории) - то ок, можно сравнивать разные модели на разных датасетах. Например для датасета this очевидно очень хороший результат даст SVM c RBF kernel.
tac в сообщении #1707648 писал(а):
вообще то это не правда, они ограничены в моем случае 4 байтами float
Как правило при обучении используется gradient clipping. Что означает, что итоговые веса по модулю ограничены числом эпох, умноженным на какую-то константу, Что во всех используемых на практике ситуациях сильно меньше максимального числа, влезающего в f32. Так что даже на таком рукомахательном уровне, больше эпох = больше вариантов моделей.

 
 
 
 Re: О перцептроне Розенблатта
Сообщение30.10.2025, 15:50 
mihaild в сообщении #1707698 писал(а):
не может быть верным для всех мыслимых данных. Оно может быть верным для каких-то конкретных датасетов, и Ваш график именно для конкретного датасета.


Очевидно, что если вы с помощью других алгоритмов получаете другое, а я с помощью перцептрона получаю другое на тех же данных, то дело не в данных, а в алгоритме. Чтобы мы продолжили бы конструктивное общение - вам для начала нужно признать эту очевидную мысль. Другое дело, вы можете сказать, что не уверены, говорю ли я правду, не являюсь ли я заложников какого то бага (но даже если так баг который дает уникальные данные заслуживает изучения). Но если вам на ряде тестов показывают всегда одно и тоже - у вас переобученyый алгоритм N, versus графики как у меня для RandomTest от this , и MNIST в статье - то человек не верящий в догматы, как минимум должен задуматься, не так ли?

 
 
 [ Сообщений: 126 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group