Форум программистов, компьютерный форум, киберфорум
ИИ, нейросети, LLM, ML, Data Science, ИИ-агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 14

Простая задача, но сеть уходит в континуум

25.10.2016, 09:06. Показов 2635. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Сеть: 10 входов, изначально связи нейронов N<->N, 1 нейрон на выходном слое, F сигмоид.
Вроде самую примитивную задачу поставил: научиться считать количество "1" и "0" в примере. Но не получается и всё, при обучении сеть после 5-7 итераций схватывает контузий.
Вывод выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
0,4994      0,999
0,4975      0,993
0,4861      0,96
0,4345      0,828
0,3154      0,581
0,222       0,395
0,1928      0,301
0,1856      0,252
0,1838      0,225
0,1832      0,209
0,183       0,199
0,183       0,192
0,1831      0,188
0,1831      0,185
0,1831      0,183
...................................
Первый столбец - это ошибка сети, второй - значение выхода на последнем примере выборки, там ожидается "0". Но к "0" так и не приближается.
Порог количества итераций обучения = 500, затем параметры сети сбрасываются, заново заполняются веса случайными числами. Но результат всё тот же, десяток итераций и привет.

Заполнял малыми, очень малыми весами, нулями - результат тот же.
Количество скрытых слоёв не оказывает влияния на итоги решений. Только сеть быстрее сваливается в сингулярность.
Возможно, что ошибка в структуре сети, только я не вижу её. Либо какая-нибудь ламерская ошибка, либо всё к чёрту неверно.
Прошу помочь знатоков, разглядеть где тут собака.

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
const iLayersCount = 5;
const iDendrCount = 10;
const double dLearnStep = 0.01;
const double dHighValueErr = 0.12;
const iUotputCount = 1;
const double dImpulse = 0.5;
const int iIterations = 100;
//5 слоёв, включая 1 входной; выходной слой из одного нейрона (класс описан отдельно)
 
//Нейрон---------------------------------------------------------------------------------------
class TNeuron{
 public:
 double dSumm;
 double dDendr[iDendrCount];
 double dWeights[iDendrCount];
 double dExtremum[iDendrCount];
 double dDemWeights[iDendrCount];//"история" изменения весов
 double dSigma;
 
 TNeuron(){
   dSumm = 0;
   dSigma = 0;
   for ( int i = 0; i<iDendrCount; i++)
       dWeights[i] =  = (double)(rand()%200)/200.000;
   for ( int i = 0; i<iDendrCount; i++) dExtremum[i] = 1;
   for ( int i = 0; i<iDendrCount; i++) dDendr[i] = 0;
   for ( int i = 0; i<iDendrCount; i++) dDemWeights[i] = dWeights[i];
 }
 
  double _Func(){//acson
  dSumm = 0;
  for ( int i = 0; i < iDendrCount; i++){
        dSumm += dDendr[i]*dWeights[i];
      }
  return RoundingTo( 1/( 1 + exp(-1.1*dSumm)), -3);
 }
 
};
 
//Нейрон выходного слоя---------------------------------------------------------------
class TDecision{
 public:
 double dSumm;
 double dWeights[iDendrCount];
 double dDemWeights[iDendrCount];
 double dDendr[iDendrCount];
 double dSigma;
 TDecision(){
  dSumm = 0;
  dSigma = 0;
  for ( int i = 0; i<iDendrCount; i++)
      {
      double dd = (double)(rand()%200)/200.000;
      dWeights[i] = dd;
      }
  for ( int i = 0; i<iDendrCount; i++) dDendr[i] = 0;
  for ( int i = 0; i<iDendrCount; i++) dDemWeights[i] = dWeights[i];
 }
 
  double _Func(){//acson
  dSumm = 0;
  for ( int i = 0; i < iDendrCount; i++)
      {
        dSumm += dDendr[i]*dWeights[i];
      }
  return RoundingTo( 1/( 1 + exp(-1.1*dSumm)), -3);
 }
 
};
 
