logistic回归中w和b为什么能0初始化

Ng说的是神经网络不能零初始化,而这个例子只是logistic回归,它没有隐藏层,所以不算是神经网络,且Ng在教学视频的第一部分『神经网络与深度学习』中的第二周里的「梯度下降法」中的2分38秒时明确说了,logistic回归的权值初始化可以是任意初始化方法,包括全0初始化。同时,Ng在教学视频的『神经网络与深度学习』中第四周的『随机初始化』中开篇又强调了这一点,并且又用这个视频来解释了为什么神经网络权重不能初始化为0。
那为什么logistic回归可以全0初始化呢?对于这个问题,Ng特意在该次作业的下一次,也就是第3周的第一次测验中的第7题来回答了这个问题,具体为:

Logistic Regression doesn’t have a hidden layer. If you initialize the weights to zeros, the first example x fed in the logistic regression will output zero but the derivatives of the Logistic Regression depend on the input x (because there’s no hidden layer) which is not zero. So at the second iteration, the weights values follow x’s distribution and are different from each other if x is not a constant vector.
翻译为:Logistic回归没有隐藏层。 如果将权重初始化为零,则Logistic回归中的第一个示例x将输出零,但Logistic回归的导数取决于不是零的输入x(因为没有隐藏层)。 因此,在第二次迭代中,如果x不是常量向量,则权值遵循x的分布并且彼此不同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要从零开始实现逻辑回归,你需要以下步骤: 1. 准备数据集:将数据集划分为特征矩阵 X 和目标变量向量 y。 2. 初始化参数:初始化权重向量 w 和偏置 b。 3. 定义sigmoid函数:sigmoid函数将实数映射到0和1之间的概率值。 4. 定义损失函数:使用对数似然损失函数来度量预测概率与实际标签之间的差异。 5. 计算梯度:通过计算损失函数对参数 w 和 b 的偏导数来得到梯度。 6. 更新参数:使用梯度下降法来更新参数,减小损失函数的值。 7. 训练模型:使用训练集进行多次迭代,不断更新参数以优化模型。 8. 预测:使用训练好的参数进行预测。 下面是一个简单的示例代码来实现逻辑回归: ```python import numpy as np # 定义sigmoid函数 def sigmoid(x): return 1 / (1 + np.exp(-x)) # 定义损失函数 def loss_function(y_pred, y_true): return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) # 初始化参数 def initialize_parameters(dim): w = np.zeros((dim, 1)) b = 0 return w, b # 计算梯度 def compute_gradient(X, y, y_pred): m = X.shape[1] dw = np.dot(X, (y_pred - y).T) / m db = np.mean(y_pred - y) return dw, db # 更新参数 def update_parameters(w, b, dw, db, learning_rate): w = w - learning_rate * dw b = b - learning_rate * db return w, b # 训练模型 def train(X, y, num_iterations, learning_rate): w, b = initialize_parameters(X.shape[0]) for i in range(num_iterations): # 前向传播 y_pred = sigmoid(np.dot(w.T, X) + b) # 计算损失 loss = loss_function(y_pred, y) # 计算梯度 dw, db = compute_gradient(X, y, y_pred) # 更新参数 w, b = update_parameters(w, b, dw, db, learning_rate) # 每100次迭代打印一次损失 if i % 100 == 0: print(f"Loss after iteration {i}: {loss}") return w, b # 预测 def predict(w, b, X): y_pred = sigmoid(np.dot(w.T, X) + b) y_pred = np.round(y_pred) return y_pred # 示例数据 X = np.array([[1, 2, 3], [4, 5, 6]]) y = np.array([[0, 1, 1]]) # 训练模型 w, b = train(X, y, num_iterations=1000, learning_rate=0.01) # 预测 y_pred = predict(w, b, X) print("Predictions:", y_pred) ``` 请注意,这只是一个简单的实现,实际的逻辑回归模型可能会有更多的步骤和复杂性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值