Форум программистов, компьютерный форум, киберфорум
ИИ, нейросети, LLM, ML, Data Science, ИИ-агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/47: Рейтинг темы: голосов - 47, средняя оценка - 4.57
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325

Обучение нейронной сети методом обратного распространения ошибки

02.04.2019, 23:23. Показов 9761. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При обучении созданной на C# нейронной сети возникли сложности.
Используется сигмоидная функция активации и архитектура нейронной сети с одним входным, скрытым и выходным слоем.

Расчёт корректировок синаптических весов:

Скрытый - Внешний слои.

https://www.cyberforum.ru/cgi-bin/latex.cgi?\Delta {\omega}_{ij} = -\eta {x}_{i} {\delta}_{j} = -\eta {x}_{i} {o}_{j} (1 - {o}_{j}) ({t}_{j} - {o}_{j})

Скрытый1 - Скрытый2 / Входной - Скрытый слои.

https://www.cyberforum.ru/cgi-bin/latex.cgi?\Delta {\omega}_{ij} = -\eta {x}_{i} {\delta}_{j} = -\eta {x}_{i} {o}_{j} (1 - {o}_{j}) \sum_{k} {\omega}_{jk}{\delta}_{k}

Во входной и каждый скрытый слой добавлены нейроны смещения, выдающие на выходе 1.

Сеть быстро и хорошо запоминает один конкретный пример из обучающей выборки, но при попытке обучить чему то новому, среднеквадратичная ошибка за эпоху только возрастает. Примеры подаю по порядке. Например, такая сеть:

2 нейрона во входном слое + 3 нейрона в скрытом + 2 нейрона в выходном слое (не считая нейроны смещения)

Обучение бинарной операции XOR:
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

Первый нейрон выходного слоя отвечает за 0, второй - за 1 (если выходное значение больше 0.5, нейрон активирован).
Обучающая выборка тогда имеет вид:
0, 0 - 1, 0
0, 1 - 0, 1
1, 0 - 0, 1
1, 1 - 1, 0

В процессе 120к эпох обучения (пробовал и 10к, и 30к, и 150к...) начальные выходные значения почти не изменились, а среднеквадратичная ошибка за 5000 эпох равна 0.5.
Когда сеть выдаёт (0, 0), а верный ответ (1, 0), выходное значение на первом нейроне повышается.
Когда с другого примера сеть выдаст (1, 0), а верный ответ (0, 1), выходное значение на первом нейроне падает, на втором повышается.
Аналогичная ситуация со вторым выходным нейроном. Т.е. выходные значения то повышаются, то понижаются, а в итоге - нет обучения.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.04.2019, 23:23
Ответы с готовыми решениями:

Обучение сверточной нейронной сети LeNet-5 методом Левенберга Марквардта
Здравствуйте! Ранее задавал вопрос о формирований слоя C3 в калссической архитектуре LeNet-5...

Метод обратного распространения ошибки
Умные люди, подскажите: есть нейронная сеть, 20 входных нейронов, 10 в скрытом слое и 3 выходных правильно ли я считаю ошибку: ...

Алгоритм обратного распространения ошибки
Подскажите как построить алгоритм обратного распространения ошибки с использованием функции активации типа ReLU. Для сигмоидной функции...

40
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
05.04.2019, 21:36  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Rayvenor Посмотреть сообщение
В соседней теме код выложили
Пожалуйста.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
namespace NeuralNet {
    
    class Synaps {
 
        public Neuron Neuron1, Neuron2;
        public double Weight;
        public double LastWeight;
 
        public Synaps(Neuron neuron1, Neuron neuron2) {
            Neuron1 = neuron1;
            Neuron2 = neuron2;
            Weight = 0d;
            LastWeight = 0d;
        }
    }
    
    class Neuron {
 
        public bool IsBias = false;
        public double Sum = 0d;
        public double LocalGradient = 0d;
        public double OutputValue;
        
        public Synaps[] InputSynapses;
        public Synaps[] OutputSynapses;
 
        public NeuralLayer.LayerTypes NeuronLayerType;
 
        public Neuron(NeuralLayer.LayerTypes layerType) {
            NeuronLayerType = layerType;
        }
 
        public void CalculateOutputValue(double inputValue = 0d) {
 
            if (IsBias) {
                OutputValue = 1;
                Sum = 0;
                return;
            }
            
            Sum = 0;
            LocalGradient = 0;
 
            if (NeuronLayerType != NeuralLayer.LayerTypes.Input) {
                foreach (var synaps in InputSynapses)
                    Sum += synaps.Neuron1.OutputValue * synaps.Weight;
            }
            else
                Sum = inputValue;
            
            OutputValue = ActivationFunction(Sum);
        }
 