//класс слоя сети------------------------------------------------------------------------------
class TLayer{
 public:
 TNeuron *Neurones[iDendrCount];
 double dSigma;
 TLayer(){
  dSigma = 0;
  for ( int i = 0; i<iDendrCount; i++)
      Neurones[i] = new TNeuron();
 }
};
 
//класс сеть----------------------------------------------------------------------------
class TNetwork{
 public:
 TLayer *layers[iLayersCount];
 TDecision *dDec[iUotputCount];
 TNetwork(){
  for ( int i = 0; i<iLayersCount; i++){
        layers[i] = new TLayer();
      }
  for ( int i = 0; i<iUotputCount; i++){
        dDec[i] = new TDecision;
      }
 }
};
TNetwork* Net;
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
double _fastcall CalcSigmasOnLayer( int iLayer, int idxW)//сигмы внутренних слоёв
{
 double dSum = 0;
 if ( iLayer == iLayersCount)//это последний скрытый слой
    {
      for ( int N = 0; N < iUotputCount; N++)
          dSum += Net->dDec[N]->dSigma * Net->dDec[N]->dWeights[idxW];//сигма_выхода* вес_нейрона
    }
    else
    for ( int N = 0; N<iDendrCount; N++)//остальные внутренние слои
     {
       dSum += Net->layers[iLayer]->Neurones[N]->dSigma * Net->layers[iLayer]->Neurones[N]->dWeights[idxW];
     }
 return dSum;
}
 
//----------------------------------------------------------------------------------------------
double _fastcall CalcSigmasOnDec( double dY)//сигма выходного слоя
{
 double dSum = 0;   
 double dOut = Net->dDec[idxW]->_Func();//у сети всего один нейрон на выходном слое
 Net->dDec[idxW]->dSigma = dOut*(1-dOut)*(dY-dOut);
 return Net->dDec[idxW]->dSigma;
}
 
