Давайте просто возьмем пример:
X — входной массив с [x1, x2…xn]. Любой элемент в X представлен xi.
y — выходные метки для каждого xi.
нам нужно найти параметр W , который неизвестен. Начнем со случайных назначений W.
Функция потерь определяется как разница между выходной меткой (y_pred) и истинной меткой (yi - при любом индексе i).
Нам нужно скорректировать значение W, чтобы минимизировать потери.
Возьмем пример:
Xs =[1,2,3]
y = [4,5,6]
#w = unknown — можно попробовать разные значения w для проверки потерь.
def forwards(xi, wi): return wi*xi def loss(xi,yi,wi): y_pred = forwards(xi,wi) loss = np.square(y_pred — yi) #square the difference return loss # lets try different values of w to see how the loss changes. w = [-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10] loss_list = [] for wi in w: # iterate through different values of w loss_sum = 0 for xi,yi in zip(Xs,y): #iterate through xi , yi loss_sum += loss(xi,yi,wi) print(wi, loss_sum/len(Xs)) # mean squared error loss_list.append(loss_sum/len(Xs)) # these lines show the w values and loss -3 131.66666666666666 -2 87.0 -1 51.666666666666664 0 25.666666666666668 1 9.0 2 1.6666666666666667 3 3.6666666666666665 4 15.0 5 35.666666666666664 6 65.66666666666667 7 105.0 8 153.66666666666666 9 211.66666666666666 10 279.0
Теперь мы можем построить график со списком w по оси x и различными потерями по оси y.
plt.plot(w, loss_list,'ro')
Мы видим, что при w = 2 потери минимальны. В идеале, если мы используем нейронную сеть, алгоритм градиентного спуска выполняет обратное распространение и обновляет веса на основе функции потерь.
Это идея линейной модели. Я удалил термин смещения «b», чтобы сделать его немного удобнее.