        // Sigmoid.
        private double ActivationFunction(double sum) {
            return Math.Round(1d / (1d + Math.Exp(sum)), 7);
        }
    }
    
    class NeuralLayer {
 
        public enum LayerTypes { Input, Hidden, Output };
        public LayerTypes LayerType { get; private set; }
        public Neuron[] Neurons { get; internal set; }
        
        public NeuralLayer(LayerTypes layerType, uint neuronsCount) {
 
            LayerType = layerType;
            if (layerType != LayerTypes.Output) neuronsCount++;
 
            Neurons = new Neuron[neuronsCount];
            for (int i = 0; i < neuronsCount; i++) {
                Neurons[i] = new Neuron(layerType);
                if (i == neuronsCount - 1 && layerType != LayerTypes.Output) {
                    Neurons[i].IsBias = true;
                    Neurons[i].OutputValue = 1;
                }
            }
        }
 
        public void CreateSynapses(NeuralLayer layer) {
 
            for (int i = 0; i < Neurons.Length; i++) {
                var neuron = Neurons[i];
                if (layer.LayerType != LayerTypes.Output)
                    neuron.OutputSynapses = new Synaps[layer.Neurons.Length - 1];
                else
                    neuron.OutputSynapses = new Synaps[layer.Neurons.Length];
 
                for (int j = 0; j < layer.Neurons.Length; j++) {
                    var nextLayerNeuron = layer.Neurons[j];
                    if (i == 0) nextLayerNeuron.InputSynapses = new Synaps[Neurons.Length];
 
                    if (nextLayerNeuron.IsBias) continue;
                    var synaps = new Synaps(neuron, nextLayerNeuron) { Weight = GenerateWeight() };
                    synaps.LastWeight = synaps.Weight;
 
                    nextLayerNeuron.InputSynapses[i] = synaps;
                    neuron.OutputSynapses[j] = synaps;
                }
            }
        }
 
        static Random weightsInit = new Random();
        int iMin = 0, iMax = 0;
 
        double GenerateWeight() {
            
            if (iMin == 0) {
                double min = -1d / (2d * Neurons.Length);
                double max = 1d / (2d * Neurons.Length);
                iMin = (int)(min * 1e+6);
                iMax = (int)(max * 1e+6);
            }
 
            return weightsInit.Next(iMin, iMax) / 1e+6;
        }
    }
    
    class NeuralNetwork {
 
        public double LearningRate = 0.01d;
 
        NeuralLayer InputLayer;
        NeuralLayer OutputLayer;
        NeuralLayer[] HiddenLayers;
 
        public NeuralNetwork(uint inputLayerNeurons, uint outputLayerNeurons, params uint[] hiddenLayerNeurons) {
            
            InputLayer = new NeuralLayer(NeuralLayer.LayerTypes.Input, inputLayerNeurons);
            OutputLayer = new NeuralLayer(NeuralLayer.LayerTypes.Output, outputLayerNeurons);
 
            HiddenLayers = new NeuralLayer[hiddenLayerNeurons.Length];
            for (int i = 0; i < hiddenLayerNeurons.Length; i++)
                HiddenLayers[i] = new NeuralLayer(NeuralLayer.LayerTypes.Hidden, hiddenLayerNeurons[i]);
 
            // Create synaptic connections between layers.
            if (HiddenLayers.Length == 0) {
                InputLayer.CreateSynapses(OutputLayer);
            }
            else {
                for (int i = 0; i < HiddenLayers.Length; i++) {
                    if (i == 0) InputLayer.CreateSynapses(HiddenLayers[i]);
                    else HiddenLayers[i - 1].CreateSynapses(HiddenLayers[i]);
                }
                HiddenLayers[HiddenLayers.Length - 1].CreateSynapses(OutputLayer);
            }
        }
 
        public double[] CalculateOutputs(double[] inputValues) {
            
            List<double> outputs = new List<double>();
            
            for (int i = 0; i < inputValues.Length; i++)
                InputLayer.Neurons[i].CalculateOutputValue(inputValues[i]);
 
            foreach (var layer in HiddenLayers)
                foreach (var neuron in layer.Neurons)
                    neuron.CalculateOutputValue();
            
            foreach (var neuron in OutputLayer.Neurons) {
                neuron.CalculateOutputValue();
                outputs.Add(neuron.OutputValue);
            }
            
            return outputs.ToArray();
        }
 