//----------------------------------------------------------------------------------------------
void CalcSigmasOnNeuron()//Сигма по нейронам скрытых слоёв
{
 for ( int N = 0; N<iDendrCount; N++)//последний скрытый слой
     {
       double dOut = Net->layers[iLayersCount-1]->Neurones[N]->_Func();//значение выхода нейрона слоя
       double dSigmaOnLayer = CalcSigmasOnLayer(iLayersCount, N);//сигма выходного слоя
       Net->layers[iLayersCount-1]->Neurones[N]->dSigma = dOut*(1-dOut)*(dSigmaOnLayer);
     }
 
 for ( int L = iLayersCount-2; L>0; L--)//внутренние слои, кроме последнего
     {
       for ( int N = 0; N<iDendrCount; N++)
           {
             double dOut = Net->layers[L]->Neurones[N]->_Func();
             Net->layers[L]->Neurones[N]->dSigma = dOut*(1-dOut)*CalcSigmasOnLayer(L+1, N);
           }
     }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void CorrectNetWeights()//корректировка весов сети
{
 for ( int N = 0; N < iUotputCount; N++)//выходной слой
     {
       for ( int i = 0; i<iDendrCount; i++) {
             Net->dDec[N]->dDemWeights[i] = dLearnStep*Net->dDec[N]->dSigma + dImpulse*Net->dDec[N]->dDemWeights[i];
             Net->dDec[N]->dWeights[i] = Net->dDec[N]->dWeights[i] + Net->dDec[N]->dDemWeights[i];
           }
     }
 
for ( int L = iLayersCount-1; L>0; L--) {
     for ( int N = 0; N<iDendrCount; N++) {
         for ( int i = 0; i <iDendrCount; i++) {
                   Net->layers[L]->Neurones[N]->dDemWeights[i] = dLearnStep * Net->layers[L]->Neurones[N]->dSigma +
                                                                 dImpulse * Net->layers[L]->Neurones[N]->dDemWeights[i];
                   Net->layers[L]->Neurones[N]->dWeights[i] = Net->layers[L]->Neurones[N]->dWeights[i] +
                                                              Net->layers[L]->Neurones[N]->dDemWeights[i];
             }
         }
     }
 
}
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
//Запуск обучения
String sInput[] = { "10010110111",//7
                     "11010110111",//8
                     "10010110000",//4
                     "10010110000",//4
                     "10010100000",//3
                     "10100110000",//4
                     "10000100000",//2
                     "10010111101",//7
                     "11010111101",//8
                     "01000101100"//4
                   };//обучающая выборка
 
while ( dErr_Current>dHighValueErr)
 {
 dErr_Current = 0;
 
 int iSz = sizeof(sInput)/4;//колво элементов в обучающей выборке
 
 for ( int Y = 0; Y<iSz; Y++)
       {
         sAwaited = sInput[Y][10];//ожидаемое значение выхода
 
         int iSzR = sInput[Y].Length();
         for ( int i = 0; i<iSzR; i++) {
               Net->layers[0]->Neurones[0]->dDendr[i] = String(sInput[Y][i+1]).ToInt();//подали сигналы на вход
             }
 
         //расчёт сети==============================================
          for ( int L = 1; L<iLayersCount; L++)//текущий слой
              {
                 for ( int N = 0; N < iDendrCount; N++)//нейроны текущего слоя
                     {
                       for ( int D = 0; D<iDendrCount; D++)//дендриты текущего нейрона текущего слоя
                           {
                             Net->layers[L]->Neurones[N]->dDendr[D] = Net->layers[L-1]->Neurones[D]->_Func();
                             double fff = Net->layers[L]->Neurones[N]->dDendr[D];
                           }
                     }
              }
 
           for ( int O = 0; O < iUotputCount; O++){
                 for ( int D = 0; D<iDendrCount; D++){
                       double dT = Net->layers[iLayersCount-1]->Neurones[D]->_Func();
                       Net->dDec[O]->dDendr[D] = dT;
                     }
               }
 
         double dOutput = Net->dDec[0]->_Func();
 
         //завершение расчёта сети======================================
 
         double dA_ = 0;//ожидаемые значения
 
         if ( sAwaited == "1")
            dA_ = 1;
 
         CalcSigmasOnDec( dA_);//расчёт сигмы на нейронах(-оне) выходного слоя
         CalcSigmasOnNeuron();//сигмы скрытых слоёв
         CorrectNetWeights();//корректировка весов
 
         double dEsum = fabs( pow(dOutput-dA_, 2)) * 0.5;
       }//for
 
   dErr_Current = (dErr_Current+1)/iSz;
 }
Добавлено через 9 минут
"10010110111" - обучающая выборка, считаются первые 10 элементов, [11] - ожидаемый ответ сети
sAwaited = sInput[Y][11];//ожидаемое значение выхода
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2016, 09:06
Ответы с готовыми решениями:

Континуум
Добрый вечер! Проверьте, пожалуйста, правильность изложенного ниже. Доказать, что множество всех иррациональных x таких, что...

Простая нейронная сеть
Доброго времени суток, встал такой вопрос: Имеется неравенство x1 - x2 + 0.5 &gt;= 0. Это неравенство разделяет систему координат на 2 части...

Простая нейронная сеть прямого распространения
Пожалуйста, напишите код простой нейронной сети прямого распространения на программе Python

34
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 14
09.11.2016, 13:07  [ТС]
Студворк — интернет-сервис помощи студентам
MNIST слишком сложно для "курса новичка". Была необходимость вспомнить и доучить то, что не было усвоено несколько лет назад. А взамен распознавания образов есть своя задача. Пусть и не такое количество обучающих примеров, как доступные в мнисте.
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,547
09.11.2016, 21:50
Цитата Сообщение от IR001 Посмотреть сообщение
MNIST слишком сложно для "курса новичка".
MNIST легко берётся обычным персептроном с одним скрытым слоем.
Полторы сотни скрытых нейронов - и точность на тестовой выборке становится ниже 3% ошибок. Больше нейронов - лучше точность. Ещё лучше точность становится при неМНКшной целевой функции или постановке нелинейностей и на выходной слой нейронов. Хотя, конечно, порог в 1.6% ошибки не взять никаким ростом размера персептрона - но небольшой хитростью (иными нейронами на выходном слое, приведёнными в списке "стандартных" формальных нейронов в двухтомнике PDP 1986г) таки и его можно преодолеть. Но ненамного - до 1.4% ошибок можно будет дотянуть, но это уже уровень, с которого только стартуют свёрточные нейросетки.

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

Просто новичок напишет такооооой тормозной код, который будет работать на пару порядков медленнее чемпионского. Соответственно, результат каждого изменения в нейросети/алгоритмах будет виден не через минуту или несколько минут обучения - а через гораздо бОльшее время. И вот ожидание-то и способно убить весь исследовательский интерес.
0
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 14
10.11.2016, 11:34  [ТС]
Не очень владею терминами, мягко говоря.
неМНКшной целевой функции
Поясните, пожалуйста, "МНК-функции" - это что? Постановка нелинейности - это по сути использование какой-либо нелинейной функции в элементах выходного слоя?
И вот это тоже ново:
порог в 1.6% ошибки
Сейчас смотрю на СКв ошибку. Извините, а процент ошибки - что это? Это уже процент неверных ответов при тестировании новыми выборками на уже обученной сети?
напишет такооооой тормозной код
Так и есть
Сейчас сделал изменение коэффициентов импульса, шага в режиме обучения. Интересно, что во время обучения после доведения СКв ошибки до 0.01 изменение шага обучения в большую сторону сразу даёт довольно заметное увеличение СКв, а уменьшение шага, собственно, уменьшение СКв на следующих итерациях (эпохах). В первом случае СКв через несколько десятков эпох возвращается в своё прежнее значение.
Играюсь вот так пока.
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,547
12.11.2016, 22:27
Цитата Сообщение от IR001 Посмотреть сообщение
МНК-функции" - это что?
Метод наименьших квадратов = среднеквадратичная ошибка.
При обучении задаче классификации (задаче распознавания) - учит сеть не собственно самому распознаванию, а запоминанию значений эталонных выходных кодов (которые берутся человеком с потолка). Т.к. в случае "сверхуверенного" ответа сети (грубо говоря, когда имеем выходной сигнал=2 на нужном выходе и выходные сигналы=-2 на остальных выходах) не оставит сеть в покое - а начнёт требовать именно предписанных значений эталонов.

Цитата Сообщение от IR001 Посмотреть сообщение
Постановка нелинейности - это по сути использование какой-либо нелинейной функции в элементах выходного слоя?
Да.
Как должно быть видно из объяснения выше - чтобы заменить большой штраф при большом зашкаливании (у бывшего линейного нейрона) на совсем копеечный штраф от недотягивания до асимптоты, с соответствующим малым последующим вкладом в изменение весов сети.

Цитата Сообщение от IR001 Посмотреть сообщение
а процент ошибки - что это? Это уже процент неверных ответов при тестировании новыми выборками на уже обученной сети?
Да, это уже процент неверно распознанных новых (тестовых) примеров обученной нейросетью.

Весь тот мой пост был про МНИСТ, а не про ХОР. Да-да, в том числе названные мной минута или несколько минут обучения - это именно для МНИСТ, каким бы фантастичным это не показалось кому-то.
1
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
13.11.2016, 00:40
Хотел пошаманить со сверхточными чисто из интереса… причем пару идей что можно в разы проще все делать.
Но уже столько либ готовых +тесты их скорости на мнисте и детальное описание на сайте лекуна на английском куча статей его...
Получается это будет:
Велик на CPU с кодом и алгоритмом новичка и выбором архитектуры сетки отбалды “Вуду кодинг” который будет давать ошибку больше готовых либ и работать медленней их… и применение всему этому аж нигде =).
Вот такое и отбивает. Или это рациональность? А вкурить суть как сделать архитектуру это долго и в книге написано по сути это все отбалды…либо нужен оч. Высокий уровень чтобы осознано задать устройство сетки. Помню в универе распознавал этих букв десятки страниц и даже и не знал про сетки =)).

