是否应根据预测值或损失值更新感知器权重?

时间:2019-01-23 06:36:38

标签: machine-learning neural-network gradient-descent perceptron

Charu C.Aggarwal的《神经网络与深度学习》一书将感知器权重更新规则列为

W <- W + a *(y_i-y_hat_i) * X

其中W是您的权重向量,X是您的数据向量,其中y_i是其对应标签,y_hat_i是y_i的预测标签,最后a是学习率。

我理解这一点。

这本书继续说,体重的更新本质上是

W <- W + a *∇w_i* L-i

在讨论了感知器标准的平滑代理损失函数之后。

因此,如果我要实现自己的Perceptron,我不确定在体重更新中实际上必须使用哪一个?

我正在从事的分类任务只是根据数据y = x(在(0,0)和(1,1)之间)的哪一侧随机采样(x,y)对将数据分类为一个类。跌倒。

如果使用第一个列出的公式,我将获得100%的训练准确度,但并非总是很高的验证准确度。

我尚不知道您将如何实现第二个公式。

如果您使用我提到的第一个权重更新方案,我将不完全了解感知器算法的损耗和权重更新之间的关系。

            data_instance = self.features[index]
            label_instance = self.true_labels[index]
            w_sum = 
            self.weighted_sum(data_instance,self.weight_vector[index])

            prediction = self.sign_activation(w_sum)
            print(prediction)
            predicted_labels[index] = prediction

            loss = self.squared_loss(prediction, label_instance)
            print('Loss: ', loss)


            #WEIGHT UPDATES--Perceptron Criteria
            label_distance = self.true_labels[index] - prediction

            label_distance_lr = self.lr * label_distance

            updated_data_instance = [x*label_distance_lr for x in data_instance]

            new_weight_list = [None] * len(self.weight_vector[index])

            current_weights = self.weight_vector[index]

            for i in range(len(new_weight_list)):
                new_weight_list[i] = current_weights[i] + updated_data_instance[i]



            self.weight_vector[index] = new_weight_list

以上是我当前如何实现体重更新的方法。这是一种基于感知器标准进行体重更新的可接受方法吗?

0 个答案:

没有答案