        public void Train(double[] inputValues, double[] teachingValues) {
 
            CalculateOutputs(inputValues);
 
            // delta = - n x(i) d = - n x(i) o(j) (t(j) - o(j)) (1 - o(j))
            for (int i = 0; i < OutputLayer.Neurons.Length; i++) {
                var neuron = OutputLayer.Neurons[i];
                neuron.LocalGradient = - neuron.OutputValue * (teachingValues[i] - neuron.OutputValue) * (1 - neuron.OutputValue);
 
                for (int j = 0; j < neuron.InputSynapses.Length; j++) {
                    var synaps = neuron.InputSynapses[j];
                    synaps.LastWeight = synaps.Weight;
                    synaps.Weight = synaps.Weight - neuron.LocalGradient * LearningRate * synaps.Neuron1.OutputValue;
                    synaps.Weight = Math.Round(synaps.Weight, 7);
                }
            }
            
            // delta = - n x(i) o(j) (1 - o(j)) sum(w(jk) d(k))
            for (int n = HiddenLayers.Length - 1; n >= 0; n--) {
                for (int i = 0; i < HiddenLayers[n].Neurons.Length; i++) {
                    var neuron = HiddenLayers[n].Neurons[i];
 
                    if (neuron.IsBias) continue;
                    
                    double sum = 0d;
                    foreach (var s in neuron.OutputSynapses)
                        sum += s.Neuron2.LocalGradient * s.LastWeight;
 
                    neuron.LocalGradient = neuron.OutputValue * (1 - neuron.OutputValue) * sum;
 
                    for (int j = 0; j < neuron.InputSynapses.Length; j++) {
                        var synaps = neuron.InputSynapses[j];
                        synaps.LastWeight = synaps.Weight;
                        synaps.Weight = synaps.Weight - neuron.LocalGradient * LearningRate * synaps.Neuron1.OutputValue;
                        synaps.Weight = Math.Round(synaps.Weight, 7);
                    }
                }
            }
        }
    }
}
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,550
05.04.2019, 22:09
Цитата Сообщение от dm stark Посмотреть сообщение
xi - выход нейрона i входного слоя
У Вас входной слой - это слой НЕЙРОНОВ, или слой входных сигналов?
Если слой нейронов - то получается этот слой, 2 (судя по стартовому посту темы) скрытых слоя, и один выходной - всего 4 слоя нейронов. Так?

Тогда Вас просто не поняли. Ибо входным слоем обычно называют "слой" исходных вх.сигналов. (я согласен, что этот унаследованный от буржуев способ называния входов "входными нейронами" дебилен - но он таки стал массовым, поэтому в отсутствие подробностей обычно предполагают некоторую массовую картину умопомешательства).
Ну и Вы разве каждый вход сразу же пропускаете через сигмоиду? Без весов, без смещений? Зачем Вам нужна проекция значений каждой вещественной оси на получаемый после сигмоиды отрезок [0,1]? Это эквивалентно тому, Ваш входной "слой" нейронов можно отрезать - и вместо исходных вх.сигналов подавать на оставшуюся нейросеть значения 0.5 (там, где был 0), и сигмоида(1) вместо 1.
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
05.04.2019, 22:12  [ТС]
VTsaregorodtsev, спасибо не знал) нужно внести изменения в код.
0
462 / 185 / 32
Регистрация: 04.08.2018
Сообщений: 732
06.04.2019, 01:19
dm stark, ну вот, похоже разобрались.
Действительно применять какую-то математику необходимо только к нейронам, значения которых мы не знаем. Значения входных нейронов известны и используются как они есть.
Цитата Сообщение от dm stark Посмотреть сообщение
Конфигурация 3-3-1 (считая скрытые нейроны).
Скрытые слои не считают, их вообще может не быть, они могут представляться не как нейрон, в общем это дело автора НС.
Стартовые значения весов нейрона смещения задавайте хоть руками, но чтобы они были далеки друг от друга. Например, веса первого нейрона: 0.5, 0.2, -0.6. Если синапс у нейрона один, то вес какой-нибудь, не важно. У вас оба были отрицательные и близкие.
В начальных значениях разброс чисел у весов обычных нейронов у меня больше, чем у нейронов смещения.
Не экономьте на количестве нейронов в скрытом слое. Поиграйтесь на этом сайте, посмотрите как влияет количество нейронов, количество скрытых слоёв, скорость обучения на обучение.