Добавлено через 41 минуту
Сверточными сетками..ворд исправил криво =)
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,547
13.11.2016, 21:54
А никто и не спорит - просто внезапно возник разговор про использование МНИСТ в качестве современного реального учебного примера вместо ХОР. Да, можно взять готовую либу (начиная с персептронных FANN и AForge и заканчивая либами для свёрточных сеток, которые позволят сделать и персептрон тоже). Но сама задача - вполне подходит как пример, на котором можно тестить разные виды-структуры-размеры нейросетей и не нейросетевые алгоритмы тоже (всякие классификаторы из статистики - типа линейных дискриминантов, k-nn). Тем более, что если расчёты тормозят - есть возможность взять половину, четверть или 1/10 всей базы, но таки спокойно играться с этими реальными данными.
Ну и нельзя не отметить просто ОБЯЗАТЕЛЬНОЙ (для освоения методологии построения адекватных моделей) возможности исследовать зависимость поведения решения от размера выборки данных - т.е. учиться находить и видеть признаки репрезентативности обучающей выборки. ХОР с его 4мя примерами такого не позволяет сделать.
0
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 14
01.12.2016, 08:39  [ТС]
Доброго дня.

Подскажите, пожалуйста, большие значения весов (скажем, около -40;+40) - это нормально и допустимо?

4 скрытых слоя, 50 элементов в каждом.
На выходном слое веса чуть меньше (-20;+20).
Ср. квадрат. ошибка 0.0003.
Выборка из 3000+ примеров.
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,547
01.12.2016, 19:48
Цитата Сообщение от IR001 Посмотреть сообщение
большие значения весов (скажем, около -40;+40) - это нормально и допустимо?
Зависит от алгоритма обучения и от нейросети.

Для MLP с сигмоидной функцией активации - недопустимо как при инициализации, так и после обучения этой нейросети.
Ибо прокатывает только потому, что функции exp(), tanh() (это иной вариант сигмоидной функции) принимают и возвращают значения типа double.
А были бы у этих функций аргументы (вернее, возвращаемые результаты) одинарной точности - exp бы переполнилась при аргументах за пределами интервала +-87 (по памяти число пишу, но почти не ошибся). А организовать выход за эти границы - легко, при 50-то нейронах предыдущего слоя и больших весах от них.

Ну и просто посмотрите (в Екселе график постройте, например), при каких значениях аргумента сигмоида выходит на асимптоты. И подумайте, нужны ли для этого избыточные по модулю веса.
1
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 14
05.12.2016, 10:25  [ТС]
У меня в пределах (-40;+40), процент ошибки приемлемый. Но покопаю код ещё, может быть ошибка есть какая (вероятность сего 0.999).
Спасибо за ответ.
Кстати, обучение пошло веселее после предобработки входных данных. По Вашему выступлению на конференции в Ростове (2005 г.), нашёл в сети. Спасибо, просто и понятно.
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,547
05.12.2016, 23:37
Цитата Сообщение от IR001 Посмотреть сообщение
По Вашему выступлению на конференции в Ростове (2005 г.), нашёл в сети.
Журнальная статья - в 2 раза длиннее. Например, по причине наличия в нём таблицы с результатами экспериментов. Ну и про "другие свойства выборок" - тоже более подробно изложено, с формулами (вместо простой ссылки на статью) и с цифрами результатов экспериментов и для этих новых индикаторов. Вернее, цифры "сырые", но их можно вручную сводить в графики, где относительным изменениям того или иного индикатора (из трёх посчитанных) соответствует то или иное изменение длительности обучения, ну и тренд на этих графиках рисовать. Плюс - обсуждения побольше, в т.ч. с привязкой к значениям индюкаторов.
http://neuropro.ru/mypapers/neurcompmag05_4.pdf

Не по теме:

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

1
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 14
12.01.2017, 07:20  [ТС]
Доброго.
Пришёл к выводу, что большие веса (F сигмоид), вероятно, свидетельствуют о недостаточном количестве элементов в слое.
После увеличения размерности сети веса исчезли.
Не знаю на сколько моё замечание верно. Но уже интереснее, попробовал сделать по несколько сотен нейронов в разных (не во всех) слоях.
0
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,547
15.01.2017, 21:39
IR001, не только. Ещё и от настроек алгоритма обучения зависит.
Ибо если требуете абсолютно точного соответствия выходов сети и эталонных значений - то сетка будет напрягаться до тех пор, пока не загонит в насыщение нелинейности тех нейронов, которые можно загнать. Ибо при насыщении (на асимптотах) - производные становятся нулевые, а до моментов насыщения - ненулевые и позволяют сети обучаться.
Т.е. ранний останов обучения или обучение с некоторой "допустимой" погрешностью - это направления, куда можно/нужно посмотреть.

Ну или просто поменяйте (если у Вас задача классификации) эталонные коды с 0/1 или -1/1 (т.е. с уровней насыщения нелинейных функций, если на выходных нейронах у Вас нелинейность стоИт) на иные величины, не дотягивающие до уровней асимптот нелинейности. И посмотрите, как это повлияет (а это повлияет) на веса в обученной нейронке.
1
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 14
16.01.2017, 15:29  [ТС]
если требуете абсолютно точного соответствия выходов сети и эталонных значений
Нет, не требую. Тем более, что заметил как возможность обобщения резко падает (ошибка на тестовой выборке увеличивается) после преодоления определённого уровня ср.кв.ошибки.

Не могу разобраться вот в чём.
Допустим, три скрытых слоя. Какая разница в структуре скрытых слоёв: 100-20-300, или 100-50-20, или 50-100-40?
У меня в итоге получается примерно та же картина на выходе, всё те же решения. По скорости обучения: как Вы ранее верно заметили, у новичков код "тааакой медленный", что разницы не особо заметил.
Единственно, что экстремумы весов связей в более коротком слое оказывались чуть-чуть больше.
Наверняка опять что-то наворотил не по науке. Но подскажите, пожалуйста, какой результат стоит ожидать, то есть в чём ожидается разница?
0
27 / 26 / 6
Регистрация: 02.02.2014
Сообщений: 96
18.01.2017, 15:53
"Чего стоит ожидать", не имея представления об используемых наборе данных и алгоритмах, не скажет никто.

P.S. разве что если по-прежнему все веса инициализируются в 0 (или другую константу) - однозначно результаты для скрытых слоев вида 10000-10000-10000-10000 и 1-1-1-1 будут совпадать, причем для 1-...-1 еще и обучение быстрее пойдет, но больше шансов получить inf-ы и nan-ы в весах/выхлопе.
1
3141 / 1742 / 274
Регистрация: 19.02.2010
Сообщений: 4,547
18.01.2017, 22:03
Цитата Сообщение от IR001 Посмотреть сообщение
Допустим, три скрытых слоя. Какая разница в структуре скрытых слоёв: 100-20-300, или 100-50-20, или 50-100-40?
Я вопроса не понял. С какой точки зрения Вам нужно описАть разницу?

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

С точки зрения (и тоже - абстрактной) же математики - воспринимайте нейросеть как нелинейный проектор одного многомерного пространства в пространство иной размерности. Возможно, как многошаговый проектор (если в персептроне есть один и более скрытых слоёв).
Соответственно, разница в числе нейронов в слоях у разных сетей - это в итоге разные размерности тех или иных "промежуточных" пространств. И разные свойства проекторов (отображений).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2017, 22:03

Дешевая простая домашная беспроводная сеть
Нужно связать несколько девайсов разного назначения с компьютером. Без проводов. Передавать большие объёмы данных не требуется: только...

Простая нейронная сеть для обхода препятствий (C# + Unity3d)
Всем привет, хочется написать простую нейронную сеть для обхода объектом препятствий. То есть есть плоскость ( XZ ) вдоль которой в...

Нет подключения роутера, простая сеть в Cisco Packet Tracer
Всем доброго времени суток! В общем такое дело, решил изучить сетевые технологии, в колледже сети особо не интересовали, казались...

Не могу сделать простую CNN сеть. очень простая, но не получается. В чем ошибка?
Есть простая идея, которую я реализовал в алгоритме регрессии при масштабировании изображения. Вот алгоритм: На входе изображение...

простая задача на с
Здравствуйте! Помогите пожалуйста написать программу на языке С. &quot;Пусть задан файл целых чисел. Определите максимальную длину...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru