Зачем в нейроне сглаживание?
using System;
namespace NeuralNetwork
{
class Program
{
public class Neuron
{
public decimal weight = 0.5m;
public decimal lastError;
public decimal smoothing = 0.00001m;
public decimal ProcessInputData(decimal input)
{
return input * weight;
}
public decimal RestoreInputData(decimal output)
{
return output / weight;
}
public void Train(decimal input, decimal expectedRsult)
{
var actualResult = input * weight;
lastError = expectedRsult - actualResult;
var correction = (lastError / actualResult) * smoothing;
weight += correction;
}
}
static void Main(string[] args)
{
decimal km = 100m;
decimal miles = 62.1371;
Neuron neuron = new Neuron();
int i = 0;
do
{
i++;
neuron.Train(km, miles);
if (i%1000 == 0)
{
Console.Clear();
Console.WriteLine($"Вес: {neuron.weight}\t Ошибка:\t{neuron.lastError}");
}
} while (neuron.lastError > neuron.smoothing || neuron.lastError < -neuron.smoothing);
Console.WriteLine($"{neuron.ProcessInputData(100)} миль в {100} км");
}
}
}
Начал изучение нейросетей и наткнулся на код одного нейрона, не могу понять зачем нужно умножать на Smoothing
var correction = (lastError / actualResult) * smoothing;
Ведь если smoothing = 0.01 то выход получается 62,127346013186325993867045670 (правильно 62.1371)
Eсли smoothing = 0.0001 то выход получается 62,137000019305511022149689300 (правильно 62.1371)
Eсли smoothing = 0.000001 то выход получается 62,137099000002893257049892940 (правильно 62.1371)
var correction = (lastError / actualResult) * smoothing;
Если просто не умножать на smoothing то выход получается 62,137099404290247741450941250 (правильно 62.1371)
И чем больше нолей после запятой тем дольше идёт обучение, а если не умножать то мгновенно, и точность выше, объясните мне тупому в чём тут прикол?
Ответы (1 шт):
smoothing - это коэффициент скорости обучения:
Коэффициент скорости обучения – это гиперпараметр, определяющий порядок того, как мы будем корректировать наши весы с учётом функции потерь в градиентном спуске. Чем ниже величина, тем медленнее мы движемся по наклонной. Хотя при использовании низкого коэффициента скорости обучения мы можем получить положительный эффект в том смысле, чтобы не пропустить ни одного локального минимума
вот статья на habr