Добавлено через 39 минут
C#
1
2
3
4
5
6
            OutputValue = ActivationFunction(Sum);
        }
 
        // Sigmoid.
        private double ActivationFunction(double sum) {
            return Math.Round(1d / (1d + Math.Exp(sum)), 7);
dm stark, проверьте вашу сигмоиду. Степень экспоненты должна быть со знаком минус. Ну или я не вижу, чтобы вы инвертировали знак подаваемого числа.
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
06.04.2019, 06:58
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
унаследованный от буржуев способ называния входов "входными нейронами"
Я первый раз слышу о таком. Нейрон - это преобразование, функция. Нельзя никак спутать его с сигналом, переменной. Нейрон смещения, который выдает всегда единицу - это бред. В чем нейронность такого неадекватного нейрона? Он ведь не имеет никакого сенсора.

Добавлено через 4 часа 9 минут
Цитата Сообщение от dm stark Посмотреть сообщение
xi - выход нейрона i входного слоя (j - нейрон скрытого слоя, k - нейрон выходного слоя). Выход этого нейрона равен 0.5.
Почему 0.5? Константа что ли?
0
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
06.04.2019, 17:03
Найти ошибку в Mlp тот ещё квест, особенно если пишешь впервые и нет возможности сравнить с правильным вариантом, говорят что можно зависнуть на многие годы, да и потом получив вроде работающий вариант лет через 5 обнаружить что была где то ошибка, и могло быть всё намного лучше, но прошлого не воротишь, жизнь утекла сквозь пальцы, остаётся только сетовать и брюзжать...

Но если обратиться к репетитору это позор, репетитор всё равно не поможет в реальной работе, трудности нужно уметь преодолевать самому, как бы не было тяжело.

Добавлено через 1 час 44 минуты
Цитата Сообщение от dm stark Посмотреть сообщение

C#
1
2
3
4
class Synaps {...
...
class Neuron{...
....
Раньше бы Вас насмех подняли с этим ООП, даже за нейроны, не говоря уж за синапсы))) но нынче все косят под западную культуру, толерантную, где за жизненные ошибки не бьют а хвалят, но знайте, в душе все смеются над Вами, а это хуже, так как не позволяет Вам скорректировать ошибочное поведение. Ну да ладно, короче... вся MLP должна выглядеть как то так:

C
1
2
3
4
5
typedef struct 
{
    int lc, *nc, *wc;
    float **outs, **errs, **drvs, **inputs, ***weigthts;
} mlp;
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
06.04.2019, 19:29  [ТС]
Цитата Сообщение от Rayvenor Посмотреть сообщение
Стартовые значения весов нейрона смещения задавайте хоть руками, но чтобы они были далеки друг от друга. Например, веса первого нейрона: 0.5, 0.2, -0.6. Если синапс у нейрона один, то вес какой-нибудь, не важно. У вас оба были отрицательные и близкие.
Как видите из кода, для инициализации начального значения веса я генерирую случайное число в диапазоне (-1/2n; 1/2n), где n - количество нейронов в слое, из которого выходит синапс.

Цитата Сообщение от Rayvenor Посмотреть сообщение
ну вот, похоже разобрались.
Действительно применять какую-то математику необходимо только к нейронам, значения которых мы не знаем. Значения входных нейронов известны и используются как они есть.
Не разобрались. Результат работы сети не поменялся от того что я убрал активационную функцию на входах.

Добавлено через 3 минуты
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Нейрон смещения, который выдает всегда единицу - это бред. В чем нейронность такого неадекватного нейрона? Он ведь не имеет никакого сенсора.
Не в так называемом нейроне смещения дело. Дело в синапсе смещения.

Добавлено через 16 секунд
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Почему 0.5? Константа что ли?
sigmoid(0) = 0.5

Добавлено через 6 минут
Цитата Сообщение от danila_zaytcev Посмотреть сообщение
Раньше бы Вас насмех подняли с этим ООП, даже за нейроны, не говоря уж за синапсы))) но нынче все косят под западную культуру, толерантную, где за жизненные ошибки не бьют а хвалят
А в чём собственно заключается ошибка реализации НС в ООП? Примеры, которые я нашёл в сети организованы именно таким образом. И при чём тут западная культура вообще?..

Цитата Сообщение от danila_zaytcev Посмотреть сообщение
вся MLP должна выглядеть как то так
Вы предлагаете переписать в соответствии с более традиционным представлением НС в коде? В чём достоинство мне не ясно. В том, что все "знающие" люди делают именно так?
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,550
06.04.2019, 21:18
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Я первый раз слышу о таком. Нейрон - это преобразование, функция.
Что такое input layer? По сравнению с hidden layer?
В чём отличия (семантически и функционально) этого input layer от простых inputs?
На прицепленной картинке жёлтенькие кружки - это уже полноценные нейроны с нелинейностями?


Цитата Сообщение от danila_zaytcev Посмотреть сообщение
Найти ошибку в Mlp тот ещё квест, особенно если пишешь впервые и нет возможности сравнить с правильным вариантом, говорят что можно зависнуть на многие годы, да и потом получив вроде работающий вариант лет через 5 обнаружить что была где то ошибка, и могло быть всё намного лучше, но прошлого не воротишь, жизнь утекла сквозь пальцы, остаётся только сетовать и брюзжать...
Регулярно видя от вас подобные слова - возникает такой вопрос:
1) вы отрабатываете чей-то заказ, или
2) вы рассказываете о своей неизбытой детской психотравме?
Так со вторым случаем - лучше к психиатру, а не сюда на форум.
А то через 5 лет будете всем рассказывать, что вовремя не сходили к психиатру, прошлого не воротишь, жизнь утекла,...
Миниатюры
Обучение нейронной сети методом обратного распространения ошибки  
0
462 / 185 / 32
Регистрация: 04.08.2018
Сообщений: 732
06.04.2019, 22:16
dm stark, а саму функцию проверили? У степени экспоненты знак минус.
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
06.04.2019, 22:36  [ТС]
Rayvenor, я добавил минус, но это не помогло.
0
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
07.04.2019, 00:35
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Регулярно видя от вас подобные слова - возникает такой вопрос:
1) вы отрабатываете чей-то заказ, или
2) вы рассказываете о своей неизбытой детской психотравме?
Так со вторым случаем - лучше к психиатру, а не сюда на форум.
А то через 5 лет будете всем рассказывать, что вовремя не сходили к психиатру, прошлого не воротишь, жизнь утекла,...
Очень жаль от Вас это слышать. Я надеялся что Вы будите осуждать наивный код и лишнее ООП.
Цитата Сообщение от dm stark Посмотреть сообщение
А в чём собственно заключается ошибка реализации НС в ООП? Примеры, которые я нашёл в сети организованы именно таким образом. И при чём тут западная культура вообще?..
Это лишнее, спросите у Виктора Генадиевича когда он будет в духе, ото он ворчит сейчас на всех.
Цитата Сообщение от dm stark Посмотреть сообщение
Вы предлагаете переписать в соответствии с более традиционным представлением НС в коде? В чём достоинство мне не ясно. В том, что все "знающие" люди делают именно так?
Нужно писать не "традиционно" а ПРАВИЛЬНО, есть такой афоризм: "истинна - одна, любые её вариации - ложь". Как правило истинна не так привлекательна и соблазнительна как ложь, не сулит миллиардов и красивой жизни, но на надёжность можно расчитывать, в отличии от сонмы "мутных" путей.
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
07.04.2019, 00:46  [ТС]
danila_zaytcev, я не опровергаю ваше замечание, а лишь уточняю почему ООП тут лишнее...

Добавлено через 1 минуту
danila_zaytcev, может быть вы дадите ответ ещё и по теме вопроса?
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,827
07.04.2019, 02:26
Цитата Сообщение от dm stark Посмотреть сообщение
sigmoid(0) = 0.5
Так почему на входе активационной функции необучаемая константа?
0
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
07.04.2019, 13:34
Цитата Сообщение от dm stark Посмотреть сообщение
danila_zaytcev, может быть вы дадите ответ ещё и по теме вопроса?
Я его дал в первых постах, Mlp хоть и занимает 100-200 строк кода, но алгоритм весьма сложный, даже для опытного кодера, запросто запутаться в индексах циклов, нужно быть очень внимательны, последовательно и терпеливо пройти весь цикл вперёд\назад\обновить на простой архитектуре{2,2,1} + XOR dataset с тривиальной активационной функцией, так чтобы веса, ошибки, выходы каждого нейрона совпадали с теми что Вы посчитали собственноручно на калькудяторе, только так можно выловить ошибку, трасировка + дотошная проверка. Это не круто и никто не будет этим заниматься бесплатно(((

Но я могу Вам дать свой код Mlp, однако это означает что вы не джедай, не спартанец и Вам логичнее пользоваться чужими библиотеками чем писать свои, но если настаиваете и позор для Вас не хуже смерти, то я по первому требованию предоставлю работающий код)))
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,550
07.04.2019, 20:36
Цитата Сообщение от danila_zaytcev Посмотреть сообщение
Я надеялся что Вы будите осуждать наивный код и лишнее ООП.
Как данная надежда следует из Вашего постоянного нытья о том, что MLP писать/отлаживать сложно-непросто?
В общем, я не вижу "здоровой" причинно-следственной логики в Ваших постах/реакциях.
0
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
08.04.2019, 16:34
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Как данная надежда следует из Вашего постоянного нытья о том, что MLP писать/отлаживать сложно-непросто?
Что я сказал по Вашему не верно? Разве Mlp с нуля написать просто? Или Mlp - простой алгоритм для новичка?

Уверен если меня или даже Вас посадить в комнату за чужой компом без инета с IDE, то не факт что мы бы за день справились по памяти с написанием Mlp с нуля по памяти. Вы конечно будете утверждать обратное и спорить тут не о чем но правда на моей стороне.

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
В общем, я не вижу "здоровой" причинно-следственной логики в Ваших постах/реакциях.
Ну Вы тоже рефлексируете не линейно. Вы часто осуждали "наивный код" Mlp, когда пишут сущности для синапсов и нейронов, теперь(от противного) утверждаете обратное, это противоречие, нарушение причинно следственной связи, а что "здорово" или патология, извольте решать врачам, мы с Вами тут не по этой теме профессионалы, если настаиваете можем вместе обратиться к Дмитрию Александровичу Клевцову, пусть он нас рассудит.
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,550
08.04.2019, 20:54
Цитата Сообщение от danila_zaytcev Посмотреть сообщение
Разве Mlp с нуля написать просто? Или Mlp - простой алгоритм для новичка?
Не путайте сложность алгоритма - и кривизну тех источников (учебников в инете / на бумаге), которыми вы пользуетесь.

Цитата Сообщение от danila_zaytcev Посмотреть сообщение
не факт что мы бы за день справились по памяти с написанием Mlp с нуля по памяти.
Насчёт вас - я полностью согласен
Вы ведь не понимаете, что метод обратного распространения не выходит за рамки известных со школы правил дифференцирования. Поэтому вам и нужны будут инет/книга по MLP - для взятия оттуда готовых формул.

Цитата Сообщение от danila_zaytcev Посмотреть сообщение
но правда на моей стороне.
Замените слово "правда" на шизофрению / ненаучную фантастику - тогда станет правильней
0
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
08.04.2019, 21:50
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Вы ведь не понимаете, что метод обратного распространения не выходит за рамки известных со школы правил дифференцирования. Поэтому вам и нужны будут инет/книга по MLP - для взятия оттуда готовых формул.
Ну понятно... Если бы Вы жили в 60-е Вы то за пол часа открыли бы обратное распространение ошибки, в этом никто не сомневается, просто продифференцировали и всё, но не судьба, жизнь утекла сквозь пальцы.
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,550
10.04.2019, 22:16
Цитата Сообщение от danila_zaytcev Посмотреть сообщение
но не судьба, жизнь утекла сквозь пальцы.
Опять мантру по методичке шпарите?
Или это у вас подсознание пытается проецировать на других ваши собственные эпик-фэйлы?
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
14.04.2019, 19:52  [ТС]
Если задача сводиться к прогнозированию временного ряда, как следует формировать обучающую выборку?

В качестве примера имеет ли место взять какую нибудь математическую функцию и обучить сеть на, скажем, 1000 примерах X-Y? Но если на вход можно подавать любое чисто (ведь активационная функция его всё равно приведёт к нужному виду), то что на выходе, мы будем получать значение функции, пропущенное через активационную функцию?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.04.2019, 19:52

Алгоритм обратного распространения ошибки
Заметила такую вещь. В разной литературе пишут по-разному, и я не могу понять почему некоторые приписывают минус к изменению весов,...

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

Определение адаптивного шага обучения алгоритм обратного распространения ошибки
Доброго времени суток. В ходе изучения теории по алгоритму обратного распространения ошибки возник такой вопрос. При определении...

Обучение нейронной сети, как обучать на множестве?
Только начал погружаться в тему, довольно осознанно усвоил метод обратного распространения ошибок, градиентного спуска и проч., с...

Обучение и применение нейронной сети для прохождения игры
я написал Flappy Bird на HTML5 теперь хочу сделать простенькую нейронную сеть на JS... (движется фон с препятствиями, а я жму кнопку, по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru